/src/bluez/lib/bluetooth/hci_lib.h
Line | Count | Source |
1 | | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
2 | | /* |
3 | | * |
4 | | * BlueZ - Bluetooth protocol stack for Linux |
5 | | * |
6 | | * Copyright (C) 2000-2001 Qualcomm Incorporated |
7 | | * Copyright (C) 2002-2003 Maxim Krasnyansky <maxk@qualcomm.com> |
8 | | * Copyright (C) 2002-2010 Marcel Holtmann <marcel@holtmann.org> |
9 | | * |
10 | | * |
11 | | */ |
12 | | |
13 | | #ifndef __HCI_LIB_H |
14 | | #define __HCI_LIB_H |
15 | | |
16 | | #ifdef __cplusplus |
17 | | extern "C" { |
18 | | #endif |
19 | | |
20 | | #include <stdint.h> |
21 | | #include <string.h> |
22 | | |
23 | | #include <bluetooth/bluetooth.h> |
24 | | #include <bluetooth/hci.h> |
25 | | |
26 | | struct hci_request { |
27 | | uint16_t ogf; |
28 | | uint16_t ocf; |
29 | | int event; |
30 | | void *cparam; |
31 | | int clen; |
32 | | void *rparam; |
33 | | int rlen; |
34 | | }; |
35 | | |
36 | | struct hci_version { |
37 | | uint16_t manufacturer; |
38 | | uint8_t hci_ver; |
39 | | uint16_t hci_rev; |
40 | | uint8_t lmp_ver; |
41 | | uint16_t lmp_subver; |
42 | | }; |
43 | | |
44 | | int hci_open_dev(int dev_id); |
45 | | int hci_close_dev(int dd); |
46 | | int hci_send_cmd(int dd, uint16_t ogf, uint16_t ocf, uint8_t plen, void *param); |
47 | | int hci_send_req(int dd, struct hci_request *req, int timeout); |
48 | | |
49 | | int hci_create_connection(int dd, const bdaddr_t *bdaddr, uint16_t ptype, uint16_t clkoffset, uint8_t rswitch, uint16_t *handle, int to); |
50 | | int hci_disconnect(int dd, uint16_t handle, uint8_t reason, int to); |
51 | | |
52 | | int hci_inquiry(int dev_id, int len, int num_rsp, const uint8_t *lap, inquiry_info **ii, long flags); |
53 | | int hci_devinfo(int dev_id, struct hci_dev_info *di); |
54 | | int hci_devba(int dev_id, bdaddr_t *bdaddr); |
55 | | int hci_devid(const char *str); |
56 | | |
57 | | int hci_read_local_name(int dd, int len, char *name, int to); |
58 | | int hci_write_local_name(int dd, const char *name, int to); |
59 | | int hci_read_remote_name(int dd, const bdaddr_t *bdaddr, int len, char *name, int to); |
60 | | int hci_read_remote_name_with_clock_offset(int dd, const bdaddr_t *bdaddr, uint8_t pscan_rep_mode, uint16_t clkoffset, int len, char *name, int to); |
61 | | int hci_read_remote_name_cancel(int dd, const bdaddr_t *bdaddr, int to); |
62 | | int hci_read_remote_version(int dd, uint16_t handle, struct hci_version *ver, int to); |
63 | | int hci_read_remote_features(int dd, uint16_t handle, uint8_t *features, int to); |
64 | | int hci_read_remote_ext_features(int dd, uint16_t handle, uint8_t page, uint8_t *max_page, uint8_t *features, int to); |
65 | | int hci_read_clock_offset(int dd, uint16_t handle, uint16_t *clkoffset, int to); |
66 | | int hci_read_local_version(int dd, struct hci_version *ver, int to); |
67 | | int hci_read_local_commands(int dd, uint8_t *commands, int to); |
68 | | int hci_read_local_features(int dd, uint8_t *features, int to); |
69 | | int hci_read_local_ext_features(int dd, uint8_t page, uint8_t *max_page, uint8_t *features, int to); |
70 | | int hci_read_bd_addr(int dd, bdaddr_t *bdaddr, int to); |
71 | | int hci_read_class_of_dev(int dd, uint8_t *cls, int to); |
72 | | int hci_write_class_of_dev(int dd, uint32_t cls, int to); |
73 | | int hci_read_voice_setting(int dd, uint16_t *vs, int to); |
74 | | int hci_write_voice_setting(int dd, uint16_t vs, int to); |
75 | | int hci_read_current_iac_lap(int dd, uint8_t *num_iac, uint8_t *lap, int to); |
76 | | int hci_write_current_iac_lap(int dd, uint8_t num_iac, uint8_t *lap, int to); |
77 | | int hci_read_stored_link_key(int dd, bdaddr_t *bdaddr, uint8_t all, int to); |
78 | | int hci_write_stored_link_key(int dd, bdaddr_t *bdaddr, uint8_t *key, int to); |
79 | | int hci_delete_stored_link_key(int dd, bdaddr_t *bdaddr, uint8_t all, int to); |
80 | | int hci_authenticate_link(int dd, uint16_t handle, int to); |
81 | | int hci_encrypt_link(int dd, uint16_t handle, uint8_t encrypt, int to); |
82 | | int hci_change_link_key(int dd, uint16_t handle, int to); |
83 | | int hci_switch_role(int dd, bdaddr_t *bdaddr, uint8_t role, int to); |
84 | | int hci_park_mode(int dd, uint16_t handle, uint16_t max_interval, uint16_t min_interval, int to); |
85 | | int hci_exit_park_mode(int dd, uint16_t handle, int to); |
86 | | int hci_read_inquiry_scan_type(int dd, uint8_t *type, int to); |
87 | | int hci_write_inquiry_scan_type(int dd, uint8_t type, int to); |
88 | | int hci_read_inquiry_mode(int dd, uint8_t *mode, int to); |
89 | | int hci_write_inquiry_mode(int dd, uint8_t mode, int to); |
90 | | int hci_read_afh_mode(int dd, uint8_t *mode, int to); |
91 | | int hci_write_afh_mode(int dd, uint8_t mode, int to); |
92 | | int hci_read_ext_inquiry_response(int dd, uint8_t *fec, uint8_t *data, int to); |
93 | | int hci_write_ext_inquiry_response(int dd, uint8_t fec, uint8_t *data, int to); |
94 | | int hci_read_simple_pairing_mode(int dd, uint8_t *mode, int to); |
95 | | int hci_write_simple_pairing_mode(int dd, uint8_t mode, int to); |
96 | | int hci_read_local_oob_data(int dd, uint8_t *hash, uint8_t *randomizer, int to); |
97 | | int hci_read_inq_response_tx_power_level(int dd, int8_t *level, int to); |
98 | | int hci_read_inquiry_transmit_power_level(int dd, int8_t *level, int to); |
99 | | int hci_write_inquiry_transmit_power_level(int dd, int8_t level, int to); |
100 | | int hci_read_transmit_power_level(int dd, uint16_t handle, uint8_t type, int8_t *level, int to); |
101 | | int hci_read_link_policy(int dd, uint16_t handle, uint16_t *policy, int to); |
102 | | int hci_write_link_policy(int dd, uint16_t handle, uint16_t policy, int to); |
103 | | int hci_read_link_supervision_timeout(int dd, uint16_t handle, uint16_t *timeout, int to); |
104 | | int hci_write_link_supervision_timeout(int dd, uint16_t handle, uint16_t timeout, int to); |
105 | | int hci_set_afh_classification(int dd, uint8_t *map, int to); |
106 | | int hci_read_link_quality(int dd, uint16_t handle, uint8_t *link_quality, int to); |
107 | | int hci_read_rssi(int dd, uint16_t handle, int8_t *rssi, int to); |
108 | | int hci_read_afh_map(int dd, uint16_t handle, uint8_t *mode, uint8_t *map, int to); |
109 | | int hci_read_clock(int dd, uint16_t handle, uint8_t which, uint32_t *clock, uint16_t *accuracy, int to); |
110 | | |
111 | | int hci_le_set_scan_enable(int dev_id, uint8_t enable, uint8_t filter_dup, int to); |
112 | | int hci_le_set_scan_parameters(int dev_id, uint8_t type, uint16_t interval, |
113 | | uint16_t window, uint8_t own_type, |
114 | | uint8_t filter, int to); |
115 | | int hci_le_set_advertise_enable(int dev_id, uint8_t enable, int to); |
116 | | int hci_le_create_conn(int dd, uint16_t interval, uint16_t window, |
117 | | uint8_t initiator_filter, uint8_t peer_bdaddr_type, |
118 | | bdaddr_t peer_bdaddr, uint8_t own_bdaddr_type, |
119 | | uint16_t min_interval, uint16_t max_interval, |
120 | | uint16_t latency, uint16_t supervision_timeout, |
121 | | uint16_t min_ce_length, uint16_t max_ce_length, |
122 | | uint16_t *handle, int to); |
123 | | int hci_le_conn_update(int dd, uint16_t handle, uint16_t min_interval, |
124 | | uint16_t max_interval, uint16_t latency, |
125 | | uint16_t supervision_timeout, int to); |
126 | | int hci_le_add_white_list(int dd, const bdaddr_t *bdaddr, uint8_t type, int to); |
127 | | int hci_le_rm_white_list(int dd, const bdaddr_t *bdaddr, uint8_t type, int to); |
128 | | int hci_le_read_white_list_size(int dd, uint8_t *size, int to); |
129 | | int hci_le_clear_white_list(int dd, int to); |
130 | | int hci_le_add_resolving_list(int dd, const bdaddr_t *bdaddr, uint8_t type, |
131 | | uint8_t *peer_irk, uint8_t *local_irk, int to); |
132 | | int hci_le_rm_resolving_list(int dd, const bdaddr_t *bdaddr, uint8_t type, int to); |
133 | | int hci_le_clear_resolving_list(int dd, int to); |
134 | | int hci_le_read_resolving_list_size(int dd, uint8_t *size, int to); |
135 | | int hci_le_set_address_resolution_enable(int dev_id, uint8_t enable, int to); |
136 | | int hci_le_read_remote_features(int dd, uint16_t handle, uint8_t *features, int to); |
137 | | |
138 | | int hci_for_each_dev(int flag, int(*func)(int dd, int dev_id, long arg), long arg); |
139 | | int hci_get_route(bdaddr_t *bdaddr); |
140 | | |
141 | | const char *hci_bustostr(int bus); |
142 | | char *hci_typetostr(int type); |
143 | | const char *hci_dtypetostr(int type); |
144 | | char *hci_dflagstostr(uint32_t flags); |
145 | | char *hci_ptypetostr(unsigned int ptype); |
146 | | int hci_strtoptype(char *str, unsigned int *val); |
147 | | char *hci_scoptypetostr(unsigned int ptype); |
148 | | int hci_strtoscoptype(char *str, unsigned int *val); |
149 | | char *hci_lptostr(unsigned int ptype); |
150 | | int hci_strtolp(char *str, unsigned int *val); |
151 | | char *hci_lmtostr(unsigned int ptype); |
152 | | int hci_strtolm(char *str, unsigned int *val); |
153 | | |
154 | | char *hci_cmdtostr(unsigned int cmd); |
155 | | char *hci_commandstostr(const uint8_t *commands, const char *pref, int width); |
156 | | |
157 | | char *hci_vertostr(unsigned int ver); |
158 | | int hci_strtover(char *str, unsigned int *ver); |
159 | | char *lmp_vertostr(unsigned int ver); |
160 | | int lmp_strtover(char *str, unsigned int *ver); |
161 | | char *pal_vertostr(unsigned int ver); |
162 | | int pal_strtover(char *str, unsigned int *ver); |
163 | | |
164 | | char *lmp_featurestostr(uint8_t *features, char *pref, int width); |
165 | | |
166 | | static inline void hci_set_bit(int nr, void *addr) |
167 | 0 | { |
168 | 0 | *((uint32_t *) addr + (nr >> 5)) |= (1 << (nr & 31)); |
169 | 0 | } Unexecuted instantiation: sdp.c:hci_set_bit Unexecuted instantiation: hci.c:hci_set_bit |
170 | | |
171 | | static inline void hci_clear_bit(int nr, void *addr) |
172 | 0 | { |
173 | 0 | *((uint32_t *) addr + (nr >> 5)) &= ~(1 << (nr & 31)); |
174 | 0 | } Unexecuted instantiation: sdp.c:hci_clear_bit Unexecuted instantiation: hci.c:hci_clear_bit |
175 | | |
176 | | static inline int hci_test_bit(int nr, void *addr) |
177 | 0 | { |
178 | 0 | return *((uint32_t *) addr + (nr >> 5)) & (1 << (nr & 31)); |
179 | 0 | } Unexecuted instantiation: sdp.c:hci_test_bit Unexecuted instantiation: hci.c:hci_test_bit |
180 | | |
181 | | /* HCI filter tools */ |
182 | | static inline void hci_filter_clear(struct hci_filter *f) |
183 | 0 | { |
184 | 0 | memset(f, 0, sizeof(*f)); |
185 | 0 | } Unexecuted instantiation: sdp.c:hci_filter_clear Unexecuted instantiation: hci.c:hci_filter_clear |
186 | | static inline void hci_filter_set_ptype(int t, struct hci_filter *f) |
187 | 0 | { |
188 | 0 | hci_set_bit((t == HCI_VENDOR_PKT) ? 0 : (t & HCI_FLT_TYPE_BITS), &f->type_mask); |
189 | 0 | } Unexecuted instantiation: sdp.c:hci_filter_set_ptype Unexecuted instantiation: hci.c:hci_filter_set_ptype |
190 | | static inline void hci_filter_clear_ptype(int t, struct hci_filter *f) |
191 | 0 | { |
192 | 0 | hci_clear_bit((t == HCI_VENDOR_PKT) ? 0 : (t & HCI_FLT_TYPE_BITS), &f->type_mask); |
193 | 0 | } Unexecuted instantiation: sdp.c:hci_filter_clear_ptype Unexecuted instantiation: hci.c:hci_filter_clear_ptype |
194 | | static inline int hci_filter_test_ptype(int t, struct hci_filter *f) |
195 | 0 | { |
196 | 0 | return hci_test_bit((t == HCI_VENDOR_PKT) ? 0 : (t & HCI_FLT_TYPE_BITS), &f->type_mask); |
197 | 0 | } Unexecuted instantiation: sdp.c:hci_filter_test_ptype Unexecuted instantiation: hci.c:hci_filter_test_ptype |
198 | | static inline void hci_filter_all_ptypes(struct hci_filter *f) |
199 | 0 | { |
200 | 0 | memset((void *) &f->type_mask, 0xff, sizeof(f->type_mask)); |
201 | 0 | } Unexecuted instantiation: sdp.c:hci_filter_all_ptypes Unexecuted instantiation: hci.c:hci_filter_all_ptypes |
202 | | static inline void hci_filter_set_event(int e, struct hci_filter *f) |
203 | 0 | { |
204 | 0 | hci_set_bit((e & HCI_FLT_EVENT_BITS), &f->event_mask); |
205 | 0 | } Unexecuted instantiation: sdp.c:hci_filter_set_event Unexecuted instantiation: hci.c:hci_filter_set_event |
206 | | static inline void hci_filter_clear_event(int e, struct hci_filter *f) |
207 | 0 | { |
208 | 0 | hci_clear_bit((e & HCI_FLT_EVENT_BITS), &f->event_mask); |
209 | 0 | } Unexecuted instantiation: sdp.c:hci_filter_clear_event Unexecuted instantiation: hci.c:hci_filter_clear_event |
210 | | static inline int hci_filter_test_event(int e, struct hci_filter *f) |
211 | 0 | { |
212 | 0 | return hci_test_bit((e & HCI_FLT_EVENT_BITS), &f->event_mask); |
213 | 0 | } Unexecuted instantiation: sdp.c:hci_filter_test_event Unexecuted instantiation: hci.c:hci_filter_test_event |
214 | | static inline void hci_filter_all_events(struct hci_filter *f) |
215 | 0 | { |
216 | 0 | memset((void *) f->event_mask, 0xff, sizeof(f->event_mask)); |
217 | 0 | } Unexecuted instantiation: sdp.c:hci_filter_all_events Unexecuted instantiation: hci.c:hci_filter_all_events |
218 | | static inline void hci_filter_set_opcode(int opcode, struct hci_filter *f) |
219 | 0 | { |
220 | 0 | f->opcode = opcode; |
221 | 0 | } Unexecuted instantiation: sdp.c:hci_filter_set_opcode Unexecuted instantiation: hci.c:hci_filter_set_opcode |
222 | | static inline void hci_filter_clear_opcode(struct hci_filter *f) |
223 | 0 | { |
224 | 0 | f->opcode = 0; |
225 | 0 | } Unexecuted instantiation: sdp.c:hci_filter_clear_opcode Unexecuted instantiation: hci.c:hci_filter_clear_opcode |
226 | | static inline int hci_filter_test_opcode(int opcode, struct hci_filter *f) |
227 | 0 | { |
228 | 0 | return (f->opcode == opcode); |
229 | 0 | } Unexecuted instantiation: sdp.c:hci_filter_test_opcode Unexecuted instantiation: hci.c:hci_filter_test_opcode |
230 | | |
231 | | #ifdef __cplusplus |
232 | | } |
233 | | #endif |
234 | | |
235 | | #endif /* __HCI_LIB_H */ |