Skip to content

Commit 9455e44

Browse files
committed
Refact the code and fix some bugs
1. Subscribe/unsubscribe event cause notification can't send out 2. Delete unused code 3. Update the library.
1 parent 8160ca2 commit 9455e44

File tree

8 files changed

+109
-217
lines changed

8 files changed

+109
-217
lines changed

libraries/CurieBLE/src/internal/BLECallbacks.cpp

Lines changed: 8 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ uint8_t profile_discover_process(bt_conn_t *conn,
152152
uint8_t ret = BT_GATT_ITER_STOP;
153153
pr_debug(LOG_MODULE_BLE, "%s-%d", __FUNCTION__, __LINE__);
154154
ret = BLEProfileManager::instance()->discoverResponseProc(conn, attr, params);
155-
pr_debug(LOG_MODULE_BLE, "%s-%d", __FUNCTION__, __LINE__);
155+
//pr_debug(LOG_MODULE_BLE, "%s-%d", __FUNCTION__, __LINE__);
156156
return ret;
157157
}
158158

@@ -239,74 +239,13 @@ void bleConnectEventHandler(bt_conn_t *conn,
239239
p->handleConnectEvent(conn, err);
240240
}
241241

242-
static uint8_t ble_gatt_disconnected_cb(const struct bt_gatt_attr *attr, void *user_data)
243-
{
244-
struct bt_conn *conn = (struct bt_conn *)user_data;
245-
struct _bt_gatt_ccc *ccc;
246-
size_t i;
247-
248-
/* Check attribute user_data must be of type struct _bt_gatt_ccc */
249-
if (attr->write != profile_gatt_attr_write_ccc) {
250-
return BT_GATT_ITER_CONTINUE;
251-
}
252-
253-
ccc = (struct _bt_gatt_ccc *)attr->user_data;
254-
/* If already disabled skip */
255-
if (!ccc->value) {
256-
return BT_GATT_ITER_CONTINUE;
257-
}
258-
259-
for (i = 0; i < ccc->cfg_len; i++)
260-
{
261-
/* Ignore configurations with disabled value */
262-
if (!ccc->cfg[i].value)
263-
{
264-
continue;
265-
}
266-
267-
if (bt_addr_le_cmp(&conn->le.dst, &ccc->cfg[i].peer))
268-
{
269-
struct bt_conn *tmp;
270-
271-
/* Skip if there is another peer connected */
272-
tmp = bt_conn_lookup_addr_le(&ccc->cfg[i].peer);
273-
if (tmp) {
274-
if (tmp->state == BT_CONN_CONNECTED) {
275-
bt_conn_unref(tmp);
276-
return BT_GATT_ITER_CONTINUE;
277-
}
278-
279-
bt_conn_unref(tmp);
280-
}
281-
} else {
282-
/* Clear value if not paired */
283-
if (!ccc->cfg[i].valid)
284-
memset(&ccc->cfg[i].value, 0,
285-
sizeof(ccc->cfg[i].value));
286-
}
287-
}
288-
289-
/* Reset value while disconnected */
290-
memset(&ccc->value, 0, sizeof(ccc->value));
291-
292-
if (ccc->cfg_changed) {
293-
ccc->cfg_changed(ccc->value);
294-
}
295-
296-
pr_debug(LOG_MODULE_BLE, "ccc %p reseted", ccc);
297-
298-
return BT_GATT_ITER_CONTINUE;
299-
}
300-
301-
302242
void bleDisconnectEventHandler(bt_conn_t *conn,
303243
uint8_t reason,
304244
void *param)
305245
{
306246
BLEDeviceManager* p = (BLEDeviceManager*)param;
307247

308248
pr_info(LOG_MODULE_BLE, "Connect lost. Reason: %d", reason);
309-
bt_gatt_foreach_attr(0x0001, 0xffff, ble_gatt_disconnected_cb, conn);
310249

311250
p->handleDisconnectEvent(conn, reason);
312251
}
@@ -345,30 +284,13 @@ void ble_on_write_no_rsp_complete(struct bt_conn *conn, uint8_t err,
345284
BLECharacteristicImp::writeResponseReceived(conn, err, data);
346285
}
347286

348-
ssize_t profile_gatt_attr_write_ccc(struct bt_conn *conn,
349-
const struct bt_gatt_attr *attr,
350-
const void *buf,
351-
uint16_t len,
352-
uint16_t offset,
353-
uint8_t flags)
287+
void prfile_cccd_cfg_changed(void *user_data, uint16_t value)
354288
{
355-
struct _bt_gatt_ccc *ccc = (struct _bt_gatt_ccc *)attr->user_data;
356-
const uint16_t *data = (const uint16_t *)buf;
357-
bool cccdChanged = (ccc->value != *data);
358-
ssize_t retValue = bt_gatt_attr_write_ccc(conn, attr, buf, len, offset, flags);
359-
if (cccdChanged)
360-
{
361-
// Find characteristic and do notification
362-
const struct bt_gatt_attr *attrChrc = attr - 1;
363-
BLEAttribute *bleattr = (BLEAttribute *)attrChrc->user_data;
364-
BLEAttributeType type = bleattr->type();
365-
pr_debug(LOG_MODULE_BLE, "The Attribute type:%d", type);
366-
if (BLETypeCharacteristic == type)
367-
{
368-
BLECharacteristicImp *blecharacteritic = (BLECharacteristicImp*)bleattr;
369-
blecharacteritic->cccdValueChanged();
370-
}
371-
}
372-
return retValue;
289+
if (NULL == user_data)
290+
return;
291+
pr_info(LOG_MODULE_BLE, "%s-%d: ccc userdata %p", __FUNCTION__, __LINE__, user_data);
292+
BLECharacteristicImp *blecharacteritic = (BLECharacteristicImp *)user_data;
293+
blecharacteritic->cccdValueChanged();
373294
}
374295

296+

libraries/CurieBLE/src/internal/BLECallbacks.h

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,7 @@ uint8_t profile_characteristic_read_rsp_process(bt_conn_t *conn,
9292
const void *data,
9393
uint16_t length);
9494

95-
ssize_t profile_gatt_attr_write_ccc(struct bt_conn *conn,
96-
const struct bt_gatt_attr *attr,
97-
const void *buf,
98-
uint16_t len,
99-
uint16_t offset,
100-
uint8_t flags);
95+
void prfile_cccd_cfg_changed(void *user_data, uint16_t value);
10196

10297
#endif
10398

0 commit comments

Comments
 (0)