gjhn

Dependents:   BLE_GENERALE

Fork of X_NUCLEO_IDB0XA1 by ST

Branch:
bde03b1e2c8e385819a23a5b6b31c97b4811d0a3
Revision:
267:cd7870e466b3
Parent:
266:b49e28134d83
Child:
268:c0a1e03c5736
--- a/source/platform/btle.cpp	Thu Sep 15 10:51:29 2016 +0100
+++ b/source/platform/btle.cpp	Thu Sep 15 10:51:30 2016 +0100
@@ -369,13 +369,15 @@
             //BlueNRGGattServer::getInstance().handleEvent(GattServerEvents::GATT_EVENT_DATA_WRITTEN, attr_handle);
             //Write the actual Data to the Attr Handle? (uint8_1[])att_data contains the data
             if ((p_char->getValueAttribute().getValuePtr() != NULL) && (p_char->getValueAttribute().getLength() > 0)) {
-                BlueNRGGattServer::getInstance().write(p_char->getValueAttribute().getHandle(),
-                (uint8_t*)att_data,
-                data_length,
-                false);
+                BlueNRGGattServer::getInstance().write(
+                    p_char->getValueAttribute().getHandle(),
+                    (uint8_t*)att_data,
+                    data_length,
+                    false
+                );
+            }
 
             BlueNRGGattServer::getInstance().HCIDataWrittenEvent(&writeParams);
-            }
         } else {
             PRINTF("*****WRITE DESCRIPTOR CASE\n\r");
 
@@ -522,11 +524,31 @@
 
                 switch(blue_evt->ecode){
 
-                // case EVT_BLUE_GATT_WRITE_PERMIT_REQ:
-                //     {
-                //         printf("write request !!!!\r\");
-                //     }
-                //     break;
+                case EVT_BLUE_GATT_WRITE_PERMIT_REQ:
+                    {
+                        PRINTF("EVT_BLUE_GATT_WRITE_PERMIT_REQ\r\n");
+                        evt_gatt_write_permit_req* write_req = (evt_gatt_write_permit_req*)blue_evt->data;
+
+                        // ask the local server if the write operation is authorized
+                        uint8_t err_code = BlueNRGGattServer::getInstance().Write_Request_CB(
+                            write_req->conn_handle,
+                            write_req->attr_handle,
+                            write_req->data_length,
+                            write_req->data
+                        );
+                        uint8_t write_status = err_code == 0 ? 0 : 1;
+
+                        // reply to the shield
+                        tBleStatus err = aci_gatt_write_response(
+                            write_req->conn_handle,
+                            write_req->attr_handle,
+                            write_status,
+                            err_code,
+                            write_req->data_length,
+                            write_req->data
+                        );
+                    }
+                    break;
 
                 case EVT_BLUE_GATT_READ_PERMIT_REQ:
                     {