APRStt - The APRS Touch-Tone SPEC                            16 July 2002
-------------------------------------------------------------------------
                                                                   WB4APR
APRStt VERSION 00.0  INTRODUCTION:

APRStt.zip has now been released to encourage people to begin experiment-
ing with APRStt.  You can do this with or without the hardware interface
and with or without an attached radio/TNC.  The voice part of APRStt,
only works if your AUTOEXEC.BAT contains SMARTDRV.EXE which keeps a copy
of the .WAV files in RAM.

With the DTMF interface, TNC APRStt is fully functional on the air.
Without the DTMF hardware, you can still use APRStt.exe running on a
laptop with a TNC/Radio on COM1 (maybe your D7 HT) and simply use the
laptop keyboard to enter simulated DTMF stings into APRStt for on-air
testing of the APRS conversions.  APRStt comes defaulted to Dayton and
uses these files:

   APRStt.zip   the distribution file
   APRStt.exe   the exe
   CFIG-TT.00   the Configuration file
   CALLS.tt     the list of all calls heard
   CALLS.bk     the list of all calls heard at Dayton
   ALPHABET.WAV A WAVE file of the alphabet
   WORDS.WAV    A Wave file of APRStt words
   OTHER.WAV    A Wave file of other late additions


APRStt DESCRIPTION:

This APRStt spec provides for a standard TTone to APRS conversion format
so anyone, anywhere can enter APRS messages, position reports, Objects
and Queries with only an HT/Mobile with a TTone pad.  The format
definintions combined with the TTone memories built-in to most radios
allows for nominal APRS operations with only a few key strokes.  In fact,
the number of key strokes can actually be less than for a Kenwood APRS
radio message!

EXAMPLE:  My kids could have the message "Come Get me at School at..."
loaded into one of their TTone memories on their cheap HTs.  When its
time for me to come get them, they press that TTone memory followed by
"515" and I would receive this via APRS on my APRS HT, Mobile or by
Email and know to go get them at 5:15...  Or another TTone memory
could be "Call me on 147.105" (our local repeater)...

Further more, there are many non APRS HT's that were built in the
1990's that can receive Touch Tone alphanumeric messages.  APRStt can
forward APRS messages from 144.39 to these HT's just as easily as to
a THD7 by using DTMF for these radios:  (this feature is not yet done)

    Kenwood TH-28A, TH-48A, TH-78A
    Yeasu   FT-11R, FT-41R, FT-51R
    Icom    W31A

This APRStt system is implemented on a single PC listening for tones on
your normal voice repeater or on a simplex frequency (147.555).  The
APRStt engine re-formats the received TTone digits into an APRS packet
and sends the data out on 144.39 as a normal APRS packet.  For feedback
and for sending APRS messages back to the APRStt user, the PC uses
synthesized voice or CW.

The following topics are covered in this document:

   APRStt Introduction
   APRStt Description
   APRStt KeyPad:   Precursor Keys,  Editing Keys
   APRStt Formats:  Hashing, Responses, Nomenclature, Callsigns
   ID Format Variations
   Position Format Variations
   Message Format Variations
   Query Formats
   Special Data Example
   Icons
   Retries
   APRS Tips for Special Events
   APRS Software Concepts
   APRStt DTMF Interface Schematic


APRStt KeyPad:
--------------

All APRStt formats are based on the familiar 16 button DTMF keypad
found on almost all HAM radios.  These keys, 0-9, *,#, and A,B,C,D are
used for all entries.  For commonality with the same keypads used on
the Kenwood APRS data radios, the assginments of the alphabet to those
keys and the fundamental definitions of the ABCD keys are kept as
close as possible to the APRS Kenwood design shown below:

+------------------+  This figure shows the standard Touch Tone Key pad
| 1    2    3   A  |  with its standard Alphabetic alternate definitions.
| QZ  ABC  DEF --> |  These definitions match those on the Kenwood also
| 4    5    6   B  |  used for APRS message entry.  For Alphabetic text
|GHI  JKL  MNO <-- |  entry, the letter A would be one press of the "2"
| 7    8    9   C  |  key, B would be "22" and C would be "222".  To enter
|PRS  TUV  WXY del |  the digit "2" within text, it would be "2222". If
| *    0    #   D  |  two adjacent letters use the same key, then press
|    space     OK! |  the "A" key between them.  The # key does all
+------------------+  punctuation in the order ?!'.,-/

PRECURSOR "#" KEY:  When APRStt is at a voice rerpeater and listening
to the repeater input for tones, it must share the audio with the
existing COMMAND decoder.  Therefore, all APRStt sequences must be
preceeded with a key that tells the command decoder to ignore all
remaining tones. In most repeater controllers, this is the # key.  Thus,
we can use it as the start of all APRStt  sequences to force the normal
repeater to ignore the remainder of the APRStt sequence.  To APRStt,
leading #'s are ignored.

EDITING KEYS:  APRStt uses the A, B, C and D keys as special format
identifiers when they are the leading character in a field.  But whenever
they occur within an alphanumeric field, then they also take on these
editing definitions:

  A - Letter separator.  It is used between sequential letters that share
      the same number digit to tell APRStt to move on to the next one.
  B - Is a backspace character which deletes the previous character
  C - is a universal CANCEL or ABORT for the whole APRStt text
  D - Is the OK, or ENTER key.


APRStt FORMATS:  There are only four basic formats, ID, Position, Message
and Query.  The senders call is included in the ID format to identify
the sending station for either a position or a message.  The ID format
includes the call and other unchanging data, the ICON and Comment text.
The position format can be used for not only station position, but also
for objects.  Messages can be between APRS stations or Email.  Queries
ask APRStt for information about other users.

With these fundamental types and the numerous sub formats and short-cuts
APRStt becomes a very powerful APRS communications entry system.
Each of these four entry formats begin with one of the four special
touch tone keys "A","B","C" or "D" and they all end with a "D".

ID:   Acccc.*II*comment...D  - A,MYCALL,ICON,position comment
POS:  BLL.*LL.D              - B,LATITUDE,LONGITUDE (or shortcuts)
MSG:  Ctttt.*message...D     - C,TOCALL,message text
QRY:  QTMtttt.D              - Q,TYPE,MODIFIER,CALLSIGN

In all cases, the APRStt box will send a CW or voice response prior to
accepting the data and beginning to transmit it on 144.39.  If the
response is as expected, then a simple "D" tone is all that is needed
to "OK" the process.

HASHING:  An important concept in APRStt is hashing.  Hashing in this
context means simply entering a single digit equivalent for each alpha-
numeric character instead of the exact 2, 3, or 4 key press alphanumeric
definition. Then APRStt will try to use syntax and heuristics to try
to figure out the most probable meaning for a given entry.  In other-
words the exact way to spell WB4APR is 922444427A7 but in most cases,
just using one key press per letter or hitting 0924277 will be a unique
enough number that only matches WB4APR in your area without ambiguity.
The leading "0" implies the callsign is a HASH and not exact.  In APRStt
two major fields are usually hashed, Callsigns and ICons.

In any CALLSIGN field, the presence of a leading "0" indicates that
the callsign is hashed otherwise it is decoded as a full alphanumeric
entry.  APRStt decodes hashed calls easily, because it is listening to
the APRS channel and maintains a list of all calls heard in the local
area.  On receipt of a DTMF hashed callsign, it will resolve the match
to the correct callsign using these rules:

1) For the "FROM" field, only callsigns that have been previously entered
   via APRStt touchtones will be searched for a match.

2) For all other calls, any callsign heard is compared to this hash.

3) If no match, or duplicate matches, a "QRZ" or WHO? is returned.

4) The SSID is indicated with "0xx" as being the equivalent of "-xx".
   A callsign ending in "0" or with no "0xx" is assumed to be the
   root call except as noed in number 5 following:

5) For "FROM" callsigns, the lack of any SSID will imply "-11" as
   the default for all APRStt users.  An ending "0" is required to
   force the root call.

6) If only a root call (hashed) is used for a TOCALL of a message,
   and there is no exact match to the hash in the currently heard
   list, then the most recently heard SSID for that call will be used
   as the on-air packet call for the message and no error is returned.
   This ambiguity is permissible, becasuse all APRS client software
   is supposed to capture APRS messages to any of it's SSID's.
   The only requirement for an exact match is for the purpose of ACKS.
   And since APRStt does not send DTMF' acks back to the user, this is
   not critical and the message will be captured by all SSID's of that
   station currenlty on the air.


RESPONSES:
----------

APRStt responds to user entries using CW, Touch Tones (DTSS for many HAM
radios) or Voice.  For my first implementaiton on a DOS PC, only CW and
TTone are included.  The following CW messages are common:

  CW RESPONSE  DTSS      MEANING
  -----------  --------  -------------------------------------------------
  R   .-.      OK        Sent following an understood entry
  K   -.-      Over      Sent as a prompt for next entry
  ?   ..--..   What?     Entry not understood
  W   .--      Who?      The hash is ambiguous.  Spell out the full call
  BT  -...-    Break.    APRStt timed out, canceled ID, ready for new call.
  B   -...     Bulletin
  EM  . --     Email
  M   --       Message   Message or ARRL## received
  P   .--.     Position
  L   .-..     Location
  C   -.-.     Call Relative Position

RESPONSES:  These responses are sent in response to an APRStt entry.  For
positions and locations, the LAT/LONGs are not spelled out but reported
as a direction and distance from a known point.  This known point is
usually the APRStt device itself, or a centrally known landmark, or
the repeater, or the last-referenced object.  This way, one can hear
the relative positions of stations or objects relative to each other..

For flexibility then there are these field commands:

 ID:      APRStt responds with name of the current reference location
 SET-N:   Tells APRStt to set the reference location to the Nth default
          or N=0 sets it to the last-object/station

 RESPONSES:

 ID:      YOU ARE <CALL>
 MSG:     MESSAGE TO <CALL>  or EMAIL TO <spells out first word>
 POSIT:   POSIT IS <DIRECTION> <DIST> FROM <ref>
 QUERIES: <CALL> IS <DIRECTION> <DIST> MILES   (from you)
          <CALL> IS ON <FREQ>
   CW: AZ/mi  - Azimuth (N,NE,E,SE,S, etc) at a distance of mi miles.
       MMMkkk - MHz and KHz of frequency that station is on

   VO:
    
    
    
    
    

NOMENCLATURE:  In this specification,  the following shorthand notation
is used in defining various formats:

    A,B, or C   - As leading characters, they define the APTStt formats.
                  Otherwise they are editing keys as noted above.
    D           - All entries end with D as the ENTER or OK key
    *           - The * is typically used as a data field separator
    lower case  - means full alphanumeric text
    callsigns   - are full alphanumeric text but if they begin with a "0"
                  then the call is hashed.
    .           - a dot means variable length field
    UPPER case  - means a NUMERIC entry

CALLSIGNS:  Callsigns are either fully spelled out, or begin with a "0"
    and are hashed.  Further, since the APRStt user will usually need to
    use a different SSID to distniguish his call from his other APRS
    stations, APRStt will assume the default SSID of -11 for all APRStt
    users unless a specific one is entered.  To separate the SSID digits
    from the call, enter a "0".  To enter the root call only without SSID
    then enter only the 0.  To accept the default -11, leave off the 0.
    Here are some examples using my call:

    WB4APR-11   922444427A77     <== no SSID imples -11
    WB4APR-3    922444427A7703   <== all SSID's begin with a "0"
    WB4APR      922444427A770    <== forces -0 or no SSID
    WB4APR-11   0924277          <== The hashed version
    WB4APR      09242770         <== The hashed root call

ID FORMAT VARIATIONS:
---------------------

There are five variations on the ID format and in each case, the callsign
may be fully spelled out, or hashed (with a leading "0").  For the first
time in an area you must always use a fully spelled out callsign so
that the local APRStt knows who you are.  From then on, you may hash it
and or enter the additional optional fields...

   Acccc.D               - A,MYCALL
   Acccc.*iiD            - A,MYCALL,ICON
   Acccc.*status...D     - A,MYCALL,status text
   Acccc.*ii*status...D  - A,MYCALL,ICON,status text
   Acccc.*B..*...*ss..D  - A,MYCALL,B,POSITION DATA
   Acccc.*C..*........D  - A,MYCALL,C,MESSAGE

The ICONS are an optional two digit alphabetic abbreviation of the same
16 icons that are in the Kenwoods.  See section on ICons later.  It is
distinguished from a "status" field because it is exactly 2 digits long.
On receipt of an ID packet, with no prior information on file, then a
position packet will be generated showing a position within the vicinity
of the LAT/ LONG of the APRStt engine but with a 10 mile ambiguity.
This puts you on the map in this area.

Notice that the last two formats above allow a POSITION format or a MESSAGE
format to be combined into the same tone burst to make a complete data
entry with one burst.  This can be done for short messages or some of
the shorter position formats.  Many radios have DTMF memories with a
length of only 16 digits.


POSITION FORMAT VARIATIONS:
---------------------------

There are several different position formats to accompdate a variety of
applications, but all position report formats begin with a "B" and
consist of two required fields and one optional Comment field and of
course, always end with the "D".  The two required fields can either be
a LAT/LONG or a Reference location and ambiguity.  The general format is:

 Bxxxxx.*xxx..*SD - Two required fields plus optional Mic-E (S) comment

POSITION COMMENT:   The last optional field of any position report
is the single digit showing the 14 different Mic-E standard position
comments as shown in the table below:

 0 = Off-duty     5 = Special      11 = CUSTOM1   15 = CUSTOM5
 1 = Enroute      6 = PRIORITY     12 = CUSTOM2   16 = CUSTOM6
 2 = In service   7 = EMERGENCY    13 = CUSTOM3
 3 = Returning    8 = tbd          14 = CUSTOM4
 4 = Committed    9 = tbd

LAT/LONG entries can be either exact, ambiguous or relative depending
on the number of digits entered.  The three LAT/LONG formats are:

 BLL    *LL     *SD - Minutes  (nearest mile within +/- 30mi fm rptr)
 BLLhh  *LLhh   *SD - L/L MM.HH exact posit +/- 30mi fm rptr          ..
 BLLLLhh*LLLLLhh*SD - L/L exact position  LLLL.hh and LLLLL.hh        ..
                    * Note, N,S,E,W Hemispheres are assumed to be the
                      same as the location of the APRStt receiver.

REFERENCE POSITIONS:  You may refer to a nearby position such as
someone else's call or an object or a prepared map of locations.  In
this case, then the first field points to the object location or call
and the second field enters the position ambiguity of either 0.1, 1
or 10 miles using the digits 1,2 and 3.  The two reference formats are
as follows:

 B*tttt.*X*SD - In vicinity of station tttt... (ambiguity X)
 B**Xnn *X*SD - In vicinity of LOCation "Xnn"  (ambiguity X)

LOCATION DETAILS:  The provision for position by reference in support
of special events is where APRStt really shines.  The format B**Xnn*sD
will place you in the vicinity of a location identified to APRStt as
LOCXnn.  This can be a preloaded file, OR it can be an OBJECT uploaded
to APRStt over the air in near real-time!  Imagine being able
to report the position of anyone or anything at your special
event by simply entering the 9 digits above on ANY HT.  Think of the
first digit (X) as a "table" and nn as being a given location from 1
to 99 in that table.  One table can be Checkpoints, Another can be
water stops, another can be MILE marks another can be food stops,
another can be local hotels, etc.

For Dayton, the Hamvention brochure contains a list of hotel areas
numbered 1 through 13.  Just entering 9 TTones, will place you on the
map near your hotel.  If all spin-off night-meeting locations were
also listed in the Brochure with a number legend, then people could
just use there HT's without the bother of a GPS for tracking friends
around the city.   The main HARA buildings could be 001 to 009, the
hotels could be 101 to 120  The restaurants could be 200 to 230, etc...


MESSAGES VARIATIONS:
--------------------

Just like normal APRS, a variety of message formats are supported, but they
all fall into the basic format of a TOCALL followed by the message itself.

Ctttt.*msg...D  - MSG:  TOCALL/message text
C**msg.......D  - MSG:  Subsequent lines to the same person.
Cbn*msg......D  - Bulletin number n
Ce*aaa msg...D  - EMAIL in the usual APRS format with address
CeN*abc......D  - Special Abbreviated Email formats  See footnote ***
Cq*msg-to-allD  - CQ message to ALL

One thing that allows APRStt infinite expansion capabilities for any kind
of data reporting at any kind of event is that APRStt only makes a few
MSG special cases and all other message entries are just formated to APRS
message format and sent as is.  Thus, you can define any message for your
application.


SPECIAL DATA EXAMPLE:  A local HAM club provides radio support for
our local scout Klondike Derby.  At each checkpoint the HAMS report by
voice the checkpoint, the troop number and the score.  These are
laboriously hand scribed onto paper, then passed to a keyboard operator
that enters the data into a computer to tally the results in (long
delayed) real time.  I suggested APRS, but no way can we find enough
D7's or operators who know how to use them.

But with APRStt anyone with any HT can enter Ctttt*CKss where tttt is
the troop number, CK is the checkpoint and ss is the score.  There is
no need for human scribing, because the data (after becoming an APRS
packet) goes directly into the computer.


QUERIES TO APRSTT
-----------------

The APRStt Query allows the APRStt user to query for information about
data in the APRS system.    A Query begins with the hashed letter "Q"
which is of course the digit "1" on the TTone keypad and has two
following fields and a third optional callsign field.

 QUERY FORMAT:  QTcccc.D   - Q,TYPE,CALLSIGN

The second field is the TYPE character and is a single digit hash for
the different types of Querys and the modifier field is also hashed
as a modifier of that TYPE query.  The last field (optional) is for
a callsign or object name.   The use of the TYPE key and the MODIFIER
key allows for up to 99 different types of queries.

The 10 TYPES of Query are indicated by the first field of the Query.
Each of these can be thought of as ten different Tables of additional
Queries.

    TYPE       KEY      DESCRIPTION of QUERY TYPES
    --------   -------  ------------------------------------------------
    Q-Q?Z?1?   1 (QZ )  TBD
    Q-CLUB     2 (ABC)  Information relative to the local clubs
    Q-EVENT    3 (DEF)  Event related Queries
    Q-HELP     4 (GHI)  returns HELP info
    Q-JKL???   5 (JKL)  TBD
    Q-NEAREST  6 (MNO)  NEAREST station, object, etc
    Q-POSITION 7 (PRS)  returns the relative position of CCCCCC
    Q-TUV???   8 (TUV)  TBD
    Q-WEATHER  9 (WXY)  returns the nearest WEATHER to you


NEAREST QUERIES:  These will return the call and positoin of the nearest
of many different types of stations/objects:

    NEAREST    KEY      DESCRIPTION of NEAREST QUERIES
    --------   -------  ------------------------------------------------
    QN-QTH     1 (QZ )  returns nearest fixed station to you
    QN-AVRS    2 (ABC)  returns nearest AVRS system (IRLP,ILink,etc)
    QN-DIGI    3 (DEF)  returns nearest digipeater
    QN-IRLP    4 (GHI)  returns nearest IGATE
    QN-JKL???  5 (JKL)  TBD
    QN-MOBILE  6 (MNO)  returns nearest MOBILE to you
    QN-PRS???  7 (PRS)  TBD
    QN-VOICE   8 (TUV)  returns the nearest Voice repeater
    QN-WEATHER 9 (WXY)  returns the nearest WEATHER to you
    QN-*       *        Marks the position of the last response

POSIITON QUERIES:   Position Queried return the position as a direction
    and a distance of the station/object relative to another location
    according to the RELATIVE modifier table below.  If no callsign or
    object is entered, then it is assumed to be the same as the last
    marked or queried station/object.
  
    QRY/MODIFIER  KEY      DESCRIPTION
    ------------  -------  --------------------------------------------
    QP-QTH        1 (QZ )  from your own QTH (Home station root call)
    QP-CLUB       2 (ABC)  from the HAM club site
    QP-DOWNTOWN   3 (DEF)  from downtown
    QP-GHI???     4 (GHI)  from GHI (TBD)
    QP-LAST Obj   5 (JKL)  from Last marked object
    QP-ME         6 (MNO)  from ME
    QP-REPEATER   7 (PRS)  from the repeater
    QP-TTONE      8 (TUV)  from APRStt
    QP-WXY???     9 (WXY)  TBD
    QP-*          *        Marks the CCCCCC as the LAST MARKED OBJECT

OTHER IDEAS:

    QU - Who is the current user
    QA - Age of last packet sent by station CCCC
    QL - who was the last user (previous)
    Q* - who is the currenlty marked station?
    QF - What is the operating frequency of CCCC


ICONS:  APRStt uses the same ICONS subset as the Kenwoods.  These
are entered as a two digit hash from the first two letters of the
name of the ICON.  For example enter "CA" (22) for a car.  If no
ICON is entered, the default is for a "person".

28 ATv    46 HOuse     73 PErson     83 TEnt
24 BIke   48 HT        75 PLane      87 TRuck
26 BOat   53 JEep      76 POrtable   18 18wheeler
22 CAr    72 SAilboat  77 RV         82 VAn


SPECIAL EMAIL FORMATS:
----------------------

I have proposed to enhance the existing APRS EMAIL system to allow for
a number of special shortcuts for common EMAIL needs.  Since most
mobile APRS Email messages are entered from a TTone keyboard, it only
makes sense to abbreviate many of the key strokes commonly used.  Here
is what I have proposed:

   :EMAIL    :email@address message...  - This is the original format
   :E        :Email@address message...  - Abbreviates EMAIL
   :En       :message                   - Use your address memory n

One problem with APRStt is the difficulty with entering punctuation.
Thus the character "@" is given a special situation in Email messages.
The first occurence of the "*" key in the body of a message and
before any SPACE character, will be interpreted as the "@" symbol.


RETRIES:
--------

Once APRSt receives a DTMF message or position entry, it assumes
responsibility for all retries and message acks.   It uses a similar
algorithm to that used by APRSdos.  That is, any new packet is sent
once, and a decay timer set to 18 seconds later.  After each such
delay, the packet is transmitted again and the decay is doubled
(actually, a factor of 1.8).  This results in 5 retries over the
first 7 minutes:

 * 18s * 32s * 58s * 105s * 3m * 5.5m * 10m * 18m

If an ACK is received for a message, the message is canceled and an
ACK is sent in CW:  "QSL WB4APR".  Once a message gets past 7
minutes, without success, it is not transmitted again unless the
recepient is later heard on the air.  Positions cancel after the
7 minute window.  Of course the 7 minuet window is based on having
RETRIES set to 5.  Retry is a variable under SETUP.


APRStt PRESENCE ON 144.39 and 147.555:
--------------------------------------

APRStt will identify itself on 144.39 like any other APRS station with
a Position, a Status, an Object and a Bulletin all transmitted via only
the LOCAL DIGI.  It will use the MYCALL of "APRSTT".  To avoid conflicts
and overlaps, adjacent machines will use different SSID's.

  ICON:  Box with "tt" in it or something looking like a TTone pad
  POSN:  The physical location of the machine.  Comment has FCC call
  OBJT:  A 30 mile AREA box bounding the MYCENTER location of coverage
  STTS:  "on 147.555 Try it!  TouchTone APRS!"
  BLN1:  "ID = Acccc, Pos=Blat*lon Msg=Cto*msg. End = D."

The Bulletin is carefully crafted to fit the screen of a TH-D7.  The
object BOX is a 22 to 33 mile box centered on the MYCENTER LAT/LONG.
The reason for this is because all abbreviated position formats can only
be plus or minus 29 minutes of LAT/LONG from the center location without
ambiguity.  Thus, about 30 miles in Southern States and about 23 miles
in Seattle.

Similarly, APRStt will identify itself on 147.555 once every 10 minutes
with a BRIEF CW or Voice announcement:

  Voice:  "APRSTT <callsign>"
  CW:     "APRStt <callsign>"


APRStt TIPS FOR SPECIAL EVENTS:
-------------------------------

1) For "route" style events, simply prepare a list of objects represent-
ing known locations such as 000 to 027 being Mile Marks, 1xx being
special locations, 2xx being Food places, 3xx being Hotels, 4xx being
Hospitals.  For  small events, just transmit these locally as local
objects the days before, so that APRStt can capture them.  For larger
events, you may want to prepare the file offline...

2) Consider SHORT tacitcal calls for all users.  APRStt defaults to
requiring 4 letter legal calls (it wants to see the numeral as a check
on its validity).  Or select the NOCALLS option in APRStt to disable
this check so that any 4 letter sequence may be used.

3) Have everyone put their FULLY spelled out callsign in their DTMF
memory #1 including the terminating "D" key.  This should only need to
be used once at each venu, but will always be required for APRStt
anyway...

4) Then in the next location put their HASHED call ending with a "B" so
that it can be followed by either the 2x2D or 4x4D manual position report.

5) You can fill up remaining memories with either KNOWN positions or
with a list of PRE-Prepared message reports.


APRStt SOFTWARE CONCEPTS:
-------------------------

Here was my approach to implement my initial APRStt program.

1)  All packets heard on either the APRS channel or the APRStt audio
channel are saved (after removing dupes and keeping track of the time
of receipt).  My buffer is currently 500 deep and when full, overwrites
the oldest packet.  A longer buffer than about 24 hours worth of
callsigns is not desired as it just adds to the probability of duplicate
hashes.

2)  All DTMF-to-Packet packets are sent to the TOCALL of APTxxx where
xxx is the software version number.  This clearly identifies the packets
as having been generated by APRStt and not by some other XXXX-11
station.  This distinction is required so that users of DTMF are always
identifiable.

3)  A SEND buffer holds all the currently scheduled APRStt data
received from DTMF users and scheduled for transmission.  On receipt
of any new ICON, STATUS, or POSITION data from a DTMF user this buffer
is scanned and any previous position packet is updated and the
transmit decay timing is restarted.  Any ACKED messages are removed,
as well as any OLD packets.

4)  A separate LIST (or other mechanism) must always keep a copy of the
current data for all DTMF users even if it is old.  THis is used to
maintain the last konwn position and ICON and STATUS for each such user.

5)  APRStt packets all uses the "/" position type indicator with time
stamp to show when it entered the system and that it is not message
capable.  In fact, APRStt packets conform to the following format:

   USER>APTxxx:/DDHHMMzDDMM.hhN/DDDMM.hhW]no_comment/status......

Notice that the comment field (no_comment) is exactly 10 characters long
in order to match the definitions of the 13 standard Mic-E comments and
also to match the 10 character wide screen of the D7.

6)  APRStt uses a decaying timing algorithm where new DTMF generated
packets are transmitted relatvely frequently when new, and then decay
to longer periods.  Any transmission beyond about 5 retrires (about
5 miuntes) is usually not a good idea...

7)  There must be a callsign timeout. That is, a DTMF callsign ID is
valid for a limited time and or packets after initial receipt.  The
exact algorithm is TBD.

8)  DTMF tones can be as brief as only a few milliseconds, so APRStt
program execution must check the DTMF port every few milliseconds.

9)  Since different fields can be included in differing formats above,
Position, Icon, and status infromation from the DTMF user should be
overwritten individualy in modified packets and not necessarily used
to start a NEW packet on each new entry.  Thus, a new position uses
the same ICON and STATUS until they are changed, etc.

Main APRS WEB  page  http://www.ew.usna.edu/~bruninga/aprs.html

de WB4APR@amsat.org, Bob


APRStt CONNECTIONS FOR THE DTMF chip to the LPT1 PORT        20 May 2002
------------------------------------------------------------------------
                                                                  WB4APR

THis was all I hooked up to give the demo's at dayton.  I need to modify
this to add the ability for the 8880 chip to SEND DTMF back to the end
user if he has one of the DTMF messaging radios.  For now, I am only
concentrating on the DTMF receive side.  But if anyone is considering
making this in to a small board, then remember that it will eventually
need to have DTMF send also.

This design below uses the 5 available Input pins on the Parallel port
and does NOT attempt to use the port as a bi-directional port which will
not work on all PC's...


Connections to the 8880 DTMF chip are:                               DB-25
                                                                     LPT1 Port
                        +-------+
                   *---*|       |*---------------------*---> +5V
      0.1     100k |    |       |                  0.1 |
Inpt --||--*--/\/\/\/--*|       |*--------------*--||--+
           |  100k |    |       |       390k    |      |  +-----+
           +--/\/\/\/--*|       |*-----/\/\/\/--*------|--| XXX |--- Pin 15
                   |    |       |                      |  +-----+
                   *---*|       |*----- D3-------------|------------ Pin 11
                        |       |                      |
           GND --------*|       |*----- D2-------------|------------ Pin 10
                        |       |                      |
                XTAL---*|       |*----- D1-------------|------------ Pin 12
                        |       |                      |
                XTAL---*|       |*----- D0-------------|------------ Pin 13
                        |       |            3.3k      |
      DTMF OUT --------*|       |*---------/\/\/\/-----+
                        |       |                      |
         +5 R/W -------*|       |*      clock         === 0.1
                        |       |                      |
        not CS     *---*|       |*---*  REG Sel        |
                   |    +-------+    |                 |
                  ===               ===               ===
                   =                 =                 =

I/O PORT CONSIDERATIONS

LPT1   PORT ADDRESS = 888
STATUS PORT ADDRESS = 889

BIT 8880 VAL  DB25  color  NAME    OPEN out  GND out  note
--- ---- ---  ----  -----  ------  --------  -------  -----------
 D7  D3  128   11   yel    BUSY     +5   0      1     HW inverted
 D6  D2   64   10   org    nACK      0   1      0     defined inverted
 D5  D2   32   12   red    Pempty   +5   0      1   
 D4  D0   16   13   brn    Select    0   0      0
 D3  ESt   8   15   w      nError   +5   1            defined inverted
 D2        4                         0   0
 D2        2                         0   0
 D0        1                         0   0

In software, to get the 8880 chip 4 bit outputs to read properly,

1) First XOR with 128 to reverse the Hardware inversion
2) Then binary divide by 16 to right shift the data.
3) Note that D3 is the state of the KEY press.  It is 0 if no key
   and goes to 1 if there is a key pressed.  Get this bit with AND 8


XXX CIRCUIT:  This circuit unloads the digit-detect output and isolates
              it from the R/C time constant of the 390k and 0.1 uF cap.
              Then it is inverted an used to feed the Pin 15 to tell the
              APRStt that a new digit has been received.       

+5v-----------*----------------*
              |e               |
           b|/                 \ 10K
>--/\/\/----|PNP               /
   470K     |\                 \
              |c               *------------> Pin 15
              |                |c
              |             b|/
              *---/\/\/\/----|NPN
                   100 K     |\
                               |e
                              ===
                              GND


APRStt VOICE D/A CONVERTER  USING THE LPT1 PORT
-----------------------------------------------

As of July 2002, I have added VOICE response to APRStt to facilitate the
feedback of data to the user as he makes his entries and also in response
to Queries.

Speech is limited to pre-recorded WAV files only and is limited to the
alphabet and special words only.  These are distributed in three files.
One for the alphabet, one for special words, and a third file for added
words as needed.

ALPHABET.WAV = ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789 IS
               Derived words A, I, OK, TO, ARE, BE, SEE, YOU, WHY

WORDS.WAV    = at, is, on, from, no, match, error, your,
               north, south, east, west, nearest, gate, mobile, weather
               bad, posit, message, email, from, repeater
               point, miles, per, hour, minutes, packet, sent

LPT1 PARALLEL PORT D/A VOICE CONVERTER SCHEMATIC:
-------------------------------------------------

                           +---------+
 PIN-1 --------------------+ PTT CKT +----> To Radio PTT
 PIN-2 --<640K>--+         +---------+
 PIN-3 --<320K>--+
 PIN-4 --<160K>--+
 PIN-5 --<80 K>--*---*---------||---------> To Radio Microphone input
 PIN-6 --<40 K>--+   \        10uF
 PIN-7 --<20 K>--+   /
 PIN-8 --<10 K>--+   \ 33 Ohms
 PIN-9 --< 5 K>--+   /
 PIN-25--------------* GND


PTT BUFFER CIRCUIT
------------------

This circuit converts the TTL level LPT1 Strobe bit to an open collector
PTT output that should work with all radios...  The 220k and 100 uF
capacitor are a watchdog timer that will prevent the circuit from holding
down PTT for longer than 22 seconds and the 10uF caps are to filter any
noise from getting into the Mic circuit when PTT is combined with Mic
audio on HT's.   To combine PTT with Mic Audio, simply run the PTT output
to the mic input through a 2.2k resistor.

                      +---||---+
                      |  10uF  |
                      +--/\/\--*--------*--------------------> +5v
                      |  220K  |        |
                      |        |e      === 10 uF     
                      |     b|/         |     
 PIN-1  >--\/\/\--||--*------|PNP      ---  
(strobe)    10K  100uF       |\        /// GND     
                               |c               *------------> PTT to Radio
                               |                |c
                               |             b|/
                               *---/\/\/\/----|NPN
                                    2.2 K     |\
                                                |e
                                               ===
                                               /// GND


de WB4APR, Bob

