TI-83+ Link Protocol Guide v1.0 - Packet formats
Texas Instruments calculators always send data and responses in
self-contained "packets."
Packets have the following format:
Note - all 2-byte integers are transmitted little-endian Intel-style
(least significant byte first).
Offset | Length | Description |
---|---|---|
0 | 1 byte | Machine ID byte |
1 | 1 byte | Command ID byte |
2 | 2 bytes | Length of data (see note below) |
4 | n bytes | Data (if attached) |
4+n | 2 bytes | Checksum (if data is attached) |
The Machine ID byte identifies the machine that is sending the packet. It can have one of the following values:
Value | Description |
---|---|
02h | Computer sending TI-82 data |
03h | Computer sending TI-83 data |
23h | Computer sending TI-83+/TI-84+ data |
73h | TI-83+ or TI-84+ |
82h | TI-82 |
83h | TI-83 |
The Command ID byte identifies the request or response that the machine is sending. It can have one of the following values:
Value | Description | Data Included |
---|---|---|
06h | Variable Header (VAR) | A fixed-length, NUL padded variable header |
09h | Clear to send (CTS) | None |
15h | Data packet (DATA) | Screenshot/variable/backup data |
2Dh |
Silent - Request Versions (VER) | None |
36h | Skip/Exit (SKIP/EXIT) | A five-byte rejection code (see codes below) |
56h | Acknowledge (ACK) | None |
5Ah | Checksum Error (ERR) The previous packet must be sent again. |
None |
68h | Check ready (RDY) | None |
6Dh | Silent - Request Screenshot (SCR) | None |
88h |
Silent - Delete Variable (DEL) | A fixed-length, NUL padded variable header |
92h | End of Transmission (EOT) | None |
A2h | Silent - Request Variable (REQ) | A fixed-length, NUL padded variable header |
C9h | Silent - Request to Send Variable (RTS) | A fixed-length, NUL padded variable header |
Rejection codes (used with Command ID 36h) can have one of the following values:
Value | Description |
---|---|
01h | EXIT - The entire transmission has been cancelled. |
02h | SKIP - The current variable has been skipped. |
03h | OUT OF MEMORY (silent transmissions only) - The receiving calculator is out of memory. |
The checksum is a 16-bit value used to verify the integrity of the
data in the packet. It only present if data is present.
The checksum is calculated by taking the lower 16 bits of the sum of
the data bytes, as shown below:
int calculateChecksum(unsigned char* data, unsigned short datalength) {
unsigned short x, checksum;
for(x=0; x<datalength; x++) {
checksum+=data[x]; //overflow automatically limits to 16 bits
}
return checksum;
}
A Variable header contains information
about one variable in the calculator.
Offset | Length | Description |
---|---|---|
0 | 2 bytes | Size of actual variable data, in bytes |
2 | 1 byte | Type ID Byte (see type ID's below) |
3 | 8 bytes | Variable name, padded on the right with NULL characters (0h). This field is always tokenized. Not used for ID list. |
11 | 1 byte | Version - Always has a value of 0h. |
12 | 1 byte | Type ID Byte 2 - Always has a
value of 0h. Note: bit 7 is set if archived. Not used for getting
certificates. |
The type ID byte specifies the type of variable that is being transmitted. It can have one of the following values:
Value | Description (click for variable format) |
---|---|
00h | Real Number |
01h | Real List |
02h | Matrix |
03h | Y-Variable |
04h | String |
05h | Program |
06h | Edit-locked Program |
07h | Picture |
08h | GDB |
0Bh | Window Settings (See note below) |
0Ch | Complex Number |
0Dh | Complex List |
0Fh | Window Settings (See note below) |
10h | Saved Window Settings (See note below) |
11h | Table Setup (See note below) |
13h | Backup |
14h |
Used to delete a FLASH
application |
15h | Application Variable |
17h | Group Variable (only found on TI83+) |
19h | Directory (See note below) - only used when requesting a directory |
23h | FLASH Operating System |
24h | FLASH Application |
26h | ID list |
27h | Get Certificate |
29h |
Clock |
If the type ID byte specifies a backup, the variable header takes the following 9-byte format :
Offset | Length | Description |
---|---|---|
0 | 2 bytes | Size of first backup section (flags area), in bytes |
2 | 1 byte | Type ID Byte (13h in this case) |
3 | 2 bytes | Size of second backup section (data area), in bytes |
5 | 2 bytes | Size of third backup section (symbol area), in bytes |
7 | 2 bytes | Start User Area Address |
If the type ID byte is in the range 22...28h, the variable header takes the following 10-byte format :
Offset | Length | Description |
---|---|---|
0 | 2 bytes | Size of actual data, in bytes (LSB). |
2 | 1 byte | Type ID Byte (see type ID's below) |
3 | 2 bytes | Size of actual data, in bytes
(MSB). Usually 128/256 bytes. |
5 | 1 byte | Flag - Always has a value of 0h but bit 7 is set if archived (*). |
6 | 2 bytes | FLASH offset |
8 | 2 bytes | FLASH page |