[net.micro] SmartModem

DEVON@Mit-Mc (12/15/82)

From:  Devon S McCullough <DEVON@Mit-Mc>

I'm surprised you think the SmartModem is well-designed.  Although
adequate for some unsophisticated uses, it is poorly programmed and
crashes when left unattended.  You can't control it without sending
trash (+++) down the data link, you can't transmit arbitrary data over
it without losing control of the modem, you can't uncrash it except by
manually power-cycling, and it drops incoming characters whenever you
issue any control commands.

rconn@BRL (12/15/82)

From:      Rick Conn <rconn@BRL>

	Odd.  What you report is quite a contradiction to my own
experiences.  I use TERM II (my own design) to talk thru my Smartmodem,
and have never had any problems.  It has run attended for hours without
crashing, it is used in a Remote CP/M System mode from time to time and
as an outgoing (to ARPA Net et al) communication link the rest of the time.
I have transferred TONS of both binary and ASCII data using two different
byte (8 sig bits) - oriented protocols on it and again have experienced no
problems at all.

	TERM II does all of the control of the Smartmodem thru its
(TERM II's) support package, and I have another version running under
the PMMI and DCH modem cards with the same type of reliability.
A lot of my lack of problem comes from the lack of control instructions
issued by TERM II.  This only happens on init and hangup.  Data is sent
the rest of the time.

	So, in a nutshell, I suggest that your problems may be caused
in part by (1) not using software that controls the Smartmodem in
a reasonable way and (2) trying to do things with the Smartmodem at
odd times.  By the latter, I refer to the fact that TERM II can do everything
in the way of control to the Smartmodem at init and hangup.  There is
no need to issue further commands in between, and, consequently, the +++
sequence is never sent down the line.

		Rick

DEVON@Mit-Mc (12/16/82)

From:  Devon S McCullough <DEVON@Mit-Mc>

The SmartModem works fine under manual control and supervision, and
my software for originate mode dials out and transfers with no glitches,
connected to TWX and not DDD by the way, but incoming calls can wedge
the modem with all the LED's lit, and only power-cycling will revive it.
If you've been able to reliably control this guy by software alone, I'd
sure like to see what magic tricks you used to bypass Hayes' misfeatures.

rconn@BRL@sri-unix (12/16/82)

From:      Rick Conn <rconn@BRL>

        I have had no experience at all with what you describe as
being  a  problem,  and  I  use  no magic at all in employing the
Smartmodem.  It DID take a while to figure out  exactly  what  to
send  to  the  Smartmodem in order to run under software control,
but, once I did, no problems.

        Let me outline the telephone  interface  section  of  the
TERM II support package for the Smartmodem for you.

        First, there is a routine which issues  a  Smartmodem  1-
char  command.   This routine does the following:  (1) delay just
over 1 sec before sending the first char, (2) send A and wait for
its echo, (3) set T and wait for its echo, and (4) send the char-
acter and wait for its echo.  Do not check to see that this  echo
is  the same character sent, altho I don't see why it would hurt.
Also, immediately after the  1  sec  delay  timesout,  flush  any
current char from the modem before proceeding to step (2).

        Second, there is a routine which waits for a response  to
a  Smartmodem command.  It enters a large delay loop, polling the
status all the time.  If the status does  not  show  an  incoming
char  by  the  time  the loop finishes, return an error code.  If
status shows a char, get it, check for a numeric code (>'0'), and
go back into looping if not the case or exit if the case.

        Third, there is an attention routine.  It checks the car-
rier  detect  line from the Smartmodem and returns if no carrier.
If a carrier, I flush the UART, output a NULL (at least one char-
acter has to be output before the Smartmodem will work with +++),
and then I output the three +'s in rapid succession.  No echo  is
checked in sending the NULL or the +'s.  I then call the response
routine.

        Finally, a Flush routine simply checks status  and  grabs
the character if one is available.  It is thrown away.  The 1-sec
timeout routine delays over 1 sec and then calls the  Flush  rou-
tine.

        Now we are ready to begin.  The following modules perform
all the telephone interface functions necessary:

        1. Init -- call Attention, send the  Z  command,  send  a
<CR>  with  echo  (a simple command end routine).  Then enter the
loop:  flush, send a V command and end  it,  wait  response,  and
keep on doing this until a '0' received.

        2.  Goto Originate Mode -- do nothing

        3.  Prepare to Answer the Phone -- Hang  up  phone,  send
"S0=1"  command,  flush  response,  send  H  command,  and  flush
response.  By flushing response, I don't check for validity,  but
just get it.

        4.  Answer phone -- do nothing except return OK code

        5.  Pick Up phone -- do nothing except return OK code

        6.  Hang up phone -- check carrier; if  carrier  present,
call ATTENTION routine and send H command, awaiting any response;
then, with or without carrier,  send  "S0=0"  command  and  flush
response

        7.  Wait for Dial Tone -- do  nothing  except  return  OK
code

        8.  Wait for Answer of Phone (after dialing) -- wait  for
response,  check for connected code ('1'), and return code saying
if connected or not; here I allow the Smartmodem to time out

        9.  Ring Status Detect -- do nothing except  return  car-
rier detect status

        10.  Dial Tone Status Detect -- do nothing except  return
OK code

        11.  Carrier Status Detect -- return carrier status code

        12.  Start Dialing -- flush character, send "DT"  but  DO
NOT terminate command

        13.  Dial Digit -- Send Digit passed in A (ASCII Char)

        14.  Stop Dialing -- terminate command via <CR> and enter
a loop which (1) waits for a '1' (OK) response from Smartmodem or
(2) waits for a keypress from the user to abort as failure

        And that's all there was to it!  Very simple and logical.
The  same  set  of  routines  apply in general to the Smartmodem,
PMMI, DCH, Novation AUTOCAT, and acoustic couplers to perform any
telephone  system  interface  necessary for TERM II.  The calling
sequence of these routines is important, of course, but I imagine
you  could  logically  piece  them  together  (think of them like
SYSLIB's process box concept).  In  applying  these  routines  to
modems  other than the Smartmodem, the commands are different, of
course, but the ideas are the same.

                Rick

rconn@BRL (12/17/82)

From:      Rick Conn <rconn@BRL>

Happy to have helped.  It DID take some time to figure out what was
going on with the Smartmodem and how to program it.  Most of the problems
revolved around its human-interface design.  It runs at human speeds,
being designed to be spoken to very slowly.  If you try to run at computer
speeds, such as a true 300 baud, this is much too fast for it.  Especially
if you send a character before the previous echo comes back ... it almost
acts like it runs half duplex in command mode.

	Rick

martin (12/29/82)

Devon S McCullough, said a few things about Smaartmodems that i can
not agree on. 

	I'm surprised you think the SmartModem is well-designed.
	Although adequate for some unsophisticated uses, it is poorly
	programmed and crashes when left unattended.

I connected a Smartmodem 300 to our 'lime' unix system about 10months ago,
went home and wrote the changes to run uucp thru the unit. I went back to
the machine room the next day and set the option switches to it's silent
mode (easier to use from a machine), i only changed the software once since
then (i forgot to do a close). The unit has been working every day since then,
the machine only goes down when there is no power in the room, about 4 times
this year. 

	You can't control it without sending trash (+++) down the data
	link, you can't transmit arbitrary data over it without losing
	control of the modem, you can't uncrash it except by manually
	power-cycling, and it drops incoming characters whenever you
	issue any control commands.

The modem has been used for uucp transfer (mail + lots of news), so i can say
that i'v send every character sequence thru that device known to man
(or machine). i use the command sequence 'ATDT<number>\n' to do the dial
and wait for a responce '3\r' or '1\r'. I set the switch setting to give
DTR action, NOECHO and NUMBER respone.

Last week i connected a Smartmodem 1200 to the same machine. i just copied
the switch settings from one to the other and it started working. the great
thing is that the 1200 works at 300 (does speed selection on the AT) so
i now have 3 devices in the L.devices file:-

	ACU /dev/cul0 hayes 300
	ACU /dev/cul1 hayes 300
	ACU /dev/cul1 hayes 1200

I have seen no problems with the 1200 yet.

martin levy.
harpo!ariel!martin