HW layer for the Nucleo board, it only work with old BLE_API
Dependents: Hello_BLE F446RE-BLE
Fork of X_NUCLEO_IDB0XA1 by
Diff: platform/src/btle.cpp
- Revision:
- 98:731050bb5362
- Parent:
- 97:a89d28ad6092
- Child:
- 110:1232b39de5cc
- Child:
- 116:1aa0d2da72e4
--- a/platform/src/btle.cpp Mon Jul 27 11:10:19 2015 +0000 +++ b/platform/src/btle.cpp Fri Jul 31 11:47:54 2015 +0000 @@ -322,37 +322,45 @@ evt_gatt_attr_modified *evt = (evt_gatt_attr_modified*)blue_evt->data; DEBUG("EVT_BLUE_GATT_ATTRIBUTE_MODIFIED\n\r"); - //DEBUG("CharHandle 0x%x, length: 0x%x, Data: 0x%x\n\r",evt->attr_handle, evt->data_length, (uint16_t)evt->att_data[0]); - - //Extract the GattCharacteristic from p_characteristics[] and find the properties mask - //If the char has handle 'x', then the value declaration will have the handle 'x+1' - /*uint16_t charHandle = evt->attr_handle-CHAR_VALUE_OFFSET;*/ GattCharacteristic *p_char = BlueNRGGattServer::getInstance().getCharacteristicFromHandle(evt->attr_handle); if(p_char!=NULL) { - DEBUG("CharHandle %d, length: %d, Data: %d\n\r",p_char->getValueAttribute().getHandle(), evt->data_length, (uint16_t)evt->att_data[0]); + GattAttribute::Handle_t charHandle = p_char->getValueAttribute().getHandle(); + BlueNRGGattServer::HandleEnum_t currentHandle = BlueNRGGattServer::CHAR_HANDLE; + DEBUG("CharHandle %d, length: %d, Data: %d\n\r",charHandle, evt->data_length, (uint16_t)evt->att_data[0]); DEBUG("getProperties 0x%x\n\r",p_char->getProperties()); - if((p_char->getProperties() & (GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY - | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE))) { + if(evt->attr_handle == charHandle+CHAR_VALUE_OFFSET) { + currentHandle = BlueNRGGattServer::CHAR_VALUE_HANDLE; + } + if(evt->attr_handle == charHandle+CHAR_DESC_OFFSET) { + currentHandle = BlueNRGGattServer::CHAR_DESC_HANDLE; + } + DEBUG("currentHandle %d\n\r", currentHandle); + if((p_char->getProperties() & + (GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE)) && + currentHandle == BlueNRGGattServer::CHAR_DESC_HANDLE) { + DEBUG("*****NOTIFICATION CASE\n\r"); //Now Check if data written in Enable or Disable if((uint16_t)evt->att_data[0]==1) { //DEBUG("Notify ENABLED\n\r"); - BlueNRGGattServer::getInstance().HCIEvent(GattServerEvents::GATT_EVENT_UPDATES_ENABLED, p_char->getValueAttribute().getHandle()/*evt->attr_handle*/); + BlueNRGGattServer::getInstance().HCIEvent(GattServerEvents::GATT_EVENT_UPDATES_ENABLED, p_char->getValueAttribute().getHandle()); } else { //DEBUG("Notify DISABLED\n\r"); - BlueNRGGattServer::getInstance().HCIEvent(GattServerEvents::GATT_EVENT_UPDATES_DISABLED, p_char->getValueAttribute().getHandle()/*evt->attr_handle*/); + BlueNRGGattServer::getInstance().HCIEvent(GattServerEvents::GATT_EVENT_UPDATES_DISABLED, p_char->getValueAttribute().getHandle()); } } //Check is attr handle property is WRITEABLE, if yes, generate GATT_EVENT_DATA_WRITTEN Event if((p_char->getProperties() & - (GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE| - GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE))) { + (GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE)) && + currentHandle == BlueNRGGattServer::CHAR_VALUE_HANDLE) { + + DEBUG("*****WRITE CASE\n\r"); GattWriteCallbackParams writeParams; - writeParams.handle=p_char->getValueAttribute().getHandle();/*evt->attr_handle-CHAR_VALUE_OFFSET;*/ + writeParams.handle=p_char->getValueAttribute().getHandle(); writeParams.writeOp=GattWriteCallbackParams::OP_WRITE_REQ;//Where to find this property in BLUENRG? writeParams.len=evt->data_length; writeParams.data=evt->att_data;