jwaws2bth.pas 18 KB

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