jwaws2bth.pas 19 KB

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