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