winapi_ui_automation/um/
ws2bth.rs1use shared::bthdef::{
7 BTH_ADDR, MAX_L2CAP_INFO_DATA_LENGTH, MAX_L2CAP_PING_DATA_LENGTH, MAX_UUIDS_IN_QUERY,
8};
9use shared::bthsdpdef::{SdpAttributeRange, SdpQueryUuid};
10use shared::guiddef::GUID;
11use shared::minwindef::{DWORD, PULONG, UCHAR, ULONG, USHORT};
12use shared::ws2def::IOC_VENDOR;
13use um::winnt::HANDLE;
14pub const BT_PORT_ANY: ULONG = -1i32 as ULONG;
15pub const BT_PORT_MIN: ULONG = 0x1;
16pub const BT_PORT_MAX: ULONG = 0xffff;
17pub const BT_PORT_DYN_FIRST: ULONG = 0x1001;
18pub const AF_BTH: USHORT = 32;
19pub const PH_BTH: USHORT = AF_BTH;
20pub const NS_BTH: USHORT = 16;
21STRUCT!{#[repr(packed)] struct SOCKADDR_BTH {
22 addressFamily: USHORT,
23 btAddr: BTH_ADDR,
24 serviceClassId: GUID,
25 port: ULONG,
26}}
27pub type PSOCKADDR_BTH = *mut SOCKADDR_BTH;
28DEFINE_GUID!{SVCID_BTH_PROVIDER,
29 0x6aa63e0, 0x7d60, 0x41ff, 0xaf, 0xb2, 0x3e, 0xe6, 0xd2, 0xd9, 0x39, 0x2d}
30pub const BTH_ADDR_STRING_SIZE: DWORD = 12;
31pub const BTHPROTO_RFCOMM: USHORT = 0x0003;
32pub const BTHPROTO_L2CAP: USHORT = 0x0100;
33pub const SOL_RFCOMM: USHORT = BTHPROTO_RFCOMM;
34pub const SOL_L2CAP: USHORT = BTHPROTO_L2CAP;
35pub const SOL_SDP: USHORT = 0x0101;
36pub const SO_BTH_AUTHENTICATE: ULONG = 0x80000001;
37pub const SO_BTH_ENCRYPT: ULONG = 0x00000002;
38pub const SO_BTH_MTU: ULONG = 0x80000007;
39pub const SO_BTH_MTU_MAX: ULONG = 0x80000008;
40pub const SO_BTH_MTU_MIN: ULONG = 0x8000000a;
41pub const RFCOMM_MAX_MTU: ULONG = 0x000003F3;
42pub const RFCOMM_MIN_MTU: ULONG = 0x00000017;
43pub const BTH_SDP_VERSION: ULONG = 1;
44STRUCT!{#[repr(packed)] struct BTH_SET_SERVICE {
45 pSdpVersion: PULONG,
46 pRecordHandle: HANDLE,
47 fCodService: ULONG,
48 Reserved: [ULONG; 5],
49 ulRecordLength: ULONG,
50 pRecord: [UCHAR; 1],
51}}
52pub type PBTH_SET_SERVICE = *mut BTH_SET_SERVICE;
53pub const SDP_DEFAULT_INQUIRY_SECONDS: UCHAR = 6;
54pub const SDP_MAX_INQUIRY_SECONDS: UCHAR = 60;
55pub const SDP_DEFAULT_INQUIRY_MAX_RESPONSES: UCHAR = 255;
56pub const SDP_SERVICE_SEARCH_REQUEST: ULONG = 1;
57pub const SDP_SERVICE_ATTRIBUTE_REQUEST: ULONG = 2;
58pub const SDP_SERVICE_SEARCH_ATTRIBUTE_REQUEST: ULONG = 3;
59STRUCT!{#[repr(packed)] struct BTH_QUERY_DEVICE {
60 LAP: ULONG,
61 length: UCHAR,
62}}
63pub type PBTH_QUERY_DEVICE = *mut BTH_QUERY_DEVICE;
64STRUCT!{#[repr(packed)] struct BTH_QUERY_SERVICE {
65 type_: ULONG,
66 serviceHandle: ULONG,
67 uuids: [SdpQueryUuid; MAX_UUIDS_IN_QUERY],
68 numRange: ULONG,
69 pRange: [SdpAttributeRange; 1],
70}}
71pub type PBTH_QUERY_SERVICE = *mut BTH_QUERY_SERVICE;
72pub const BTHNS_RESULT_DEVICE_CONNECTED: DWORD = 0x00010000;
73pub const BTHNS_RESULT_DEVICE_REMEMBERED: DWORD = 0x00020000;
74pub const BTHNS_RESULT_DEVICE_AUTHENTICATED: DWORD = 0x00040000;
75pub const SIO_RFCOMM_SEND_COMMAND: DWORD = _WSAIORW!(IOC_VENDOR, 101);
76pub const SIO_RFCOMM_WAIT_COMMAND: DWORD = _WSAIORW!(IOC_VENDOR, 102);
77pub const SIO_BTH_PING: DWORD = _WSAIORW!(IOC_VENDOR, 8);
78pub const SIO_BTH_INFO: DWORD = _WSAIORW!(IOC_VENDOR, 9);
79pub const SIO_RFCOMM_SESSION_FLOW_OFF: DWORD = _WSAIORW!(IOC_VENDOR, 103);
80pub const SIO_RFCOMM_TEST: DWORD = _WSAIORW!(IOC_VENDOR, 104);
81pub const SIO_RFCOMM_USECFC: DWORD = _WSAIORW!(IOC_VENDOR, 105);
82macro_rules! BIT {
83 ($b:expr) => {
84 1 << $b
85 };
86}
87STRUCT!{#[repr(packed)] struct RFCOMM_MSC_DATA {
88 Signals: UCHAR,
89 Break: UCHAR,
90}}
91pub type PRFCOMM_MSC_DATA = *mut RFCOMM_MSC_DATA;
92pub const MSC_EA_BIT: UCHAR = BIT!(0);
93pub const MSC_FC_BIT: UCHAR = BIT!(1);
94pub const MSC_RTC_BIT: UCHAR = BIT!(2);
95pub const MSC_RTR_BIT: UCHAR = BIT!(3);
96pub const MSC_RESERVED: UCHAR = BIT!(4) | BIT!(5);
97pub const MSC_IC_BIT: UCHAR = BIT!(6);
98pub const MSC_DV_BIT: UCHAR = BIT!(7);
99pub const MSC_BREAK_BIT: UCHAR = BIT!(1);
100macro_rules! MSC_SET_BREAK_LENGTH {
101 ($b: expr, $l: expr) => {
102 ($b & 0x3) | (($l & 0xf) << 4)
103 };
104}
105STRUCT!{#[repr(packed)] struct RFCOMM_RLS_DATA {
106 LineStatus: UCHAR,
107}}
108pub type PRFCOMM_RLS_DATA = *mut RFCOMM_RLS_DATA;
109pub const RLS_ERROR: UCHAR = 0x01;
110pub const RLS_OVERRUN: UCHAR = 0x02;
111pub const RLS_PARITY: UCHAR = 0x04;
112pub const RLS_FRAMING: UCHAR = 0x08;
113STRUCT!{#[repr(packed)] struct RFCOMM_RPN_DATA {
114 Baud: UCHAR,
115 Data: UCHAR,
116 FlowControl: UCHAR,
117 XonChar: UCHAR,
118 XoffChar: UCHAR,
119 ParameterMask1: UCHAR,
120 ParameterMask2: UCHAR,
121}}
122pub type PRFCOMM_RPN_DATA = *mut RFCOMM_RPN_DATA;
123pub const RPN_BAUD_2400: UCHAR = 0;
124pub const RPN_BAUD_4800: UCHAR = 1;
125pub const RPN_BAUD_7200: UCHAR = 2;
126pub const RPN_BAUD_9600: UCHAR = 3;
127pub const RPN_BAUD_19200: UCHAR = 4;
128pub const RPN_BAUD_38400: UCHAR = 5;
129pub const RPN_BAUD_57600: UCHAR = 6;
130pub const RPN_BAUD_115200: UCHAR = 7;
131pub const RPN_BAUD_230400: UCHAR = 8;
132pub const RPN_DATA_5: UCHAR = 0x0;
133pub const RPN_DATA_6: UCHAR = 0x1;
134pub const RPN_DATA_7: UCHAR = 0x2;
135pub const RPN_DATA_8: UCHAR = 0x3;
136pub const RPN_STOP_1: UCHAR = 0x0;
137pub const RPN_STOP_1_5: UCHAR = 0x4;
138pub const RPN_PARITY_NONE: UCHAR = 0x00;
139pub const RPN_PARITY_ODD: UCHAR = 0x08;
140pub const RPN_PARITY_EVEN: UCHAR = 0x18;
141pub const RPN_PARITY_MARK: UCHAR = 0x28;
142pub const RPN_PARITY_SPACE: UCHAR = 0x38;
143pub const RPN_FLOW_X_IN: UCHAR = 0x01;
144pub const RPN_FLOW_X_OUT: UCHAR = 0x02;
145pub const RPN_FLOW_RTR_IN: UCHAR = 0x04;
146pub const RPN_FLOW_RTR_OUT: UCHAR = 0x08;
147pub const RPN_FLOW_RTC_IN: UCHAR = 0x10;
148pub const RPN_FLOW_RTC_OUT: UCHAR = 0x20;
149pub const RPN_PARAM_BAUD: UCHAR = 0x01;
150pub const RPN_PARAM_DATA: UCHAR = 0x02;
151pub const RPN_PARAM_STOP: UCHAR = 0x04;
152pub const RPN_PARAM_PARITY: UCHAR = 0x08;
153pub const RPN_PARAM_P_TYPE: UCHAR = 0x10;
154pub const RPN_PARAM_XON: UCHAR = 0x20;
155pub const RPN_PARAM_XOFF: UCHAR = 0x40;
156pub const RPN_PARAM_X_IN: UCHAR = 0x01;
157pub const RPN_PARAM_X_OUT: UCHAR = 0x02;
158pub const RPN_PARAM_RTR_IN: UCHAR = 0x04;
159pub const RPN_PARAM_RTR_OUT: UCHAR = 0x08;
160pub const RPN_PARAM_RTC_IN: UCHAR = 0x10;
161pub const RPN_PARAM_RTC_OUT: UCHAR = 0x20;
162pub const RFCOMM_CMD_NONE: UCHAR = 0;
163pub const RFCOMM_CMD_MSC: UCHAR = 1;
164pub const RFCOMM_CMD_RLS: UCHAR = 2;
165pub const RFCOMM_CMD_RPN: UCHAR = 3;
166pub const RFCOMM_CMD_RPN_REQUEST: UCHAR = 4;
167pub const RFCOMM_CMD_RPN_RESPONSE: UCHAR = 5;
168UNION!{#[repr(packed)] union RFCOMM_COMMAND_Data {
169 [u8; 7],
170 MSC MSC_mut: RFCOMM_MSC_DATA,
171 RLS RLS_mut: RFCOMM_RLS_DATA,
172 RPN RPN_mut: RFCOMM_RPN_DATA,
173}}
174STRUCT!{#[repr(packed)] struct RFCOMM_COMMAND {
175 CmdType: ULONG,
176 Data: RFCOMM_COMMAND_Data,
177}}
178pub type PRFCOMM_COMMAND = *mut RFCOMM_COMMAND;
179STRUCT!{#[repr(packed)] struct BTH_PING_REQ {
180 btAddr: BTH_ADDR,
181 dataLen: UCHAR,
182 data: [UCHAR; MAX_L2CAP_PING_DATA_LENGTH],
183}}
184pub type PBTH_PING_REQ = *mut BTH_PING_REQ;
185STRUCT!{#[repr(packed)] struct BTH_PING_RSP {
186 dataLen: UCHAR,
187 data: [UCHAR; MAX_L2CAP_PING_DATA_LENGTH],
188}}
189pub type PBTH_PING_RSP = *mut BTH_PING_RSP;
190STRUCT!{#[repr(packed)] struct BTH_INFO_REQ {
191 btAddr: BTH_ADDR,
192 infoType: USHORT,
193}}
194pub type PBTH_INFO_REQ = *mut BTH_INFO_REQ;
195UNION!{#[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],
199}}
200STRUCT!{#[repr(packed)] struct BTH_INFO_RSP {
201 result: USHORT,
202 dataLen: UCHAR,
203 u: BTH_INFO_RSP_u,
204}}
205pub type PBTH_INFO_RSP = *mut BTH_INFO_RSP;
206pub type BTHNS_SETBLOB = BTH_SET_SERVICE;
207pub type PBTHNS_SETBLOB = PBTH_SET_SERVICE;
208pub type BTHNS_INQUIRYBLOB = BTH_QUERY_DEVICE;
209pub type PBTHNS_INQUIRYBLOB = PBTH_QUERY_DEVICE;
210pub type BTHNS_RESTRICTIONBLOB = BTH_QUERY_SERVICE;
211pub type PBTHNS_RESTRICTIONBLOB = PBTH_QUERY_SERVICE;