Coverage Report

Created: 2025-12-30 07:13

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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 */