123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349 |
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
- <HTML>
- <HEAD>
- <META NAME="GENERATOR" Content="Visual Page 1.0 for Windows">
- <META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=iso-8859-1">
- <TITLE>TI-82 Link Protocol Guide - Packet formats</TITLE>
- </HEAD>
- <BODY BGCOLOR="#FFFFE8">
- <P><B>TI-82 Link Protocol Guide v1.0</B> - Packet formats</P>
- <CENTER>
- <H2>
- <HR ALIGN="CENTER">
- Packet Formats</H2>
- </CENTER>
- <P>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></P>
- <P>
- <TABLE BORDER="1" CELLSPACING="0" WIDTH="92%">
- <TR>
- <TH WIDTH="7%" BGCOLOR="#008800"><FONT COLOR="#FFFFFF">Offset</FONT></TH>
- <TH WIDTH="8%" BGCOLOR="#008800"><FONT COLOR="#FFFFFF">Length</FONT></TH>
- <TH WIDTH="85%" BGCOLOR="#008800"><FONT COLOR="#FFFFFF">Description</FONT></TH>
- </TR>
- <TR>
- <TD WIDTH="7%" BGCOLOR="#FFFFFF">0</TD>
- <TD WIDTH="8%" BGCOLOR="#FFFFFF">1 byte</TD>
- <TD WIDTH="85%" BGCOLOR="#FFFFFF">Machine ID byte</TD>
- </TR>
- <TR>
- <TD WIDTH="7%" BGCOLOR="#FFFFFF">1</TD>
- <TD WIDTH="8%" BGCOLOR="#FFFFFF">1 byte</TD>
- <TD WIDTH="85%" BGCOLOR="#FFFFFF">Command ID byte</TD>
- </TR>
- <TR>
- <TD WIDTH="7%" BGCOLOR="#FFFFFF">2</TD>
- <TD WIDTH="8%" BGCOLOR="#FFFFFF">2 bytes</TD>
- <TD WIDTH="85%" BGCOLOR="#FFFFFF">Length of data (see note below)</TD>
- </TR>
- <TR>
- <TD WIDTH="7%" BGCOLOR="#FFFFFF">4</TD>
- <TD WIDTH="8%" BGCOLOR="#FFFFFF"><I>n</I> bytes</TD>
- <TD WIDTH="85%" BGCOLOR="#FFFFFF">Data (if attached)</TD>
- </TR>
- <TR>
- <TD WIDTH="7%" BGCOLOR="#FFFFFF">4+<I>n</I></TD>
- <TD WIDTH="8%" BGCOLOR="#FFFFFF">2 bytes</TD>
- <TD WIDTH="85%" BGCOLOR="#FFFFFF">Checksum (if data is attached)</TD>
- </TR>
- </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><p></P>
- <H4>The Machine ID Byte</H4>
- <P>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%">
- <TR>
- <TH WIDTH="13%" BGCOLOR="#DDDDDD">Value</TH>
- <TH BGCOLOR="#DDDDDD">Description</TH>
- </TR>
- <TR>
- <TD WIDTH="13%">02h</TD>
- <TD>Computer sending TI-82 data</TD>
- </TR>
- <TR>
- <TD WIDTH="13%">82h</TD>
- <TD>TI-82</TD>
- </TR>
- </TABLE>
- <p></P>
- <H4>The Command ID Byte</H4>
- <P>The Command ID byte identifies the request or response that the machine is sending. It can have one of the following
- values:</P>
- <P>
- <TABLE BORDER="1" CELLSPACING="0" WIDTH="66%">
- <TR>
- <TH WIDTH="22%" BGCOLOR="#DDDDDD">Value</TH>
- <TH WIDTH="259" BGCOLOR="#DDDDDD">Description</TH>
- <TH BGCOLOR="#DDDDDD">Data Included</TH>
- </TR>
- <TR>
- <TD WIDTH="22%">06h</TD>
- <TD WIDTH="259">Variable Header (VAR)</TD>
- <TD>A <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 WIDTH="22%">36h</TD>
- <TD WIDTH="259">Skip/Exit (SKIP/EXIT)</TD>
- <TD>A one-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%">6Dh</TD>
- <TD WIDTH="259"><I>Silent</I> - Request Screenshot (SCR)</TD>
- <TD><I>None</I></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 <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 <A HREF="#varheader">variable header</A></TD>
- </TR>
- </TABLE>
- <p></P>
- <P>Rejection codes (used with Command ID 36h) can have one of the following values:</P>
- <P>
- <TABLE BORDER="1" CELLSPACING="0" WIDTH="66%">
- <TR>
- <TH WIDTH="13%" BGCOLOR="#DDDDDD">Value</TH>
- <TH BGCOLOR="#DDDDDD">Description</TH>
- </TR>
- <TR>
- <TD WIDTH="13%">01h</TD>
- <TD>EXIT - The entire transmission has been cancelled.</TD>
- </TR>
- <TR>
- <TD WIDTH="13%">02h</TD>
- <TD>SKIP - The current variable has been skipped.</TD>
- </TR>
- <TR>
- <TD WIDTH="13%">03h</TD>
- <TD>OUT OF MEMORY (silent transmissions only) - The receiving calculator is out of memory.</TD>
- </TR>
- </TABLE>
- <p></P>
- <H4>The Checksum</H4>
- <P>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:</P>
- <PRE>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;
- }</PRE>
- <CENTER>
- <H3>
- <HR ALIGN="CENTER">
- <A NAME="varheader"></A>Variable Headers</H3>
- </CENTER>
- <P>A Variable header contains information about one variable in the calculator.<BR>
- <TABLE BORDER="1" CELLSPACING="0" WIDTH="92%">
- <TR>
- <TH WIDTH="7%" BGCOLOR="#008800"><FONT COLOR="#FFFFFF">Offset</FONT></TH>
- <TH WIDTH="8%" BGCOLOR="#008800"><FONT COLOR="#FFFFFF">Length</FONT></TH>
- <TH WIDTH="85%" BGCOLOR="#008800"><FONT COLOR="#FFFFFF">Description</FONT></TH>
- </TR>
- <TR>
- <TD WIDTH="7%" BGCOLOR="#FFFFFF">0</TD>
- <TD WIDTH="8%" BGCOLOR="#FFFFFF">2 bytes</TD>
- <TD WIDTH="85%" BGCOLOR="#FFFFFF">Size of actual variable data, in bytes</TD>
- </TR>
- <TR>
- <TD WIDTH="7%" BGCOLOR="#FFFFFF">2</TD>
- <TD WIDTH="8%" BGCOLOR="#FFFFFF">1 byte</TD>
- <TD WIDTH="85%" BGCOLOR="#FFFFFF">Type ID Byte (see type ID's below)</TD>
- </TR>
- <TR>
- <TD WIDTH="7%" BGCOLOR="#FFFFFF">3</TD>
- <TD WIDTH="8%" BGCOLOR="#FFFFFF">8 bytes</TD>
- <TD WIDTH="85%" BGCOLOR="#FFFFFF">Variable name, padded on the right with NULL characters (0h). This field is always tokenized.</TD>
- </TR>
- </TABLE>
- <p><I>Note: These bytes only make up the "data" section of the packet.<br>
- </I></p>
- <p><I>Note2:<br>
- - f</I><I>or named lists (not L1..L0), the first token is a single 5D byte,
- followed by up to 7 alphanumeric tokens.<br>
- - for lists (L1..L0), the first token is a 5D byte followed by another byte:
- 00 for L1 to 09 for L0.<br>
- - for matrices ([A]..[E]), the first token is 5C followed by another byte: 00
- for [A] to 04 for [E].<br>
- </I><I>- for equations: there are 30 equations (Y1..Y0 in func mode, X1t..X6t
- and Y1t..Y6t in param mode, r1..r6 in polar mode and Un, Vn in seq mode). The
- varname is 5E10 for Y1 to 5E19 for Y0. The varname is 5E20 for X1t, 5E21 for
- Y1t to 5E2A for X6t, 5E2B for Y6t. The varname is 5E40 for r1 to 5E45 for r6.
- The varname is 5E80 for Un or 5E81 for Vn. <br>
- - for pictures (Pic1.. Pic6), the first token is 60 followed by another byte:
- 00 for Pic1 to 06 for Pic6.<br>
- - for gdbs (GDB1..GDB6), the first token is 61 followed by another byte: 00
- for GDB1 to 09 for GDB6. <br>
- </I> </p>
- <p></P>
- <H4><A NAME="vartypes"></A>The Type ID Byte</H4>
- <P>The type ID byte specifies the type of variable that is being transmitted. It can have one of the following
- values:</P>
- <P>
- <TABLE BORDER="1" CELLSPACING="0" WIDTH="66%">
- <TR>
- <TH WIDTH="13%" BGCOLOR="#DDDDDD">Value</TH>
- <TH BGCOLOR="#DDDDDD">Description (click for variable format)</TH>
- </TR>
- <TR>
- <TD WIDTH="13%">00h</TD>
- <TD><A HREF="vars.html#real">Real Number</A></TD>
- </TR>
- <TR>
- <TD WIDTH="13%">01h</TD>
- <TD><A HREF="vars.html#list">List</A></TD>
- </TR>
- <TR>
- <TD WIDTH="13%">02h</TD>
- <TD><A HREF="vars.html#matrix">Matrix</A></TD>
- </TR>
- <TR>
- <TD WIDTH="13%">03h</TD>
- <TD><A HREF="vars.html#equation">Y-Variable</A></TD>
- </TR>
- <TR>
- <TD WIDTH="13%">05h</TD>
- <TD><A HREF="vars.html#program">Program</A></TD>
- </TR>
- <TR>
- <TD WIDTH="13%">06h</TD>
- <TD>Edit-locked <A HREF="vars.html#program">Program</A></TD>
- </TR>
- <TR>
- <TD WIDTH="13%">07h</TD>
- <TD><A HREF="vars.html#picture">Picture</A></TD>
- </TR>
- <TR>
- <TD WIDTH="13%">08h</TD>
- <TD><A HREF="vars.html#gdb">GDB</A></TD>
- </TR>
- <TR>
- <TD WIDTH="13%">0Bh</TD>
- <TD><A HREF="vars.html#window">Window Settings</A><I> "Window" (See note below)</I></TD>
- </TR>
- <TR>
- <TD WIDTH="13%">0Ch</TD>
- <TD><A HREF="vars.html#window">Saved Window Settings</A><I> "RclWindow" (See note below)</I></TD>
- </TR>
- <TR>
- <TD WIDTH="13%">0Dh</TD>
- <TD><A HREF="vars.html#table">Table Setup</A><I> "TblSet" (See note below)</I></TD>
- </TR>
- <TR>
- <TD WIDTH="13%">0Eh</TD>
- <TD><A HREF="screenshot.html">Screenshot</A> sent with PrintScreen</TD>
- </TR>
- <TR>
- <TD WIDTH="13%">0Fh</TD>
- <TD><A HREF="backup.html">Backup</A> <I>(no meaningful name)</I></TD>
- </TR>
- </TABLE>
- <I>Note - If the Type ID is in the range 0Bh - 0Eh, then the contents of the name field of the header do not matter.</I><p></P>
- <H4><A NAME="backup"></A>Backup Header Format</H4>
- <P>If the type ID byte specifies a backup, the variable header takes the following 9-byte format:</P>
- <P>
- <TABLE BORDER="1" CELLSPACING="0" WIDTH="92%">
- <TR>
- <TH WIDTH="7%" BGCOLOR="#008800"><FONT COLOR="#FFFFFF">Offset</FONT></TH>
- <TH WIDTH="8%" BGCOLOR="#008800"><FONT COLOR="#FFFFFF">Length</FONT></TH>
- <TH WIDTH="85%" BGCOLOR="#008800"><FONT COLOR="#FFFFFF">Description</FONT></TH>
- </TR>
- <TR>
- <TD WIDTH="7%" BGCOLOR="#FFFFFF">0</TD>
- <TD WIDTH="8%" BGCOLOR="#FFFFFF">2 bytes</TD>
- <TD WIDTH="85%" BGCOLOR="#FFFFFF">Size of first backup section, in bytes</TD>
- </TR>
- <TR>
- <TD WIDTH="7%" BGCOLOR="#FFFFFF">2</TD>
- <TD WIDTH="8%" BGCOLOR="#FFFFFF">1 byte</TD>
- <TD WIDTH="85%" BGCOLOR="#FFFFFF">Type ID Byte (1Dh in this case)</TD>
- </TR>
- <TR>
- <TD WIDTH="7%" BGCOLOR="#FFFFFF">3</TD>
- <TD WIDTH="8%" BGCOLOR="#FFFFFF">2 bytes</TD>
- <TD WIDTH="85%" BGCOLOR="#FFFFFF">Size of second backup section, in bytes</TD>
- </TR>
- <TR>
- <TD WIDTH="7%" BGCOLOR="#FFFFFF">5</TD>
- <TD WIDTH="8%" BGCOLOR="#FFFFFF">2 bytes</TD>
-
- <TD WIDTH="85%" BGCOLOR="#FFFFFF">Size of third backup section, in bytes</TD>
- </TR>
- <TR>
- <TD WIDTH="7%" BGCOLOR="#FFFFFF">7</TD>
- <TD WIDTH="8%" BGCOLOR="#FFFFFF">2 bytes</TD>
-
- <TD WIDTH="85%" BGCOLOR="#FFFFFF">Memory address of the second data section
- ?</TD>
- </TR>
- </TABLE>
- <p></P>
- <P>
- <TABLE BORDER="0" CELLSPACING="0" WIDTH="100%">
- <TR>
- <TD WIDTH="32%">
- <P ALIGN="CENTER"><A HREF="cable.html"><IMG SRC="graphics/prevpage.gif" WIDTH="32" HEIGHT="32" ALIGN="BOTTOM" ALT="[previous page]"
- BORDER="2"><BR>
- Link Cables</A>
- </TD>
- <TD WIDTH="34%">
- <P ALIGN="CENTER"><A HREF="index.html"><IMG SRC="graphics/home.gif" WIDTH="32" HEIGHT="32" ALIGN="BOTTOM" ALT="[home]"
- BORDER="2"><BR>
- Table of Contents</A>
- </TD>
- <TD WIDTH="34%">
- <P ALIGN="CENTER"><A HREF="screenshot.html"><IMG SRC="graphics/nextpage.gif" WIDTH="32" HEIGHT="32" ALIGN="BOTTOM"
- ALT="[next page]" BORDER="2"><BR>
- Screenshots</A>
- </TD>
- </TR>
- </TABLE>
- <HR ALIGN="CENTER">
- <I>Site maintained by Romain Liévin (</I><A HREF="mailto:roms@lpg.ticalc.org"><I>roms@lpg.ticalc.org</I></A><I>)
- and Tim Singer (</I><A HREF="mailto:tsinger@gladstone.uoregon.edu"><I>tsinger@gladstone.uoregon.edu</I></A><I>)</I>
- </BODY>
- </HTML>
|