Advanced, XL Family

Registers

Following is a list of registers located within the radio's RAM and EEPROM memory spaces:

uint8_t AckTimeout

Number of Ack response scans to make after transmitting an AckData packet. After the timeout, the radio resumes normal scans for incoming packets.

uint8_t Attempts

Number of transmission attempts to make before giving up when sending an AckData packet.

uint8_t BackOff

The BackOff mask adds randomness into AckData retries. Increasing this value is crucial in asynchronous systems where two radios could try talking to each other at the exact same time.

BackOff should be set to one of eight values: 0b00000000, 0b00000001, 0b00000011, 0b00000111, ... 0b11111111. This will add a random number (0 - BackOff) of ticks (16.4ms/tick) to the HoldOff delay.

uint16_t BaudDiv

BaudDiv is the baud rate divisor used to configure the radio's UART. Given a desired baud rate, you can calculate the divisor:

BaudDiv = ( 2,000,000 / Baud ) - 1

For 57.6k baud, use a BaudDiv of 34. For 9600 baud, use 207.

char CalInit[3]

CalInit is the initials of the last technician to calibrate the radio.

int8_t CalOffset

Factory set RSSI calibration offset.

uint32_t CalTS

CalTS is a Linux-format timestamp of the last time CalOffset was updated. There is no real-time clock onboard the radio, so this field is not automatically updated. It is up to the calibration application to upload a new timestamp when a calibration is performed.

uint16_t ChanFreqs[128]

Frequency of each channel in multiples of 100kHz.

uint8_t CntryCode

CntryCode is the radio's country code.

uint32_t CryptSig

CryptSig is the encryption signature of the encryption key currently loaded in Flash. This signature is not automatically calculated by the radio and must be uploaded by the user application that generates the encryption key.

uint8_t DestLoc

The radio's destination location code while in transparent mode. Formatted as:

struct LocnCode
{
    uint8_t Group;
    uint8_t Addr;
}

Where Group is 0-127 and Addr is 0-255.

uint8_t Groups[2]

Two groups to connect when Relay is set to 1. Both groups should be in the range 1-127.

uint8_t HoldOff

Number of clock ticks (16.4ms/tick) to wait between transmission attempts of AckData packets.

uint8_t JumpSeed

JumpSeed is a random number seed used to calculate JumpTable.

uint8_t JumpTable[128]

JumpTable is a zero-based channel jump table. It is formatted so that each individual entry tells which channel is "next". For example, if the channel sequence starts with 120750, then:

JumpTable[0]  = 19
JumpTable[19] =  6
JumpTable[6]  = 49

uint8_t Loyalty

Number of clock ticks (16.4ms/tick) after a transmission that two radios should "remain loyal" to each other. During the loyalty period, transmissions between the two radios are expedited, but transmissions with other radios are delayed.

Larger Loyalty values can increase communication rates between radios if you tend to send a lot of data packets to a single location. Smaller values (or zero) are better if you change radio targets frequently.

uint8_t MinCTSDis

The minimum amount of time (in clock ticks of 64us/tick) that a radio will de-assert CTS#. This value can safely be set to zero when interrupts are not used to control hardware handshaking.

Non-zero values are important when connecting the radio to a PC, because PCs can lose serial data when too many serial interrupts are encountered.

uint8_t MissSeq

The maximum time (in clock ticks of 16.4ms/tick) that a radio will wait before giving up on a missing sequence number. This value is ignored when you set SendInOrder to zero.

uint8_t NextSeqNum

Next sequence number to use in transparent mode. It is important to be able to control the next sequence number when using the guaranteed-delivery mode.

For example, let's suppose you send a packet with sequence #0 to radio A, you switch tagets, and then some packets to radio B. If you were to switch back to radio A again, you will need to send a packet with sequence #1 next. Radio A is not aware of the packets you may have sent to radio B, and so it is still expecting the next packet in sequence.

uint8_t NumChans

Number of channels to use.

uint16_t OnChanTime

The maximum amount of time (in 10us increments) that a radio may transmit on a single channel before jumping to a new channel.

uint16_t PreRepeats[3]

The number of times to repeat the transmission preamble when starting a new transmission:

  • 0 - standard packets
  • 1 - final transmission attempt
  • 2 - continuation/loyal/ack packets

Smaller numbers are faster, but they also increase the chance that the listener will miss the packet completely.

uint8_t QuietTime

Number of channels to scan after a transmission before a new transmission can begin. Increasing this register puts gaps between transmissions and can decrease the chance of missing a NoAckData reply when you have transmissions that hog the bandwidth. Set to zero to maximize one-directional throughput.

uint32_t SerNum

SerNum is the radio's serial number. The device serial number is printed on a decal on the radio.

struct LocnCode SourceLoc

The radio's location code. Formatted as:

struct LocnCode
{
    uint8_t Group;
    uint8_t Addr;
}

Where Group is 1-127 and Addr is 1-255. Any packets received but not targetted at this location will be ignored.

uint16_t Stalemate

The Stalemate counter is a watchdog. You should not need to adjust this register.

uint32_t UpdateTS

UpdateTS is a Linux-format timestamp of the last change made to EEPROM. There is no real-time clock onboard the radio, so this field is not automatically updated. It is up to the user application to upload a new timestamp when changes are made.

uint8_t UserFlags1

General options in bit fields:

Bits Field Description
7 DontAck 0 = send Ack packets
1 = don't send Ack packets
6 AcceptUnEnc 0 = discard unencrypted packets
1 = keep unencrypted packets
5 RelaysPrsnt 0 = no relays are present in the system
1 = leave time for relays to retransmit packets
4 StartInCmd 0 = start in transparent mode
1 = start in mixed-on mode
3 SendInOrder 0 = do not enforce ordering
1 = keep packets in order
2 Relay 0 = relaying disabled
1 = encrypt relaying between Groups
1 Encrypt 0 = do not encrypt data packets before transmission
1 = encrypt packets
0 UseAcks 0 = send NoAckData packets in transparent mode
1 = send AckData packets

uint8_t UserFlags2

Serial port configuration in bit fields:

Bits Field Description
7:6 Reserved Set to 00
5:4 UPM 00 = no parity
10 = even parity
11 = odd parity
3 USBS 0 = 1 stop bit
1 = 2 stop bits
2:1 UCSZ 00 = 5 bit data (transparent mode)
01 = 6 bit data (transparent mode)
10 = 7 bit data (transparent mode)
11 = 8 bit data (transparent mode)

uint8_t UserSpace[384]

UserSpace is an undefined block of EEPROM. You may use this space as you wish in your user application.