@@ -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-
302242void 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+
0 commit comments