3
(******************************************************************************
5
* Copyright (c) 1994-2000 Palm, Inc. or its subsidiaries.
8
* File: SerialLinkMgr.h
10
* Release: Palm OS SDK 4.0 (63220)
13
* Source for Serial Link Routines on Pilot
16
* 2/6/95 replaces DSerial.h from Debugger
18
*****************************************************************************)
24
uses palmos, coretraps, errorbase;
26
//*************************************************************************
27
// Pre-defined, fixxed Socket ID's
28
//*************************************************************************
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
37
//*************************************************************************
39
//*************************************************************************
42
slkPktTypeSystem = 0; // System packets
43
slkPktTypeUnused1 = 1; // used to be: Connection Manager packets
44
slkPktTypePAD = 2; // PAD Protocol packets
45
slkPktTypeLoopBackTest = 3; // Loop-back test packets
47
//*************************************************************************
51
// body (0-dbgMaxPacketBodyLength bytes of data)
54
//*************************************************************************
56
//----------------------------------------------------------------------
58
// Fields marked with -> must be filled in by caller
59
// Fields marked with X will be filled in by SlkSendPacket.
60
//----------------------------------------------------------------------
63
SlkPktHeaderChecksum = UInt8;
65
SlkPktHeaderType = record
66
signature1: UInt16; // X first 2 bytes of signature
67
signature2: UInt8; // X 3 and final byte of signature
68
dest: UInt8; // -> destination socket Id
69
src: UInt8; // -> src socket Id
70
type_: UInt8; // -> packet type
71
bodySize: UInt16; // X size of body
72
transId: UInt8; // -> transaction Id
73
// if 0 specified, it will be replaced
74
checksum: SlkPktHeaderChecksum; // X check sum of header
77
SlkPktHeaderPtr = ^SlkPktHeaderType;
80
slkPktHeaderSignature1 = $BEEF;
81
slkPktHeaderSignature2 = $ED;
83
slkPktHeaderSigFirst = $BE; // First byte
84
slkPktHeaderSigSecond = $EF; // second byte
85
slkPktHeaderSigThird = $ED; // third byte
87
//----------------------------------------------------------------------
89
//----------------------------------------------------------------------
92
SlkPktFooterType = record
93
crc16: UInt16; // header and body crc
96
SlkPktFooterPtr = ^SlkPktFooterType;
98
//*************************************************************************
100
// Write Data Structure passed to SlkSendPacket. This structure
101
// Tells SlkSendPacket where each of the chunks that comprise the body are
102
// and the size of each. SlkSendPacket accepts a pointer to an array
103
// of SlkWriteDataTypes, the last one has a size field of 0.
105
//*************************************************************************
107
SlkWriteDataType = record
108
size: UInt16; // last one has size of 0
109
dataP: Pointer; // pointer to data
112
SlkWriteDataPtr = ^SlkWriteDataType;
114
(*******************************************************************
115
* Serial Link Manager Errors
116
* the constant slkErrorClass is defined in SystemMgr.h
117
*******************************************************************)
120
slkErrChecksum = slkErrorClass or 1;
121
slkErrFormat = slkErrorClass or 2;
122
slkErrBuffer = slkErrorClass or 3;
123
slkErrTimeOut = slkErrorClass or 4;
124
slkErrHandle = slkErrorClass or 5;
125
slkErrBodyLimit = slkErrorClass or 6;
126
slkErrTransId = slkErrorClass or 7;
127
slkErrResponse = slkErrorClass or 8;
128
slkErrNoDefaultProc = slkErrorClass or 9;
129
slkErrWrongPacketType = slkErrorClass or 10;
130
slkErrBadParam = slkErrorClass or 11;
131
slkErrAlreadyOpen = slkErrorClass or 12;
132
slkErrOutOfSockets = slkErrorClass or 13;
133
slkErrSocketNotOpen = slkErrorClass or 14;
134
slkErrWrongDestSocket = slkErrorClass or 15;
135
slkErrWrongPktType = slkErrorClass or 16;
136
slkErrBusy = slkErrorClass or 17; // called while sending a packet
137
// only returned on single-threaded
138
// emulation implementations
139
slkErrNotOpen = slkErrorClass or 18;
141
(*******************************************************************
142
* Type definition for a Serial Link Socket Listener
144
*******************************************************************)
147
SlkSocketListenerProcPtr = procedure(headerP: SlkPktHeaderPtr; bodyP: Pointer);
149
SlkSocketListenType = record
150
listenerP: SlkSocketListenerProcPtr;
151
headerBufferP: SlkPktHeaderPtr; // App allocated buffer for header
152
bodyBufferP: Pointer; // App allocated buffer for body
153
bodyBufferSize: UInt32;
156
SlkSocketListenPtr = ^SlkSocketListenType;
158
(*******************************************************************
160
*******************************************************************)
162
//-------------------------------------------------------------------
163
// Initializes the Serial Link Manager
164
//-------------------------------------------------------------------
166
function SlkOpen: Err; syscall sysTrapSlkOpen;
168
//-------------------------------------------------------------------
169
// Close down the Serial Link Manager
170
//-------------------------------------------------------------------
172
function SlkClose: Err; syscall sysTrapSlkClose;
174
//-------------------------------------------------------------------
175
// Open up another Serial Link socket. The caller must have already
176
// opened the comm library and set it to the right settings.
177
//-------------------------------------------------------------------
179
function SlkOpenSocket(portID: UInt16; var socketP: UInt16; staticSocket: Boolean): Err; syscall sysTrapSlkOpenSocket;
181
//-------------------------------------------------------------------
182
// Close up a Serial Link socket.
183
// Warning: This routine is assymetrical with SlkOpenSocket because it
184
// WILL CLOSE the library for the caller (unless the refNum is the
185
// refNum of the debugger comm library).
186
//-------------------------------------------------------------------
188
function SlkCloseSocket(socket: UInt16): Err; syscall sysTrapSlkCloseSocket;
190
//-------------------------------------------------------------------
191
// Get the library refNum for a particular Socket
192
//-------------------------------------------------------------------
194
function SlkSocketPortID(socket: UInt16; var portIDP: UInt16): Err; syscall sysTrapSlkSocketRefNum;
196
//-------------------------------------------------------------------
197
// Set the in-packet timeout for a socket
198
//-------------------------------------------------------------------
200
function SlkSocketSetTimeout(socket: UInt16; timeout: Int32): Err; syscall sysTrapSlkSocketSetTimeout;
202
//-------------------------------------------------------------------
204
//-------------------------------------------------------------------
206
function SlkFlushSocket(socket: UInt16; timeout: Int32): Err; syscall sysTrapSlkFlushSocket;
208
//-------------------------------------------------------------------
209
// Set up a Socket Listener
210
//-------------------------------------------------------------------
212
function SlkSetSocketListener(socket: UInt16; socketP: SlkSocketListenPtr): Err; syscall sysTrapSlkSetSocketListener;
214
//-------------------------------------------------------------------
215
// Sends a packet's header, body, footer. Stuffs the header's
216
// magic number and checksum fields. Expects all other
217
// header fields to be filled in by caller.
218
// errors returned: dseHandle, dseLine, dseIO, dseParam, dseBodyLimit,
220
//-------------------------------------------------------------------
222
function SlkSendPacket(headerP: SlkPktHeaderPtr; writeList: SlkWriteDataPtr): Err; syscall sysTrapSlkSendPacket;
224
//-------------------------------------------------------------------
225
// Receives and validates an entire packet.
226
// errors returned: dseHandle, dseParam, dseLine, dseIO, dseFormat,
227
// dseChecksum, dseBuffer, dseBodyLimit, dseTimeOut,
229
//-------------------------------------------------------------------
231
function SlkReceivePacket(socket: UInt16; andOtherSockets: Boolean;
232
headerP: SlkPktHeaderPtr; bodyP: Pointer; bodySize: UInt16;
233
timeout: Int32): Err; syscall sysTrapSlkReceivePacket;
235
//-------------------------------------------------------------------
236
// Do Default processing of a System packet
237
//-------------------------------------------------------------------
239
function SlkSysPktDefaultResponse(headerP: SlkPktHeaderPtr; bodyP: Pointer): Err; syscall sysTrapSlkSysPktDefaultResponse;
241
//-------------------------------------------------------------------
243
//-------------------------------------------------------------------
245
function SlkProcessRPC(headerP: SlkPktHeaderPtr; bodyP: Pointer): Err; syscall sysTrapSlkProcessRPC;