123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449 |
- <!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
- <html>
- <head>
- <meta http-equiv="Content-Type"
- content="text/html; charset=iso-8859-1">
- <meta name="GENERATOR"
- content="Mozilla/4.7 [en] (X11; I; Linux 2.4.0-test6 i586) [Netscape]">
- <title>TI-89 Link Protocol Guide - Packet formats</title>
- </head>
- <body bgcolor="#ffffe8">
- <b>TI-89 Link Protocol Guide</b> - Packet formats
- <center>
- <h2>
- <hr align="center">Packet Formats</h2>
- </center>
- Texas Instruments calculators always send data and responses in
- self-contained
- "packets."
- <br>
- Packets have the following format:
- <br>
- <i>Note - all 2-byte integers are transmitted little-endian Intel-style
- (least significant byte first).</i>
- <table border="1" cellspacing="0" width="92%">
- <tbody>
- <tr>
- <th bgcolor="#008800" width="7%"><font color="#ffffff">Offset</font></th>
- <th bgcolor="#008800" width="8%"><font color="#ffffff">Length</font></th>
- <th bgcolor="#008800" width="85%"><font color="#ffffff">Description</font></th>
- </tr>
- <tr>
- <td bgcolor="#ffffff" width="7%">0</td>
- <td bgcolor="#ffffff" width="8%">1 byte</td>
- <td bgcolor="#ffffff" width="85%">Machine ID byte</td>
- </tr>
- <tr>
- <td bgcolor="#ffffff" width="7%">1</td>
- <td bgcolor="#ffffff" width="8%">1 byte</td>
- <td bgcolor="#ffffff" width="85%">Command ID byte</td>
- </tr>
- <tr>
- <td bgcolor="#ffffff" width="7%">2</td>
- <td bgcolor="#ffffff" width="8%">2 bytes</td>
- <td bgcolor="#ffffff" width="85%">Length of data (see note below)</td>
- </tr>
- <tr>
- <td bgcolor="#ffffff" width="7%">4</td>
- <td bgcolor="#ffffff" width="8%"><i>n</i> bytes</td>
- <td bgcolor="#ffffff" width="85%">Data (if attached)</td>
- </tr>
- <tr>
- <td bgcolor="#ffffff" width="7%">4+<i>n</i></td>
- <td bgcolor="#ffffff" width="8%">2 bytes</td>
- <td bgcolor="#ffffff" width="85%">Checksum (if data is attached)</td>
- </tr>
- </tbody>
- </table>
- <i>Note - The "Length of data" element may not be equal to zero if the
- packet contains no data. In this case, the Command ID byte will
- indicate
- that the packet contains no data.</i>
- <h4>The Machine ID Byte</h4>
- The Machine ID byte identifies the machine that is sending the packet.
- It can have one of the following values:
- <table border="1" cellspacing="0" width="66%">
- <tbody>
- <tr>
- <th bgcolor="#dddddd" width="13%">Value</th>
- <th bgcolor="#dddddd">Description</th>
- </tr>
- <tr>
- <td width="13%">08h</td>
- <td>Computer sending TI-89/92+/V200 data</td>
- </tr>
- <tr>
- <td width="13%">88h</td>
- <td>TI-92+/V200 to Computer or TI-92+/V200 to TI-92+/V200</td>
- </tr>
- <tr>
- <td width="13%">98h</td>
- <td>TI-89 (Titanium) to Computer or TI89 (Titanium) to TI89
- (Titanium)</td>
- </tr>
- </tbody>
- </table>
- <h4>
- The Command ID Byte</h4>
- The Command ID byte identifies the request or response that the machine
- is sending. It can have one of the following values:
- <table border="1" cellspacing="0" width="66%">
- <tbody>
- <tr>
- <th bgcolor="#dddddd" width="22%">Value</th>
- <th bgcolor="#dddddd" width="259">Description</th>
- <th bgcolor="#dddddd">Data Included</th>
- </tr>
- <tr>
- <td width="22%">06h</td>
- <td width="259">Variable Header (VAR)</td>
- <td>A standard or padded <a href="#varheader">variable header</a></td>
- </tr>
- <tr>
- <td width="22%">09h</td>
- <td width="259">Clear to send (CTS)</td>
- <td><i>None</i></td>
- </tr>
- <tr>
- <td width="22%">15h</td>
- <td width="259">Data packet (DATA)</td>
- <td>Screenshot/variable/backup data</td>
- </tr>
- <tr>
- <td style="vertical-align: top;">2Dh<br>
- </td>
- <td style="vertical-align: top;"><i>Silent</i> - Request Versions
- (VER) </td>
- <td style="vertical-align: top;"><i>None</i></td>
- </tr>
- <tr>
- <td width="22%">36h</td>
- <td width="259">Skip/Exit (SKIP/EXIT)</td>
- <td>A five-byte rejection code (see codes below)</td>
- </tr>
- <tr>
- <td width="22%">56h</td>
- <td width="259">Acknowledge (ACK)</td>
- <td><i>None</i></td>
- </tr>
- <tr>
- <td width="22%">5Ah</td>
- <td width="259">Checksum Error (ERR) <br>
- The previous packet must be sent again.</td>
- <td><i>None</i></td>
- </tr>
- <tr>
- <td width="22%">68h</td>
- <td width="259">Check Ready (RDY)</td>
- <td><i>None</i></td>
- </tr>
- <tr>
- <td width="22%">6Dh</td>
- <td width="259"><i>Silent</i> - Request Screenshot (SCR)</td>
- <td><i>None</i></td>
- </tr>
- <tr>
- <td width="22%">78h</td>
- <td width="259">Continue (CONT)</td>
- <td><i>None</i></td>
- </tr>
- <tr>
- <td width="22%">87h</td>
- <td width="259">Direct command (CMD)</td>
- <td><i>None - all data needed is in the packet header. There is
- no checksum.</i></td>
- </tr>
- <tr>
- <td style="vertical-align: top;">88h<br>
- </td>
- <td style="vertical-align: top;">DeleteVariable (DEL)<br>
- </td>
- <td style="vertical-align: top;">A standard variable header<br>
- </td>
- </tr>
- <tr>
- <td width="22%">92h</td>
- <td width="259">End of Transmission (EOT)</td>
- <td><i>None</i></td>
- </tr>
- <tr>
- <td width="22%">A2h</td>
- <td width="259"><i>Silent</i> - Request Variable (REQ)</td>
- <td>A standard or padded <a href="#varheader">variable header</a></td>
- </tr>
- <tr>
- <td width="22%">C9h</td>
- <td width="259"><i>Silent</i> - Request to Send Variable (RTS)</td>
- <td>A standard or padded <a href="#varheader">variable header</a></td>
- </tr>
- </tbody>
- </table>
- <h4>
- The SKP packet</h4>
- It is made up of 5 bytes: 05 00 XX 00 00 where XX seems to be an error
- ID:<br>
- - 03: can't delete application<br>
- - 07: FLASH app not targeted for this model (01 00 07 00 81)<br>
- - 1E: can't overwrite variable<br>
- - 21: can't delete variable<br>
- - 24: malformed RTS packet<br>
- - 25: invalid varname<br>
- <h4>The Checksum</h4>
- 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.
- <br>
- The checksum is calculated by taking the lower 16 bits of the sum of
- the data bytes, as shown below:
- <pre>int calculateChecksum(unsigned char* data, unsigned short datalength) {<br> unsigned short x, checksum;<br> for(x=0; x<datalength; x++) {<br> checksum+=data[x]; //overflow automatically limits to 16 bits<br> }<br> return checksum;<br>}</pre>
- <center>
- <h3>
- <hr align="center"><a name="varheader"></a>Variable Headers</h3>
- </center>
- A Variable header contains information about one variable in the
- calculator.
- <table border="1" cellspacing="0" width="92%">
- <tbody>
- <tr>
- <th bgcolor="#008800" width="7%"><font color="#ffffff">Offset</font></th>
- <th bgcolor="#008800" width="8%"><font color="#ffffff">Length</font></th>
- <th bgcolor="#008800" width="85%"><font color="#ffffff">Description</font></th>
- </tr>
- <tr>
- <td bgcolor="#ffffff" width="7%">0</td>
- <td bgcolor="#ffffff" width="8%">4 bytes</td>
- <td bgcolor="#ffffff" width="85%">Size of actual variable data,
- in bytes,
- with or without the first four bytes of each data packet.</td>
- </tr>
- <tr>
- <td bgcolor="#ffffff" width="7%">4</td>
- <td bgcolor="#ffffff" width="8%">1 byte</td>
- <td bgcolor="#ffffff" width="85%">Type ID Byte (see type ID's
- below)</td>
- </tr>
- <tr>
- <td bgcolor="#ffffff" width="7%">5</td>
- <td bgcolor="#ffffff" width="8%">1 byte</td>
- <td bgcolor="#ffffff" width="85%">Size of variable name, in
- characters</td>
- </tr>
- <tr>
- <td bgcolor="#ffffff" width="7%">6</td>
- <td bgcolor="#ffffff" width="8%"><i>n</i> bytes</td>
- <td bgcolor="#ffffff" width="85%">Variable name (not
- zero-terminated)</td>
- </tr>
- <tr>
- <td bgcolor="#ffffff" width="7%">6+<i>n</i></td>
- <td bgcolor="#ffffff" width="8%"><span style="font-style: italic;"></span>1
- bytes</td>
- <td bgcolor="#ffffff" width="85%">Extra byte for FLASH transfers<br>
- </td>
- </tr>
- </tbody>
- </table>
- <i>Note: These bytes only make up the "data" section of the packet.</i>
- <h4><a name="vartypes"></a>The Type ID Byte</h4>
- The type ID byte specifies the type of variable that is being
- transmitted.
- It can have one of the following values:
- <table border="1" cellspacing="0" width="66%">
- <tbody>
- <tr>
- <th bgcolor="#dddddd" width="13%">Value</th>
- <th bgcolor="#dddddd">Description (click for variable format)</th>
- </tr>
- <tr>
- <td width="13%">00h</td>
- <td><a href="vars.html#expr">Expression</a></td>
- </tr>
- <tr>
- <td width="13%">04h</td>
- <td><a href="vars.html#list">List</a></td>
- </tr>
- <tr>
- <td width="13%">06h</td>
- <td><a href="vars.html#matrix">Matrix</a></td>
- </tr>
- <tr>
- <td width="13%">0Ah</td>
- <td><a href="vars.html#data">Data</a></td>
- </tr>
- <tr>
- <td width="13%">0Bh</td>
- <td><a href="vars.html#text">Text</a></td>
- </tr>
- <tr>
- <td width="13%">0Ch</td>
- <td><a href="vars.html#string">String</a></td>
- </tr>
- <tr>
- <td width="13%">0Dh</td>
- <td><a href="vars.html#gdb">GDB</a></td>
- </tr>
- <tr>
- <td width="13%">0Eh</td>
- <td><a href="vars.html#figure">Figure</a></td>
- </tr>
- <tr>
- <td width="13%">10h</td>
- <td><a href="vars.html#gdb">Picture</a></td>
- </tr>
- <tr>
- <td width="13%">12h</td>
- <td><a href="vars.html#program">Program</a></td>
- </tr>
- <tr>
- <td width="13%">13h</td>
- <td><a href="vars.html#program">Function</a></td>
- </tr>
- <tr>
- <td width="13%">14h</td>
- <td><a href="vars.html#program">Macro</a></td>
- </tr>
- <tr>
- <td style="vertical-align: top;">15h<br>
- </td>
- <td style="vertical-align: top;">Cause execution of assembly
- block (never encountered)<br>
- </td>
- </tr>
- <tr>
- <td width="13%">18h</td>
- <td>Set/Get calculator <a href="clock.html">date</a></td>
- </tr>
- <tr>
- <td width="13%">1Ah</td>
- <td>List the folder/apps table entries (global/local <a
- href="silent.html">directory list</a>
- request)</td>
- </tr>
- <tr>
- <td width="13%">1Bh</td>
- <td>with 1Ah, list content of a given folder (local dirlist)<br>
- </td>
- </tr>
- <tr>
- <td style="vertical-align: top;">1Ch<br>
- </td>
- <td style="vertical-align: top;">Other file<br>
- </td>
- </tr>
- <tr>
- <td width="13%">1Dh</td>
- <td><a href="backup.html">Backup</a> <i>(See Backup Header
- Format below) (used only in sending mode)</i></td>
- </tr>
- <tr>
- <td width="13%">1Fh</td>
- <td>with 1Ah: list all main folders (global dirlist)</td>
- </tr>
- <tr>
- <td style="vertical-align: top;">20h<br>
- </td>
- <td style="vertical-align: top;">Get a certificate<br>
- </td>
- </tr>
- <tr>
- <td width="13%">21h</td>
- <td>Assembly program<br>
- </td>
- </tr>
- <tr>
- <td width="13%">22h</td>
- <td>Get <a href="flash.html">IDLIST</a></td>
- </tr>
- <tr>
- <td width="13%">23h</td>
- <td>Advanced Mathematic Software: the Operating System of the
- calculator (AMS)</td>
- </tr>
- <tr>
- <td width="13%">24h</td>
- <td>FLASH application (free apps, at least)</td>
- </tr>
- <tr>
- <td style="vertical-align: top;">25h<br>
- </td>
- <td style="vertical-align: top;">Certificate<br>
- </td>
- </tr>
- </tbody>
- </table>
- <i>Note - If the Type ID is 1Ah, 1Bh or 22h, then the name length byte
- has a value of 0 and the name field is empty.</i> Moreover, the upper
- byte
- of the length field (offset 0) is a byte used for filtering file types.
- <h4><a name="backup"></a>Backup Header Format (in sending only)</h4>
- If the type ID byte specifies a backup, the variable header takes the
- following
- format:
- <table border="1" cellspacing="0" width="92%">
- <tbody>
- <tr>
- <th bgcolor="#008800" width="7%"><font color="#ffffff">Offset</font></th>
- <th bgcolor="#008800" width="8%"><font color="#ffffff">Length</font></th>
- <th bgcolor="#008800" width="85%"><font color="#ffffff">Description</font></th>
- </tr>
- <tr>
- <td bgcolor="#ffffff" width="7%">0</td>
- <td bgcolor="#ffffff" width="8%">4 bytes</td>
- <td bgcolor="#ffffff" width="85%">Always {00h, 00h, 00h, 00h}.</td>
- </tr>
- <tr>
- <td bgcolor="#ffffff" width="7%">3</td>
- <td bgcolor="#ffffff" width="8%">1 byte</td>
- <td bgcolor="#ffffff" width="85%">Type ID Byte (1Dh in this case).</td>
- </tr>
- <tr>
- <td bgcolor="#ffffff" width="7%">4</td>
- <td bgcolor="#ffffff" width="8%">1 bytes</td>
- <td bgcolor="#ffffff" width="85%">Length, in characters, of the
- name field.
- Always 04h.</td>
- </tr>
- <tr>
- <td bgcolor="#ffffff" width="7%">5</td>
- <td bgcolor="#ffffff" width="8%">n bytes</td>
- <td bgcolor="#ffffff" width="85%">Name: "main".</td>
- </tr>
- </tbody>
- </table>
- <p>If the header is a request-style header, then the data length field
- (offset 0) contains 4 and the name field (offset 5) contains "main".
- </p>
- <p>A remark: the backup request is only used in sending mode. Indeed,
- the
- TI89 (and also the TI92+) does not have a true backup mode. A backup is
- simply a group of all variables.
- <br>
-
- <br>
-
- <table border="0" cellspacing="0" width="100%">
- <tbody>
- <tr>
- <td width="32%">
- <center><a href="cable.html"><img src="graphics/prevpage.gif"
- alt="[previous page]" align="bottom" border="2" height="32" width="32"></a><br>
- <a href="cable.html">Link Cables</a></center>
- </td>
- <td width="34%">
- <center><a href="index.html"><img src="graphics/home.gif"
- alt="[home]" align="bottom" border="2" height="32" width="32"></a><br>
- <a href="index.html">Table of Contents</a></center>
- </td>
- <td width="34%">
- <center><a href="remote.html"><img src="graphics/nextpage.gif"
- alt="[next page]" align="bottom" border="2" height="32" width="32"></a><br>
- <a href="remote.html">Remote control</a></center>
- </td>
- </tr>
- </tbody>
- </table>
- </p>
- <hr align="center"><i>Site maintained by Romain Liévin (<a
- href="mailto:roms@lpg.ticalc.org">roms@lpg.ticalc.org</a>)
- and Tim Singer (<a href="mailto:tsinger@gladstone.uoregon.edu">tsinger@gladstone.uoregon.edu</a>)</i>
- </body>
- </html>
|