1 {******************************************************************************}
2 {                                                                              }
3 { BlueTooth API interface Unit for Object Pascal                               }
4 {                                                                              }
5 { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft          }
6 { Corporation. All Rights Reserved.                                            }
7 {                                                                              }
8 { Portions created by Marcel van Brakel are Copyright (C) 1999-2001            }
9 { Marcel van Brakel. All Rights Reserved.                                      }
10 {                                                                              }
11 { Contributors: John Penman                                                    }
12 {                                                                              }
13 { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
14 {                                                                              }
15 { You may retrieve the latest version of this file at the Project JEDI         }
16 { APILIB home page, located at http://jedi-apilib.sourceforge.net              }
17 {                                                                              }
18 { The contents of this file are used with permission, subject to the Mozilla   }
19 { Public License Version 1.1 (the "License"); you may not use this file except }
20 { in compliance with the License. You may obtain a copy of the License at      }
21 { http://www.mozilla.org/MPL/MPL-1.1.html                                      }
22 {                                                                              }
23 { Software distributed under the License is distributed on an "AS IS" basis,   }
24 { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
25 { the specific language governing rights and limitations under the License.    }
26 {                                                                              }
27 { Alternatively, the contents of this file may be used under the terms of the  }
28 { GNU Lesser General Public License (the  "LGPL License"), in which case the   }
29 { provisions of the LGPL License are applicable instead of those above.        }
30 { If you wish to allow use of your version of this file only under the terms   }
31 { of the LGPL License and not to allow others to use your version of this file }
32 { under the MPL, indicate your decision by deleting  the provisions above and  }
33 { replace  them with the notice and other provisions required by the LGPL      }
34 { License.  If you do not delete the provisions above, a recipient may use     }
35 { your version of this file under either the MPL or the LGPL License.          }
36 {                                                                              }
37 { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
38 {                                                                              }
39 {******************************************************************************}
40 
41 // $Id: JwaWs2Bth.pas,v 1.12 2007/09/14 06:48:49 marquardt Exp $
42 {$IFNDEF JWA_OMIT_SECTIONS}
43 unit JwaWs2Bth;
44 
45 {$WEAKPACKAGEUNIT}
46 {$ENDIF JWA_OMIT_SECTIONS}
47 
48 {$HPPEMIT ''}
49 {$HPPEMIT '#include "ws2bth.h"'}
50 {$HPPEMIT ''}
51 
52 
53 {$IFNDEF JWA_OMIT_SECTIONS}
54 {$I jediapilib.inc}
55 
56 interface
57 
58 uses
59   JwaWinType, JwaBthSdpDef, JwaBlueToothApis, JwaBthDef;
60 {$ENDIF JWA_OMIT_SECTIONS}
61 {$IFNDEF JWA_IMPLEMENTATIONSECTION}
62 
63 const
64   BT_PORT_ANY = -1;
65   {$EXTERNALSYM BT_PORT_ANY}
66   BT_PORT_MIN = $1;
67   {$EXTERNALSYM BT_PORT_MIN}
68   BT_PORT_MAX = $ffff;
69   {$EXTERNALSYM BT_PORT_MAX}
70   BT_PORT_DYN_FIRST = $1001;
71   {$EXTERNALSYM BT_PORT_DYN_FIRST}
72 
73 //
74 // These three definitions are duplicated in winsock2.h to reserve ordinals
75 //
76 
77 const
78   AF_BTH = 32;
79   {$EXTERNALSYM AF_BTH}
80   PF_BTH = AF_BTH;
81   {$EXTERNALSYM PF_BTH}
82   NS_BTH = 16;
83   {$EXTERNALSYM NS_BTH}
84 
85 type
86   _SOCKADDR_BTH = packed record
87     addressFamily: Word; // Always AF_BTH
88     btAddr: BTH_ADDR;      // Bluetooth device address
89     serviceClassId: TGUID; // [OPTIONAL] system will query SDP for port
90     port: ULONG;           // RFCOMM channel or L2CAP PSM
91   end;
92   {$EXTERNALSYM _SOCKADDR_BTH}
93   SOCKADDR_BTH = _SOCKADDR_BTH;
94   {$EXTERNALSYM SOCKADDR_BTH}
95   PSOCKADDR_BTH = ^_SOCKADDR_BTH;
96   {$EXTERNALSYM PSOCKADDR_BTH}
97   TSockAddrBth = SOCKADDR_BTH;
98   PSockAddrBth = PSOCKADDR_BTH;
99 
100 const
101   SVCID_BTH_PROVIDER: TGUID = '{06AA63E0-7D60-41FF-AFB2-3EE6D2D9392D}';
102   {$EXTERNALSYM SVCID_BTH_PROVIDER}
103   BTH_ADDR_STRING_SIZE = 12; // max size from WSAAddressToString
104   {$EXTERNALSYM BTH_ADDR_STRING_SIZE}
105 
106 //
107 // Bluetooth protocol #s are assigned according to the Bluetooth
108 // Assigned Numbers portion of the Bluetooth Specification
109 //
110 
111 const
112   BTHPROTO_RFCOMM = $0003;
113   {$EXTERNALSYM BTHPROTO_RFCOMM}
114   BTHPROTO_L2CAP = $0100;
115   {$EXTERNALSYM BTHPROTO_L2CAP}
116 
117   SOL_RFCOMM = BTHPROTO_RFCOMM;
118   {$EXTERNALSYM SOL_RFCOMM}
119   SOL_L2CAP = BTHPROTO_L2CAP;
120   {$EXTERNALSYM SOL_L2CAP}
121   SOL_SDP = $0101;
122   {$EXTERNALSYM SOL_SDP}
123 
124 //
125 // SOCKET OPTIONS
126 //
127 
128   SO_BTH_AUTHENTICATE = $80000001; // optlen=sizeof(ULONG), optval = &(ULONG)TRUE/FALSE
129   {$EXTERNALSYM SO_BTH_AUTHENTICATE}
130   SO_BTH_ENCRYPT = $00000002; // optlen=sizeof(ULONG), optval = &(ULONG)TRUE/FALSE
131   {$EXTERNALSYM SO_BTH_ENCRYPT}
132   SO_BTH_MTU = $80000007; // optlen=sizeof(ULONG), optval = &mtu
133   {$EXTERNALSYM SO_BTH_MTU}
134   SO_BTH_MTU_MAX = $80000008; // optlen=sizeof(ULONG), optval = &max. mtu
135   {$EXTERNALSYM SO_BTH_MTU_MAX}
136   SO_BTH_MTU_MIN = $8000000a; // optlen=sizeof(ULONG), optval = &min. mtu
137   {$EXTERNALSYM SO_BTH_MTU_MIN}
138 
139 //
140 // Socket option parameters
141 //
142 
143   RFCOMM_MAX_MTU = $0000029a; // L2CAP MTU (672) - RFCOMM header size (6)
144   {$EXTERNALSYM RFCOMM_MAX_MTU}
145   RFCOMM_MIN_MTU = $00000017; // RFCOMM spec sec 5.3 table 5.1
146   {$EXTERNALSYM RFCOMM_MIN_MTU}
147 
148 //
149 // NAME SERVICE PROVIDER DEFINITIONS
150 // For calling WSASetService
151 // and WSALookupServiceBegin, WSALookupServiceNext, WSALookupServiceEnd
152 // with Bluetooth-specific extensions
153 //
154 
155   BTH_SDP_VERSION = 1;
156   {$EXTERNALSYM BTH_SDP_VERSION}
157 
158 //
159 // [OPTIONAL] passed in BLOB member of WSAQUERYSET
160 // QUERYSET and its lpBlob member are copied & converted
161 // to unicode in the system for non-unicode applications.
162 // However, nothing is copied back upon return.  In
163 // order for the system to return data such as pRecordHandle,
164 // it much have an extra level of indirection from lpBlob
165 //
166 
167 type
168   _BTH_SET_SERVICE = packed record
169 
170     //
171     // This version number will change when/if the binary format of
172     // SDP records change, affecting the format of pRecord.
173     // Set to BTH_SDP_VERSION by client, and returned by system
174     //
175     pSdpVersion: PULONG;
176 
177     //
178     // Handle to SDP record.  When BTH_SET_SERVICE structure is later
179     // passed to WSASetService RNRSERVICE_DELETE, this handle identifies the
180     // record to delete.
181     //
182     pRecordHandle: PHandle;
183 
184     //
185     // COD_SERVICE_* bit(s) associated with this SDP record, which will be
186     // advertised when the local radio is found during device inquiry.
187     // When the last SDP record associated with a bit is deleted, that
188     // service bit is no longer reported in repsonse to inquiries
189     //
190     fCodService: ULONG;    // COD_SERVICE_* bits
191 
192     Reserved: array [0..4] of ULONG;    // Reserved by system.  Must be zero.
193     ulRecordLength: ULONG; // length of pRecord which follows
194     pRecord: array [0..0] of ULONG;     // SDP record as defined by bluetooth spec
195   end;
196   {$EXTERNALSYM _BTH_SET_SERVICE}
197   BTH_SET_SERVICE = _BTH_SET_SERVICE;
198   {$EXTERNALSYM BTH_SET_SERVICE}
199   PBTH_SET_SERVICE = ^_BTH_SET_SERVICE;
200   {$EXTERNALSYM PBTH_SET_SERVICE}
201   TBthSetService = BTH_SET_SERVICE;
202   PBthSetService = PBTH_SET_SERVICE;
203 
204 //
205 // Default device inquiry duration in seconds
206 //
207 // The application thread will be blocked in WSALookupServiceBegin
208 // for the duration of the device inquiry, so this value needs to
209 // be balanced against the chance that a device that is actually
210 // present might not being found by Bluetooth in this time
211 //
212 // Paging improvements post-1.1 will cause devices to be
213 // found generally uniformly in the 0-6 sec timeperiod
214 //
215 
216 const
217   SDP_DEFAULT_INQUIRY_SECONDS = 6;
218   {$EXTERNALSYM SDP_DEFAULT_INQUIRY_SECONDS}
219   SDP_MAX_INQUIRY_SECONDS = 60;
220   {$EXTERNALSYM SDP_MAX_INQUIRY_SECONDS}
221 
222 //
223 // Default maximum number of devices to search for
224 //
225 
226   SDP_DEFAULT_INQUIRY_MAX_RESPONSES = 255;
227   {$EXTERNALSYM SDP_DEFAULT_INQUIRY_MAX_RESPONSES}
228 
229   SDP_SERVICE_SEARCH_REQUEST = 1;
230   {$EXTERNALSYM SDP_SERVICE_SEARCH_REQUEST}
231   SDP_SERVICE_ATTRIBUTE_REQUEST = 2;
232   {$EXTERNALSYM SDP_SERVICE_ATTRIBUTE_REQUEST}
233   SDP_SERVICE_SEARCH_ATTRIBUTE_REQUEST = 3;
234   {$EXTERNALSYM SDP_SERVICE_SEARCH_ATTRIBUTE_REQUEST}
235 
236 //
237 // [OPTIONAL] input restrictions on device inquiry
238 // Passed in BLOB of LUP_CONTAINERS (device) search
239 //
240 
241 type
242   _BTH_QUERY_DEVICE = packed record
243     LAP: ULONG;
244     length: UCHAR;
245   end;
246   {$EXTERNALSYM _BTH_QUERY_DEVICE}
247   BTH_QUERY_DEVICE = _BTH_QUERY_DEVICE;
248   {$EXTERNALSYM BTH_QUERY_DEVICE}
249   PBTH_QUERY_DEVICE = ^_BTH_QUERY_DEVICE;
250   {$EXTERNALSYM PBTH_QUERY_DEVICE}
251   TBthQueryDevice = BTH_QUERY_DEVICE;
252   PBthQueryDevice = PBTH_QUERY_DEVICE;
253 
254 //
255 // [OPTIONAL] Restrictions on searching for a particular service
256 // Passed in BLOB of !LUP_CONTAINERS (service) search
257 //
258 
259   _BTH_QUERY_SERVICE = packed record
260     _type: ULONG;
261     serviceHandle: ULONG;
262     uuids: array[0..MAX_UUIDS_IN_QUERY - 1] of SdpQueryUuid;
263     numRange: ULONG;
264     pRange: array[0..0] of SdpAttributeRange;
265   end;
266   {$EXTERNALSYM _BTH_QUERY_SERVICE}
267   BTH_QUERY_SERVICE = _BTH_QUERY_SERVICE;
268   {$EXTERNALSYM BTH_QUERY_SERVICE}
269   PBTH_QUERY_SERVICE = ^_BTH_QUERY_SERVICE;
270   {$EXTERNALSYM PBTH_QUERY_SERVICE}
271   TBthQueryService = BTH_QUERY_SERVICE;
272   PBthQueryService = PBTH_QUERY_SERVICE;
273 
274 //
275 // BTHNS_RESULT_*
276 //
277 // Bluetooth specific flags returned from WSALookupServiceNext
278 // in WSAQUERYSET.dwOutputFlags in response to device inquiry
279 //
280 
281 //
282 // Local device is paired with remote device
283 //
284 
285 const
286   BTHNS_RESULT_DEVICE_CONNECTED = $00010000;
287   {$EXTERNALSYM BTHNS_RESULT_DEVICE_CONNECTED}
288   BTHNS_RESULT_DEVICE_REMEMBERED = $00020000;
289   {$EXTERNALSYM BTHNS_RESULT_DEVICE_REMEMBERED}
290   BTHNS_RESULT_DEVICE_AUTHENTICATED = $00040000;
291   {$EXTERNALSYM BTHNS_RESULT_DEVICE_AUTHENTICATED}
292 
293 //
294 // SOCKET IOCTLs
295 //
296   {$IFNDEF JWA_INCLUDEMODE}
297   IOC_OUT      = $40000000;        // copy out parameters
298   {$EXTERNALSYM IOC_OUT}
299   IOC_IN       = DWORD($80000000); // copy in parameters
300   {$EXTERNALSYM IOC_IN}
301   IOC_INOUT    = DWORD(IOC_IN or IOC_OUT);
302   {$EXTERNALSYM IOC_INOUT}
303   {$ENDIF JWA_INCLUDEMODE}
304 
305   {$IFNDEF JWA_WINSOCK_2}
306   IOC_VENDOR   = $18000000;
307   {$EXTERNALSYM IOC_VENDOR}
308   {$ENDIF JWA_WINSOCK_2}
309 
310 const
311   SIO_RFCOMM_SEND_COMMAND = IOC_INOUT or IOC_VENDOR or 101;
312   {$EXTERNALSYM SIO_RFCOMM_SEND_COMMAND}
313   SIO_RFCOMM_WAIT_COMMAND = IOC_INOUT or IOC_VENDOR or 102;
314   {$EXTERNALSYM SIO_RFCOMM_WAIT_COMMAND}
315 
316 //
317 // These IOCTLs are for test/validation/conformance and may only be
318 // present in debug/checked builds of the system
319 //
320 
321   SIO_BTH_PING                = IOC_INOUT or IOC_VENDOR or 8;
322   {$EXTERNALSYM SIO_BTH_PING}
323   SIO_BTH_INFO                = IOC_INOUT or IOC_VENDOR or 9;
324   {$EXTERNALSYM SIO_BTH_INFO}
325   SIO_RFCOMM_SESSION_FLOW_OFF = IOC_INOUT or IOC_VENDOR or 103;
326   {$EXTERNALSYM SIO_RFCOMM_SESSION_FLOW_OFF}
327   SIO_RFCOMM_TEST             = IOC_INOUT or IOC_VENDOR or 104;
328   {$EXTERNALSYM SIO_RFCOMM_TEST}
329   SIO_RFCOMM_USECFC           = IOC_INOUT or IOC_VENDOR or 105;
330   {$EXTERNALSYM SIO_RFCOMM_USECFC}
331 
332 //
333 // SOCKET IOCTL DEFINITIONS
334 //
335 
BITnull336 function BIT(b: Integer): DWORD;
337 
338 //
339 // Structure definition from Bluetooth RFCOMM spec, TS 07.10 5.4.6.3.7
340 //
341 
342 const
343 // todo  MSC_EA_BIT      = EA_BIT;
344   MSC_FC_BIT      = 1 shl 1;      // Flow control, clear if we can receive
345   {$EXTERNALSYM MSC_FC_BIT}
346   MSC_RTC_BIT     = 1 shl 2;      // Ready to communicate, set when ready
347   {$EXTERNALSYM MSC_RTC_BIT}
348   MSC_RTR_BIT     = 1 shl 3;      // Ready to receive, set when ready
349   {$EXTERNALSYM MSC_RTR_BIT}
350   MSC_RESERVED    = (1 shl 4) or (1 shl 5); // Reserved by spec, must be 0
351   {$EXTERNALSYM MSC_RESERVED}
352   MSC_IC_BIT      = 1 shl 6;      // Incoming call
353   {$EXTERNALSYM MSC_IC_BIT}
354   MSC_DV_BIT      = 1 shl 7;      // Data valid
355   {$EXTERNALSYM MSC_DV_BIT}
356 
357   MSC_BREAK_BIT   = 1 shl 1;      // Set if sending break
358   {$EXTERNALSYM MSC_BREAK_BIT}
359 
360 //MSC_SET_BREAK_LENGTH(b, l) ((b) = ((b)&0x3) | (((l)&0xf) << 4))
361 
362 type
363   _RFCOMM_MSC_DATA = packed record
364     Signals: UCHAR;
365     Break: UCHAR;
366   end;
367   {$EXTERNALSYM _RFCOMM_MSC_DATA}
368   RFCOMM_MSC_DATA = _RFCOMM_MSC_DATA;
369   {$EXTERNALSYM RFCOMM_MSC_DATA}
370   PRFCOMM_MSC_DATA = ^RFCOMM_MSC_DATA;
371   {$EXTERNALSYM PRFCOMM_MSC_DATA}
372   TRfCommMscData = RFCOMM_MSC_DATA;
373   PRfCommMscData = PRFCOMM_MSC_DATA;
374 
375 //
376 // Structure definition from Bluetooth RFCOMM spec, TS 07.10 5.4.6.3.10
377 //
378 
379 const
380   RLS_ERROR          = $01;
381   {$EXTERNALSYM RLS_ERROR}
382   RLS_OVERRUN        = $02;
383   {$EXTERNALSYM RLS_OVERRUN}
384   RLS_PARITY         = $04;
385   {$EXTERNALSYM RLS_PARITY}
386   RLS_FRAMING        = $08;
387   {$EXTERNALSYM RLS_FRAMING}
388 
389 type
390   _RFCOMM_RLS_DATA = packed record
391     LineStatus: UCHAR;
392   end;
393   {$EXTERNALSYM _RFCOMM_RLS_DATA}
394   RFCOMM_RLS_DATA = _RFCOMM_RLS_DATA;
395   {$EXTERNALSYM RFCOMM_RLS_DATA}
396   PRFCOMM_RLS_DATA = ^RFCOMM_RLS_DATA;
397   {$EXTERNALSYM PRFCOMM_RLS_DATA}
398   TRfCommRlsData = RFCOMM_RLS_DATA;
399   PRfCommRlsData = PRFCOMM_RLS_DATA;
400 
401 //
402 // Structure definition from Bluetooth RFCOMM spec, TS 07.10 5.4.6.3.9
403 //
404 
405 const
406   RPN_BAUD_2400      = 0;
407   {$EXTERNALSYM RPN_BAUD_2400}
408   RPN_BAUD_4800      = 1;
409   {$EXTERNALSYM RPN_BAUD_4800}
410   RPN_BAUD_7200      = 2;
411   {$EXTERNALSYM RPN_BAUD_7200}
412   RPN_BAUD_9600      = 3;
413   {$EXTERNALSYM RPN_BAUD_9600}
414   RPN_BAUD_19200     = 4;
415   {$EXTERNALSYM RPN_BAUD_19200}
416   RPN_BAUD_38400     = 5;
417   {$EXTERNALSYM RPN_BAUD_38400}
418   RPN_BAUD_57600     = 6;
419   {$EXTERNALSYM RPN_BAUD_57600}
420   RPN_BAUD_115200    = 7;
421   {$EXTERNALSYM RPN_BAUD_115200}
422   RPN_BAUD_230400    = 8;
423   {$EXTERNALSYM RPN_BAUD_230400}
424 
425   RPN_DATA_5          = $0;
426   {$EXTERNALSYM RPN_DATA_5}
427   RPN_DATA_6          = $1;
428   {$EXTERNALSYM RPN_DATA_6}
429   RPN_DATA_7          = $2;
430   {$EXTERNALSYM RPN_DATA_7}
431   RPN_DATA_8          = $3;
432   {$EXTERNALSYM RPN_DATA_8}
433 
434   RPN_STOP_1          = $0;
435   {$EXTERNALSYM RPN_STOP_1}
436   RPN_STOP_1_5        = $4;
437   {$EXTERNALSYM RPN_STOP_1_5}
438 
439   RPN_PARITY_NONE     = $00;
440   {$EXTERNALSYM RPN_PARITY_NONE}
441   RPN_PARITY_ODD      = $08;
442   {$EXTERNALSYM RPN_PARITY_ODD}
443   RPN_PARITY_EVEN     = $18;
444   {$EXTERNALSYM RPN_PARITY_EVEN}
445   RPN_PARITY_MARK     = $28;
446   {$EXTERNALSYM RPN_PARITY_MARK}
447   RPN_PARITY_SPACE    = $38;
448   {$EXTERNALSYM RPN_PARITY_SPACE}
449 
450   RPN_FLOW_X_IN       = $01;
451   {$EXTERNALSYM RPN_FLOW_X_IN}
452   RPN_FLOW_X_OUT      = $02;
453   {$EXTERNALSYM RPN_FLOW_X_OUT}
454   RPN_FLOW_RTR_IN     = $04;
455   {$EXTERNALSYM RPN_FLOW_RTR_IN}
456   RPN_FLOW_RTR_OUT    = $08;
457   {$EXTERNALSYM RPN_FLOW_RTR_OUT}
458   RPN_FLOW_RTC_IN     = $10;
459   {$EXTERNALSYM RPN_FLOW_RTC_IN}
460   RPN_FLOW_RTC_OUT    = $20;
461   {$EXTERNALSYM RPN_FLOW_RTC_OUT}
462 
463   RPN_PARAM_BAUD      = $01;
464   {$EXTERNALSYM RPN_PARAM_BAUD}
465   RPN_PARAM_DATA      = $02;
466   {$EXTERNALSYM RPN_PARAM_DATA}
467   RPN_PARAM_STOP      = $04;
468   {$EXTERNALSYM RPN_PARAM_STOP}
469   RPN_PARAM_PARITY    = $08;
470   {$EXTERNALSYM RPN_PARAM_PARITY}
471   RPN_PARAM_P_TYPE    = $10;
472   {$EXTERNALSYM RPN_PARAM_P_TYPE}
473   RPN_PARAM_XON       = $20;
474   {$EXTERNALSYM RPN_PARAM_XON}
475   RPN_PARAM_XOFF      = $40;
476   {$EXTERNALSYM RPN_PARAM_XOFF}
477 
478   RPN_PARAM_X_IN      = $01;
479   {$EXTERNALSYM RPN_PARAM_X_IN}
480   RPN_PARAM_X_OUT     = $02;
481   {$EXTERNALSYM RPN_PARAM_X_OUT}
482   RPN_PARAM_RTR_IN    = $04;
483   {$EXTERNALSYM RPN_PARAM_RTR_IN}
484   RPN_PARAM_RTR_OUT   = $08;
485   {$EXTERNALSYM RPN_PARAM_RTR_OUT}
486   RPN_PARAM_RTC_IN    = $10;
487   {$EXTERNALSYM RPN_PARAM_RTC_IN}
488   RPN_PARAM_RTC_OUT   = $20;
489   {$EXTERNALSYM RPN_PARAM_RTC_OUT}
490 
491 type
492   _RFCOMM_RPN_DATA = packed record
493     Baud: UCHAR;
494     Data: UCHAR;
495     FlowControl: UCHAR;
496     XonChar: UCHAR;
497     XoffChar: UCHAR;
498     ParameterMask1: UCHAR;
499     ParameterMask2: UCHAR;
500   end;
501   {$EXTERNALSYM _RFCOMM_RPN_DATA}
502   RFCOMM_RPN_DATA = _RFCOMM_RPN_DATA;
503   {$EXTERNALSYM RFCOMM_RPN_DATA}
504   PRFCOMM_RPN_DATA = ^_RFCOMM_RPN_DATA;
505   {$EXTERNALSYM PRFCOMM_RPN_DATA}
506   TRfCommRpnData = RFCOMM_RPN_DATA;
507   PRfCommRpnData = PRFCOMM_RPN_DATA;
508 
509 const
510   RFCOMM_CMD_NONE            = 0;
511   {$EXTERNALSYM RFCOMM_CMD_NONE}
512   RFCOMM_CMD_MSC             = 1;
513   {$EXTERNALSYM RFCOMM_CMD_MSC}
514   RFCOMM_CMD_RLS             = 2;
515   {$EXTERNALSYM RFCOMM_CMD_RLS}
516   RFCOMM_CMD_RPN             = 3;
517   {$EXTERNALSYM RFCOMM_CMD_RPN}
518   RFCOMM_CMD_RPN_REQUEST     = 4;
519   {$EXTERNALSYM RFCOMM_CMD_RPN_REQUEST}
520   RFCOMM_CMD_RPN_RESPONSE    = 5;
521   {$EXTERNALSYM RFCOMM_CMD_RPN_RESPONSE}
522 
523 type
524   _RFCOMM_COMMAND = packed record
525     CmdType: ULONG;          // one of RFCOMM_CMD_*
526     case Integer of
527       0: (MSC: RFCOMM_MSC_DATA);
528       1: (RLS: RFCOMM_RLS_DATA);
529       2: (RPN: RFCOMM_RPN_DATA);
530   end;
531   {$EXTERNALSYM _RFCOMM_COMMAND}
532   RFCOMM_COMMAND = _RFCOMM_COMMAND;
533   {$EXTERNALSYM RFCOMM_COMMAND}
534   PRFCOMM_COMMAND = ^RFCOMM_COMMAND;
535   {$EXTERNALSYM PRFCOMM_COMMAND}
536   TRfCommCommand = RFCOMM_COMMAND;
537   PRfCommCommand = PRFCOMM_COMMAND;
538 
539 //
540 // These structures are for test/validation/conformance and may only be
541 // present in debug/checked builds of the system
542 //
543 
544 type
545   _BTH_PING_REQ = packed record
546     btAddr: BTH_ADDR;
547     dataLen: UCHAR;
548     data: array [0..MAX_L2CAP_PING_DATA_LENGTH - 1] of UCHAR;
549   end;
550   {$EXTERNALSYM _BTH_PING_REQ}
551   BTH_PING_REQ = _BTH_PING_REQ;
552   {$EXTERNALSYM BTH_PING_REQ}
553   PBTH_PING_REQ = ^BTH_PING_REQ;
554   {$EXTERNALSYM PBTH_PING_REQ}
555   TBthPingReq = BTH_PING_REQ;
556   PBthPingReq = PBTH_PING_REQ;
557 
558   _BTH_PING_RSP = packed record
559     dataLen: UCHAR;
560     data: array [0..MAX_L2CAP_PING_DATA_LENGTH - 1] of UCHAR;
561   end;
562   {$EXTERNALSYM _BTH_PING_RSP}
563   BTH_PING_RSP = _BTH_PING_RSP;
564   {$EXTERNALSYM BTH_PING_RSP}
565   PBTH_PING_RSP = ^BTH_PING_RSP;
566   {$EXTERNALSYM PBTH_PING_RSP}
567   TBthPingRsp = BTH_PING_RSP;
568   PBthPingRsp = PBTH_PING_RSP;
569 
570   _BTH_INFO_REQ = packed record
571     btAddr: BTH_ADDR;
572     infoType: Word;
573   end;
574   {$EXTERNALSYM _BTH_INFO_REQ}
575   BTH_INFO_REQ = _BTH_INFO_REQ;
576   {$EXTERNALSYM BTH_INFO_REQ}
577   PBTH_INFO_REQ = ^BTH_INFO_REQ;
578   {$EXTERNALSYM PBTH_INFO_REQ}
579   TBthInfoReq = BTH_INFO_REQ;
580   PBthInfoReq = PBTH_INFO_REQ;
581 
582   _BTH_INFO_RSP = packed record
583     result: Word;
584     dataLen: UCHAR;
585     case Integer of
586       0: (connectionlessMTU: Word);
587       1: (data: array [0..MAX_L2CAP_INFO_DATA_LENGTH - 1] of UCHAR);
588   end;
589   {$EXTERNALSYM _BTH_INFO_RSP}
590   BTH_INFO_RSP = _BTH_INFO_RSP;
591   {$EXTERNALSYM BTH_INFO_RSP}
592   PBTH_INFO_RSP = ^BTH_INFO_RSP;
593   {$EXTERNALSYM PBTH_INFO_RSP}
594   TBthInfoRsp = BTH_INFO_RSP;
595   PBthInfoRsp = PBTH_INFO_RSP;
596 
597 //
598 // WinCE compatible struct names
599 //
600 
601 { todo
602 typedef struct _BTH_SET_SERVICE BTHNS_SETBLOB, *PBTHNS_SETBLOB;
603 typedef struct _BTH_QUERY_DEVICE BTHNS_INQUIRYBLOB, *PBTHNS_INQUIRYBLOB;
604 typedef struct _BTH_QUERY_SERVICE BTHNS_RESTRICTIONBLOB, *PBTHNS_RESTRICTIONBLOB;
605 }
606 {$ENDIF JWA_IMPLEMENTATIONSECTION}
607 
608 {$IFNDEF JWA_OMIT_SECTIONS}
609 implementation
610 //uses ...
611 {$ENDIF JWA_OMIT_SECTIONS}
612 
613 
614 {$IFNDEF JWA_INTERFACESECTION}
615 
BITnull616 function BIT(b: Integer): DWORD;
617 begin
618   Result := DWORD(1 shl b);
619 end;
620 
621 {$ENDIF JWA_INTERFACESECTION}
622 
623 
624 {$IFNDEF JWA_OMIT_SECTIONS}
625 end.
626 {$ENDIF JWA_OMIT_SECTIONS}
627