1 /**
2  * This file is part of the mingw-w64 runtime package.
3  * No warranty is given; refer to the file DISCLAIMER within this package.
4  */
5 
6 #include <winapifamily.h>
7 
8 #ifndef __WS2BTH__H
9 #define __WS2BTH__H
10 
11 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
12 
13 #include <bthdef.h>
14 #include <bthsdpdef.h>
15 #include <pshpack1.h>
16 
17 #define BT_PORT_ANY ((ULONG)-1)
18 #define BT_PORT_MIN 0x1
19 #define BT_PORT_MAX 0xffff
20 #define BT_PORT_DYN_FIRST 0x1001
21 
22 #ifndef AF_BTH
23 #define AF_BTH 32
24 #endif
25 
26 #ifndef PF_BTH
27 #define PF_BTH AF_BTH
28 #endif
29 
30 #ifndef NS_BTH
31 #define NS_BTH 16
32 #endif
33 
34 typedef struct _SOCKADDR_BTH {
35   USHORT addressFamily;
36   BTH_ADDR btAddr;
37   GUID serviceClassId;
38   ULONG port;
39 } SOCKADDR_BTH,*PSOCKADDR_BTH;
40 
41 DEFINE_GUID (SVCID_BTH_PROVIDER, 0x6aa63e0, 0x7d60, 0x41ff, 0xaf, 0xb2, 0x3e, 0xe6, 0xd2, 0xd9, 0x39, 0x2d);
42 
43 #define BTH_ADDR_STRING_SIZE 12
44 
45 #define BTHPROTO_RFCOMM 0x0003
46 #define BTHPROTO_L2CAP 0x0100
47 
48 #define SOL_RFCOMM BTHPROTO_RFCOMM
49 #define SOL_L2CAP BTHPROTO_L2CAP
50 #define SOL_SDP 0x0101
51 
52 #define SO_BTH_AUTHENTICATE 0x80000001
53 #define SO_BTH_ENCRYPT 0x00000002
54 #define SO_BTH_MTU 0x80000007
55 #define SO_BTH_MTU_MAX 0x80000008
56 #define SO_BTH_MTU_MIN 0x8000000a
57 
58 #define RFCOMM_MAX_MTU 0x000003f3
59 #define RFCOMM_MIN_MTU 0x00000017
60 
61 #define BTH_SDP_VERSION 1
62 
63 typedef struct _BTH_SET_SERVICE {
64   PULONG pSdpVersion;
65   HANDLE *pRecordHandle;
66   ULONG fCodService;
67   ULONG Reserved[5];
68   ULONG ulRecordLength;
69   UCHAR pRecord[1];
70 } BTH_SET_SERVICE,*PBTH_SET_SERVICE;
71 
72 #define SDP_DEFAULT_INQUIRY_SECONDS 6
73 #define SDP_MAX_INQUIRY_SECONDS 60
74 
75 #define SDP_DEFAULT_INQUIRY_MAX_RESPONSES 255
76 
77 #define SDP_SERVICE_SEARCH_REQUEST 1
78 #define SDP_SERVICE_ATTRIBUTE_REQUEST 2
79 #define SDP_SERVICE_SEARCH_ATTRIBUTE_REQUEST 3
80 
81 typedef struct _BTH_QUERY_DEVICE {
82   ULONG LAP;
83   UCHAR length;
84 } BTH_QUERY_DEVICE,*PBTH_QUERY_DEVICE;
85 typedef struct _BTH_QUERY_SERVICE {
86   ULONG type;
87   ULONG serviceHandle;
88   SdpQueryUuid uuids[MAX_UUIDS_IN_QUERY];
89   ULONG numRange;
90   SdpAttributeRange pRange[1];
91 } BTH_QUERY_SERVICE,*PBTH_QUERY_SERVICE;
92 
93 #define BTHNS_RESULT_DEVICE_CONNECTED 0x00010000
94 #define BTHNS_RESULT_DEVICE_REMEMBERED 0x00020000
95 #define BTHNS_RESULT_DEVICE_AUTHENTICATED 0x00040000
96 
97 #define SIO_RFCOMM_SEND_COMMAND _WSAIORW (IOC_VENDOR, 101)
98 #define SIO_RFCOMM_WAIT_COMMAND _WSAIORW (IOC_VENDOR, 102)
99 
100 #define SIO_BTH_PING _WSAIORW (IOC_VENDOR, 8)
101 #define SIO_BTH_INFO _WSAIORW (IOC_VENDOR, 9)
102 #define SIO_RFCOMM_SESSION_FLOW_OFF _WSAIORW (IOC_VENDOR, 103)
103 #define SIO_RFCOMM_TEST _WSAIORW (IOC_VENDOR, 104)
104 #define SIO_RFCOMM_USECFC _WSAIORW (IOC_VENDOR, 105)
105 
106 #ifndef BIT
107 #define BIT(b) (1 << (b))
108 #endif
109 
110 #define MSC_EA_BIT EA_BIT
111 #define MSC_FC_BIT BIT (1)
112 #define MSC_RTC_BIT BIT (2)
113 #define MSC_RTR_BIT BIT (3)
114 #define MSC_RESERVED (BIT (4)|BIT (5))
115 #define MSC_IC_BIT BIT (6)
116 #define MSC_DV_BIT BIT (7)
117 
118 #define MSC_BREAK_BIT BIT (1)
119 #define MSC_SET_BREAK_LENGTH (b, l) ((b) = ((b) &0x3) | (((l) &0xf) << 4))
120 
121 #define RLS_ERROR 0x01
122 #define RLS_OVERRUN 0x02
123 #define RLS_PARITY 0x04
124 #define RLS_FRAMING 0x08
125 
126 #define RPN_BAUD_2400 0
127 #define RPN_BAUD_4800 1
128 #define RPN_BAUD_7200 2
129 #define RPN_BAUD_9600 3
130 #define RPN_BAUD_19200 4
131 #define RPN_BAUD_38400 5
132 #define RPN_BAUD_57600 6
133 #define RPN_BAUD_115200 7
134 #define RPN_BAUD_230400 8
135 
136 #define RPN_DATA_5 0x0
137 #define RPN_DATA_6 0x1
138 #define RPN_DATA_7 0x2
139 #define RPN_DATA_8 0x3
140 
141 #define RPN_STOP_1 0x0
142 #define RPN_STOP_1_5 0x4
143 
144 #define RPN_PARITY_NONE 0x00
145 #define RPN_PARITY_ODD 0x08
146 #define RPN_PARITY_EVEN 0x18
147 #define RPN_PARITY_MARK 0x28
148 #define RPN_PARITY_SPACE 0x38
149 
150 #define RPN_FLOW_X_IN 0x01
151 #define RPN_FLOW_X_OUT 0x02
152 #define RPN_FLOW_RTR_IN 0x04
153 #define RPN_FLOW_RTR_OUT 0x08
154 #define RPN_FLOW_RTC_IN 0x10
155 #define RPN_FLOW_RTC_OUT 0x20
156 
157 #define RPN_PARAM_BAUD 0x01
158 #define RPN_PARAM_DATA 0x02
159 #define RPN_PARAM_STOP 0x04
160 #define RPN_PARAM_PARITY 0x08
161 #define RPN_PARAM_P_TYPE 0x10
162 #define RPN_PARAM_XON 0x20
163 #define RPN_PARAM_XOFF 0x40
164 
165 #define RPN_PARAM_X_IN 0x01
166 #define RPN_PARAM_X_OUT 0x02
167 #define RPN_PARAM_RTR_IN 0x04
168 #define RPN_PARAM_RTR_OUT 0x08
169 #define RPN_PARAM_RTC_IN 0x10
170 #define RPN_PARAM_RTC_OUT 0x20
171 
172 #define RFCOMM_CMD_NONE 0
173 #define RFCOMM_CMD_MSC 1
174 #define RFCOMM_CMD_RLS 2
175 #define RFCOMM_CMD_RPN 3
176 #define RFCOMM_CMD_RPN_REQUEST 4
177 #define RFCOMM_CMD_RPN_RESPONSE 5
178 
179 typedef struct _RFCOMM_MSC_DATA {
180   UCHAR Signals;
181   UCHAR Break;
182 } RFCOMM_MSC_DATA,*PRFCOMM_MSC_DATA;
183 
184 typedef struct _RFCOMM_RLS_DATA {
185   UCHAR LineStatus;
186 } RFCOMM_RLS_DATA,*PRFCOMM_RLS_DATA;
187 
188 typedef struct _RFCOMM_RPN_DATA {
189   UCHAR Baud;
190   UCHAR Data;
191   UCHAR FlowControl;
192   UCHAR XonChar;
193   UCHAR XoffChar;
194   UCHAR ParameterMask1;
195   UCHAR ParameterMask2;
196 } RFCOMM_RPN_DATA,*PRFCOMM_RPN_DATA;
197 
198 typedef struct _RFCOMM_COMMAND {
199   ULONG CmdType;
200   union {
201     RFCOMM_MSC_DATA MSC;
202     RFCOMM_RLS_DATA RLS;
203     RFCOMM_RPN_DATA RPN;
204   } Data;
205 } RFCOMM_COMMAND,*PRFCOMM_COMMAND;
206 
207 typedef struct _BTH_PING_REQ {
208   BTH_ADDR btAddr;
209   UCHAR dataLen;
210   UCHAR data[MAX_L2CAP_PING_DATA_LENGTH];
211 } BTH_PING_REQ,*PBTH_PING_REQ;
212 
213 typedef struct _BTH_PING_RSP {
214   UCHAR dataLen;
215   UCHAR data[MAX_L2CAP_PING_DATA_LENGTH];
216 } BTH_PING_RSP,*PBTH_PING_RSP;
217 
218 typedef struct _BTH_INFO_REQ {
219   BTH_ADDR btAddr;
220   USHORT infoType;
221 } BTH_INFO_REQ,*PBTH_INFO_REQ;
222 
223 typedef struct _BTH_INFO_RSP {
224   USHORT result;
225   UCHAR dataLen;
226   __C89_NAMELESS union {
227     USHORT connectionlessMTU;
228     UCHAR data[MAX_L2CAP_INFO_DATA_LENGTH];
229   };
230 } BTH_INFO_RSP,*PBTH_INFO_RSP;
231 
232 typedef struct _BTH_SET_SERVICE BTHNS_SETBLOB,*PBTHNS_SETBLOB;
233 typedef struct _BTH_QUERY_DEVICE BTHNS_INQUIRYBLOB,*PBTHNS_INQUIRYBLOB;
234 typedef struct _BTH_QUERY_SERVICE BTHNS_RESTRICTIONBLOB,*PBTHNS_RESTRICTIONBLOB;
235 
236 #include <poppack.h>
237 
238 #endif
239 
240 #endif
241