xref: /nrf52832-nimble/packages/NimBLE-latest/apps/blecent/src/blecent.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_BLECENT_
21*042d53a7SEvalZero #define H_BLECENT_
22*042d53a7SEvalZero 
23*042d53a7SEvalZero #include "nimble/ble.h"
24*042d53a7SEvalZero #include "modlog/modlog.h"
25*042d53a7SEvalZero #ifdef __cplusplus
26*042d53a7SEvalZero extern "C" {
27*042d53a7SEvalZero #endif
28*042d53a7SEvalZero 
29*042d53a7SEvalZero struct ble_hs_adv_fields;
30*042d53a7SEvalZero struct ble_gap_conn_desc;
31*042d53a7SEvalZero struct ble_hs_cfg;
32*042d53a7SEvalZero union ble_store_value;
33*042d53a7SEvalZero union ble_store_key;
34*042d53a7SEvalZero 
35*042d53a7SEvalZero #define BLECENT_SVC_ALERT_UUID              0x1811
36*042d53a7SEvalZero #define BLECENT_CHR_SUP_NEW_ALERT_CAT_UUID  0x2A47
37*042d53a7SEvalZero #define BLECENT_CHR_NEW_ALERT               0x2A46
38*042d53a7SEvalZero #define BLECENT_CHR_SUP_UNR_ALERT_CAT_UUID  0x2A48
39*042d53a7SEvalZero #define BLECENT_CHR_UNR_ALERT_STAT_UUID     0x2A45
40*042d53a7SEvalZero #define BLECENT_CHR_ALERT_NOT_CTRL_PT       0x2A44
41*042d53a7SEvalZero 
42*042d53a7SEvalZero /** Misc. */
43*042d53a7SEvalZero void print_bytes(const uint8_t *bytes, int len);
44*042d53a7SEvalZero void print_mbuf(const struct os_mbuf *om);
45*042d53a7SEvalZero char *addr_str(const void *addr);
46*042d53a7SEvalZero void print_uuid(const ble_uuid_t *uuid);
47*042d53a7SEvalZero void print_conn_desc(const struct ble_gap_conn_desc *desc);
48*042d53a7SEvalZero void print_adv_fields(const struct ble_hs_adv_fields *fields);
49*042d53a7SEvalZero 
50*042d53a7SEvalZero /** Peer. */
51*042d53a7SEvalZero struct peer_dsc {
52*042d53a7SEvalZero     SLIST_ENTRY(peer_dsc) next;
53*042d53a7SEvalZero     struct ble_gatt_dsc dsc;
54*042d53a7SEvalZero };
55*042d53a7SEvalZero SLIST_HEAD(peer_dsc_list, peer_dsc);
56*042d53a7SEvalZero 
57*042d53a7SEvalZero struct peer_chr {
58*042d53a7SEvalZero     SLIST_ENTRY(peer_chr) next;
59*042d53a7SEvalZero     struct ble_gatt_chr chr;
60*042d53a7SEvalZero 
61*042d53a7SEvalZero     struct peer_dsc_list dscs;
62*042d53a7SEvalZero };
63*042d53a7SEvalZero SLIST_HEAD(peer_chr_list, peer_chr);
64*042d53a7SEvalZero 
65*042d53a7SEvalZero struct peer_svc {
66*042d53a7SEvalZero     SLIST_ENTRY(peer_svc) next;
67*042d53a7SEvalZero     struct ble_gatt_svc svc;
68*042d53a7SEvalZero 
69*042d53a7SEvalZero     struct peer_chr_list chrs;
70*042d53a7SEvalZero };
71*042d53a7SEvalZero SLIST_HEAD(peer_svc_list, peer_svc);
72*042d53a7SEvalZero 
73*042d53a7SEvalZero struct peer;
74*042d53a7SEvalZero typedef void peer_disc_fn(const struct peer *peer, int status, void *arg);
75*042d53a7SEvalZero 
76*042d53a7SEvalZero struct peer {
77*042d53a7SEvalZero     SLIST_ENTRY(peer) next;
78*042d53a7SEvalZero 
79*042d53a7SEvalZero     uint16_t conn_handle;
80*042d53a7SEvalZero 
81*042d53a7SEvalZero     /** List of discovered GATT services. */
82*042d53a7SEvalZero     struct peer_svc_list svcs;
83*042d53a7SEvalZero 
84*042d53a7SEvalZero     /** Keeps track of where we are in the service discovery process. */
85*042d53a7SEvalZero     uint16_t disc_prev_chr_val;
86*042d53a7SEvalZero     struct peer_svc *cur_svc;
87*042d53a7SEvalZero 
88*042d53a7SEvalZero     /** Callback that gets executed when service discovery completes. */
89*042d53a7SEvalZero     peer_disc_fn *disc_cb;
90*042d53a7SEvalZero     void *disc_cb_arg;
91*042d53a7SEvalZero };
92*042d53a7SEvalZero 
93*042d53a7SEvalZero int peer_disc_all(uint16_t conn_handle, peer_disc_fn *disc_cb,
94*042d53a7SEvalZero                   void *disc_cb_arg);
95*042d53a7SEvalZero const struct peer_dsc *
96*042d53a7SEvalZero peer_dsc_find_uuid(const struct peer *peer, const ble_uuid_t *svc_uuid,
97*042d53a7SEvalZero                    const ble_uuid_t *chr_uuid, const ble_uuid_t *dsc_uuid);
98*042d53a7SEvalZero const struct peer_chr *
99*042d53a7SEvalZero peer_chr_find_uuid(const struct peer *peer, const ble_uuid_t *svc_uuid,
100*042d53a7SEvalZero                    const ble_uuid_t *chr_uuid);
101*042d53a7SEvalZero const struct peer_svc *
102*042d53a7SEvalZero peer_svc_find_uuid(const struct peer *peer, const ble_uuid_t *uuid);
103*042d53a7SEvalZero int peer_delete(uint16_t conn_handle);
104*042d53a7SEvalZero int peer_add(uint16_t conn_handle);
105*042d53a7SEvalZero int peer_init(int max_peers, int max_svcs, int max_chrs, int max_dscs);
106*042d53a7SEvalZero 
107*042d53a7SEvalZero #ifdef __cplusplus
108*042d53a7SEvalZero }
109*042d53a7SEvalZero #endif
110*042d53a7SEvalZero 
111*042d53a7SEvalZero #endif
112