seriallinkmgr.pp 9.8 KB

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