Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __WS2BTH__H
00020 #pragma option push -b -a8 -pc -A-
00021 #define __WS2BTH__H
00022
00023 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
00024
00025 #include <zeusbase/Net/bluetooth/bcb6/bthdef.h>
00026
00027 #include <zeusbase/Net/bluetooth/bcb6/pshpack1.h>
00028
00029 #define BT_PORT_ANY ((ULONG)-1)
00030 #define BT_PORT_MIN 0x1
00031 #define BT_PORT_MAX 0xffff
00032 #define BT_PORT_DYN_FIRST 0x1001
00033
00034
00035
00036
00037 #ifndef AF_BTH
00038 #define AF_BTH 32
00039 #endif
00040 #ifndef PF_BTH
00041 #define PF_BTH AF_BTH
00042 #endif
00043 #ifndef NS_BTH
00044 #define NS_BTH 16
00045 #endif
00046
00047 typedef struct _SOCKADDR_BTH
00048 {
00049 USHORT addressFamily;
00050 BTH_ADDR btAddr;
00051 GUID serviceClassId;
00052 ULONG port;
00053 } SOCKADDR_BTH, *PSOCKADDR_BTH;
00054
00055
00056 DEFINE_GUID(SVCID_BTH_PROVIDER, 0x6aa63e0, 0x7d60, 0x41ff, 0xaf, 0xb2, 0x3e, 0xe6, 0xd2, 0xd9, 0x39, 0x2d);
00057 #define BTH_ADDR_STRING_SIZE 12 // max size from WSAAddressToString
00058
00059
00060
00061
00062
00063 #define BTHPROTO_RFCOMM 0x0003
00064 #define BTHPROTO_L2CAP 0x0100
00065
00066 #define SOL_RFCOMM BTHPROTO_RFCOMM
00067 #define SOL_L2CAP BTHPROTO_L2CAP
00068 #define SOL_SDP 0x0101
00069
00070
00071
00072
00073 #define SO_BTH_AUTHENTICATE 0x80000001 // optlen=sizeof(ULONG), optval = &(ULONG)TRUE/FALSE
00074 #define SO_BTH_ENCRYPT 0x00000002 // optlen=sizeof(ULONG), optval = &(ULONG)TRUE/FALSE
00075 #define SO_BTH_MTU 0x80000007 // optlen=sizeof(ULONG), optval = &mtu
00076 #define SO_BTH_MTU_MAX 0x80000008 // optlen=sizeof(ULONG), optval = &max. mtu
00077 #define SO_BTH_MTU_MIN 0x8000000a // optlen=sizeof(ULONG), optval = &min. mtu
00078
00079
00080
00081
00082
00083 #define RFCOMM_MAX_MTU 0x000003F3 // L2CAP MTU (1017) - RFCOMM header size (6)
00084 #define RFCOMM_MIN_MTU 0x00000017 // RFCOMM spec sec 5.3 table 5.1
00085
00086
00087
00088
00089
00090
00091
00092 #define BTH_SDP_VERSION 1
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102 typedef struct _BTH_SET_SERVICE {
00103
00104
00105
00106
00107
00108
00109 PULONG pSdpVersion;
00110
00111
00112
00113
00114
00115
00116 HANDLE *pRecordHandle;
00117
00118
00119
00120
00121
00122
00123
00124 ULONG fCodService;
00125
00126 ULONG Reserved[5];
00127 ULONG ulRecordLength;
00128 UCHAR pRecord[1];
00129
00130 } BTH_SET_SERVICE, *PBTH_SET_SERVICE;
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143 #define SDP_DEFAULT_INQUIRY_SECONDS 6
00144 #define SDP_MAX_INQUIRY_SECONDS 60
00145
00146
00147
00148
00149 #define SDP_DEFAULT_INQUIRY_MAX_RESPONSES 255
00150
00151 #define SDP_SERVICE_SEARCH_REQUEST 1
00152 #define SDP_SERVICE_ATTRIBUTE_REQUEST 2
00153 #define SDP_SERVICE_SEARCH_ATTRIBUTE_REQUEST 3
00154
00155
00156
00157
00158
00159 typedef struct _BTH_QUERY_DEVICE {
00160 ULONG LAP;
00161 UCHAR length;
00162 } BTH_QUERY_DEVICE, *PBTH_QUERY_DEVICE;
00163
00164
00165
00166
00167
00168 typedef struct _BTH_QUERY_SERVICE {
00169 ULONG type;
00170 ULONG serviceHandle;
00171 SdpQueryUuid uuids[MAX_UUIDS_IN_QUERY];
00172 ULONG numRange;
00173 SdpAttributeRange pRange[1];
00174 } BTH_QUERY_SERVICE, *PBTH_QUERY_SERVICE;
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186 #define BTHNS_RESULT_DEVICE_CONNECTED 0x00010000
00187 #define BTHNS_RESULT_DEVICE_REMEMBERED 0x00020000
00188 #define BTHNS_RESULT_DEVICE_AUTHENTICATED 0x00040000
00189
00190
00191
00192
00193
00194 #define SIO_RFCOMM_SEND_COMMAND _WSAIORW (IOC_VENDOR, 101)
00195 #define SIO_RFCOMM_WAIT_COMMAND _WSAIORW (IOC_VENDOR, 102)
00196
00197
00198
00199
00200
00201 #define SIO_BTH_PING _WSAIORW (IOC_VENDOR, 8)
00202 #define SIO_BTH_INFO _WSAIORW (IOC_VENDOR, 9)
00203 #define SIO_RFCOMM_SESSION_FLOW_OFF _WSAIORW (IOC_VENDOR, 103)
00204 #define SIO_RFCOMM_TEST _WSAIORW (IOC_VENDOR, 104)
00205 #define SIO_RFCOMM_USECFC _WSAIORW (IOC_VENDOR, 105)
00206
00207
00208
00209
00210
00211
00212
00213 #ifndef BIT
00214 #define BIT(b) (1<<(b))
00215 #endif
00216
00217
00218
00219
00220 typedef struct _RFCOMM_MSC_DATA {
00221 UCHAR Signals;
00222
00223 #define MSC_EA_BIT EA_BIT
00224 #define MSC_FC_BIT BIT(1) // Flow control, clear if we can receive
00225 #define MSC_RTC_BIT BIT(2) // Ready to communicate, set when ready
00226 #define MSC_RTR_BIT BIT(3) // Ready to receive, set when ready
00227 #define MSC_RESERVED (BIT(4)|BIT(5))// Reserved by spec, must be 0
00228 #define MSC_IC_BIT BIT(6) // Incoming call
00229 #define MSC_DV_BIT BIT(7) // Data valid
00230
00231 UCHAR Break;
00232
00233 #define MSC_BREAK_BIT BIT(1) // Set if sending break
00234 #define MSC_SET_BREAK_LENGTH(b, l) ((b) = ((b)&0x3) | (((l)&0xf) << 4))
00235
00236 } RFCOMM_MSC_DATA, *PRFCOMM_MSC_DATA;
00237
00238
00239
00240
00241 typedef struct _RFCOMM_RLS_DATA {
00242
00243 UCHAR LineStatus;
00244
00245 #define RLS_ERROR 0x01
00246 #define RLS_OVERRUN 0x02
00247 #define RLS_PARITY 0x04
00248 #define RLS_FRAMING 0x08
00249
00250 } RFCOMM_RLS_DATA, *PRFCOMM_RLS_DATA;
00251
00252
00253
00254
00255 typedef struct _RFCOMM_RPN_DATA {
00256 UCHAR Baud;
00257
00258 #define RPN_BAUD_2400 0
00259 #define RPN_BAUD_4800 1
00260 #define RPN_BAUD_7200 2
00261 #define RPN_BAUD_9600 3
00262 #define RPN_BAUD_19200 4
00263 #define RPN_BAUD_38400 5
00264 #define RPN_BAUD_57600 6
00265 #define RPN_BAUD_115200 7
00266 #define RPN_BAUD_230400 8
00267
00268 UCHAR Data;
00269
00270 #define RPN_DATA_5 0x0
00271 #define RPN_DATA_6 0x1
00272 #define RPN_DATA_7 0x2
00273 #define RPN_DATA_8 0x3
00274
00275 #define RPN_STOP_1 0x0
00276 #define RPN_STOP_1_5 0x4
00277
00278 #define RPN_PARITY_NONE 0x00
00279 #define RPN_PARITY_ODD 0x08
00280 #define RPN_PARITY_EVEN 0x18
00281 #define RPN_PARITY_MARK 0x28
00282 #define RPN_PARITY_SPACE 0x38
00283
00284 UCHAR FlowControl;
00285
00286 #define RPN_FLOW_X_IN 0x01
00287 #define RPN_FLOW_X_OUT 0x02
00288 #define RPN_FLOW_RTR_IN 0x04
00289 #define RPN_FLOW_RTR_OUT 0x08
00290 #define RPN_FLOW_RTC_IN 0x10
00291 #define RPN_FLOW_RTC_OUT 0x20
00292
00293 UCHAR XonChar;
00294 UCHAR XoffChar;
00295 UCHAR ParameterMask1;
00296
00297 #define RPN_PARAM_BAUD 0x01
00298 #define RPN_PARAM_DATA 0x02
00299 #define RPN_PARAM_STOP 0x04
00300 #define RPN_PARAM_PARITY 0x08
00301 #define RPN_PARAM_P_TYPE 0x10
00302 #define RPN_PARAM_XON 0x20
00303 #define RPN_PARAM_XOFF 0x40
00304
00305 UCHAR ParameterMask2;
00306
00307 #define RPN_PARAM_X_IN 0x01
00308 #define RPN_PARAM_X_OUT 0x02
00309 #define RPN_PARAM_RTR_IN 0x04
00310 #define RPN_PARAM_RTR_OUT 0x08
00311 #define RPN_PARAM_RTC_IN 0x10
00312 #define RPN_PARAM_RTC_OUT 0x20
00313
00314 } RFCOMM_RPN_DATA, *PRFCOMM_RPN_DATA;
00315
00316 #define RFCOMM_CMD_NONE 0
00317 #define RFCOMM_CMD_MSC 1
00318 #define RFCOMM_CMD_RLS 2
00319 #define RFCOMM_CMD_RPN 3
00320 #define RFCOMM_CMD_RPN_REQUEST 4
00321 #define RFCOMM_CMD_RPN_RESPONSE 5
00322
00323
00324 typedef struct _RFCOMM_COMMAND
00325 {
00326 ULONG CmdType;
00327 union
00328 {
00329 RFCOMM_MSC_DATA MSC;
00330 RFCOMM_RLS_DATA RLS;
00331 RFCOMM_RPN_DATA RPN;
00332 } Data;
00333 } RFCOMM_COMMAND, *PRFCOMM_COMMAND;
00334
00335
00336
00337
00338
00339 typedef struct _BTH_PING_REQ {
00340 BTH_ADDR btAddr;
00341 UCHAR dataLen;
00342 UCHAR data[MAX_L2CAP_PING_DATA_LENGTH];
00343 } BTH_PING_REQ, *PBTH_PING_REQ;
00344
00345 typedef struct _BTH_PING_RSP {
00346 UCHAR dataLen;
00347 UCHAR data[MAX_L2CAP_PING_DATA_LENGTH];
00348 } BTH_PING_RSP, *PBTH_PING_RSP;
00349
00350 typedef struct _BTH_INFO_REQ {
00351 BTH_ADDR btAddr;
00352 USHORT infoType;
00353 } BTH_INFO_REQ, *PBTH_INFO_REQ;
00354
00355 typedef struct _BTH_INFO_RSP {
00356 USHORT result;
00357 UCHAR dataLen;
00358 union {
00359 USHORT connectionlessMTU;
00360 UCHAR data[MAX_L2CAP_INFO_DATA_LENGTH];
00361 };
00362 } BTH_INFO_RSP, *PBTH_INFO_RSP;
00363
00364
00365
00366
00367 typedef struct _BTH_SET_SERVICE BTHNS_SETBLOB, *PBTHNS_SETBLOB;
00368 typedef struct _BTH_QUERY_DEVICE BTHNS_INQUIRYBLOB, *PBTHNS_INQUIRYBLOB;
00369 typedef struct _BTH_QUERY_SERVICE BTHNS_RESTRICTIONBLOB, *PBTHNS_RESTRICTIONBLOB;
00370
00371 #include <poppack.h>
00372
00373 #endif // (NTDDI_VERSION >= NTDDI_WINXPSP2)
00374
00375
00376 #pragma option pop
00377 #endif // __WS2BTH__H
00378