packet.html 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449
  1. <!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type"
  5. content="text/html; charset=iso-8859-1">
  6. <meta name="GENERATOR"
  7. content="Mozilla/4.7 [en] (X11; I; Linux 2.4.0-test6 i586) [Netscape]">
  8. <title>TI-89 Link Protocol Guide - Packet formats</title>
  9. </head>
  10. <body bgcolor="#ffffe8">
  11. <b>TI-89 Link Protocol Guide</b> - Packet formats
  12. <center>
  13. <h2>
  14. <hr align="center">Packet Formats</h2>
  15. </center>
  16. Texas Instruments calculators always send data and responses in
  17. self-contained
  18. "packets."
  19. <br>
  20. Packets have the following format:
  21. <br>
  22. <i>Note - all 2-byte integers are transmitted little-endian Intel-style
  23. (least significant byte first).</i>
  24. <table border="1" cellspacing="0" width="92%">
  25. <tbody>
  26. <tr>
  27. <th bgcolor="#008800" width="7%"><font color="#ffffff">Offset</font></th>
  28. <th bgcolor="#008800" width="8%"><font color="#ffffff">Length</font></th>
  29. <th bgcolor="#008800" width="85%"><font color="#ffffff">Description</font></th>
  30. </tr>
  31. <tr>
  32. <td bgcolor="#ffffff" width="7%">0</td>
  33. <td bgcolor="#ffffff" width="8%">1 byte</td>
  34. <td bgcolor="#ffffff" width="85%">Machine ID byte</td>
  35. </tr>
  36. <tr>
  37. <td bgcolor="#ffffff" width="7%">1</td>
  38. <td bgcolor="#ffffff" width="8%">1 byte</td>
  39. <td bgcolor="#ffffff" width="85%">Command ID byte</td>
  40. </tr>
  41. <tr>
  42. <td bgcolor="#ffffff" width="7%">2</td>
  43. <td bgcolor="#ffffff" width="8%">2 bytes</td>
  44. <td bgcolor="#ffffff" width="85%">Length of data (see note below)</td>
  45. </tr>
  46. <tr>
  47. <td bgcolor="#ffffff" width="7%">4</td>
  48. <td bgcolor="#ffffff" width="8%"><i>n</i> bytes</td>
  49. <td bgcolor="#ffffff" width="85%">Data (if attached)</td>
  50. </tr>
  51. <tr>
  52. <td bgcolor="#ffffff" width="7%">4+<i>n</i></td>
  53. <td bgcolor="#ffffff" width="8%">2 bytes</td>
  54. <td bgcolor="#ffffff" width="85%">Checksum (if data is attached)</td>
  55. </tr>
  56. </tbody>
  57. </table>
  58. <i>Note - The "Length of data" element may not be equal to zero if the
  59. packet contains no data. In this case, the Command ID byte will
  60. indicate
  61. that the packet contains no data.</i>
  62. <h4>The Machine ID Byte</h4>
  63. The Machine ID byte identifies the machine that is sending the packet.
  64. It can have one of the following values:
  65. <table border="1" cellspacing="0" width="66%">
  66. <tbody>
  67. <tr>
  68. <th bgcolor="#dddddd" width="13%">Value</th>
  69. <th bgcolor="#dddddd">Description</th>
  70. </tr>
  71. <tr>
  72. <td width="13%">08h</td>
  73. <td>Computer sending TI-89/92+/V200 data</td>
  74. </tr>
  75. <tr>
  76. <td width="13%">88h</td>
  77. <td>TI-92+/V200 to Computer or TI-92+/V200 to TI-92+/V200</td>
  78. </tr>
  79. <tr>
  80. <td width="13%">98h</td>
  81. <td>TI-89 (Titanium) to Computer or TI89 (Titanium) to TI89
  82. (Titanium)</td>
  83. </tr>
  84. </tbody>
  85. </table>
  86. <h4>
  87. The Command ID Byte</h4>
  88. The Command ID byte identifies the request or response that the machine
  89. is sending. It can have one of the following values:
  90. <table border="1" cellspacing="0" width="66%">
  91. <tbody>
  92. <tr>
  93. <th bgcolor="#dddddd" width="22%">Value</th>
  94. <th bgcolor="#dddddd" width="259">Description</th>
  95. <th bgcolor="#dddddd">Data Included</th>
  96. </tr>
  97. <tr>
  98. <td width="22%">06h</td>
  99. <td width="259">Variable Header (VAR)</td>
  100. <td>A standard or padded <a href="#varheader">variable header</a></td>
  101. </tr>
  102. <tr>
  103. <td width="22%">09h</td>
  104. <td width="259">Clear to send (CTS)</td>
  105. <td><i>None</i></td>
  106. </tr>
  107. <tr>
  108. <td width="22%">15h</td>
  109. <td width="259">Data packet (DATA)</td>
  110. <td>Screenshot/variable/backup data</td>
  111. </tr>
  112. <tr>
  113. <td style="vertical-align: top;">2Dh<br>
  114. </td>
  115. <td style="vertical-align: top;"><i>Silent</i> - Request Versions
  116. (VER) </td>
  117. <td style="vertical-align: top;"><i>None</i></td>
  118. </tr>
  119. <tr>
  120. <td width="22%">36h</td>
  121. <td width="259">Skip/Exit (SKIP/EXIT)</td>
  122. <td>A five-byte rejection code (see codes below)</td>
  123. </tr>
  124. <tr>
  125. <td width="22%">56h</td>
  126. <td width="259">Acknowledge (ACK)</td>
  127. <td><i>None</i></td>
  128. </tr>
  129. <tr>
  130. <td width="22%">5Ah</td>
  131. <td width="259">Checksum Error (ERR)&nbsp; <br>
  132. The previous packet must be sent again.</td>
  133. <td><i>None</i></td>
  134. </tr>
  135. <tr>
  136. <td width="22%">68h</td>
  137. <td width="259">Check Ready (RDY)</td>
  138. <td><i>None</i></td>
  139. </tr>
  140. <tr>
  141. <td width="22%">6Dh</td>
  142. <td width="259"><i>Silent</i> - Request Screenshot (SCR)</td>
  143. <td><i>None</i></td>
  144. </tr>
  145. <tr>
  146. <td width="22%">78h</td>
  147. <td width="259">Continue (CONT)</td>
  148. <td><i>None</i></td>
  149. </tr>
  150. <tr>
  151. <td width="22%">87h</td>
  152. <td width="259">Direct command (CMD)</td>
  153. <td><i>None - all data needed is in the packet header. There is
  154. no checksum.</i></td>
  155. </tr>
  156. <tr>
  157. <td style="vertical-align: top;">88h<br>
  158. </td>
  159. <td style="vertical-align: top;">DeleteVariable (DEL)<br>
  160. </td>
  161. <td style="vertical-align: top;">A standard variable header<br>
  162. </td>
  163. </tr>
  164. <tr>
  165. <td width="22%">92h</td>
  166. <td width="259">End of Transmission (EOT)</td>
  167. <td><i>None</i></td>
  168. </tr>
  169. <tr>
  170. <td width="22%">A2h</td>
  171. <td width="259"><i>Silent</i> - Request Variable (REQ)</td>
  172. <td>A standard or padded <a href="#varheader">variable header</a></td>
  173. </tr>
  174. <tr>
  175. <td width="22%">C9h</td>
  176. <td width="259"><i>Silent</i> - Request to Send Variable (RTS)</td>
  177. <td>A standard or padded <a href="#varheader">variable header</a></td>
  178. </tr>
  179. </tbody>
  180. </table>
  181. <h4>
  182. The SKP packet</h4>
  183. It is made up of 5 bytes: 05 00 XX 00 00 where XX seems to be an error
  184. ID:<br>
  185. - 03: can't delete application<br>
  186. - 07: FLASH app not targeted for this model (01 00 07 00 81)<br>
  187. - 1E: can't overwrite variable<br>
  188. - 21: can't delete variable<br>
  189. - 24: malformed RTS packet<br>
  190. - 25: invalid varname<br>
  191. <h4>The Checksum</h4>
  192. The checksum is a 16-bit value used to verify the integrity of the data
  193. in the packet. It only present if data is present.
  194. <br>
  195. The checksum is calculated by taking the lower 16 bits of the sum of
  196. the data bytes, as shown below:
  197. <pre>int calculateChecksum(unsigned char* data, unsigned short datalength) {<br>&nbsp;&nbsp; unsigned short x, checksum;<br>&nbsp;&nbsp; for(x=0; x&lt;datalength; x++) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; checksum+=data[x];&nbsp; //overflow automatically limits to 16 bits<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp; return checksum;<br>}</pre>
  198. <center>
  199. <h3>
  200. <hr align="center"><a name="varheader"></a>Variable Headers</h3>
  201. </center>
  202. A Variable header contains information about one variable in the
  203. calculator.
  204. <table border="1" cellspacing="0" width="92%">
  205. <tbody>
  206. <tr>
  207. <th bgcolor="#008800" width="7%"><font color="#ffffff">Offset</font></th>
  208. <th bgcolor="#008800" width="8%"><font color="#ffffff">Length</font></th>
  209. <th bgcolor="#008800" width="85%"><font color="#ffffff">Description</font></th>
  210. </tr>
  211. <tr>
  212. <td bgcolor="#ffffff" width="7%">0</td>
  213. <td bgcolor="#ffffff" width="8%">4 bytes</td>
  214. <td bgcolor="#ffffff" width="85%">Size of actual variable data,
  215. in bytes,
  216. with or without the first four bytes of each data packet.</td>
  217. </tr>
  218. <tr>
  219. <td bgcolor="#ffffff" width="7%">4</td>
  220. <td bgcolor="#ffffff" width="8%">1 byte</td>
  221. <td bgcolor="#ffffff" width="85%">Type ID Byte (see type ID's
  222. below)</td>
  223. </tr>
  224. <tr>
  225. <td bgcolor="#ffffff" width="7%">5</td>
  226. <td bgcolor="#ffffff" width="8%">1 byte</td>
  227. <td bgcolor="#ffffff" width="85%">Size of variable name, in
  228. characters</td>
  229. </tr>
  230. <tr>
  231. <td bgcolor="#ffffff" width="7%">6</td>
  232. <td bgcolor="#ffffff" width="8%"><i>n</i> bytes</td>
  233. <td bgcolor="#ffffff" width="85%">Variable name (not
  234. zero-terminated)</td>
  235. </tr>
  236. <tr>
  237. <td bgcolor="#ffffff" width="7%">6+<i>n</i></td>
  238. <td bgcolor="#ffffff" width="8%"><span style="font-style: italic;"></span>1
  239. bytes</td>
  240. <td bgcolor="#ffffff" width="85%">Extra byte for FLASH transfers<br>
  241. </td>
  242. </tr>
  243. </tbody>
  244. </table>
  245. <i>Note: These bytes only make up the "data" section of the packet.</i>
  246. <h4><a name="vartypes"></a>The Type ID Byte</h4>
  247. The type ID byte specifies the type of variable that is being
  248. transmitted.
  249. It can have one of the following values:
  250. <table border="1" cellspacing="0" width="66%">
  251. <tbody>
  252. <tr>
  253. <th bgcolor="#dddddd" width="13%">Value</th>
  254. <th bgcolor="#dddddd">Description (click for variable format)</th>
  255. </tr>
  256. <tr>
  257. <td width="13%">00h</td>
  258. <td><a href="vars.html#expr">Expression</a></td>
  259. </tr>
  260. <tr>
  261. <td width="13%">04h</td>
  262. <td><a href="vars.html#list">List</a></td>
  263. </tr>
  264. <tr>
  265. <td width="13%">06h</td>
  266. <td><a href="vars.html#matrix">Matrix</a></td>
  267. </tr>
  268. <tr>
  269. <td width="13%">0Ah</td>
  270. <td><a href="vars.html#data">Data</a></td>
  271. </tr>
  272. <tr>
  273. <td width="13%">0Bh</td>
  274. <td><a href="vars.html#text">Text</a></td>
  275. </tr>
  276. <tr>
  277. <td width="13%">0Ch</td>
  278. <td><a href="vars.html#string">String</a></td>
  279. </tr>
  280. <tr>
  281. <td width="13%">0Dh</td>
  282. <td><a href="vars.html#gdb">GDB</a></td>
  283. </tr>
  284. <tr>
  285. <td width="13%">0Eh</td>
  286. <td><a href="vars.html#figure">Figure</a></td>
  287. </tr>
  288. <tr>
  289. <td width="13%">10h</td>
  290. <td><a href="vars.html#gdb">Picture</a></td>
  291. </tr>
  292. <tr>
  293. <td width="13%">12h</td>
  294. <td><a href="vars.html#program">Program</a></td>
  295. </tr>
  296. <tr>
  297. <td width="13%">13h</td>
  298. <td><a href="vars.html#program">Function</a></td>
  299. </tr>
  300. <tr>
  301. <td width="13%">14h</td>
  302. <td><a href="vars.html#program">Macro</a></td>
  303. </tr>
  304. <tr>
  305. <td style="vertical-align: top;">15h<br>
  306. </td>
  307. <td style="vertical-align: top;">Cause execution of assembly
  308. block (never encountered)<br>
  309. </td>
  310. </tr>
  311. <tr>
  312. <td width="13%">18h</td>
  313. <td>Set/Get calculator <a href="clock.html">date</a></td>
  314. </tr>
  315. <tr>
  316. <td width="13%">1Ah</td>
  317. <td>List the folder/apps table entries (global/local <a
  318. href="silent.html">directory list</a>
  319. request)</td>
  320. </tr>
  321. <tr>
  322. <td width="13%">1Bh</td>
  323. <td>with 1Ah, list content of a given folder (local dirlist)<br>
  324. </td>
  325. </tr>
  326. <tr>
  327. <td style="vertical-align: top;">1Ch<br>
  328. </td>
  329. <td style="vertical-align: top;">Other file<br>
  330. </td>
  331. </tr>
  332. <tr>
  333. <td width="13%">1Dh</td>
  334. <td><a href="backup.html">Backup</a> <i>(See Backup Header
  335. Format below) (used only in sending mode)</i></td>
  336. </tr>
  337. <tr>
  338. <td width="13%">1Fh</td>
  339. <td>with 1Ah: list all main folders (global dirlist)</td>
  340. </tr>
  341. <tr>
  342. <td style="vertical-align: top;">20h<br>
  343. </td>
  344. <td style="vertical-align: top;">Get a certificate<br>
  345. </td>
  346. </tr>
  347. <tr>
  348. <td width="13%">21h</td>
  349. <td>Assembly program<br>
  350. </td>
  351. </tr>
  352. <tr>
  353. <td width="13%">22h</td>
  354. <td>Get <a href="flash.html">IDLIST</a></td>
  355. </tr>
  356. <tr>
  357. <td width="13%">23h</td>
  358. <td>Advanced Mathematic Software: the Operating System of the
  359. calculator (AMS)</td>
  360. </tr>
  361. <tr>
  362. <td width="13%">24h</td>
  363. <td>FLASH application (free apps, at least)</td>
  364. </tr>
  365. <tr>
  366. <td style="vertical-align: top;">25h<br>
  367. </td>
  368. <td style="vertical-align: top;">Certificate<br>
  369. </td>
  370. </tr>
  371. </tbody>
  372. </table>
  373. <i>Note - If the Type ID is 1Ah, 1Bh or 22h, then the name length byte
  374. has a value of 0 and the name field is empty.</i> Moreover, the upper
  375. byte
  376. of the length field (offset 0) is a byte used for filtering file types.
  377. <h4><a name="backup"></a>Backup Header Format (in sending only)</h4>
  378. If the type ID byte specifies a backup, the variable header takes the
  379. following
  380. format:
  381. <table border="1" cellspacing="0" width="92%">
  382. <tbody>
  383. <tr>
  384. <th bgcolor="#008800" width="7%"><font color="#ffffff">Offset</font></th>
  385. <th bgcolor="#008800" width="8%"><font color="#ffffff">Length</font></th>
  386. <th bgcolor="#008800" width="85%"><font color="#ffffff">Description</font></th>
  387. </tr>
  388. <tr>
  389. <td bgcolor="#ffffff" width="7%">0</td>
  390. <td bgcolor="#ffffff" width="8%">4 bytes</td>
  391. <td bgcolor="#ffffff" width="85%">Always {00h, 00h, 00h, 00h}.</td>
  392. </tr>
  393. <tr>
  394. <td bgcolor="#ffffff" width="7%">3</td>
  395. <td bgcolor="#ffffff" width="8%">1 byte</td>
  396. <td bgcolor="#ffffff" width="85%">Type ID Byte (1Dh in this case).</td>
  397. </tr>
  398. <tr>
  399. <td bgcolor="#ffffff" width="7%">4</td>
  400. <td bgcolor="#ffffff" width="8%">1 bytes</td>
  401. <td bgcolor="#ffffff" width="85%">Length, in characters, of the
  402. name field.
  403. Always 04h.</td>
  404. </tr>
  405. <tr>
  406. <td bgcolor="#ffffff" width="7%">5</td>
  407. <td bgcolor="#ffffff" width="8%">n bytes</td>
  408. <td bgcolor="#ffffff" width="85%">Name: "main".</td>
  409. </tr>
  410. </tbody>
  411. </table>
  412. <p>If the header is a request-style header, then the data length field
  413. (offset 0) contains 4 and the name field (offset 5) contains "main".
  414. </p>
  415. <p>A remark: the backup request is only used in sending mode. Indeed,
  416. the
  417. TI89 (and also the TI92+) does not have a true backup mode. A backup is
  418. simply a group of all variables.
  419. <br>
  420. &nbsp;
  421. <br>
  422. &nbsp;
  423. <table border="0" cellspacing="0" width="100%">
  424. <tbody>
  425. <tr>
  426. <td width="32%">
  427. <center><a href="cable.html"><img src="graphics/prevpage.gif"
  428. alt="[previous page]" align="bottom" border="2" height="32" width="32"></a><br>
  429. <a href="cable.html">Link Cables</a></center>
  430. </td>
  431. <td width="34%">
  432. <center><a href="index.html"><img src="graphics/home.gif"
  433. alt="[home]" align="bottom" border="2" height="32" width="32"></a><br>
  434. <a href="index.html">Table of Contents</a></center>
  435. </td>
  436. <td width="34%">
  437. <center><a href="remote.html"><img src="graphics/nextpage.gif"
  438. alt="[next page]" align="bottom" border="2" height="32" width="32"></a><br>
  439. <a href="remote.html">Remote control</a></center>
  440. </td>
  441. </tr>
  442. </tbody>
  443. </table>
  444. </p>
  445. <hr align="center"><i>Site maintained by Romain Li&eacute;vin (<a
  446. href="mailto:roms@lpg.ticalc.org">roms@lpg.ticalc.org</a>)
  447. and Tim Singer (<a href="mailto:tsinger@gladstone.uoregon.edu">tsinger@gladstone.uoregon.edu</a>)</i>
  448. </body>
  449. </html>