Version 1.6 20000216

The firmware may be mounted on a TNC2 or 100% compatible Clone with clock
of the CPU to 2.4576Mhz, 4.9152Mhz 9,8304Mhz and 32K of RAM.
               
- Support AX.25 release 1 and 2.

- Full control of AX.25 link layer parameters (Timers, SlotTime, Persistence)
  also in remote mode via sysop interface

- Repeat only AX.25 UI frame

- Support the digipeating of UI AX.25 frame addressed to the digipeater callsign 
  or alias.

- Support the digipeating of UI AX.25 frame addressed to user definable (up to
  8 also via remote sysop interface) generic callsign, with call substitution.

- Support the digipeating of UI AX.25 frame addressed a generic call (eg: WIDE)
  using flooding algorithm.

- Support the digipeating of UI AX.25 frame addressed a generic call (eg: TRACE)
  using trace+flooding algorithm.

- Ignore duplicated frame sent in a defined interval.

- Ignore the digipeating of digipeater originated frame (beacon), frame already
  digipeated with call substitution or generic callsign.

- Support for handling the different SSID meaning on destination call of the
  UI Frame (Directional Beacon)

- Remote management protected by password.

- Digipeater heard station list.

- Up to 3 user definable Beacon Text.

- Reply to the APRS query.


Version 1.7 20000420 Beta 2 Public released

- The sysop interface has be enhanced with several new commands
- Added digipeater loop suppression feature to all generated and repeated frame
- Up to 8 callsign may be defined (also via remote interface) as generic call
  for digipeating
- The generic callsign handled by the flooding algorithm may be modified by
  remote sysop
- The generic callsign handled by the trace algorithm may be modified by
  remote sysop
- The digipeater now reply to the APRS Query
- Added the handling of different SSID of the destination callsign
- Added the handling of directional path depending on SSID of destionation
  callsign
- Up 3 beacon may be defined (with different path, interval and destionation)
- The callsign and alias may be changed by remote sysop.

Version 1.7 20000511 Beta 3

- Changed the flooding algorithm so on the last digied frame there is not call
  substitution. Added ID option for WIDEN-n and TRACEN-n see UIFLDFL and UITRFL
  commands.

- Added BUDLIST command, in BUDLIST sysop can insert up to 8 callsign that will
  be ignored by digipeater.

- Added Kiss pass through interface

- Added UIFLDFL command
        bit 0 make call substitution after the last WIDEn-n digied
        bit 1 insert callsign before WIDEn-n

- Added UITRFL command
        bit 0 make call substitution after the last TRACEn-n digied

- MHEARD command is now available to all users.

- Digipeater reply with the result of sysop authentication process.

- Added command UIDCSB to enable/disable call substitution when repeat frames
  with callsigns defined in UIDIGI

- Fixed a bug in UIDGCFG that prevent to insert the character '[' in a text
  line (beacon text, infotext etc.)

- Added support on all path or callsign command (BDL, BTEXT, BUDLIST, DIGIALIAS,
  DIGICALL, EPATH, NPATH, SPATH, UIDIGI, UIFLOOD, UITRACE, UNPROTO, WPATH) to
  delete all the strings stored using the character '_'
  Eg: NPATH _ <enter> delete the contents of NPATH.

- Added RESTART command to perform a soft reset

- Fixed a bug in startup code that prevent to restart with backup battery


Version 1.8 20000905 Beta 1

- Added indication the indication (*) in heard list if a station was heard
  without digipeater.

- Fixed several bug in UIDGCFG:
   Handling of digipeater alias with < of 6 character was incorrect
   Handling of digipeater password with more 80 char
   Handling of beacon text with more 70 char was incorrect
   Handling of beacon text with = as fist character was incorrect
   Handling of path settings with null value set the default value instead of null

- Now the duplicate checking algorithm store also the checksum of the packets
  excluding the via list. This is a experimental method introduced to remove
  duplication of packet from adiacent digipeater.
  To enable this feature enable the bit 3 of UILOOP value (sum the value 8)

- Fixed bug in TEST command that corrupt the heap

- Enabling the bit 4 of UILOOP value (sum the value 16) the duplication list
  will be check also for all the incoming frame. This avoid duplication of
  frame between digipeater that see the same station and both listen each
  other.
  I have some doubt about this feature in wide digipeaters.
  As in my condition where my station is hearded from 3 wide digipeater that
  serve very large area I want that digipeater repeat my packets each one.


Version 1.8 20000912 Beta 2

- The duplication check suppress flags appear both in position 15 (UI suppress loop
  flag (0~7)) and 19 (Set loop suppression mask) command PARMS.
  Now only on position 15.

- The character ';' is now treated as normal char (previously is considered the
  begin of a line comment) by UIDGCFG so now may be used in beacon text.

- Beacon 1,2,3 interval offset was added to PARMS param list:

  The new parms list is:

  PARMS   [number] [value]

    1 Txdelay (1~255)
    2 PPersistence (1~255)
    3 Slottime (1~255)
    4 Frack (1~15)
    5 Maxframe (1~7)
    6 Retries (0~127)
    7 RespTime 2 (0~6000)
    8 LinkCheck 3 (0~65535)
    9 Digipeater Enable (0~1)
    10 UISSID (0~1)
    11 Beacon 1 interval
    12 Beacon 2 interval
    13 Beacon 3 interval
    14 Beacon 1 offset
    15 Beacon 2 offset
    16 Beacon 3 offset
    17 UI duplicate suppression seconds (0~180)
    18 UI suppress loop flag (0~7)
    19 Reply to APRS query (0~1)
    20 Make call subsititution on UIDIGI Callsigns
    21 Enable UISSID
    22 Set UIFlooding Algorithm options
    23 Set UITrace Algorithm options

- Added BEACONOFFSET <1~3> [value] (Beacon1Offset, Beacon2Offset, Beacon3Offset
  in config file) command to add an offset to the 3 beacon timer interval to
  get more flexibility.

    Eg:

    With:

    Beacon1Interval=300, Beacon2Interval=600, Beacon3Interval=900
    Beacon1Offset=0, Beacon2Offset=0, Beacon3Offset=0

    At  00:05:00  (Beacon1Interval+Beacon1Offset expire) Beacon 1 will be sent
    At  00:10:00  (Beacon1Interval+Beacon1Offset expire and
                  Beacon2Interval+Beacon2Offset expire)
                  Beacon 1 and Beacon 2 will be sent
    At  00:15:00  (Beacon1Interval+Beacon1Offset expire and
                  Beacon3Interval+Beacon3Offset expire)
                  Beacon 1 and Beacon 3 will be sent
    At  00:20:00  (Beacon1Interval+Beacon1Offset expire and
                  Beacon2Interval+Beacon2Offset expire)
                  Beacon 1 and Beacon 2 will be sent
    At  00:25:00  (Beacon1Interval+Beacon1Offset expire) Beacon 1 will be sent
    At  00:30:00  (Beacon1Interval+Beacon1Offset expire and
                  Beacon3Interval+Beacon3Offset expire)
                  Beacon 1 and Beacon 3 will be sent

    With:

    Beacon1Interval=1200, Beacon2Interval=1200, Beacon3Interval=1200
    Beacon1Offset=0, Beacon2Offset=300, Beacon3Offset=600

    At  00:20:00 (Beacon1Interval+Beacon1Offset expire) Beacon 1 will be sent
    At  00:25:00 (Beacon2Interval+Beacon2Offset expire) Beacon 2 will be sent
    At  00:30:00 (Beacon3Interval+Beacon3Offset expire) Beacon 3 will be sent

    At  00:40:00 (Beacon1Interval+Beacon1Offset expire) Beacon 1 will be sent
    At  00:45:00 (Beacon2Interval+Beacon2Offset expire) Beacon 2 will be sent
    At  00:50:00 (Beacon3Interval+Beacon3Offset expire) Beacon 3 will be sent


Version 1.8 20000912 Beta 3

- Fixed the long awaited bug that need pin 22 of SIO at GND voltage level!

- The Loop Packet Suppression Interval Mask has this meaning
   0x01 = Do not repeat frame with source address equal to digipeater call or alias
   0x02 = Do not repeat frame with the digipeater call in the already digipeated via list
   0x04 = Ignore SSID in UIFLOODCALL and UITRACECALL callsign to verify if a frame was already been digipeated
   0x08 = Ingnore via path in the frames comparation
   0x10 = Check the duplication frame list with every incoming packets

-  The duplication check list now has 200 buffer (previous was 128)

-  Added UIPID command and setting of UIDGCFG to define the PID of frame
   processed by UIDIGI (set to 0 to process frames with any PID)


  The new parms list is:

  PARMS   [number] [value]

    1 Txdelay (1~255)
    2 PPersistence (1~255)
    3 Slottime (1~255)
    4 Frack (1~15)
    5 Maxframe (1~7)
    6 Retries (0~127)
    7 RespTime 2 (0~6000)
    8 LinkCheck 3 (0~65535)
    9 Digipeater Enable (0~1)
    10 UISSID (0~1)
    11 Beacon 1 interval
    12 Beacon 2 interval
    13 Beacon 3 interval
    14 Beacon 1 offset
    15 Beacon 2 offset
    16 Beacon 3 offset
    17 UI duplicate suppression seconds (0~180)
    18 UI suppress loop flag (0~7)
    19 Reply to APRS query (0~1)
    20 Make call subsititution on UIDIGI Callsigns
    21 UIPID value
    22 Set UIFlooding Algorithm options
    23 Set UITrace Algorithm options

Version 1.8 20001208 Beta 4

- Fixed bug with UIPID

- Added QUIT command

- The duplication check code was completely rewritten (it is also more simple)
  so now the UILOOP command and LoopSuppression configuration parameter
  have the following meaning:

  The UILOOP value is the result of the binary OR (or more simply the SUM) of
  the follow 2 values:

  0x01 hex = 1 decimal = The digipeater DO NOT repeat incoming frames with ax.25 source address equal to digipeater call or alias

      Eg: with this flag ON a frame like:
      IR3FAL>APRS v RELAY, WIDE, WIDE
      IS NOT digipeater by a digipeater with DIGICALL equal to IR3FAL-0 or DIGIALIAS equal to IR3FAL

  0x02 hex = 2 decimal = The digipeater DO NOT repeat incoming frames with the digipeater call in the already digipeated via list

      Eg: with this flag ON a frame like:
      IW3FQG>APRS v IR3FAL, IR3VIF*, WIDE
      IS NOT digipeater by a digipeater with DIGICALL equal to from IR3FAL-0 or DIGIALIAS equal to IR3FAL


  Please note the changes from the 1.8B3 now the loop Packet Suppression
  Interval Mask max value is 3 all other options was removed

- The duplication check frame list now has 128 slot

- The duplication check now stop (I hope) all kind of duplication!

  Now 2 UIDIGI that both see a station do not duplicate frames.

  Eg:

  STATION1>APRS via RELAY WIDE
  STATION1>APRS via DIGI1* WIDE
  STATION2>APRS via DIGI2* WIDE

  Previously was:

  STATION1>APRS via RELAY WIDE
  STATION1>APRS via DIGI1* WIDE
  STATION2>APRS via DIGI2* WIDE
  STATION1>APRS via DIGI1  DIGI2* <- Duplicate
  STATION2>APRS via DIGI2  DIGI1* <- Duplicate

- Added Preempt Digipeating preprocessing method:

  The digipeater has new 3 command:

  PREEMPT [n] enable/disable preempt digipeating
  PREEMPTCALLS [calls] specify the callsigns that digipeater preempt
  PREEMPTADD [calls] specify the path that digipeater (optionally) add after
             preempt

  The preemption process is a kind of frame preprocessing that remove unused
  digipeater in the path.

  When the digipeater heard a frame like this:

  STATION1>APRS, PATH1, PATH2, PATH3

  and has PREEMPT 1, PREEMPTCALLS PATH3, PREEPTADD (none)

  before processing the frame with the standard digipeating rules changes the
  frame in:

  STATION1>APRS, PATH3

  then process the frame with the standard APRS digipeating rules.

  With the parameter PREEPTADD NEW1

  the frame will be STATION1>APRS, PATH3, NEW1

  Please remember that the preemption process is a preprocessing so if after the
  processing the frame is not to be digipeated UIDIGI don't send any frame.

  Now consider the following example:

  A station (IW3FQG) send a frame like this:

  IW3FQG>APRS,IR3VIF*, IR3VIG, IR3FAL

  IR3FAL is a digipeater that heard this frame. Without preemption it don't
  repeat this frame because first must be digipeated by IR3VIG.

  With preempt ON, and IR3FAL in PREEMPTCALLS, IR3FAL digipeater pre process
  this frame like this:

  IW3FQG>APRS,IR3VIF*,IR3FAL

  and then repeat the frame:

  IW3FQG>APRS,IR3VIF,IR3FAL*

  Optionally with PREEMPTADD the digipeater may add new path so the same frame
  with PREEMPTADD PATH1, PATH2 become:

  IW3FQG>APRS,IR3VIF,IR3FAL*,PATH1,PATH2


- The command PARAM was removed from the code

- The heard station list has now 100 slot

- The indication in heard list for station heard via digipeater is now
  consistent with standard firmware so the station heard via digipeater is
  marked with an asterisk * after the callsign. Previosly the local has the
  asterisk.

- The heard list may be cleared by sysop using command MHEARD _


Version 1.8 20001215 Beta 5

- Fixed B4 bug that prevent remote sysop connection

- Now the quit command is available to all users to disconnect

- Changes in flooding algorithm:
   On a WIDEn-N the last hop is WIDEn-1, the follow WIDEn*
   On TRACEn-N the last hop is TRACEn-1, then follow DIGI*,TRACEn*
   WIDEn-0 and TRACEn-0 is not digipeated

Version 1.8 20001218 Beta 6

- Added support to transmit raw string from a device connected to the serial
  port (GPS, Weather station...)

  The string must be sent to the TNC at correct speed rate and 8N1 format and
  ended by a CR+LF or only CR character.
  The input string is not processed (only the final CR+LF is removed).
  Every time the AUXRATE timer expire the serial port input buffer is
  checked, then if a new string is present it will be transmitted.

  Three new commands are available:

  AUXDEST (AuxDestination)  Set the destination address (Eg: WX)
  AUXPATH (AuxPath)         Set the path
  AUXRATE (AuxRate)         Set the interval

- Added new flags to UIFLDFL command. Now the bit flags have the following
  meaning:

        bit 0 WIDEN-0 will be repeated
        bit 1 insert callsign before WIDEN-n
        bit 2 put has been repeated flag on WIDEN-0
        bit 3 make call substitution on WIDEN-0

        Eg:
        With bit 2 reset:
        IW3FQG>APRS,RELAY,WIDE2-2
        IW3FQG>APRS,DIGI1*,WIDE2-1
        IW3FQG>APRS,DIGI1*,WIDE2

        With bit 2 set
        IW3FQG>APRS,RELAY,WIDE2-2
        IW3FQG>APRS,DIGI1*,WIDE2-1
        IW3FQG>APRS,DIGI1,WIDE2*

- Added new flags to UITRFL command. Now the bit flags have the following
  meaning:

        bit 0 TRACEN-0 will be repeated
        bit 1 put has been repeated flag on TRACEN-0
        bit 2 make call substitution on TRACEN-0

Version 1.8 20020425 Beta 7

- Fixed some bugs in the compiler that generate error in duplication routine

- Fixed bug that cause warm reset when in disconnected mode a CR or SPACE + CR
  or n SPACE + CR was sent to TNC.

- Added DUPLIST command. Dump the duplication check list contents. Use
  DUPLIST _ to  delete the list contents.
  The list is 128 slots long. The comand show the slot number, callsign,
  checksum, time (absolute seconds from reset) and if the frame was sent >
  or received <

- Added UIMSG command. In FRAME where the first char is '~' (UI-VIEW Message)
  the digi does not apply UISSID rules (default 1)

- Added UIONLY comand. Turn on / off the digipeating of only UI frame
  (default 1). This feature allow to use UIDIGI as normal L2 digipeater.

Version 1.8 20020504 Beta 8

- Fixed the bugs that prevent remote sysop connection

- The UIMSG need to be checked by UI-VIEW users

Version 1.8 20020516 Beta 9

- Fixed a bug in UIDGCFG: the value of uionly is not read and uissd = uionly

- Added new flags to PREEMPT command. Now the bit flags have the following
  meaning:

        bit 0 activate Preempt Digipeating preprocessing as in previous release
        bit 1 activate local digipeater preemption (note that PREEMPTCALLS
        & PREEMPTADD parameters are ignored)

  The local digipeater preemption feature was proposed by IK2YDM and IW2FUS
  both members of GAL (Gruppo APRS Lombardia).

  During the past TRACE2001 conference they ask to me to implement a new
  feature on the UIDIGI firmware to allow the use of the firmware in local
  digipeater (digipeater that serve local area like small valley).

  This feature is activated enabling the bit 1 of the PREEMPT (PREEMPT 2)
  comand or the corresponding parameter PREEMPTEDDIGIPEAT.

  In a small valley digipeater they need that when it receive an already
  digipeated frame from a wide digipeater it not propagate the frame as
  a normal APRS digipeater but simply repeat the frame locally.

  Eg:

  IW3FUS-11 is a local digipeater

  When it receive a frame like this:

  IK2YDM>APRS,RELAY,TRACE7-7

  it must repeat as usual the frame:

  IK2YDM>APRS,IW2FUS-11*,TRACE7-7

  if it receive a frame already repeated:

  IK2YDM>APRS,IW2FPO-11*,TRACE7-7
  or
  IK2YDM>APRS,IW2FPO-11*,TRACE7-6
  or
  IK2YDM>APRS,RELAY,DIGI1,DIGI2,DIGI3,DIGI4,DIGI5,DIGI6*,TRACE7-1

  it must repeat a frame like this:

  IK2YDM>APRS,IW2FUS-11*
  
Version 1.8 20020521 Beta 10

- Fixed memory that cause memory leakage in BETA 9

Version 1.8 20020608

- Fixed bug in startup code serial init to avoid problem at startup with
  external  device (eg WX station)


