1 // Licensed under the Apache License, Version 2.0
2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4 // All files in the project carrying such notice may not be copied, modified, or distributed
5 // except according to those terms.
7 BTH_ADDR
, MAX_L2CAP_INFO_DATA_LENGTH
, MAX_L2CAP_PING_DATA_LENGTH
, MAX_UUIDS_IN_QUERY
,
9 use shared
::bthsdpdef
::{SdpAttributeRange, SdpQueryUuid}
;
10 use shared
::guiddef
::GUID
;
11 use shared
::minwindef
::{DWORD, PULONG, UCHAR, ULONG, USHORT}
;
12 use shared
::ws2def
::IOC_VENDOR
;
13 use um
::winnt
::HANDLE
;
14 pub const BT_PORT_ANY
: ULONG
= -1i32 as ULONG
;
15 pub const BT_PORT_MIN
: ULONG
= 0x1;
16 pub const BT_PORT_MAX
: ULONG
= 0xffff;
17 pub const BT_PORT_DYN_FIRST
: ULONG
= 0x1001;
18 pub const AF_BTH
: USHORT
= 32;
19 pub const PH_BTH
: USHORT
= AF_BTH
;
20 pub const NS_BTH
: USHORT
= 16;
21 STRUCT
!{#[repr(packed)] struct SOCKADDR_BTH {
22 addressFamily
: USHORT
,
27 pub type PSOCKADDR_BTH
= *mut SOCKADDR_BTH
;
28 DEFINE_GUID
!{SVCID_BTH_PROVIDER
,
29 0x6aa63e0, 0x7d60, 0x41ff, 0xaf, 0xb2, 0x3e, 0xe6, 0xd2, 0xd9, 0x39, 0x2d}
30 pub const BTH_ADDR_STRING_SIZE
: DWORD
= 12;
31 pub const BTHPROTO_RFCOMM
: USHORT
= 0x0003;
32 pub const BTHPROTO_L2CAP
: USHORT
= 0x0100;
33 pub const SOL_RFCOMM
: USHORT
= BTHPROTO_RFCOMM
;
34 pub const SOL_L2CAP
: USHORT
= BTHPROTO_L2CAP
;
35 pub const SOL_SDP
: USHORT
= 0x0101;
36 pub const SO_BTH_AUTHENTICATE
: ULONG
= 0x80000001;
37 pub const SO_BTH_ENCRYPT
: ULONG
= 0x00000002;
38 pub const SO_BTH_MTU
: ULONG
= 0x80000007;
39 pub const SO_BTH_MTU_MAX
: ULONG
= 0x80000008;
40 pub const SO_BTH_MTU_MIN
: ULONG
= 0x8000000a;
41 pub const RFCOMM_MAX_MTU
: ULONG
= 0x000003F3;
42 pub const RFCOMM_MIN_MTU
: ULONG
= 0x00000017;
43 pub const BTH_SDP_VERSION
: ULONG
= 1;
44 STRUCT
!{#[repr(packed)] struct BTH_SET_SERVICE {
46 pRecordHandle
: HANDLE
,
49 ulRecordLength
: ULONG
,
52 pub type PBTH_SET_SERVICE
= *mut BTH_SET_SERVICE
;
53 pub const SDP_DEFAULT_INQUIRY_SECONDS
: UCHAR
= 6;
54 pub const SDP_MAX_INQUIRY_SECONDS
: UCHAR
= 60;
55 pub const SDP_DEFAULT_INQUIRY_MAX_RESPONSES
: UCHAR
= 255;
56 pub const SDP_SERVICE_SEARCH_REQUEST
: ULONG
= 1;
57 pub const SDP_SERVICE_ATTRIBUTE_REQUEST
: ULONG
= 2;
58 pub const SDP_SERVICE_SEARCH_ATTRIBUTE_REQUEST
: ULONG
= 3;
59 STRUCT
!{#[repr(packed)] struct BTH_QUERY_DEVICE {
63 pub type PBTH_QUERY_DEVICE
= *mut BTH_QUERY_DEVICE
;
64 STRUCT
!{#[repr(packed)] struct BTH_QUERY_SERVICE {
67 uuids
: [SdpQueryUuid
; MAX_UUIDS_IN_QUERY
],
69 pRange
: [SdpAttributeRange
; 1],
71 pub type PBTH_QUERY_SERVICE
= *mut BTH_QUERY_SERVICE
;
72 pub const BTHNS_RESULT_DEVICE_CONNECTED
: DWORD
= 0x00010000;
73 pub const BTHNS_RESULT_DEVICE_REMEMBERED
: DWORD
= 0x00020000;
74 pub const BTHNS_RESULT_DEVICE_AUTHENTICATED
: DWORD
= 0x00040000;
75 pub const SIO_RFCOMM_SEND_COMMAND
: DWORD
= _WSAIORW
!(IOC_VENDOR
, 101);
76 pub const SIO_RFCOMM_WAIT_COMMAND
: DWORD
= _WSAIORW
!(IOC_VENDOR
, 102);
77 pub const SIO_BTH_PING
: DWORD
= _WSAIORW
!(IOC_VENDOR
, 8);
78 pub const SIO_BTH_INFO
: DWORD
= _WSAIORW
!(IOC_VENDOR
, 9);
79 pub const SIO_RFCOMM_SESSION_FLOW_OFF
: DWORD
= _WSAIORW
!(IOC_VENDOR
, 103);
80 pub const SIO_RFCOMM_TEST
: DWORD
= _WSAIORW
!(IOC_VENDOR
, 104);
81 pub const SIO_RFCOMM_USECFC
: DWORD
= _WSAIORW
!(IOC_VENDOR
, 105);
87 STRUCT
!{#[repr(packed)] struct RFCOMM_MSC_DATA {
91 pub type PRFCOMM_MSC_DATA
= *mut RFCOMM_MSC_DATA
;
92 pub const MSC_EA_BIT
: UCHAR
= BIT
!(0);
93 pub const MSC_FC_BIT
: UCHAR
= BIT
!(1);
94 pub const MSC_RTC_BIT
: UCHAR
= BIT
!(2);
95 pub const MSC_RTR_BIT
: UCHAR
= BIT
!(3);
96 pub const MSC_RESERVED
: UCHAR
= (BIT
!(4) | BIT
!(5));
97 pub const MSC_IC_BIT
: UCHAR
= BIT
!(6);
98 pub const MSC_DV_BIT
: UCHAR
= BIT
!(7);
99 pub const MSC_BREAK_BIT
: UCHAR
= BIT
!(1);
100 macro_rules
! MSC_SET_BREAK_LENGTH
{
101 ($b
: expr
, $l
: expr
) => {
102 ($b
& 0x3) | (($l
& 0xf) << 4)
105 STRUCT
!{#[repr(packed)] struct RFCOMM_RLS_DATA {
108 pub type PRFCOMM_RLS_DATA
= *mut RFCOMM_RLS_DATA
;
109 pub const RLS_ERROR
: UCHAR
= 0x01;
110 pub const RLS_OVERRUN
: UCHAR
= 0x02;
111 pub const RLS_PARITY
: UCHAR
= 0x04;
112 pub const RLS_FRAMING
: UCHAR
= 0x08;
113 STRUCT
!{#[repr(packed)] struct RFCOMM_RPN_DATA {
119 ParameterMask1
: UCHAR
,
120 ParameterMask2
: UCHAR
,
122 pub type PRFCOMM_RPN_DATA
= *mut RFCOMM_RPN_DATA
;
123 pub const RPN_BAUD_2400
: UCHAR
= 0;
124 pub const RPN_BAUD_4800
: UCHAR
= 1;
125 pub const RPN_BAUD_7200
: UCHAR
= 2;
126 pub const RPN_BAUD_9600
: UCHAR
= 3;
127 pub const RPN_BAUD_19200
: UCHAR
= 4;
128 pub const RPN_BAUD_38400
: UCHAR
= 5;
129 pub const RPN_BAUD_57600
: UCHAR
= 6;
130 pub const RPN_BAUD_115200
: UCHAR
= 7;
131 pub const RPN_BAUD_230400
: UCHAR
= 8;
132 pub const RPN_DATA_5
: UCHAR
= 0x0;
133 pub const RPN_DATA_6
: UCHAR
= 0x1;
134 pub const RPN_DATA_7
: UCHAR
= 0x2;
135 pub const RPN_DATA_8
: UCHAR
= 0x3;
136 pub const RPN_STOP_1
: UCHAR
= 0x0;
137 pub const RPN_STOP_1_5
: UCHAR
= 0x4;
138 pub const RPN_PARITY_NONE
: UCHAR
= 0x00;
139 pub const RPN_PARITY_ODD
: UCHAR
= 0x08;
140 pub const RPN_PARITY_EVEN
: UCHAR
= 0x18;
141 pub const RPN_PARITY_MARK
: UCHAR
= 0x28;
142 pub const RPN_PARITY_SPACE
: UCHAR
= 0x38;
143 pub const RPN_FLOW_X_IN
: UCHAR
= 0x01;
144 pub const RPN_FLOW_X_OUT
: UCHAR
= 0x02;
145 pub const RPN_FLOW_RTR_IN
: UCHAR
= 0x04;
146 pub const RPN_FLOW_RTR_OUT
: UCHAR
= 0x08;
147 pub const RPN_FLOW_RTC_IN
: UCHAR
= 0x10;
148 pub const RPN_FLOW_RTC_OUT
: UCHAR
= 0x20;
149 pub const RPN_PARAM_BAUD
: UCHAR
= 0x01;
150 pub const RPN_PARAM_DATA
: UCHAR
= 0x02;
151 pub const RPN_PARAM_STOP
: UCHAR
= 0x04;
152 pub const RPN_PARAM_PARITY
: UCHAR
= 0x08;
153 pub const RPN_PARAM_P_TYPE
: UCHAR
= 0x10;
154 pub const RPN_PARAM_XON
: UCHAR
= 0x20;
155 pub const RPN_PARAM_XOFF
: UCHAR
= 0x40;
156 pub const RPN_PARAM_X_IN
: UCHAR
= 0x01;
157 pub const RPN_PARAM_X_OUT
: UCHAR
= 0x02;
158 pub const RPN_PARAM_RTR_IN
: UCHAR
= 0x04;
159 pub const RPN_PARAM_RTR_OUT
: UCHAR
= 0x08;
160 pub const RPN_PARAM_RTC_IN
: UCHAR
= 0x10;
161 pub const RPN_PARAM_RTC_OUT
: UCHAR
= 0x20;
162 pub const RFCOMM_CMD_NONE
: UCHAR
= 0;
163 pub const RFCOMM_CMD_MSC
: UCHAR
= 1;
164 pub const RFCOMM_CMD_RLS
: UCHAR
= 2;
165 pub const RFCOMM_CMD_RPN
: UCHAR
= 3;
166 pub const RFCOMM_CMD_RPN_REQUEST
: UCHAR
= 4;
167 pub const RFCOMM_CMD_RPN_RESPONSE
: UCHAR
= 5;
168 UNION
!{#[repr(packed)] union RFCOMM_COMMAND_Data {
170 MSC MSC_mut
: RFCOMM_MSC_DATA
,
171 RLS RLS_mut
: RFCOMM_RLS_DATA
,
172 RPN RPN_mut
: RFCOMM_RPN_DATA
,
174 STRUCT
!{#[repr(packed)] struct RFCOMM_COMMAND {
176 Data
: RFCOMM_COMMAND_Data
,
178 pub type PRFCOMM_COMMAND
= *mut RFCOMM_COMMAND
;
179 STRUCT
!{#[repr(packed)] struct BTH_PING_REQ {
182 data
: [UCHAR
; MAX_L2CAP_PING_DATA_LENGTH
],
184 pub type PBTH_PING_REQ
= *mut BTH_PING_REQ
;
185 STRUCT
!{#[repr(packed)] struct BTH_PING_RSP {
187 data
: [UCHAR
; MAX_L2CAP_PING_DATA_LENGTH
],
189 pub type PBTH_PING_RSP
= *mut BTH_PING_RSP
;
190 STRUCT
!{#[repr(packed)] struct BTH_INFO_REQ {
194 pub type PBTH_INFO_REQ
= *mut BTH_INFO_REQ
;
195 UNION
!{#[repr(packed)] union BTH_INFO_RSP_u {
196 [u8; MAX_L2CAP_INFO_DATA_LENGTH
],
197 connectionlessMTU connectionlessMTU_mut
: USHORT
,
198 data data_mut
: [UCHAR
; MAX_L2CAP_INFO_DATA_LENGTH
],
200 STRUCT
!{#[repr(packed)] struct BTH_INFO_RSP {
205 pub type PBTH_INFO_RSP
= *mut BTH_INFO_RSP
;
206 pub type BTHNS_SETBLOB
= BTH_SET_SERVICE
;
207 pub type PBTHNS_SETBLOB
= PBTH_SET_SERVICE
;
208 pub type BTHNS_INQUIRYBLOB
= BTH_QUERY_DEVICE
;
209 pub type PBTHNS_INQUIRYBLOB
= PBTH_QUERY_DEVICE
;
210 pub type BTHNS_RESTRICTIONBLOB
= BTH_QUERY_SERVICE
;
211 pub type PBTHNS_RESTRICTIONBLOB
= PBTH_QUERY_SERVICE
;