Repository navigation
Remote Protocol
Remote Mode uses a datagram-based packet protocol. Communication is unacknowledged (except for PING), meaning packets are not guaranteed to arrive and are not retried.
The radio's display is 240x320 pixels in a portrait orientation. Implementations should ideally keep the key controls, display mirror and any other connection based controls all on the screen together without having to scroll.
Once Remote Mode is active:
- The radio no longer responds to normal serial commands
- Storage read/write operations are disabled
- Only Remote protocol packets are processed
Begins a remote control session.
Bytes: 0xAA, 0x51
To keep the remote session alive, the HOST should send a ping byte once per second.
Bytes: 0xAA
The RADIO replies with the same byte (0xAA). This keeps both directions active and prevents timeouts.
- If the HOST stops sending pings, the RADIO will terminate Remote Mode after a few seconds.
- The HOST should terminate Remote Mode if ping replies from the RADIO stop arriving.
Terminates Remote Mode and returns the radio to normal operation.
Byte: 0x52
These packets instruct the HOST to update the remote display.
Instructs the HOST to draw a text string.
| Field | Description |
|---|---|
0x55 |
Packet signature |
0x02 |
Packet type |
| 1 byte (unsigned) | X coordinate |
| 2 bytes (unsigned, little-endian) | Y coordinate |
| 1 byte (unsigned) | Font number * |
| 2 bytes (unsigned, little-endian) | Background color (RGB565) |
| 2 bytes (unsigned, little-endian) | Foreground color (RGB565) |
| Variable | Null-terminated ASCII text |
| 1 byte (unsigned) | Additive packet checksum |
Different font sizes and symbols must be implemented. All fonts are monospaced. They are numbered as follows:
- 0 : 8x8 ASCII Font
- 1 : 8x16 ASCII Font
- 2 : 16x16 ASCII Font
- 3 : 16x24 ASCII Font
- 4 : 24x24 ASCII Font
- 5 : 24x32 ASCII Font
- 6 : 16x16 Symbol Font
- See table below
| ASCII Code | Symbol |
|---|---|
| 32 | Regular Space |
| 33 | Padlock |
| 34 | PTT-ID Icon |
| 35 | VOX Icon |
| 36 | Scanning Icon |
| 37 | Pause Icon |
| 38 | UP Chevron |
| 39 | Key Icon |
| 40 | Circular Arrow (Multiwatch) |
| 41 | UP Arrow |
| 42 | DOWN Arrow |
| 43 | LEFT Arrow |
| 44 | RIGHT Arrow |
| 45 | Minus Symbol ( - ) |
| 46 | Plus Symbol ( + ) |
| 47 | Warning Triangle |
| 48 | Cross Band Repeater Icon (XB) |
| 49 | Crescent Moon |
| 50 | Rain Cloud |
| 51 | Music Note |
| 52 | Charging Icon (Lightning Bolt) |
| 53 | Filled Circle |
| 54 | GPS Not Locked Icon |
| 55 | GPS Locked Icon |
| 56 | APRS Icon |
| 57 | APRS Icon With Beacon |
| 58 | Mute Icon |
| 59 | ARPS 999 Mode Icon (No Automatic Beacons) |
| 60 | ARPS 999 Mode Icon (With Automatic Beacons) |
| 61 | Greyed Out Circular Arrow (Multiwatch Temporarily Disabled) |
| 62 | Circular Arrow With G (Groupwatch mode) |
Instructs the HOST to draw a filled rectangle.
| Field | Description |
|---|---|
0x55 |
Packet signature |
0x01 |
Packet type |
| 1 byte (unsigned) | X coordinate |
| 2 bytes (unsigned, little-endian) | Y coordinate |
| 1 byte (unsigned) | Rectangle width |
| 2 bytes (unsigned, little-endian) | Rectangle height |
| 2 bytes (unsigned, little-endian) | Rectangle color (RGB565) |
| 1 byte (unsigned) | Additive packet checksum |
Updates the graphical representation of the radio’s status LED.
| Field | Description |
|---|---|
0x55 |
Packet signature |
0x03 |
Packet type |
| 1 byte (unsigned) | LED status * |
| 1 byte (unsigned) | Additive packet checksum |
- LED Status Values
-
0x00: LED off (black) -
0x01: Red LED -
0x02: Green LED -
0x03: Green + Red (yellow)
-
Implementations should provide controls to mirror the radio's physical keypad. Ideally these controls should be arranged in a similar way to the radio itself.
| Side Buttons | 1st Column | 2nd Column | 3rd Column |
|---|---|---|---|
| PTT | Emerg | Up | |
| PTT | Green | Down | Red |
| S1 | 1 | 2 | 3 |
| S1 | 4 | 5 | 6 |
| S2 | 7 | 8 | 9 |
| S2 | * |
0 | # |
Note that PTT, S1 & S2 span two rows.
Communicating key press and release events is detailed below.
These single-byte packets simulate keypad and button events on the radio. The HOST should send pressed packets when the user presses a control and release packets when the user releases the control. PTT has its own release event packet (0xFE), every other key shares a release event packet (0xFF)
| Value | Action |
|---|---|
0x00 |
Keypad 1 pressed |
0x01 |
Keypad 4 pressed |
0x02 |
Keypad 7 pressed |
0x03 |
* pressed |
0x04 |
Keypad 2 pressed |
0x05 |
Keypad 5 pressed |
0x06 |
Keypad 8 pressed |
0x07 |
Keypad 0 pressed |
0x08 |
Keypad 3 pressed |
0x09 |
Keypad 6 pressed |
0x0A |
Keypad 9 pressed |
0x0B |
# pressed |
0x0C |
GREEN pressed |
0x0D |
UP pressed |
0x0E |
DOWN pressed |
0x0F |
RED pressed |
0x10 |
Side button S1 pressed |
0x11 |
Side button S2 pressed |
0x12 |
Emergency button pressed |
0x13 |
PTT pressed |
0xFE |
PTT released |
0xFF |
Any other key released (except PTT) |
The last byte of all display packets sent by the radio is a checksum. The checksum is calculated by adding every byte of the packet other than the checksum byte itself. The sum is an 8-bit additive checksum, so it wraps at 0xFF. The host should calculate this checksum and check it matches the checksum byte sent at the end of the packet.
Here's the Text Packet that draws the Battery Charging icon.
| Field | Description |
|---|---|
0x55 |
Packet signature = 85 |
0x02 |
Packet type = 2 |
0xB7 |
X coordinate = 183 |
0x27 0x00
|
Y coordinate = 39, 0 |
0x06 |
Font number = 6 |
0x00 0x00
|
Background color black = 0, 0 |
0x1F 0x00
|
Foreground color blue = 31, 0 |
0x34 0x00
|
Charging icon = 52, 0 |
0x8E |
checksum = 142 |
If we manually check this, add them all together
0x55 + 0x02 + 0xB7 + 0x27 + 0x06 + 0x1F + 0x34 = 0x18E
0x18E % 0x100 = 0x8E : CORRECT
Implementations of this protocol should use the above sample packet data to test the checksum functionality is correct.