seriallinkmgr.pp 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. {$MACRO ON}
  2. (******************************************************************************
  3. *
  4. * Copyright (c) 1994-2000 Palm, Inc. or its subsidiaries.
  5. * All rights reserved.
  6. *
  7. * File: SerialLinkMgr.h
  8. *
  9. * Release: Palm OS SDK 4.0 (63220)
  10. *
  11. * Description:
  12. * Source for Serial Link Routines on Pilot
  13. *
  14. * History:
  15. * 2/6/95 replaces DSerial.h from Debugger
  16. *
  17. *****************************************************************************)
  18. unit seriallinkmgr;
  19. interface
  20. uses palmos, coretraps, errorbase;
  21. //*************************************************************************
  22. // Pre-defined, fixxed Socket ID's
  23. //*************************************************************************
  24. const
  25. slkSocketDebugger = 0; // Debugger Socket
  26. slkSocketConsole = 1; // Console Socket
  27. slkSocketRemoteUI = 2; // Remote UI Socket
  28. slkSocketDLP = 3; // Desktop Link Socket
  29. slkSocketFirstDynamic = 4; // first dynamic socket ID
  30. //*************************************************************************
  31. // Packet Types
  32. //*************************************************************************
  33. const
  34. slkPktTypeSystem = 0; // System packets
  35. slkPktTypeUnused1 = 1; // used to be: Connection Manager packets
  36. slkPktTypePAD = 2; // PAD Protocol packets
  37. slkPktTypeLoopBackTest = 3; // Loop-back test packets
  38. //*************************************************************************
  39. //
  40. // Packet structure:
  41. // header
  42. // body (0-dbgMaxPacketBodyLength bytes of data)
  43. // footer
  44. //
  45. //*************************************************************************
  46. //----------------------------------------------------------------------
  47. // packet header
  48. // Fields marked with -> must be filled in by caller
  49. // Fields marked with X will be filled in by SlkSendPacket.
  50. //----------------------------------------------------------------------
  51. type
  52. SlkPktHeaderChecksum = UInt8;
  53. SlkPktHeaderType = record
  54. signature1: UInt16; // X first 2 bytes of signature
  55. signature2: UInt8; // X 3 and final byte of signature
  56. dest: UInt8; // -> destination socket Id
  57. src: UInt8; // -> src socket Id
  58. type_: UInt8; // -> packet type
  59. bodySize: UInt16; // X size of body
  60. transId: UInt8; // -> transaction Id
  61. // if 0 specified, it will be replaced
  62. checksum: SlkPktHeaderChecksum; // X check sum of header
  63. end;
  64. SlkPktHeaderPtr = ^SlkPktHeaderType;
  65. const
  66. slkPktHeaderSignature1 = $BEEF;
  67. slkPktHeaderSignature2 = $ED;
  68. slkPktHeaderSigFirst = $BE; // First byte
  69. slkPktHeaderSigSecond = $EF; // second byte
  70. slkPktHeaderSigThird = $ED; // third byte
  71. //----------------------------------------------------------------------
  72. // packet footer
  73. //----------------------------------------------------------------------
  74. type
  75. SlkPktFooterType = record
  76. crc16: UInt16; // header and body crc
  77. end;
  78. SlkPktFooterPtr = ^SlkPktFooterType;
  79. //*************************************************************************
  80. //
  81. // Write Data Structure passed to SlkSendPacket. This structure
  82. // Tells SlkSendPacket where each of the chunks that comprise the body are
  83. // and the size of each. SlkSendPacket accepts a pointer to an array
  84. // of SlkWriteDataTypes, the last one has a size field of 0.
  85. //
  86. //*************************************************************************
  87. SlkWriteDataType = record
  88. size: UInt16; // last one has size of 0
  89. dataP: Pointer; // pointer to data
  90. end;
  91. SlkWriteDataPtr = ^SlkWriteDataType;
  92. (*******************************************************************
  93. * Serial Link Manager Errors
  94. * the constant slkErrorClass is defined in SystemMgr.h
  95. *******************************************************************)
  96. const
  97. slkErrChecksum = slkErrorClass or 1;
  98. slkErrFormat = slkErrorClass or 2;
  99. slkErrBuffer = slkErrorClass or 3;
  100. slkErrTimeOut = slkErrorClass or 4;
  101. slkErrHandle = slkErrorClass or 5;
  102. slkErrBodyLimit = slkErrorClass or 6;
  103. slkErrTransId = slkErrorClass or 7;
  104. slkErrResponse = slkErrorClass or 8;
  105. slkErrNoDefaultProc = slkErrorClass or 9;
  106. slkErrWrongPacketType = slkErrorClass or 10;
  107. slkErrBadParam = slkErrorClass or 11;
  108. slkErrAlreadyOpen = slkErrorClass or 12;
  109. slkErrOutOfSockets = slkErrorClass or 13;
  110. slkErrSocketNotOpen = slkErrorClass or 14;
  111. slkErrWrongDestSocket = slkErrorClass or 15;
  112. slkErrWrongPktType = slkErrorClass or 16;
  113. slkErrBusy = slkErrorClass or 17; // called while sending a packet
  114. // only returned on single-threaded
  115. // emulation implementations
  116. slkErrNotOpen = slkErrorClass or 18;
  117. (*******************************************************************
  118. * Type definition for a Serial Link Socket Listener
  119. *
  120. *******************************************************************)
  121. type
  122. SlkSocketListenerProcPtr = procedure(headerP: SlkPktHeaderPtr; bodyP: Pointer);
  123. SlkSocketListenType = record
  124. listenerP: SlkSocketListenerProcPtr;
  125. headerBufferP: SlkPktHeaderPtr; // App allocated buffer for header
  126. bodyBufferP: Pointer; // App allocated buffer for body
  127. bodyBufferSize: UInt32;
  128. end;
  129. SlkSocketListenPtr = ^SlkSocketListenType;
  130. (*******************************************************************
  131. * Prototypes
  132. *******************************************************************)
  133. //-------------------------------------------------------------------
  134. // Initializes the Serial Link Manager
  135. //-------------------------------------------------------------------
  136. function SlkOpen: Err; syscall sysTrapSlkOpen;
  137. //-------------------------------------------------------------------
  138. // Close down the Serial Link Manager
  139. //-------------------------------------------------------------------
  140. function SlkClose: Err; syscall sysTrapSlkClose;
  141. //-------------------------------------------------------------------
  142. // Open up another Serial Link socket. The caller must have already
  143. // opened the comm library and set it to the right settings.
  144. //-------------------------------------------------------------------
  145. function SlkOpenSocket(portID: UInt16; var socketP: UInt16; staticSocket: Boolean): Err; syscall sysTrapSlkOpenSocket;
  146. //-------------------------------------------------------------------
  147. // Close up a Serial Link socket.
  148. // Warning: This routine is assymetrical with SlkOpenSocket because it
  149. // WILL CLOSE the library for the caller (unless the refNum is the
  150. // refNum of the debugger comm library).
  151. //-------------------------------------------------------------------
  152. function SlkCloseSocket(socket: UInt16): Err; syscall sysTrapSlkCloseSocket;
  153. //-------------------------------------------------------------------
  154. // Get the library refNum for a particular Socket
  155. //-------------------------------------------------------------------
  156. function SlkSocketPortID(socket: UInt16; var portIDP: UInt16): Err; syscall sysTrapSlkSocketRefNum;
  157. //-------------------------------------------------------------------
  158. // Set the in-packet timeout for a socket
  159. //-------------------------------------------------------------------
  160. function SlkSocketSetTimeout(socket: UInt16; timeout: Int32): Err; syscall sysTrapSlkSocketSetTimeout;
  161. //-------------------------------------------------------------------
  162. // Flush a Socket
  163. //-------------------------------------------------------------------
  164. function SlkFlushSocket(socket: UInt16; timeout: Int32): Err; syscall sysTrapSlkFlushSocket;
  165. //-------------------------------------------------------------------
  166. // Set up a Socket Listener
  167. //-------------------------------------------------------------------
  168. function SlkSetSocketListener(socket: UInt16; socketP: SlkSocketListenPtr): Err; syscall sysTrapSlkSetSocketListener;
  169. //-------------------------------------------------------------------
  170. // Sends a packet's header, body, footer. Stuffs the header's
  171. // magic number and checksum fields. Expects all other
  172. // header fields to be filled in by caller.
  173. // errors returned: dseHandle, dseLine, dseIO, dseParam, dseBodyLimit,
  174. // dseOther
  175. //-------------------------------------------------------------------
  176. function SlkSendPacket(headerP: SlkPktHeaderPtr; writeList: SlkWriteDataPtr): Err; syscall sysTrapSlkSendPacket;
  177. //-------------------------------------------------------------------
  178. // Receives and validates an entire packet.
  179. // errors returned: dseHandle, dseParam, dseLine, dseIO, dseFormat,
  180. // dseChecksum, dseBuffer, dseBodyLimit, dseTimeOut,
  181. // dseOther
  182. //-------------------------------------------------------------------
  183. function SlkReceivePacket(socket: UInt16; andOtherSockets: Boolean;
  184. headerP: SlkPktHeaderPtr; bodyP: Pointer; bodySize: UInt16;
  185. timeout: Int32): Err; syscall sysTrapSlkReceivePacket;
  186. //-------------------------------------------------------------------
  187. // Do Default processing of a System packet
  188. //-------------------------------------------------------------------
  189. function SlkSysPktDefaultResponse(headerP: SlkPktHeaderPtr; bodyP: Pointer): Err; syscall sysTrapSlkSysPktDefaultResponse;
  190. //-------------------------------------------------------------------
  191. // Do RPC call
  192. //-------------------------------------------------------------------
  193. function SlkProcessRPC(headerP: SlkPktHeaderPtr; bodyP: Pointer): Err; syscall sysTrapSlkProcessRPC;
  194. implementation
  195. end.