!  IrComm (Motorola)!   Author: Christian Fries http://www.christian-fries.de!   April 2001!   Version 0.9!   !  Based on!  !  IrComm!	Author:	Kris Kreutzman & Russ Winsper!	Copyright:	© 1991-1996 Apple Computer, Inc.	All Rights Reserved.!	!!  'mlts' resource info for this modem:!    byte 1 == 01 -> modem HAS built-in error correction protocols!    byte 2 == 01 -> modem HAS built-in data compression protocols!    byte 3 == 200 -> max number of chars in varstr 7!    byte 4 == 200 -> max number of chars in varstr 8!    byte 5 == 200 -> max number of chars in varstr 9!	@ORIGINATE@ANSWER!! ---- Initial modem setup ----!! Set serial port speed 9600 regardless (actually doesn't matter)! Reset to factory seetings below sets +CBST to 0,0,1 which! tells the IR modem to autobaud and IrComm doesn't care! @LABEL 1serreset 9600, 0, 8, 1!@LABEL 2hsreset 0 0 0 0 0 0settries 0!! Get the modem's attention!matchclrmatchstr 1 3 "OK\13\10"write "AT\13"matchread 30jump 101!@LABEL 3matchclrmatchstr 1 4 "Motorola"write "AT+CGMI\13"matchread 60jump 103!@LABEL 4!! Setup the modem for the following:!   Reset to factory settings (&F)!   Echo off (E0)!   Track remote DCD (&C1)!   Turn off answering (S0=0)!matchclrmatchstr 1 5   "OK\13\10"matchstr 2 101 "ERROR\13\10"write "AT&FE0&C1S0=0\13"matchread 30inctriesiftries 3 101!! Reset the Modem on setup failure!DTRClearpause 5DTRSetflushjump 4!!@LABEL 5ifANSWER 32!!! ---- Originating a call ----!! Varstring 6, dialing mode:!    = 0, normal dialing!    = 1, blind dialing!    = 2, manual dialing!    otherwise dial as ARA version 1.0ifstr 6 19 "0"ifstr 6 17 "1"ifstr 6 15 "2"!! Dialing for ARA version 1.0note "Dialing ^1" 3write "ATD^3^1\13jump 32!@LABEL 15! Display ASK dialog with message.  Goto label 107 if dialog canceled.ASK 2 "Pick up the phone & dial ^1.  When the phone rings, click OK then hang up." 107note "Manual dialing initiated" 3! X1 to ignore dialtone & busy, D to dialwrite "ATX1D\13"jump 32!@LABEL 17note "Dialing without tone" 3matchclrmatchstr 1 19 "OK\13\10"! X1 to ignore dialtone & busywrite "ATX1\13"matchread 30jump 101!!!@LABEL 19! Display the full dialstring contained in Varstring 1note "Dialing ^1" 3!! Varstrings 7, 8 and 9, contain dialstring fragments!    Long phone numbers may need to be split into smaller groups!    for the modem to use!! Varstring 3:  "p" for pulse & "t" for tone dialing! Varstring 8 == blank (dialstring in varstring 7)! Varstring 9 == blank (dialstring in varstrings 7 & 8)! Otherwise (dialstring in varstrings 7, 8 & 9)! ifstr 8 27 " "ifstr 9 24 " "!!  Write dialstring in varstrings 7, 8 & 9matchclrmatchstr 1 21 "OK\13\10"write "ATD^3^7;\13"matchread 400jump 101@LABEL 21matchclrmatchstr 1 22 "OK\13\10"write "ATD^3^8;\13"matchread 400jump 101@LABEL 22write "ATD^3^9\13"jump 32!!@LABEL 24!  Write dialstring in varstrings 7 & 8matchclrmatchstr 1 25 "OK\13\10"write "ATD^3^7;\13"matchread 400jump 101@LABEL 25write "ATD^3^8\13"jump 32!@LABEL 27!  Write dialstring in varstring 7write "ATD^3^7\13"!!!    ---- Connection response ----!! The following section will parse modem responses of two types:!   1) CARRIER xxx, PROTOCOL: yyy, COMPRESSION: yyy, CONNECT xxx!   2) CONNECT xxx/yyy!@LABEL 32settries 0@LABEL 33matchclrmatchstr  1 81  "RING\13\10"matchstr  2 102 "NO DIALTONE\13\10"matchstr  3 103 "NO CARRIER"matchstr  4 103 "ERROR\13\10"matchstr  5 104 "BUSY\13\10"matchstr  6 105 "NO ANSWER\13\10"matchstr  7 35  "CONNECT"matchstr  8 34  "CARRIER"matchstr  9 62  "PROTOCOL: LAP"matchstr 10 62  "PROTOCOL: MNP"matchstr 11 62  "PROTOCOL: ALT"matchstr 12 67  "COMPRESSION: V"matchstr 13 67  "COMPRESSION: MNP5"matchstr 14 67  "COMPRESSION: CLASS"matchread 700ifANSWER 32jump 105!!  CARRIER parsing!@LABEL 34jsr 38inctriesjump 33!!  CONNECT parsing - do not parse rate if CARRIER seen!@LABEL 35iftries 1 61jsr 38jump 61!!  Parse CONNECT/CARRIER rate subroutine!    2400 and 4800 have two entries each!    to distinguish them from 24000 and 48000!@LABEL 38matchclrmatchstr  1 40 "2400\13"matchstr  2 40 "2400/"matchstr  3 41 "4800\13"matchstr  4 41 "4800/"matchstr  5 42 "7200"matchstr  6 43 "9600"matchstr  7 44 "12000"matchstr  8 45 "14400"matchstr  9 46 "16800"matchstr 10 47 "19200"matchstr 11 48 "21600"matchstr 12 49 "24000"matchstr 13 50 "26400"matchstr 14 51 "28800"matchstr 15 52 "31200"matchstr 16 53 "33600"matchread 10jump 59!! -- Connection rates --! CommunicatingAt informs ARA of the raw modem to modem! connection speed.!@LABEL 40note "Communicating at 2400 bps." 2CommunicatingAt 2400jump 60!@LABEL 41note "Communicating at 4800 bps." 2CommunicatingAt 4800jump 60!@LABEL 42note "Communicating at 7200 bps." 2CommunicatingAt 7200jump 60!@LABEL 43note "Communicating at 9600 bps." 2CommunicatingAt 9600jump 60!@LABEL 44note "Communicating at 12400 bps." 2CommunicatingAt 12400jump 60!@LABEL 45note "Communicating at 14400 bps." 2CommunicatingAt 14400jump 60!@LABEL 46note "Communicating at 16800 bps." 2CommunicatingAt 16800jump 60!@LABEL 47note "Communicating at 19200 bps." 2CommunicatingAt 19200jump 60!@LABEL 48note "Communicating at 21600 bps." 2CommunicatingAt 21600jump 60!@LABEL 49note "Communicating at 24000 bps." 2CommunicatingAt 24000jump 60!@LABEL 50note "Communicating at 26400 bps." 2CommunicatingAt 26400jump 60!@LABEL 51note "Communicating at 28800 bps." 2CommunicatingAt 28800jump 60!@LABEL 52note "Communicating at 31200 bps." 2CommunicatingAt 31200jump 60!@LABEL 53note "Communicating at 33600 bps." 2CommunicatingAt 33600jump 60!@LABEL 59note "Communicating at an unknown rate." 2!@LABEL 60return!! Look for reliablilty and compression results ! after the CONNECT rate.!@LABEL 61matchclrmatchstr  1 63 "LAPM"matchstr  2 63 "REL"matchstr  3 63 "ARQ"matchstr  4 68 "COMP/"matchstr  5 68 "COMP\13"matchstr  6 63 "V42/"matchstr  7 63 "V42\13"matchstr  8 68 "V42BIS"matchstr  9 68 "V42bis"matchstr 10 63 "MNP\13"matchstr 11 68 "MNP5"matchstr 12 70 "\10"matchread 10jump 70! -- Modem error correction link negotiation --! Userhook 2 informs ARA that a modem-to-modem error! correcting protocol has been negotiated!!@LABEL 62note "Modem Reliable Link Established." 2userhook 2jump 33!@LABEL 63note "Modem Reliable Link Established." 2userhook 2jump 61!! -- Compression negotiation --! Userhook 3 informs ARA that a modem-to-modem compression! protocol has been negotiated!@LABEL 67note "Modem Compression Established." 2userhook 3jump 33!@LABEL 68note "Modem Compression Established." 2userhook 3jump 61!!! -- Normal exit after "CONNECT" --!!  This modem has been setup to do CTS handshaking,!  and we assume that a CTS handshaking cable is being used.!@LABEL 70! Turn on CTS handshaking.HSReset 0 1 0 0 0 0!ifANSWER 71pause 30@LABEL 71exit 0!!! ---- Answer calls ----!!	A RING result from the modem and in ANSWERING mode!	claims the serial port and answering the phone!@LABEL 81ifORIGINATE 32userhook 1note "Answering phone..." 2write "ATA\13"jump 32!!! ---- Hang up and reset modem ----!@HANGUP@LABEL 90settries 0HSReset 0 0 0 0 0 0!@LABEL 92!  Escape from data to command modematchclrmatchstr 1 96 "OK\13\10"write "+++"matchread 20!@LABEL 94! Force a hangupmatchclrmatchstr 1 98 "NO CARRIER\13\10"matchstr 2 98 "OK\13\10"matchstr 3 98 "ERROR\13\10"matchstr 4 98 "0\13\10"write "ATH\13"matchread 30! ! Try to get control of the modem by toggling DTRDTRClearpause 5DTRSetflush!! Try the hangup sequence three times otherwise declare and errorinctriesiftries 3 101jump 92!@LABEL 96! Pause between data and command modepause 50jump 94!!@LABEL 98! Recall the factory settingspause 15matchclrmatchstr 1 99 "OK\13\10"write "AT&F\13"matchread 30jump 101!@LABEL 99exit 0!! ---- Error messages -----!! Modem Not Responding@LABEL 101exit -6019!! No Dial Tone@LABEL 102exit -6020!! No Carrier or Error@LABEL 103exit -6021!! Busy@LABEL 104exit -6022!! No Answer@LABEL 105exit -6023!! User Cancellation@LABEL 107exit -6008