Skip to main content
occam25
Associate II
January 4, 2020
Solved

BlueNRG: Not notified when attribute is written

  • January 4, 2020
  • 2 replies
  • 982 views

I have modified the BlueNRG sensor demo adding a new characteristic to turn on/off a LED. I want to be notified when the client (the smartphone) sends data so I can check the written value to change the LED status accordinly.

I have tried many options but I am not being notified for writes, only for reads.

This is the characteristic added (just bellow de humidity characteristic):

COPY_LED_CHAR_UUID(uuid);
 ret = aci_gatt_add_char(envSensServHandle, 
 	 UUID_TYPE_128, 
 	uuid, 
 	2,
 	CHAR_PROP_WRITE | CHAR_PROP_WRITE_WITHOUT_RESP,
	ATTR_PERMISSION_NONE, 
 	GATT_NOTIFY_WRITE_REQ_AND_WAIT_FOR_APPL_RESP | GATT_NOTIFY_ATTRIBUTE_WRITE,
 	16, 
 	0, 
 	&ledCharHandle);
 if (ret != BLE_STATUS_SUCCESS) goto fail;
 
 charFormat.format = FORMAT_UINT16;
 charFormat.exp = -1;
 charFormat.unit = UNIT_UNITLESS;
 charFormat.name_space = 0;
 charFormat.desc = 0;
 
 uuid16 = CHAR_FORMAT_DESC_UUID;
 
 ret = aci_gatt_add_char_desc(envSensServHandle,
 				 ledCharHandle,
 UUID_TYPE_16,
 (uint8_t *)&uuid16,
 7,
 7,
 (void *)&charFormat,
 ATTR_PERMISSION_NONE,
				 ATTR_PERMISSION_NONE, 
				 ATTR_ACCESS_WRITE_REQ_ONLY, 
 16,
 FALSE,
 &descHandle);
 if (ret != BLE_STATUS_SUCCESS) goto fail;

The return value is BLE_STATUS_SUCCESS

Then, in the user_notify callback, I add the EVT_BLUE_GATT_WRITE_PERMIT_REQ event but it is never called.

 case EVT_VENDOR:
	{
		evt_blue_aci *blue_evt = (void*)event_pckt->data;
		switch(blue_evt->ecode){
		case EVT_BLUE_GATT_READ_PERMIT_REQ:
		{
			evt_gatt_read_permit_req *pr = (void*)blue_evt->data;
			Read_Request_CB(pr->attr_handle);
			break;
		}
		// ADDED THE WRITE REQUEST NOTIFICATION
		case EVT_BLUE_GATT_WRITE_PERMIT_REQ:
		{
			evt_gatt_write_permit_req *pr = (void *)blue_evt->data;
			Write_Request_CB(pr);
			break;
		}
		}
	}

Am I missing something? do I need to do anything else in order to get the write notifications? (read notifications work perfectly)

I have been stuck with this for a long time, any help will be appreciated!

Thanks

This topic has been closed for replies.
Best answer by occam25

Just in case it is useful to someone, It turned out that the code is ok and the problem was in the smartphone app. In app inventor. I was using the writeBytes call but it doesn't work properly. After changing to writeStrings the write notification worked like a charm

2 replies

occam25
occam25AuthorBest answer
Associate II
January 5, 2020

Just in case it is useful to someone, It turned out that the code is ok and the problem was in the smartphone app. In app inventor. I was using the writeBytes call but it doesn't work properly. After changing to writeStrings the write notification worked like a charm

Avan .12
Associate II
August 20, 2022

Excellent! Thank you!