home *** CD-ROM | disk | FTP | other *** search
- FSC-0006
-
- YOOHOO and YOOHOO/2U2
-
- The matrix handshake used by Opus-Cbcs
-
-
-
-
-
- LEGAL STUFF
- ------------------------------------------------------------------------------
-
- The protocol, documentation, and sample routines are by Wynn Wagner III.
-
- They are released to the public domain for any use whatsoever as long as
- you don't modify any transmitted structure.
-
- If you choose to use the method or the sample routines, you do so entirely
- at your own risk. It is possible that the routines will cause physical
- damage to your equipment, an invasion of fire ants, the plague, or an
- extended visit from in-laws. If any of that stuff (or anything else)
- happens, you accept the consequences totally.
-
-
-
-
- CREDITS
- ------------------------------------------------------------------------------
-
- The state charts in this document were done by Vince Perriello (141/491).
-
- The ZModem protocol was designed by Chuck Forsberg. The Sealink protocol
- is copyrighted by System Enhancment Associates.
-
- Rick Huebner designed and implemented the WaZOO file request method.
-
-
-
-
-
-
- UPFRONT
- ------------------------------------------------------------------------------
-
- YOOHOO and YOOHOO/2U2 are the initial handshakes for the WaZOO protocol.
- They are designed to let two system establish a common ground for a
- session while making sure that non-WaZOO software doesn't get upset by
- material it can't understand.
-
- Most of the time, the systems will be negotiating an e-mail session, but
- that isn't any kind of restriction. The mechanism could also be used to
- establish some kind of high-speed user interface session. YOOHOO is
- nothing more than a session-level negotiation. It does not suggest the
- kind of session being negotiated, and there is space in the initial
- packet for expansion into as-yet-unthought-of kinds of sessions.
-
- The YOOHOO procedure begins as a single byte (0xF1). If the system on
- the other end doesn't reply to that byte, no further YOOHOO or WaZOO
- transmissions are attempted. To a non-WaZOO netmail system, the YOOHOO
- byte will simply seem like a byte of debris.
-
- The calling system initiates the YOOHOO by sending the attention character.
- If the receiving system seems interested, the calling system sends a 128
- byte packet containing such information as system and sysop names as well
- as a "capability mask." A 16-bit CRC protects the integrity of the
- 128-byte packet.
-
- In response, the receiving system prepares a 128 byte packet to send back.
- This is the YOOHOO/2U2 procedure.
-
-
-
- FEATURES
- ------------------------------------------------------------------------------
-
- The features of YOOHOO and YOOHOO/2U2 include
-
- * non-interference with systems that don't understand the
- handshake
-
- * relatively foolproof method for identifying a remote system
- and establishing a common ground for transmission
-
- * built-in room to expand the capabilities of WaZOO without
- having to resort to a kludge
-
-
-
-
- USAGE
- ------------------------------------------------------------------------------
-
- A calling system simply uses a routine like `sendYOOHOO()' instead of its
- normal TSYNC sending method. This sample routine will take care of both
- the TSYNC and the YOOHOO handshakes.
-
- A receiving system can call a routine like `getYOOHOO()' if it detects
- the YOOHOO character.
-
-
-
- PROTOCOLS IN A NUTSHELL
- ------------------------------------------------------------------------------
-
- Currently there are two matrix methods in use:
-
- DietIfna ... similar to the method described by the FidoNet<tm>
- Technical Standard Committee.
-
- VARIATION: * file transfers are done using sealink
- or telink-without-the-Modem7.
-
- * file attaches don't even attempt to
- do a modem7 file name.
-
- * Sealink run-ahead is based on the baud
- rate and can be as high as 24 packets
- for 9600 baud. Because of its built-in
- unreliability, there are no plans to
- incorporate the SLO (sealink overdrive)
- variation.
-
- * If the calling system transmits a
- .REQ file for file requests, the
- receiving system can respond to it.
- See "WaZOO File Requests" (below) for
- information on the .REQ file.
-
- * When there is nothing to send, a system
- should remain quiet. In other words,
- the end of a session can be determined
- by a timeout.
-
- * Systems are sensitive to file tags (aka
- "extensions"). There is no requirement
- that a bundle be sent: the session can
- consist of archived messages with no
- bundle. Here are the current tags:
-
- .PKT ... Type Two bundle
- .MO# ... LZW-archive containing
- zero or more Type Two
- bundles.
- .REQ ... WaZOO request list.
-
- ZedZap ..... plain zmodem. The originator does a batch send then
- goes into a receive batch mode. The called system
- does receive then send.
-
- VARIATION: * Unlike the true zmodem protocol described
- by Chuck Forsberg, ZedZap routines must
- be able to handle a batch mode that has
- no actual files. In other words, it is
- possible for there to be an init sequence
- followed immediately by a ZFIN sequence.
-
- * The maximum packet size is based on the
- baud rate. For example, at 2400 baud it's
- 2048 bytes. At 9600 baud, the packets
- are 8192 bytes.
-
- * ZedZap uses an adaptive packet size
- that appears in very recent Forsberg
- specs. The size of the packet adjusts
- during transmission based on line
- conditions.
-
- * Systems are sensitive to file tags as
- in DietIfna (above).
-
- File Req... Rick Huebner, who wrote the ZModem routines for Opus,
- designed the ZModem-based file request system. There's
- a section on file requests (below).
-
-
-
-
-
-
- WAZOO FILENAMES
- ------------------------------------------------------------------------------
-
-
- MESSAGE BUNDLES...xxxxxxxx.PKT
-
- Normal (unarchived) messages are sent in a file
- name that has a tag of .PKT. The "x" characters
- should be hex digits.
-
- IMPLEMENTATION NOTE
- -------------------
- There is no real requirement that a .PKT file be
- part of a matrix session. Opus 1.03 and below
- require a .PKT file for DIETIFNA, but this is
- a mistake that will be corrected. The correct
- way to do things is to send only what needs to
- be sent. If the calling system is doing a "poll"
- then only the YooHoo and a sealink end-of-batch
- sequence should be all that is required.
-
-
- LZ BUNDLES........xxxxxxxx.MO#
-
- Message bundles are often shipped in an archive
- that has been compressed with some 12-bit LZ
- utility.
-
- The file name consists of a name with hex digits.
- The tag is "MO" and a number (0-9).
-
-
- FILE REQUESTS.....xxxxxxxx.REQ
-
- This is explained below.
-
- In a nutshell, the file name consists of the
- receiving system's matrix address expressed
- as two 4-digit hex numbers. The file tag is .REQ.
-
-
-
-
-
-
- DIETIFNA FLOW AND NOTES
- ------------------------------------------------------------------------------
-
- All file transfer is done using Sealink. This protocol is
- copyrighted by System Enhancements Associates.
-
- The sealink run-ahead (number of blocks in the slide) is based
- on the baud rate: BlocksToSlide = BaudRate / 400.
-
-
- The calling system:
-
- * Send YooHoo
- * Receive YooHoo/2u2
- * Send bundles, files, file request (.REQ) files
- (in that order)
- * Receive bundles, files, requested files (in that order)
-
- Receiving system:
-
- * Receive YooHoo
- * Send YooHoo/2u2
- * Receive bundles, files, file requests (in that order)
- * Send bundles, files, and respond to file requests that
- arrived from the remote system.
-
-
-
-
-
- ZEDZAP FLOW
- ------------------------------------------------------------------------------
-
- The calling system:
-
- * Send YooHoo
- * Receive YooHoo/2u2
- * Send bundles, files, file request (.REQ) files
- (in that order)
- * Receive bundles, files, file requests
- * If a file request (.REQ) file came in,
- respond to it
-
- Receiving system:
-
- * Receive YooHoo
- * Send YooHoo/2u2
- * Receive bundles, files, file requests
- * Send bundles, files, our file requests, and
- respond to file requests that arrived from the
- remote system.
- * If we sent a .REQ file in the preceeding step,
- wait for the other system to respond.
-
-
-
-
-
-
-
- WAZOO FILE REQUESTS
- ------------------------------------------------------------------------------
-
-
- IMPLEMENTATION NOTE
- -------------------
- Opus-Cbcs 1.00-1.02 supports WaZOO file requests only for
- ZedZap (Zmodem) sessions. Beginning with v1.03, WaZOO file
- requests are supported in all methods.
-
-
-
- REQ FILE:
-
- A WaZOO file request is based on a request file. The name of a request
- file is similar to the .OUT and .FLO files used by OPUS-Cbcs.
-
- TEMPLATE: netnode.REQ
-
- EXAMPLE: 00010002.REQ ... a request being sent to 1/2
-
- The .REQ file is simply a text file that contains the files we want from
- the remote system. Those file names can include wildcards, but should
- not contain a path. Optionally, there can be a password... if the sending
- system requires one.
-
- The "netnode" part of the file name is built from the remote systems net
- and node numbers. Both numbers become 4-character hex numbers in the
- file name.
-
- Let's say we're requesting THIS.ARC and all node lists from 12/2. The
- file name would be 000C0002.REQ. The contents would look like this:
-
- this.arc
- nodelist.*
-
- If the sysop of 12/2 requires a password of THAT to get the file THIS.ARC,
- the REQ file contents would have to change:
-
- this.arc !that
- nodelist.*
-
- Transaction-level passwords (of 6 or fewer characters) follow the file name:
-
- <filename><single-space-character>!<password><cr>
-
-
-
- MECHANISM:
-
- During the WaZOO session, the .REQ file is simply transmitted to the
- other system. It goes "as is" like any other file.
-
- The other system can ignore the request, send some of the files, or send
- all of the files. There is no accounting or responsibilities on the
- part of the remote system.
-
-
-
- NOTES:
-
- * In the YooHoo packet, there's a bit that lets you know if the
- remote system currently accepts .REQ files. This will be a clue
- as to whether a .REQ file would be a waste of time or not.
-
- * If the first character of a line in the .REQ file is a
- semi-colon (";"), Opus 1.10+ will ignore that line.
-
- * You are not guaranteed to get back what you requested. It is
- possible that the remote system has implemented a "macro"
- situation where one word in a .REQ file can send back one or
- more files. The file names may have nothing to do with the
- contents of the .REQ file.
-
- * It is also possible that a .REQ file will trigger some kind of
- activity other than the sending of a file. Opus 1.10+ has this
- sort of capability. It doesn't have anything to do with the
- mechanics of WaZOO or .REQ files, so if you need more information
- about this you can refer to Opus documentation.
-
-
-
-
-
-
-
-
-
-
- FUTURE
- ------------------------------------------------------------------------------
-
- All the material in this document is subject to growth and improvement.
-
- I consider nothing here sacred or proprietary. If you have suggestions
- for enhancements, they'll never be implemented if you keep them to yourself!
-
- Personally, I'd like to see another protocol that does run-time packeting
- of such things as echomail. A system like that would be driven by the
- receiving system. It would send "commands" like "Send me all new C_ECHO
- messages." Combining some high-octane code along with run-time Lempel-Zev
- compression, two matrix systems can totally avoid such time consuming
- chores as scanning/tossing echomail. In addition, there would be no need
- for a SEEN-BY line because the two systems could use a LASTREAD system
- like they use for regular callers.
-
- There's also room for such things as a Kermit-based method... for
- discussing things with a mainframe.
-
-
-
-
-
-
-
- STRUCTURES AND DECLARATIONS
- ------------------------------------------------------------------------------
-
-
- #define ACK 0x06
- #define NAK 0x15
- #define ENQ 0x05
- #define YOOHOO 0xf1
- #define TSYNC 0xae
-
-
-
- struct _Hello
- begin
- word signal; /* always 'o' (0x6f) */
- word hello_version; /* currently 1 (0x01) */
- word product; /* product code */
- word product_maj; /* major revision of the product */
- word product_min; /* minor revision of the product */
- char my_name[60]; /* Other end's name */
- char sysop[20]; /* sysop's name */
- word my_zone; /* 0== not supported */
- word my_net; /* out primary net number */
- word my_node; /* our primary node number */
- word my_point; /* 0== not supported */
- byte my_password[8]; /* ONLY 6 CHARACTERS ARE SIGNIFICANT !!!!! */
- byte reserved2[8]; /* reserved by Opus */
- word capabilities; /* see below */
- byte reserved3[12]; /* for non-Opus systems with "approval" */
- end; /* size 128 bytes */
-
-
-
- /*------------------------------------------------------------------------*/
- /* YOOHOO<tm> CAPABILITY VALUES */
- /*------------------------------------------------------------------------*/
- #define Y_DIETIFNA 0x0001 /* Can do fast LoTek 0000 0000 0000 0001 */
- #define Bit_1 0x0002 /* reserved by Opus 0000 0000 0000 0010 */
- #define Bit_2 0x0004 /* reserved by Opus 0000 0000 0000 0100 */
- #define ZED_ZAPPER 0x0008 /* Can do ZModem/plain 0000 0000 0000 1000 */
- #define Bit_4 0x0010 /* reserved by Opus 0000 0000 0001 0000 */
- #define Bit_5 0x0020 /* reserved by Opus 0000 0000 0010 0000 */
- #define Bit_6 0x0040 /* reserved by Opus 0000 0000 0100 0000 */
- #define Bit_7 0x0080 /* reserved by Opus 0000 0000 1000 0000 */
- #define Bit_8 0x0100 /* reserved by Opus 0000 0001 0000 0000 */
- #define Bit_9 0x0200 /* reserved by Opus 0000 0010 0000 0000 */
- #define Bit_a 0x0400 /* reserved by Opus 0000 0100 0000 0000 */
- #define Bit_b 0x0800 /* reserved by Opus 0000 1000 0000 0000 */
- #define Bit_c 0x1000 /* reserved by Opus 0001 0000 0000 0000 */
- #define Bit_d 0x2000 /* reserved by Opus 0010 0000 0000 0000 */
- #define Bit_e 0x4000 /* reserved by Opus 0100 0000 0000 0000 */
- #define WZ_FREQ 0x8000 /* WZ file req. ok 1000 0000 0000 0000 */
-
-
-
-
- +--------------------------------------------------------------------------+
- | |
- | YOOHOO<tm>: SENDER |
- | |
- | ## Status/Action Stimulus Action (comment) Goto |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | s1 | Set 30.second | | | s2 |
- | | failsafe | | | |
- | | timer | | | |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | s2 | Send YOOHOO | | | s3 |
- | | character | | | |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | s3 | Send TSYNC | | | s4 |
- | | character | | | |
- | | (SEE NOTE #1) | | | |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | s4 | Read char | Nothing in 3 sec | report not an Opus | return |
- | | | or lost carrier | | |
- | | | or timer elapsed | | |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Received ENQuire | send handshake | s8 |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Received 'C' | Other end may be | s5 |
- | | | | Fido<tm> responding | |
- | | | | to the TSYNC. Need | |
- | | | | further checking. | |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Received NAK | Other end may be | s6 |
- | | | | Fido<tm> responding | |
- | | | | to the TSYNC. Need | |
- | | | | further checking. | |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Received 01 Hex | Other end may be | s7 |
- | | | | Fido<tm> responding | |
- | | | | to the TSYNC. Need | |
- | | | | further checking. | |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Received debris | try again | s4 |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | s5 | Read char | Nothing in 3 sec | Pretend other side | return |
- | | | | is a Fido<tm> | |
- | | | | responding to TSYNC | |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Timer elapsed | report not an Opus | return |
- | | | or Carrier lost | | |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Received ENQuire | send handshake | s8 |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Received NAK | Other end may be | s6 |
- | | | | Fido<tm> responding | |
- | | | | to the TSYNC. Need | |
- | | | | further checking. | |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Received 01 Hex | Other end IS a | return |
- | | | Received 00 Hex | Fido<tm> responding | |
- | | | Received 'C' | to the TSYNC | |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Received debris | try again | s4 |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | s6 | Read char | Nothing in 3 sec | report not an Opus | return |
- | | | or lost carrier | | |
- | | | or timer elapsed | | |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Received ENQuire | send handshake | s8 |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Received 'C' | Other end may be | s5 |
- | | | | Fido<tm> responding | |
- | | | | to the TSYNC. Need | |
- | | | | further checking. | |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Received NAK | Other end IS a | return |
- | | | | Fido<tm> responding | |
- | | | | to the TSYNC | |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Received 01 Hex | Other end may be | s7 |
- | | | | Fido<tm> responding | |
- | | | | to the TSYNC. Need | |
- | | | | further checking. | |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Received debris | try again | s4 |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | s7 | Read char | Nothing in 3 sec | report not an Opus | return |
- | | | or lost carrier | | |
- | | | or timer elapsed | | |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Received ENQuire | send handshake | s8 |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Received 'C' | Other end may be | s5 |
- | | | | Fido<tm> responding | |
- | | | | to the TSYNC. Need | |
- | | | | further checking. | |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Received NAK | Other end may be | s6 |
- | | | | Fido<tm> responding | |
- | | | | to the TSYNC. Need | |
- | | | | further checking. | |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Received 01 Hex | Other end may be | s7 |
- | | | | Fido<tm> responding | |
- | | | | to the TSYNC. Need | |
- | | | | further checking. | |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Received FE Hex | Other end IS a | return |
- | | | | Fido<tm> responding | |
- | | | | to the TSYNC | |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Received debris | try again | s4 |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | s8 | Send HELLO | Successful | Looks like an OPUS | s9 |
- | | (see hello | | | |
- | | chart) +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Not successful | Repeat whole thing | s2 |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | s9 | Read char | Nothing in 5 sec | repeat whole thing | s2 |
- | | | or lost carrier | | |
- | | | or timer elapsed | | |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Received YOOHOO | Another Opus, go | s10 |
- | | | | process receive | |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Received debris | Repeat whole thing | s2 |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | s10 | Process other | Information | Report Success | return |
- | | side's YOOHOO | Successfully | | |
- | | (See receive | Exchanged | | |
- | | chart) | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Failure | Repeat whole thing | s2 |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- +--------------------------------------------------------------------------+
-
-
- NOTE #1. Sending the TSYNC character is needed only if you
- are also supporting the IFNA/FTSC method. TSYNC is
- not part of YooHoo/WaZOO.
-
-
-
-
-
- +--------------------------------------------------------------------------+
- | |
- | SEND HELLO PACKET |
- | |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | h1 | Disable XON | | | h2 |
- | | Disable ^C/^K | | | |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | h2 | Send Header | Transmit the 128 | | h3 |
- | | | byte HELLO struct | | |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | h3 | Clear inbound | | | h4 |
- | | buffer | | | |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | h4 | Send CRC | Transmit the 16 | | h5 |
- | | | bit CRC of HELLO | | |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | h5 | Read char | Received ACK | Success | return |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Received '?' | Try header again | h2 |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Received debris | Failure | return |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- +--------------------------------------------------------------------------+
-
-
-
-
-
- +--------------------------------------------------------------------------+
- | |
- | YOOHOO: RECEIVER |
- | |
- | |
- | ## Status/Action Stimulus Action (comment) Goto |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | r1 | Got YOOHOO | | Smells interesting | r3 |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | r2 | Got TSYNC | | Report LoTek | return |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | r3 | Clear buffers | | | r4 |
- | | Disable XON | | | |
- | | Disable ^C/^K | | | |
- | | Set timer | | | |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | r4 | Send ENQuire | | Let other end know | r5 |
- | | | | we heard YOOHOO. | |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | r5 | Watch for Hex | Timer elapsed? | 30 sec. elapsed . | return |
- | | 1f (Header) | | Report failure | |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Carrier loss | Report failure | return |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Character not | Keep watching | r5 |
- | | | header (0x1f) | | |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Got header char | Get Hello string | r6 |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | r6 | Receive 128 | Nothing for 5 sec | Report failure | return |
- | | bytes (hello) | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Got all 128 bytes | | r7 |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | r7 | Get CRC | One or both CRC | Short packet | r8 |
- | | | characters timed | | |
- | | | out (over 3 sec) | | |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Error | CRC isn't what it | r8 |
- | | | | should be | |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | CRC compares | Success | r9 |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | r8 | Error handler | Count expired? | 10 failures to get | return |
- | | Send '?' | | hello. Hang up. | |
- | | (0x3f) | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Count not expired | Try again | r5 |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | r9 | Clear inbound | Are we the | Report OPUS | return |
- | | Send ACK | instigator? | | |
- | | Send YOOHOO | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Not instigator | Send our Hello | r10 |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | r10 | Look for ENQ | Timer elapsed? | 5 sec. timeout | r11 |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Character not ENQ | Debris | r11 |
- | | | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | ENQ received | Transmit Hello | r12 |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | r11 | Clear inbound | Count expired? | 5 retrys, failed. | return |
- | | Send YOOHOO | | | |
- | | +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Count not expired | Try again | r10 |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- | | | | | |
- | r12 | Send HELLO | Successful | Success | return |
- | | (see hello | | | |
- | | chart) +- - - - - - - - - -+- - - - - - - - - - -+- - - - - |
- | | | | | |
- | | | Not successful | Repeat whole thing | r1 |
- | | | | | |
- | ----+---------------+-------------------+---------------------+--------- |
- +--------------------------------------------------------------------------+
-
-
-
- ###
-
-