hc
2024-08-19 a51341d8c7882adfad4f167bc7c3ca616908b53d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
/*
   BlueZ - Bluetooth protocol stack for Linux
   Copyright (C) 2000-2001 Qualcomm Incorporated
 
   Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
 
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License version 2 as
   published by the Free Software Foundation;
 
   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
   IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
   CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
   ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
   COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
   SOFTWARE IS DISCLAIMED.
*/
 
#ifndef __HCI_SOCK_H
#define __HCI_SOCK_H
 
/* Socket options */
#define HCI_DATA_DIR    1
#define HCI_FILTER    2
#define HCI_TIME_STAMP    3
 
/* CMSG flags */
#define HCI_CMSG_DIR    0x01
#define HCI_CMSG_TSTAMP    0x02
 
struct sockaddr_hci {
   sa_family_t    hci_family;
   unsigned short hci_dev;
   unsigned short hci_channel;
};
#define HCI_DEV_NONE    0xffff
 
#define HCI_CHANNEL_RAW        0
#define HCI_CHANNEL_USER    1
#define HCI_CHANNEL_MONITOR    2
#define HCI_CHANNEL_CONTROL    3
#define HCI_CHANNEL_LOGGING    4
 
struct hci_filter {
   unsigned long type_mask;
   unsigned long event_mask[2];
   __le16 opcode;
};
 
struct hci_ufilter {
   __u32  type_mask;
   __u32  event_mask[2];
   __le16 opcode;
};
 
#define HCI_FLT_TYPE_BITS    31
#define HCI_FLT_EVENT_BITS    63
#define HCI_FLT_OGF_BITS    63
#define HCI_FLT_OCF_BITS    127
 
/* Ioctl defines */
#define HCIDEVUP    _IOW('H', 201, int)
#define HCIDEVDOWN    _IOW('H', 202, int)
#define HCIDEVRESET    _IOW('H', 203, int)
#define HCIDEVRESTAT    _IOW('H', 204, int)
 
#define HCIGETDEVLIST    _IOR('H', 210, int)
#define HCIGETDEVINFO    _IOR('H', 211, int)
#define HCIGETCONNLIST    _IOR('H', 212, int)
#define HCIGETCONNINFO    _IOR('H', 213, int)
#define HCIGETAUTHINFO    _IOR('H', 215, int)
 
#define HCISETRAW    _IOW('H', 220, int)
#define HCISETSCAN    _IOW('H', 221, int)
#define HCISETAUTH    _IOW('H', 222, int)
#define HCISETENCRYPT    _IOW('H', 223, int)
#define HCISETPTYPE    _IOW('H', 224, int)
#define HCISETLINKPOL    _IOW('H', 225, int)
#define HCISETLINKMODE    _IOW('H', 226, int)
#define HCISETACLMTU    _IOW('H', 227, int)
#define HCISETSCOMTU    _IOW('H', 228, int)
 
#define HCIBLOCKADDR    _IOW('H', 230, int)
#define HCIUNBLOCKADDR    _IOW('H', 231, int)
 
#define HCIINQUIRY    _IOR('H', 240, int)
 
/* Ioctl requests structures */
struct hci_dev_stats {
   __u32 err_rx;
   __u32 err_tx;
   __u32 cmd_tx;
   __u32 evt_rx;
   __u32 acl_tx;
   __u32 acl_rx;
   __u32 sco_tx;
   __u32 sco_rx;
   __u32 byte_rx;
   __u32 byte_tx;
};
 
struct hci_dev_info {
   __u16 dev_id;
   char  name[8];
 
   bdaddr_t bdaddr;
 
   __u32 flags;
   __u8  type;
 
   __u8  features[8];
 
   __u32 pkt_type;
   __u32 link_policy;
   __u32 link_mode;
 
   __u16 acl_mtu;
   __u16 acl_pkts;
   __u16 sco_mtu;
   __u16 sco_pkts;
 
   struct hci_dev_stats stat;
};
 
struct hci_conn_info {
   __u16    handle;
   bdaddr_t bdaddr;
   __u8     type;
   __u8     out;
   __u16    state;
   __u32    link_mode;
};
 
struct hci_dev_req {
   __u16  dev_id;
   __u32  dev_opt;
};
 
struct hci_dev_list_req {
   __u16  dev_num;
   struct hci_dev_req dev_req[];    /* hci_dev_req structures */
};
 
struct hci_conn_list_req {
   __u16  dev_id;
   __u16  conn_num;
   struct hci_conn_info conn_info[];
};
 
struct hci_conn_info_req {
   bdaddr_t bdaddr;
   __u8     type;
   struct   hci_conn_info conn_info[];
};
 
struct hci_auth_info_req {
   bdaddr_t bdaddr;
   __u8     type;
};
 
struct hci_inquiry_req {
   __u16 dev_id;
   __u16 flags;
   __u8  lap[3];
   __u8  length;
   __u8  num_rsp;
};
#define IREQ_CACHE_FLUSH 0x0001
 
#endif /* __HCI_SOCK_H */