xref: /nrf52832-nimble/packages/NimBLE-latest/apps/btshell/src/btshell.h (revision 042d53a763ad75cb1465103098bb88c245d95138)
1*042d53a7SEvalZero /*
2*042d53a7SEvalZero  * Licensed to the Apache Software Foundation (ASF) under one
3*042d53a7SEvalZero  * or more contributor license agreements.  See the NOTICE file
4*042d53a7SEvalZero  * distributed with this work for additional information
5*042d53a7SEvalZero  * regarding copyright ownership.  The ASF licenses this file
6*042d53a7SEvalZero  * to you under the Apache License, Version 2.0 (the
7*042d53a7SEvalZero  * "License"); you may not use this file except in compliance
8*042d53a7SEvalZero  * with the License.  You may obtain a copy of the License at
9*042d53a7SEvalZero  *
10*042d53a7SEvalZero  *  http://www.apache.org/licenses/LICENSE-2.0
11*042d53a7SEvalZero  *
12*042d53a7SEvalZero  * Unless required by applicable law or agreed to in writing,
13*042d53a7SEvalZero  * software distributed under the License is distributed on an
14*042d53a7SEvalZero  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15*042d53a7SEvalZero  * KIND, either express or implied.  See the License for the
16*042d53a7SEvalZero  * specific language governing permissions and limitations
17*042d53a7SEvalZero  * under the License.
18*042d53a7SEvalZero  */
19*042d53a7SEvalZero 
20*042d53a7SEvalZero #ifndef H_BTSHELL_PRIV_
21*042d53a7SEvalZero #define H_BTSHELL_PRIV_
22*042d53a7SEvalZero 
23*042d53a7SEvalZero #include <inttypes.h>
24*042d53a7SEvalZero #include "nimble/ble.h"
25*042d53a7SEvalZero #include "nimble/nimble_opt.h"
26*042d53a7SEvalZero #include "modlog/modlog.h"
27*042d53a7SEvalZero 
28*042d53a7SEvalZero #include "host/ble_gatt.h"
29*042d53a7SEvalZero #include "host/ble_gap.h"
30*042d53a7SEvalZero 
31*042d53a7SEvalZero #ifdef __cplusplus
32*042d53a7SEvalZero extern "C" {
33*042d53a7SEvalZero #endif
34*042d53a7SEvalZero 
35*042d53a7SEvalZero struct ble_gap_white_entry;
36*042d53a7SEvalZero struct ble_hs_adv_fields;
37*042d53a7SEvalZero struct ble_gap_upd_params;
38*042d53a7SEvalZero struct ble_gap_conn_params;
39*042d53a7SEvalZero struct hci_adv_params;
40*042d53a7SEvalZero struct ble_l2cap_sig_update_req;
41*042d53a7SEvalZero struct ble_l2cap_sig_update_params;
42*042d53a7SEvalZero union ble_store_value;
43*042d53a7SEvalZero union ble_store_key;
44*042d53a7SEvalZero struct ble_gap_adv_params;
45*042d53a7SEvalZero struct ble_gap_conn_desc;
46*042d53a7SEvalZero struct ble_gap_disc_params;
47*042d53a7SEvalZero 
48*042d53a7SEvalZero struct btshell_dsc {
49*042d53a7SEvalZero     SLIST_ENTRY(btshell_dsc) next;
50*042d53a7SEvalZero     struct ble_gatt_dsc dsc;
51*042d53a7SEvalZero };
52*042d53a7SEvalZero SLIST_HEAD(btshell_dsc_list, btshell_dsc);
53*042d53a7SEvalZero 
54*042d53a7SEvalZero struct btshell_chr {
55*042d53a7SEvalZero     SLIST_ENTRY(btshell_chr) next;
56*042d53a7SEvalZero     struct ble_gatt_chr chr;
57*042d53a7SEvalZero 
58*042d53a7SEvalZero     struct btshell_dsc_list dscs;
59*042d53a7SEvalZero };
60*042d53a7SEvalZero SLIST_HEAD(btshell_chr_list, btshell_chr);
61*042d53a7SEvalZero 
62*042d53a7SEvalZero struct btshell_svc {
63*042d53a7SEvalZero     SLIST_ENTRY(btshell_svc) next;
64*042d53a7SEvalZero     struct ble_gatt_svc svc;
65*042d53a7SEvalZero     struct btshell_chr_list chrs;
66*042d53a7SEvalZero };
67*042d53a7SEvalZero 
68*042d53a7SEvalZero SLIST_HEAD(btshell_svc_list, btshell_svc);
69*042d53a7SEvalZero 
70*042d53a7SEvalZero struct btshell_l2cap_coc {
71*042d53a7SEvalZero     SLIST_ENTRY(btshell_l2cap_coc) next;
72*042d53a7SEvalZero     struct ble_l2cap_chan *chan;
73*042d53a7SEvalZero };
74*042d53a7SEvalZero 
75*042d53a7SEvalZero SLIST_HEAD(btshell_l2cap_coc_list, btshell_l2cap_coc);
76*042d53a7SEvalZero 
77*042d53a7SEvalZero struct btshell_conn {
78*042d53a7SEvalZero     uint16_t handle;
79*042d53a7SEvalZero     struct btshell_svc_list svcs;
80*042d53a7SEvalZero     struct btshell_l2cap_coc_list coc_list;
81*042d53a7SEvalZero };
82*042d53a7SEvalZero 
83*042d53a7SEvalZero struct btshell_scan_opts {
84*042d53a7SEvalZero     uint16_t limit;
85*042d53a7SEvalZero     uint8_t ignore_legacy:1;
86*042d53a7SEvalZero };
87*042d53a7SEvalZero 
88*042d53a7SEvalZero extern struct btshell_conn btshell_conns[MYNEWT_VAL(BLE_MAX_CONNECTIONS)];
89*042d53a7SEvalZero extern int btshell_num_conns;
90*042d53a7SEvalZero 
91*042d53a7SEvalZero int btshell_exchange_mtu(uint16_t conn_handle);
92*042d53a7SEvalZero int btshell_disc_svcs(uint16_t conn_handle);
93*042d53a7SEvalZero int btshell_disc_svc_by_uuid(uint16_t conn_handle, const ble_uuid_t *uuid);
94*042d53a7SEvalZero int btshell_disc_all_chrs(uint16_t conn_handle, uint16_t start_handle,
95*042d53a7SEvalZero                            uint16_t end_handle);
96*042d53a7SEvalZero int btshell_disc_chrs_by_uuid(uint16_t conn_handle, uint16_t start_handle,
97*042d53a7SEvalZero                                uint16_t end_handle, const ble_uuid_t *uuid);
98*042d53a7SEvalZero int btshell_disc_all_dscs(uint16_t conn_handle, uint16_t start_handle,
99*042d53a7SEvalZero                           uint16_t end_handle);
100*042d53a7SEvalZero int btshell_disc_full(uint16_t conn_handle);
101*042d53a7SEvalZero int btshell_find_inc_svcs(uint16_t conn_handle, uint16_t start_handle,
102*042d53a7SEvalZero                            uint16_t end_handle);
103*042d53a7SEvalZero int btshell_read(uint16_t conn_handle, uint16_t attr_handle);
104*042d53a7SEvalZero int btshell_read_long(uint16_t conn_handle, uint16_t attr_handle,
105*042d53a7SEvalZero                       uint16_t offset);
106*042d53a7SEvalZero int btshell_read_by_uuid(uint16_t conn_handle, uint16_t start_handle,
107*042d53a7SEvalZero                           uint16_t end_handle, const ble_uuid_t *uuid);
108*042d53a7SEvalZero int btshell_read_mult(uint16_t conn_handle, uint16_t *attr_handles,
109*042d53a7SEvalZero                        int num_attr_handles);
110*042d53a7SEvalZero int btshell_write(uint16_t conn_handle, uint16_t attr_handle,
111*042d53a7SEvalZero                   struct os_mbuf *om);
112*042d53a7SEvalZero int btshell_write_no_rsp(uint16_t conn_handle, uint16_t attr_handle,
113*042d53a7SEvalZero                          struct os_mbuf *om);
114*042d53a7SEvalZero int btshell_write_long(uint16_t conn_handle, uint16_t attr_handle,
115*042d53a7SEvalZero                        uint16_t offset, struct os_mbuf *om);
116*042d53a7SEvalZero int btshell_write_reliable(uint16_t conn_handle,
117*042d53a7SEvalZero                            struct ble_gatt_attr *attrs, int num_attrs);
118*042d53a7SEvalZero #if MYNEWT_VAL(BLE_EXT_ADV)
119*042d53a7SEvalZero int btshell_ext_adv_configure(uint8_t instance,
120*042d53a7SEvalZero                               const struct ble_gap_ext_adv_params *params,
121*042d53a7SEvalZero                               int8_t *selected_tx_power);
122*042d53a7SEvalZero int btshell_ext_adv_start(uint8_t instance, int duration,
123*042d53a7SEvalZero                           int max_events, bool restart);
124*042d53a7SEvalZero int btshell_ext_adv_stop(uint8_t instance);
125*042d53a7SEvalZero #endif
126*042d53a7SEvalZero int btshell_adv_start(uint8_t own_addr_type, const ble_addr_t *direct_addr,
127*042d53a7SEvalZero                       int32_t duration_ms,
128*042d53a7SEvalZero                       const struct ble_gap_adv_params *params,
129*042d53a7SEvalZero                       bool restart);
130*042d53a7SEvalZero int btshell_adv_stop(void);
131*042d53a7SEvalZero int btshell_conn_initiate(uint8_t own_addr_type, const ble_addr_t *peer_addr,
132*042d53a7SEvalZero                           int32_t duration_ms,
133*042d53a7SEvalZero                           struct ble_gap_conn_params *params);
134*042d53a7SEvalZero int btshell_ext_conn_initiate(uint8_t own_addr_type,
135*042d53a7SEvalZero                               const ble_addr_t *peer_addr,
136*042d53a7SEvalZero                               int32_t duration_ms,
137*042d53a7SEvalZero                               struct ble_gap_conn_params *phy_1m_params,
138*042d53a7SEvalZero                               struct ble_gap_conn_params *phy_2m_params,
139*042d53a7SEvalZero                               struct ble_gap_conn_params *phy_coded_params);
140*042d53a7SEvalZero int btshell_conn_cancel(void);
141*042d53a7SEvalZero int btshell_term_conn(uint16_t conn_handle, uint8_t reason);
142*042d53a7SEvalZero int btshell_wl_set(ble_addr_t *addrs, int addrs_count);
143*042d53a7SEvalZero int btshell_scan(uint8_t own_addr_type, int32_t duration_ms,
144*042d53a7SEvalZero                  const struct ble_gap_disc_params *disc_params, void *cb_args);
145*042d53a7SEvalZero int btshell_ext_scan(uint8_t own_addr_type, uint16_t duration, uint16_t period,
146*042d53a7SEvalZero                      uint8_t filter_duplicates, uint8_t filter_policy,
147*042d53a7SEvalZero                      uint8_t limited,
148*042d53a7SEvalZero                      const struct ble_gap_ext_disc_params *uncoded_params,
149*042d53a7SEvalZero                      const struct ble_gap_ext_disc_params *coded_params,
150*042d53a7SEvalZero                      void *cb_args);
151*042d53a7SEvalZero int btshell_scan_cancel(void);
152*042d53a7SEvalZero int btshell_update_conn(uint16_t conn_handle,
153*042d53a7SEvalZero                          struct ble_gap_upd_params *params);
154*042d53a7SEvalZero void btshell_notify(uint16_t attr_handle);
155*042d53a7SEvalZero int btshell_datalen(uint16_t conn_handle, uint16_t tx_octets,
156*042d53a7SEvalZero                     uint16_t tx_time);
157*042d53a7SEvalZero int btshell_l2cap_update(uint16_t conn_handle,
158*042d53a7SEvalZero                           struct ble_l2cap_sig_update_params *params);
159*042d53a7SEvalZero int btshell_sec_start(uint16_t conn_handle);
160*042d53a7SEvalZero int btshell_sec_pair(uint16_t conn_handle);
161*042d53a7SEvalZero int btshell_sec_unpair(ble_addr_t *peer_addr);
162*042d53a7SEvalZero int btshell_sec_restart(uint16_t conn_handle, uint8_t *ltk, uint16_t ediv,
163*042d53a7SEvalZero                         uint64_t rand_val, int auth);
164*042d53a7SEvalZero int btshell_tx_start(uint16_t handle, uint16_t len, uint16_t rate,
165*042d53a7SEvalZero                      uint16_t num);
166*042d53a7SEvalZero int btshell_rssi(uint16_t conn_handle, int8_t *out_rssi);
167*042d53a7SEvalZero int btshell_l2cap_create_srv(uint16_t psm, int accept_response);
168*042d53a7SEvalZero int btshell_l2cap_connect(uint16_t conn, uint16_t psm);
169*042d53a7SEvalZero int btshell_l2cap_disconnect(uint16_t conn, uint16_t idx);
170*042d53a7SEvalZero int btshell_l2cap_send(uint16_t conn, uint16_t idx, uint16_t bytes);
171*042d53a7SEvalZero 
172*042d53a7SEvalZero /** GATT server. */
173*042d53a7SEvalZero #define GATT_SVR_SVC_ALERT_UUID               0x1811
174*042d53a7SEvalZero #define GATT_SVR_CHR_SUP_NEW_ALERT_CAT_UUID   0x2A47
175*042d53a7SEvalZero #define GATT_SVR_CHR_NEW_ALERT                0x2A46
176*042d53a7SEvalZero #define GATT_SVR_CHR_SUP_UNR_ALERT_CAT_UUID   0x2A48
177*042d53a7SEvalZero #define GATT_SVR_CHR_UNR_ALERT_STAT_UUID      0x2A45
178*042d53a7SEvalZero #define GATT_SVR_CHR_ALERT_NOT_CTRL_PT        0x2A44
179*042d53a7SEvalZero 
180*042d53a7SEvalZero void gatt_svr_register_cb(struct ble_gatt_register_ctxt *ctxt, void *arg);
181*042d53a7SEvalZero int gatt_svr_init(void);
182*042d53a7SEvalZero void gatt_svr_print_svcs(void);
183*042d53a7SEvalZero 
184*042d53a7SEvalZero /** Misc. */
185*042d53a7SEvalZero void print_bytes(const uint8_t *bytes, int len);
186*042d53a7SEvalZero void print_mbuf(const struct os_mbuf *om);
187*042d53a7SEvalZero void print_addr(const void *addr);
188*042d53a7SEvalZero void print_uuid(const ble_uuid_t *uuid);
189*042d53a7SEvalZero int svc_is_empty(const struct btshell_svc *svc);
190*042d53a7SEvalZero uint16_t chr_end_handle(const struct btshell_svc *svc,
191*042d53a7SEvalZero                         const struct btshell_chr *chr);
192*042d53a7SEvalZero int chr_is_empty(const struct btshell_svc *svc, const struct btshell_chr *chr);
193*042d53a7SEvalZero void print_conn_desc(const struct ble_gap_conn_desc *desc);
194*042d53a7SEvalZero void print_svc(struct btshell_svc *svc);
195*042d53a7SEvalZero 
196*042d53a7SEvalZero #ifdef __cplusplus
197*042d53a7SEvalZero }
198*042d53a7SEvalZero #endif
199*042d53a7SEvalZero 
200*042d53a7SEvalZero #endif
201