mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-04-16 08:42:28 +00:00
added subscribe/unsubscribe for indications
This commit is contained in:
parent
e126fbda14
commit
22ea43c932
@ -82,6 +82,7 @@ static void (*bleDeviceDisconnectedCallback)(BLEDevice * device) = NULL;
|
|||||||
static void (*gattServiceDiscoveredCallback)(BLEStatus status, BLEDevice * device, BLEService * bleService) = NULL;
|
static void (*gattServiceDiscoveredCallback)(BLEStatus status, BLEDevice * device, BLEService * bleService) = NULL;
|
||||||
static void (*gattCharacteristicDiscoveredCallback)(BLEStatus status, BLEDevice * device, BLECharacteristic * characteristic) = NULL;
|
static void (*gattCharacteristicDiscoveredCallback)(BLEStatus status, BLEDevice * device, BLECharacteristic * characteristic) = NULL;
|
||||||
static void (*gattCharacteristicNotificationCallback)(BLEDevice * device, uint16_t value_handle, uint8_t* value, uint16_t length) = NULL;
|
static void (*gattCharacteristicNotificationCallback)(BLEDevice * device, uint16_t value_handle, uint8_t* value, uint16_t length) = NULL;
|
||||||
|
static void (*gattCharacteristicIndicationCallback)(BLEDevice * device, uint16_t value_handle, uint8_t* value, uint16_t length) = NULL;
|
||||||
static void (*gattCharacteristicReadCallback)(BLEStatus status, BLEDevice * device, uint8_t * value, uint16_t length) = NULL;
|
static void (*gattCharacteristicReadCallback)(BLEStatus status, BLEDevice * device, uint8_t * value, uint16_t length) = NULL;
|
||||||
static void (*gattCharacteristicWrittenCallback)(BLEStatus status, BLEDevice * device) = NULL;
|
static void (*gattCharacteristicWrittenCallback)(BLEStatus status, BLEDevice * device) = NULL;
|
||||||
static void (*gattCharacteristicSubscribedCallback)(BLEStatus status, BLEDevice * device) = NULL;
|
static void (*gattCharacteristicSubscribedCallback)(BLEStatus status, BLEDevice * device) = NULL;
|
||||||
@ -215,12 +216,17 @@ static void gatt_client_callback(le_event_t * event){
|
|||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
case GATT_NOTIFICATION:
|
case GATT_NOTIFICATION:
|
||||||
case GATT_INDICATION:
|
|
||||||
if (gattCharacteristicNotificationCallback) {
|
if (gattCharacteristicNotificationCallback) {
|
||||||
le_characteristic_value_event_t * value_event = (le_characteristic_value_event_t *) event;
|
le_characteristic_value_event_t * value_event = (le_characteristic_value_event_t *) event;
|
||||||
(*gattCharacteristicNotificationCallback)(&device, value_event->value_handle, value_event->blob, value_event->blob_length);
|
(*gattCharacteristicNotificationCallback)(&device, value_event->value_handle, value_event->blob, value_event->blob_length);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case GATT_INDICATION:
|
||||||
|
if (gattCharacteristicIndicationCallback) {
|
||||||
|
le_characteristic_value_event_t * value_event = (le_characteristic_value_event_t *) event;
|
||||||
|
(*gattCharacteristicIndicationCallback)(&device, value_event->value_handle, value_event->blob, value_event->blob_length);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case GATT_CHARACTERISTIC_VALUE_QUERY_RESULT:
|
case GATT_CHARACTERISTIC_VALUE_QUERY_RESULT:
|
||||||
if (gattCharacteristicReadCallback) {
|
if (gattCharacteristicReadCallback) {
|
||||||
le_characteristic_value_event_t * value_event = (le_characteristic_value_event_t *) event;
|
le_characteristic_value_event_t * value_event = (le_characteristic_value_event_t *) event;
|
||||||
@ -444,6 +450,12 @@ int BLEDevice::subscribeForNotifications(BLECharacteristic * characteristic){
|
|||||||
int BLEDevice::unsubscribeFromNotifications(BLECharacteristic * characteristic){
|
int BLEDevice::unsubscribeFromNotifications(BLECharacteristic * characteristic){
|
||||||
return BTstack.unsubscribeFromNotifications(this, characteristic);
|
return BTstack.unsubscribeFromNotifications(this, characteristic);
|
||||||
}
|
}
|
||||||
|
int BLEDevice::subscribeForIndications(BLECharacteristic * characteristic){
|
||||||
|
return BTstack.subscribeForIndications(this, characteristic);
|
||||||
|
}
|
||||||
|
int BLEDevice::unsubscribeFromIndications(BLECharacteristic * characteristic){
|
||||||
|
return BTstack.unsubscribeFromIndications(this, characteristic);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
BTstackManager::BTstackManager() {
|
BTstackManager::BTstackManager() {
|
||||||
@ -476,6 +488,9 @@ void BTstackManager::setGATTCharacteristicDiscoveredCallback(void (*callback)(BL
|
|||||||
void BTstackManager::setGATTCharacteristicNotificationCallback(void (*callback)(BLEDevice * device, uint16_t value_handle, uint8_t* value, uint16_t length)){
|
void BTstackManager::setGATTCharacteristicNotificationCallback(void (*callback)(BLEDevice * device, uint16_t value_handle, uint8_t* value, uint16_t length)){
|
||||||
gattCharacteristicNotificationCallback = callback;
|
gattCharacteristicNotificationCallback = callback;
|
||||||
}
|
}
|
||||||
|
void BTstackManager::setGATTCharacteristicIndicationCallback(void (*callback)(BLEDevice * device, uint16_t value_handle, uint8_t* value, uint16_t length)){
|
||||||
|
gattCharacteristicIndicationCallback = callback;
|
||||||
|
}
|
||||||
void BTstackManager::setGATTCharacteristicReadCallback(void (*callback)(BLEStatus status, BLEDevice * device, uint8_t * value, uint16_t length)){
|
void BTstackManager::setGATTCharacteristicReadCallback(void (*callback)(BLEStatus status, BLEDevice * device, uint8_t * value, uint16_t length)){
|
||||||
gattCharacteristicReadCallback = callback;
|
gattCharacteristicReadCallback = callback;
|
||||||
}
|
}
|
||||||
@ -514,11 +529,21 @@ int BTstackManager::subscribeForNotifications(BLEDevice * device, BLECharacteris
|
|||||||
return gatt_client_write_client_characteristic_configuration(gatt_client_id, device->getHandle(), (le_characteristic_t*) characteristic->getCharacteristic(),
|
return gatt_client_write_client_characteristic_configuration(gatt_client_id, device->getHandle(), (le_characteristic_t*) characteristic->getCharacteristic(),
|
||||||
GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_NOTIFICATION);
|
GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_NOTIFICATION);
|
||||||
}
|
}
|
||||||
|
int BTstackManager::subscribeForIndications(BLEDevice * device, BLECharacteristic * characteristic){
|
||||||
|
gattAction = gattActionSubscribe;
|
||||||
|
return gatt_client_write_client_characteristic_configuration(gatt_client_id, device->getHandle(), (le_characteristic_t*) characteristic->getCharacteristic(),
|
||||||
|
GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_INDICATION);
|
||||||
|
}
|
||||||
int BTstackManager::unsubscribeFromNotifications(BLEDevice * device, BLECharacteristic * characteristic){
|
int BTstackManager::unsubscribeFromNotifications(BLEDevice * device, BLECharacteristic * characteristic){
|
||||||
gattAction = gattActionUnsubscribe;
|
gattAction = gattActionUnsubscribe;
|
||||||
return gatt_client_write_client_characteristic_configuration(gatt_client_id, device->getHandle(), (le_characteristic_t*) characteristic->getCharacteristic(),
|
return gatt_client_write_client_characteristic_configuration(gatt_client_id, device->getHandle(), (le_characteristic_t*) characteristic->getCharacteristic(),
|
||||||
GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_NONE);
|
GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_NONE);
|
||||||
}
|
}
|
||||||
|
int BTstackManager::unsubscribeFromIndications(BLEDevice * device, BLECharacteristic * characteristic){
|
||||||
|
gattAction = gattActionUnsubscribe;
|
||||||
|
return gatt_client_write_client_characteristic_configuration(gatt_client_id, device->getHandle(), (le_characteristic_t*) characteristic->getCharacteristic(),
|
||||||
|
GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_NONE);
|
||||||
|
}
|
||||||
void BTstackManager::bleConnect(BLEAdvertisement * advertisement, int timeout_ms){
|
void BTstackManager::bleConnect(BLEAdvertisement * advertisement, int timeout_ms){
|
||||||
bleConnect(advertisement->getBdAddr(), timeout_ms);
|
bleConnect(advertisement->getBdAddr(), timeout_ms);
|
||||||
}
|
}
|
||||||
|
@ -112,6 +112,8 @@ public:
|
|||||||
// subscribe/unsubscribe
|
// subscribe/unsubscribe
|
||||||
int subscribeForNotifications(BLECharacteristic * characteristic);
|
int subscribeForNotifications(BLECharacteristic * characteristic);
|
||||||
int unsubscribeFromNotifications(BLECharacteristic * characteristic);
|
int unsubscribeFromNotifications(BLECharacteristic * characteristic);
|
||||||
|
int subscribeForIndications(BLECharacteristic * characteristic);
|
||||||
|
int unsubscribeFromIndications(BLECharacteristic * characteristic);
|
||||||
};
|
};
|
||||||
|
|
||||||
class BTstackManager {
|
class BTstackManager {
|
||||||
@ -147,9 +149,11 @@ public:
|
|||||||
int writeCharacteristic(BLEDevice * device, BLECharacteristic * characteristic, uint8_t * data, uint16_t size);
|
int writeCharacteristic(BLEDevice * device, BLECharacteristic * characteristic, uint8_t * data, uint16_t size);
|
||||||
int writeCharacteristicWithoutResponse(BLEDevice * device, BLECharacteristic * characteristic, uint8_t * data, uint16_t size);
|
int writeCharacteristicWithoutResponse(BLEDevice * device, BLECharacteristic * characteristic, uint8_t * data, uint16_t size);
|
||||||
|
|
||||||
// subscribe/unsubscribe
|
// subscribe/unsubscribe notification and indications
|
||||||
int subscribeForNotifications(BLEDevice * device, BLECharacteristic * characteristic);
|
int subscribeForNotifications(BLEDevice * device, BLECharacteristic * characteristic);
|
||||||
int unsubscribeFromNotifications(BLEDevice * device, BLECharacteristic * characteristic);
|
int unsubscribeFromNotifications(BLEDevice * device, BLECharacteristic * characteristic);
|
||||||
|
int subscribeForIndications(BLEDevice * device, BLECharacteristic * characteristic);
|
||||||
|
int unsubscribeFromIndications(BLEDevice * device, BLECharacteristic * characteristic);
|
||||||
|
|
||||||
// Callbacks
|
// Callbacks
|
||||||
void setBLEAdvertisementCallback(void (*)(BLEAdvertisement * bleAdvertisement));
|
void setBLEAdvertisementCallback(void (*)(BLEAdvertisement * bleAdvertisement));
|
||||||
@ -159,6 +163,7 @@ public:
|
|||||||
void setGATTCharacteristicDiscoveredCallback(void (*)(BLEStatus status, BLEDevice * device, BLECharacteristic * characteristic));
|
void setGATTCharacteristicDiscoveredCallback(void (*)(BLEStatus status, BLEDevice * device, BLECharacteristic * characteristic));
|
||||||
void setGATTCharacteristicReadCallback(void (*)(BLEStatus status, BLEDevice * device, uint8_t * value, uint16_t length));
|
void setGATTCharacteristicReadCallback(void (*)(BLEStatus status, BLEDevice * device, uint8_t * value, uint16_t length));
|
||||||
void setGATTCharacteristicNotificationCallback(void (*)(BLEDevice * device, uint16_t value_handle, uint8_t* value, uint16_t length));
|
void setGATTCharacteristicNotificationCallback(void (*)(BLEDevice * device, uint16_t value_handle, uint8_t* value, uint16_t length));
|
||||||
|
void setGATTCharacteristicIndicationCallback(void (*)(BLEDevice * device, uint16_t value_handle, uint8_t* value, uint16_t length));
|
||||||
void setGATTDoneCallback(void (*)(BLEStatus status, BLEDevice * device));
|
void setGATTDoneCallback(void (*)(BLEStatus status, BLEDevice * device));
|
||||||
|
|
||||||
void setGATTCharacteristicWrittenCallback(void (*)(BLEStatus status, BLEDevice * device));
|
void setGATTCharacteristicWrittenCallback(void (*)(BLEStatus status, BLEDevice * device));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user