home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
CPM
/
PACKET
/
DEDTNC2.ARK
/
TNC2U.DOC
next >
Wrap
Text File
|
1987-08-26
|
32KB
|
925 lines
AX.25 Version 2
Multi-channel
TNC FIRMWARE
(version 2.0)
Copyright 1987, Ronald E. Raikes (WA8DED)
This firmware supports the full AX.25 link-layer protocol,
version 2.0 as described in the ARRL specification dated October
1984, as well as the pre-existing version 1.x. This
implementation supports multiple simultaneous link connections
with either version protocol. This release has been compiled for
a maximum of four connections, although any reasonable number of
connections is possible by changing one MAXLNK symbol in the
source header file. The firmware is contained in one 26256
EPROM, and is intended to be installed in a TAPR TNC-2 (or
equivalent, such as the MFJ-1270 or AEA PK-80) in socket U23.
RAM memory is automatically sized, supporting both 16k and 32k
configurations.
Commands and information are sent to the tnc in the form of
lines. Lines may be up to 256 characters long, including the
terminating CARRIAGE RETURN. If the 256th character entered is
not a CARRIAGE RETURN, it will be discarded and a BELL character
will be output to the terminal. BACKSPACE and DELETE may be used
to remove single characters from the line. The entire line may
be permanently backspaced out by entering a CONTROL-U or CONTROL-
X. A CONTROL-R will temporarily backspace out any partial line
to allow incoming frames to be displayed. A second CONTROL-R
will then restore the line to allow continuation of entry.
During the time a partial line is saved, only another CONTROL-R
will be accepted from the keyboard (with the exception of
xon/xoff, of course). BELL characters are echoed to the terminal
when entered or removed. Lines which begin with an ESCAPE
character (echoed as '* ') are interpreted as commands. If a
command is issued with no parameter, the current value of that
commands parameter is displayed. Lines without a leading ESCAPE
character are sent as information.
The firmware provides the operator with five virtual tnc
channels, numbered 0 to 4. The terminal is logically attached to
only one of these channels at a time, selected by the 'S'
command. Information sent on channel 0 is always unproto. The
unproto path may be set by issuing a 'C' command when channel 0
is selected. Channels 1 - 4 are also unproto if they are not
currently connected. Outgoing connect requests may be issued on
any unconnected channel, while incoming connect requests will use
the first available channel (provided the maximum number of
connections set by the 'Y' command will not be exceeded).
Information received on a connected channel that is not currently
selected will remain queued there until that channel is selected.
The STA led indicates there is queued information, and the 'L'
command may be used to determine the channel(s) where it is
located. Information for transmission is sent only to the
currently selected channel. When a connection is ended, received
information will remain queued until it has been displayed. If a
new digipeater path is desired while a connection is being
established or is in progress, it is not necessary to disconnect
first. Simply re-issuing the 'C' command will re-establish the
connection via the new path without any loss of information.
Which protocol version is used to initiate a connection is
controlled by the 'V' command, but the version will be changed
automatically, if necessary, to conform to the version of the tnc
responding. Version 2 protocol is more effecient in terms of
network throughput and loading, especially under severe
conditions. Version 2 protocol is the default and should be used
whenever possible. When version 2 protocol is used, a watch-dog
timer is started whenever information is not being transmitted.
If the tnc remains idle for three minutes, it will poll the other
tnc to determine if the link is still established. If no
response is received after the number of tries set by the 'N'
command, a link failure is reported. This procedure will also
detect the case where someone connects and then leaves without
disconnecting. Changing the protocol version during a connection
is not permitted.
The 'F', 'I', 'N', 'O', and 'V' commands maintain individual
parameters for each channel. The value stored in channel 0 is
used to initialize channels 1 - 4 upon power up, and to re-
initialize channels 1 - 4 after a disconnect. This allows the
values to be changed independently on each channel, prior to and
during a connection, and then automatically revert back to the
standard values when the connection is ended. A 'D' command
issued on a disconnected channel 1 - 4 will also re-initialize
that channel.
Frame monitoring is controlled by the 'M' command. The
command parameter determines the types of frames monitored, and
is a list of desired frames chosen from the letters in the
following table:
LTR FRAME
--- -----
N None
I I frames
U UI frames
S Supervisory frames
C Monitor while connected
+ Call signs to be included (maximum of 8)
- Call signs to be excluded (maximum of 8)
The '+' and '-' parameters may not be used together. If either
is used, it must be the last parameter (followed by one to eight
callsigns, if applicable). If no list of callsigns is specified
to be included or excluded, all callsigns will be candidates for
monitoring. Entering a '+' or '-' with no callsigns will empty
the list.
An asterisk displayed after a callsign in the digipeater list
indicates the frame was transmitted by that station. The control
field displayed will be one of the following:
NAME DESCRIPTION
---- -----------
RRa - Receive Ready
RNRa - Receive Not Ready
REJa - Reject
UI - Unnumbered Information
DM - Disconnected Mode
SABM - Connect Request
DISC - Disconnect Request
UA - Unnumbered Acknowledge
FRMR - Frame Reject
Iab - Information
?ccH - Unknown
a = Next expected frame number (0 - 7)
b = Frame number of this frame (0 - 7)
cc = Hexadecimal value
In addition, one of the following characters will be displayed,
reflecting the protocol version, command/response bits, and the
poll/final bit:
(blank) = version 1 frame without poll/final bit
! = version 1 frame with poll/final bit
^ = version 2 command frame without poll bit
+ = version 2 command frame with poll bit
- = version 2 response frame with final bit
v = version 2 response frame without final bit
The protocol identifier field is displayed in hexadecimal
An unattended mode, controlled by the 'U' command, provides
for sending user supplied text to a connecting station, and then
allows that station to leave a brief message. This mode can
operate on all channels simultaneously, but in no way limits the
operators ability to interact with one of the connected channels
or the ability to make outgoing connect requests. When
unattended mode is enabled, link status messages are queued to
the associated channel and not output to the terminal unless that
channel is currently selected. Link status messages will
therefore be displayed in chronological order with the
information from that channel. In addition, text supplied by the
user with the 'U' command will be sent to any station that
connects. If channel 0 is left selected, stations may then
connect and leave messages on channels 1 - 4 (limited by the 'Y'
parameter, of course). The 'L' command may be used to determine
if messages have been left on any channel. Selecting a channel
containing messages will cause all link status and information
from that channel to be displayed. If xon/xoff handshaking is
enabled, CONTROL-S and CONTROL-Q may be used to regulate the
output to the terminal to allow comfortable reading.
COMMAND SUMMARY
===============
COMMAND PARAMETER DESCRIPTION
------- --------- -----------
A (1) 0 Auto linefeed disabled
1 Auto linefeed enabled
C Cs1 [Cs2 ... Cs9] Connect path (0=unproto path)
D Disconnect
E (1) 0 Echo input disabled
1 Echo input enabled
* F (4) 1-15 Frame acknowledge (seconds)
G [0] Get information (host mode)
[1] Get link status (host mode)
* I Cs Tnc source callsign
JHOST (0) 0 Terminal mode enabled
1 Host mode enabled
L [0-4] Display channel status
M (IU) NIUSC+- Monitor mode
* N (10) 0-127 Number of tries (0=forever)
* O (4) 1-7 Number of outstanding I frames
QRES Re-start firmware
R (1) 0 Repeater disabled
1 Repeater enabled
S (0) 0-4 Select channel (0=unproto)
T (30) 0-127 Transmitter delay (10ms)
U (0) 0 [text] Unattended mode disabled
1 [text] Unattended mode enabled
* V (2) 1 Version 1 protocol initiated
2 Version 2 protocol initiated
W (16) 0-127 Repeater wait (10ms)
X (1) 0 Transmitter PTT disabled
1 Transmitter PTT enabled
Y (4) 0-4 Maximum connections
Z (3) 0 Flow disabled, xon/off disabled
1 Flow enabled, xon/off disabled
2 Flow disabled, xon/off enabled
3 Flow enabled, xon/off enabled
@ B Display number of free buffers
S Display current link state
T2 (100) 0-65535 Timer T2 interval (10ms)
T3 (18000) 0-65535 Timer T3 interval (10ms)
V (0) 0 Callsign validation disabled
1 Callsign validation enabled
Default values are shown in parenthesis
* These commands are applicable to each connection channel
(Values set on channel 0 are used upon power up and
disconnect to initialize each connection channel)
COMMAND DESCRIPTION
===================
The 'A' command is used to enable or disable the automatic
insertion of LINEFEED characters after CARRIAGE RETURN characters
to the terminal.
The 'C' command is used to initiate a link connection. Note
that 'v' or 'via' is not required (but is allowed) between the
destination callsign and the digipeater callsigns. A 'C' command
may be issued on a channel already in use to change the
digipeater callsigns, but not the destination callsign. A 'C'
command issued when channel 0 is selected sets the unproto path.
The 'D' command is used to initiate a link disconnection.
If there is unsent or unacknowledged information remaining, the
disconnect request frame will not be sent until all information
has been transmitted and acknowledged. No additional information
will be received after the 'D' command has been issued. A second
'D' command may be entered to force the transmission of the
disconnect request frame before all information has been sent and
acknowledged. A 'D' command issued during the establishment of a
link or after a disconnect request frame has been transmitted
will cause an immediate return to the disconnected state. A 'D'
command issued on a disconnected channel will re-initialize the
connection dependent parameters to the values stored in channel
0.
The 'E' command is used to enable or disable the echoing of
input (commands and information) to the terminal.
The 'F' command is used to set the frame acknowledgement
interval. This interval is used to compute the timeout interval
before a packet is retransmitted, using the formula:
time (seconds) = frame ack * (2 * number of digipeaters + 1)
A separate frame acknowlegement interval value is maintained for
each connection channel. The value stored in channel 0 is used
to initialize each connection channel upon power up or
disconnection.
The 'G' command is used to interrogate virtual tnc channels
when host mode is enabled. If no parameter is specified, the
next chronological item (information or link status) will be
returned, provided there is one. This command is invalid in
terminal mode. A later section is devoted to host mode
operation.
The 'I' command is used to set the tnc source callsign. The
initial value is all blanks. Changing the tnc source callsign
while connected is not permitted. If the tnc source callsign is
left blank, the tnc will not allow connect commands or unproto
transmissions. The callsign stored in channel 0 is used to
initialize each connection channel upon power up or
disconnection.
The 'JHOST' command is used to select between terminal and
host modes. A later section is devoted to host mode operation.
The 'L' command is used to display the link status of one or
all channels. Information displayed includes the connection
path, number of receive frames not yet displayed, number of send
frames not yet transmitted, number of transmitted frames not yet
acknowledged, and the current retry count. A '+' character
preceeding the channel number indicates the currently selected
channel. Operation of this command when host mode is enabled is
somewhat different, and is described in a later section.
The 'M' command is used to set the frame monitoring mode.
The command parameter determines the types of frames monitored,
and is a list of desired frames chosen from the letters in the
following table:
LTR FRAME
--- -----
N None
I I frames
U UI frames
S Supervisory frames
C Monitor while connected
+ Call signs to be included (maximum of 8)
- Call signs to be excluded (maximum of 8)
The '+' and '-' parameters may not be used together. If either
is used, it must be the last parameter (followed by one to eight
callsigns, if applicable). If no list of callsigns is specified
to be included or excluded, all callsigns will be candidates for
monitoring. Entering a '+' or '-' with no callsigns will empty
the list.
The 'N' command is used to set the maximum number of times a
frame will be transmitted without receiving an appropriate
acknowledgement, before a link failure is assumed. A separate
maximum number of tries value is maintained for each connection
channel. The value stored in channel 0 is used to initialize
each connection channel upon power up or disconnection.
The 'O' command is used to set the maximum number of
unacknowledged I frames that may be outstanding at any one time.
A separate maximum number of unacknowledged I frames value is
maintained for each connection channel. The value stored in
channel 0 is used to initialize each connection channel upon
power up or disconnection.
The 'QRES' command is used to restart the firmware,
including re-initialization of battery-backed RAM to default
parameters.
The 'R' command is used to enable or disable the digipeating
of frames.
The 'S' command is used to select the current channel
number.
The 'T' command is used to set the transmitter keyup delay
interval. The parameter is specified in 10ms increments.
The 'U' command is used to enable or disable unattended
modes.
The 'V' command is used to select whether version 1 or 2
protocol will be used to initiate a link connection. A separate
protocol version value is maintained for each connection channel.
The value stored in channel 0 is used to initialize each
connection channel upon power up or disconnection. Interrogating
this parameter during a connection will reflect the protocol
version currently being used on that channel. Changing the
protocol version during a connection is not permitted.
The 'W' command is used to set the digipeater wait interval.
The parameter is specified in 10ms increments.
The 'X' command is used to enable or disable the transmitter
PTT line.
The 'Y' command is used to set the maximum number of
connections that may established by incoming requests. This
command has no effect on the operators ability to initiate
outgoing connection requests.
The 'Z' command is used to enable or disable flow control
and xon/xoff handshaking to the terminal. If flow control is
enabled, output to the terminal will be inhibited while entering
commands or information. If flow control is disabled, output to
the terminal will not be restricted. Flow control and xon/xoff
handshaking should be disabled during periods in which the tnc is
operated without a terminal, to avoid suspending output which
will consume buffers. If xon/xoff handshaking is enabled, crt
scrolling may be stopped and started using CONTROL-S and CONTROL-
Q characters. Flow control and xon/xoff handshaking are not
performed when host mode is enabled.
The '@' command is a software maintenance command. A
parameter of 'B' will display the number of free buffers. A
parameter of 'S' will display the current link state. The 'T2'
parameter is used to set the timer T2 interval, just as the 'T3'
parameter is used to set the timer T3 interval. The timer
intervals are specified in 10ms increments. Timer T2 controls
the amount of delay between the time an information frame is
received and the time the resulting response frame is sent. This
delay allows multiple frames to be acknowledged with a single
response. Timer T3 is used maintain link integrity. If there is
no activity during the T3 interval, the tnc will poll to verify
the distant station is still connected. The 'V' parameter is
used to enable or disable callsign validation.
HOST MODE OPERATION
===================
Host mode is intended to provide a user interface suitable
for operation under control of a host processor. Commands and
information to the tnc, as well as status and information from
the tnc, are clearly identified to allow orderly and unambiguous
communication. To alleviate any need for hardware or software
handshaking, the tnc will not send to the host processor
unsolicited, and all exchanges are limited to 256 bytes.
Information transfers are fully transparent.
When host mode is enabled, the first byte sent to the tnc
must be a channel number. If information is being sent, the
second byte must be a binary 0. If a command is being sent, the
second byte must be a binary 1. The third byte must be the
binary length of the actual information or command, decremented
by 1 (vacuous information or commands are not permitted). The
actual information or command bytes must follow last.
Information sent to channel 0 will be sent unproto. Information
sent to an unconnected channel 1 - 4 will be discarded. The tnc
will respond to both information and commands with a channel
number first, followed by a binary code of 0, 1, or 2, signalling
success or failure. Codes of 1 or 2 will be followed by a null
terminated message. Channels may be interrogated for incoming
information or link status by using the 'G' command. Monitor
headers and monitor information will always be sent to channel 0,
along with connect request link status messages. All other link
status messages will be sent to the appropriate channel, along
with that channels connected information. In response to a 'G'
command, the tnc will respond with a channel number first,
followed by a binary code of 0 if nothing is available, or a
binary code of 3 - 7, identifying the bytes that follow. A code
of 4 indicates the monitored frame does not contain an
information field. A code of 5 indicates the monitored frame
does contain an information field, and the next 'G' command on
channel 0 will return that information field, preceeded by a code
of 6.
Host to Tnc
-----------
CHANNEL CODE DESCRIPTION
------- ---- -----------
n 0 Information (preceeded by length-1)
n 1 Command (preceeded by length-1)
Tnc to Host
-----------
CHANNEL CODE DESCRIPTION
------- ---- -----------
n 0 Success (nothing follows)
n 1 Success (message follows, null terminated)
n 2 Failure (message follows, null terminated)
n 3 Link Status (null terminated)
n 4 Monitor Header (null terminated)
n 5 Monitor Header (null terminated)
n 6 Monitor Information (preceeded by length-1)
n 7 Connect Information (preceeded by length-1)
Success messages
----------------
{channel status}
{parameter value}
CHANNEL NOT CONNECTED
Failure messages
----------------
INVALID CALLSIGN
MESSAGE TOO LONG
INVALID PARAMETER
INVALID BAUD RATE
NO SOURCE CALLSIGN
INVALID COMMAND: ?
NOT WHILE CONNECTED
INVALID VALUE: ?????
NO MESSAGE AVAILABLE
INVALID CHANNEL NUMBER
TNC BUSY - LINE IGNORED
CHANNEL ALREADY CONNECTED
STATION ALREADY CONNECTED
INVALID EXTENDED COMMAND: ?
Link Status messages
--------------------
BUSY fm {call} via {digipeaters}
CONNECTED to {call} via {digipeaters}
LINK RESET fm {call} via {digipeaters}
LINK RESET to {call} via {digipeaters}
DISCONNECTED fm {call} via {digipeaters}
LINK FAILURE with {call} via {digipeaters}
CONNECT REQUEST fm {call} via {digipeaters}
FRAME REJECT fm {call} via {digipeaters} (x y z)
FRAME REJECT to {call} via {digipeaters} (x y z)
x y z = FRMR information bytes
Monitor Header format
---------------------
fm {call} to {call} via {digipeaters} ctl {name} pid {hex}
Channel Status format
---------------------
a b c d e f
a = Number of link status messages not yet displayed
b = Number of receive frames not yet displayed
c = Number of send frames not yet transmitted
d = Number of transmitted frames not yet acknowledged
e = Number of tries on current operation
f = Link state
Possible link states are:
0 = Disconnected
1 = Link Setup
2 = Frame Reject
3 = Disconnect Request
4 = Information Transfer
5 = Reject Frame Sent
6 = Waiting Acknowledgement
7 = Device Busy
8 = Remote Device Busy
9 = Both Devices Busy
10 = Waiting Acknowledgement and Device Busy
11 = Waiting Acknowledgement and Remote Busy
12 = Waiting Acknowledgement and Both Devices Busy
13 = Reject Frame Sent and Device Busy
14 = Reject Frame Sent and Remote Busy
15 = Reject Frame Sent and Both Devices Busy
NOTE 1: Only items a and b are displayed for channel 0.
NOTE 2: Only states 0 - 4 are possible if version 1 is in use.
DEFAULT PARAMETERS
==================
In some instances, it may be desirable to have default
parameters which differ from the standard values. To allow easy
access, all default parameters have been placed at the beginning
of the EPROM at location 0040H. The following listing defines
the layout of this area:
TYPE VALUE DESCRIPTION
---- ----- -----------
BYTE 1BH COMMAND CHARACTER
BYTE ' ',60H SOURCE CALLSIGN (SEE NOTE 1)
BYTE ' ' MNEMONIC IDENTIFIER
BYTE 04H MAXIMUM CONNECTIONS
BYTE 03H MONITOR MODE (SEE NOTE 2)
BYTE 01H REPEATER DISABLE/ENABLE
BYTE 10H REPEATER WAIT (10ms)
BYTE 1EH TRANSMITTER DELAY (10ms)
BYTE 03H FLOW CONTROL MODE
BYTE 01H TRANSMITTER PTT DISABLE/ENABLE
BYTE 01H AUTO LINEFEED DISABLE/ENABLE
BYTE 01H ECHO COMMAND LINE DISABLE/ENABLE
BYTE 01H VERSION 2 INITIATED DISABLE/ENABLE
BYTE 04H MAXIMUM UNACKNOWLEDGED FRAMES
BYTE 0AH MAXIMUM TRY COUNT
BYTE 04H FRAME ACKNOWLEDGE INTERVAL
BYTE 00H VALIDATE CALLSIGN ENABLE/DISABLE
BYTE 64H TIMER T2 INTERVAL (10ms)
WORD 4650H TIMER T3 INTERVAL (10ms)
DISABLE = 00H / ENABLE = 01H
NOTE 1: The secondary station id must be shifted left one bit
and or'ed with 60H.
NOTE 2: The monitor mode is composed from the following bits:
BIT FRAME
--- -----
0 I frames
1 UI frames
2 Supervisory frames
3 Monitor while connected