Reception Confirmation (ACK)
When the server receives a report from the device, it must respond with an ACK (acknowledge) to confirm correct reception.
📋 ACK Format
>ACK;#NNNN;ID=XXXX;*CC<| Field | Description |
|---|---|
ACK | Confirmation command |
#NNNN | Message number of the received report (hex) |
ID=XXXX | Device ID |
*CC | Checksum |
💬 Complete Example
1. Device sends report
>RCY00020205000000-2778467-06425658000000-000090;DFFFFFF;IGN1;IN00;XP00;#0021;ID=1234;*59<2. Server responds ACK
>ACK;#0021;ID=1234;*72<The #0021 must match exactly with the report message number.
📱 Simplified ACK (SMS)
To respond from a mobile phone to an SMS report, the short version can be used:
>ACK;#0021<Without ID or checksum, but maintains the message number.
🔁 SAK — ACK Alias
SAK is a full alias of ACK: in the parser’s command table, both tokens point to the same handler (HdlrACK) and produce exactly the same effect, with the same format and the same variants (full and short via SMS).
>SAK;#0021;ID=1234;*72<⚠️ Behavior without ACK
If the device doesn’t receive ACK:
| Step | Action |
|---|---|
| 1 | Stores the report in buffer (BlackBox) |
| 2 | Retries sending |
| 3 | After several attempts, switches to secondary IP |
🔄 Commands with Message Number
The server can send commands with message number (range 0x8000 - 0xFFFF) to receive confirmation from the device.
Example
Server sends:
>SSSXP0011;#8001;ID=1234;*6A<Device responds:
>RSSXP0011;#8001;ID=1234;*6B<The response with #8001 confirms that the command was executed.
🔢 Message Number Ranges
| Range | Origin | Use |
|---|---|---|
0x0000 - 0x7FFF | Device → Server | Automatic reports |
0x8000 - 0xFFFF | Server → Device | Commands with confirmation |
🧮 Checksum Calculation
The checksum (*CC) is calculated by performing XOR of all characters from > to * (not including the *).
👉 Use the Checksum Analyzer to calculate and verify checksums.