Skip to content

Commit 764d722

Browse files
committed
Merge branch 'feat/gatt_cache_info' into 'master'
fix(nimble): Added api's to fetch gatt cache info Closes BLERP-1702 See merge request espressif/esp-idf!38048
2 parents aa714f5 + 993bd86 commit 764d722

File tree

6 files changed

+303
-4
lines changed

6 files changed

+303
-4
lines changed

components/bt/host/nimble/Kconfig.in

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -708,6 +708,19 @@ menuconfig BT_NIMBLE_GATT_CACHING
708708
select BT_NIMBLE_DYNAMIC_SERVICE
709709
help
710710
Enable GATT caching
711+
config BT_NIMBLE_GATT_CACHING_INCLUDE_SERVICES
712+
bool "Include services in GATT caching"
713+
depends on BT_NIMBLE_GATT_CACHING
714+
default n
715+
help
716+
Enable this option to include *included services* (e.g., services referenced by other services)
717+
in the GATT database cache. Disabling this will skip caching of included service entries.
718+
config BT_NIMBLE_INCL_SVC_DISCOVERY
719+
bool "Enable Included service discovery"
720+
default y if BT_NIMBLE_GATT_CACHING_INCLUDE_SERVICES
721+
default n
722+
help
723+
Enable this option to start discovery for included service.
711724
config BT_NIMBLE_GATT_CACHING_MAX_CONNS
712725
int "Maximum connections to be cached"
713726
depends on BT_NIMBLE_GATT_CACHING
@@ -720,6 +733,12 @@ config BT_NIMBLE_GATT_CACHING_MAX_SVCS
720733
default 64
721734
help
722735
Set this option to set the upper limit on number of services per connection to be cached.
736+
config BT_NIMBLE_GATT_CACHING_MAX_INCL_SVCS
737+
int "Maximum number of included services per connection"
738+
depends on BT_NIMBLE_GATT_CACHING
739+
default 64
740+
help
741+
Set this option to set the upper limit on number of included services per connection to be cached.
723742
config BT_NIMBLE_GATT_CACHING_MAX_CHRS
724743
int "Maximum number of characteristics per connection"
725744
depends on BT_NIMBLE_GATT_CACHING

components/bt/host/nimble/port/include/esp_nimble_cfg.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,11 +129,27 @@
129129
#define MYNEWT_VAL_BLE_MAX_PERIODIC_ADVERTISER_LIST (CONFIG_BT_NIMBLE_MAX_PERIODIC_ADVERTISER_LIST)
130130
#endif
131131

132+
#ifndef MYNEWT_VAL_BLE_INCL_SVC_DISCOVERY
133+
#ifdef CONFIG_BT_NIMBLE_INCL_SVC_DISCOVERY
134+
#define MYNEWT_VAL_BLE_INCL_SVC_DISCOVERY (CONFIG_BT_NIMBLE_INCL_SVC_DISCOVERY)
135+
#else
136+
#define MYNEWT_VAL_BLE_INCL_SVC_DISCOVERY (0)
137+
#endif
138+
#endif
139+
132140
#ifndef CONFIG_BT_NIMBLE_GATT_CACHING
133141
#define MYNEWT_VAL_BLE_GATT_CACHING (0)
134142
#else
135143
#define MYNEWT_VAL_BLE_GATT_CACHING (CONFIG_BT_NIMBLE_GATT_CACHING)
136144

145+
#ifndef MYNEWT_VAL_BLE_GATT_CACHING_INCLUDE_SERVICES
146+
#ifdef CONFIG_BT_NIMBLE_GATT_CACHING_INCLUDE_SERVICES
147+
#define MYNEWT_VAL_BLE_GATT_CACHING_INCLUDE_SERVICES (CONFIG_BT_NIMBLE_GATT_CACHING_INCLUDE_SERVICES)
148+
#else
149+
#define MYNEWT_VAL_BLE_GATT_CACHING_INCLUDE_SERVICES (0)
150+
#endif
151+
#endif
152+
137153
#ifdef CONFIG_BT_NIMBLE_GATT_CACHING_MAX_CONNS
138154
#define MYNEWT_VAL_BLE_GATT_CACHING_MAX_CONNS (CONFIG_BT_NIMBLE_GATT_CACHING_MAX_CONNS)
139155
#else
@@ -146,6 +162,14 @@
146162
#define MYNEWT_VAL_BLE_GATT_CACHING_MAX_SVCS (0)
147163
#endif
148164

165+
#ifndef MYNEWT_VAL_BLE_GATT_CACHING_MAX_INCL_SVCS
166+
#ifdef CONFIG_BT_NIMBLE_GATT_CACHING_MAX_INCL_SVCS
167+
#define MYNEWT_VAL_BLE_GATT_CACHING_MAX_INCL_SVCS (CONFIG_BT_NIMBLE_GATT_CACHING_MAX_INCL_SVCS)
168+
#else
169+
#define MYNEWT_VAL_BLE_GATT_CACHING_MAX_INCL_SVCS (0)
170+
#endif
171+
#endif
172+
149173
#ifdef CONFIG_BT_NIMBLE_GATT_CACHING_MAX_CHRS
150174
#define MYNEWT_VAL_BLE_GATT_CACHING_MAX_CHRS (CONFIG_BT_NIMBLE_GATT_CACHING_MAX_CHRS)
151175
#else

examples/bluetooth/nimble/blecent/main/main.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
#include "console/console.h"
2828
#include "services/gap/ble_svc_gap.h"
2929
#include "blecent.h"
30+
#if MYNEWT_VAL(BLE_GATT_CACHING)
31+
#include "host/ble_esp_gattc_cache.h"
32+
#endif
3033

3134
#if CONFIG_EXAMPLE_USE_CI_ADDRESS
3235
#ifdef CONFIG_IDF_TARGET_ESP32
@@ -1052,9 +1055,13 @@ app_main(void)
10521055
ble_hs_cfg.store_status_cb = ble_store_util_status_rr;
10531056

10541057
/* Initialize data structures to track connected peers. */
1058+
#if MYNEWT_VAL(BLE_INCL_SVC_DISCOVERY) || MYNEWT_VAL(BLE_GATT_CACHING_INCLUDE_SERVICES)
1059+
rc = peer_init(MYNEWT_VAL(BLE_MAX_CONNECTIONS), 64, 64, 64, 64);
1060+
assert(rc == 0);
1061+
#else
10551062
rc = peer_init(MYNEWT_VAL(BLE_MAX_CONNECTIONS), 64, 64, 64);
10561063
assert(rc == 0);
1057-
1064+
#endif
10581065
/* Set the default device name. */
10591066
rc = ble_svc_gap_device_name_set("nimble-blecent");
10601067
assert(rc == 0);

examples/bluetooth/nimble/common/nimble_central_utils/esp_central.h

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,24 @@ struct peer_chr {
3838
struct peer_dsc_list dscs;
3939
};
4040
SLIST_HEAD(peer_chr_list, peer_chr);
41+
SLIST_HEAD(peer_svc_list, peer_svc);
42+
43+
#if MYNEWT_VAL(BLE_INCL_SVC_DISCOVERY) || MYNEWT_VAL(BLE_GATT_CACHING_INCLUDE_SERVICES)
44+
struct peer_incl_svc {
45+
SLIST_ENTRY(peer_incl_svc) next;
46+
struct ble_gatt_incl_svc svc;
47+
};
48+
SLIST_HEAD(peer_incl_svc_list, peer_incl_svc);
49+
#endif
4150

4251
struct peer_svc {
4352
SLIST_ENTRY(peer_svc) next;
4453
struct ble_gatt_svc svc;
45-
54+
#if MYNEWT_VAL(BLE_INCL_SVC_DISCOVERY) || MYNEWT_VAL(BLE_GATT_CACHING_INCLUDE_SERVICES)
55+
struct peer_incl_svc_list incl_svc;
56+
#endif
4657
struct peer_chr_list chrs;
4758
};
48-
SLIST_HEAD(peer_svc_list, peer_svc);
4959

5060
struct peer;
5161
typedef void peer_disc_fn(const struct peer *peer, int status, void *arg);
@@ -95,7 +105,11 @@ const struct peer_svc *
95105
peer_svc_find_uuid(const struct peer *peer, const ble_uuid_t *uuid);
96106
int peer_delete(uint16_t conn_handle);
97107
int peer_add(uint16_t conn_handle);
108+
#if MYNEWT_VAL(BLE_INCL_SVC_DISCOVERY) || MYNEWT_VAL(BLE_GATT_CACHING_INCLUDE_SERVICES)
109+
int peer_init(int max_peers, int max_svcs, int max_incl_svcs, int max_chrs, int max_dscs);
110+
#else
98111
int peer_init(int max_peers, int max_svcs, int max_chrs, int max_dscs);
112+
#endif
99113
struct peer *
100114
peer_find(uint16_t conn_handle);
101115
#if MYNEWT_VAL(ENC_ADV_DATA)

0 commit comments

Comments
 (0)