Skip to content
Snippets Groups Projects
Commit 80e3b8f2 authored by schneider's avatar schneider
Browse files

feat(ess): Send notifications when doing single read

parent 405a656e
No related branches found
No related tags found
1 merge request!428Environmental Sensing Service
...@@ -173,6 +173,45 @@ WSF_CT_ASSERT( ...@@ -173,6 +173,45 @@ WSF_CT_ASSERT(
((sizeof(ESSSvcAttrList) / sizeof(ESSSvcAttrList[0])) == ((sizeof(ESSSvcAttrList) / sizeof(ESSSvcAttrList[0])) ==
ESS_END_HDL - ESS_START_HDL + 1)); ESS_END_HDL - ESS_START_HDL + 1));
static void
sendNotification(dmConnId_t connId, uint16_t handle, uint16_t cccidx)
{
if (connId != DM_CONN_ID_NONE) {
uint16_t len;
uint8_t *value;
uint8_t ret = AttsGetAttr(handle, &len, &value);
if (ret == ATT_SUCCESS) {
if (AttsCccEnabled(connId, cccidx)) {
AttsHandleValueNtf(connId, handle, len, value);
}
}
}
}
static void setAttrFromBME680(struct bme680_sensor_data *data)
{
int16_t temperature;
uint16_t humidity;
uint32_t pressure;
temperature = data->temperature * 100;
AttsSetAttr(
ESS_TEMPERATURE_VAL_HDL,
sizeof(temperature),
(uint8_t *)&temperature
);
humidity = data->humidity * 100;
AttsSetAttr(
ESS_HUMIDITY_VAL_HDL, sizeof(humidity), (uint8_t *)&humidity
);
pressure = data->pressure * 1000;
AttsSetAttr(
ESS_PRESSURE_VAL_HDL, sizeof(pressure), (uint8_t *)&pressure
);
}
/* /*
* BLE ESS read callback. * BLE ESS read callback.
* *
...@@ -184,40 +223,39 @@ static uint8_t readESSCB( ...@@ -184,40 +223,39 @@ static uint8_t readESSCB(
uint16_t offset, uint16_t offset,
attsAttr_t *pAttr attsAttr_t *pAttr
) { ) {
int16_t temperature;
uint16_t humidity;
uint32_t pressure;
struct bme680_sensor_data data; struct bme680_sensor_data data;
int ret = epic_bme680_read_sensors(&data); int ret = epic_bme680_read_sensors(&data);
if (ret != 0) { if (ret != 0) {
return ATT_ERR_UNDEFINED; return ATT_ERR_UNDEFINED;
} }
setAttrFromBME680(&data);
/* Send notifications (if enabled) for the _other_ characteristics. */
switch (handle) { switch (handle) {
case ESS_TEMPERATURE_VAL_HDL: case ESS_TEMPERATURE_VAL_HDL:
temperature = data.temperature * 100; sendNotification(
AttsSetAttr( connId, ESS_HUMIDITY_VAL_HDL, BLE_ESS_HUMI_CCC_IDX
ESS_TEMPERATURE_VAL_HDL, );
sizeof(temperature), sendNotification(
(uint8_t *)&temperature connId, ESS_PRESSURE_VAL_HDL, BLE_ESS_PRES_CCC_IDX
); );
APP_TRACE_INFO1("ble-ess: read temperature: %d\n", temperature); APP_TRACE_INFO1("ble-ess: read temperature: %d\n", temperature);
return ATT_SUCCESS; return ATT_SUCCESS;
case ESS_HUMIDITY_VAL_HDL: case ESS_HUMIDITY_VAL_HDL:
humidity = data.humidity * 100; sendNotification(
AttsSetAttr( connId, ESS_TEMPERATURE_VAL_HDL, BLE_ESS_TEMP_CCC_IDX
ESS_HUMIDITY_VAL_HDL, );
sizeof(humidity), sendNotification(
(uint8_t *)&humidity connId, ESS_PRESSURE_VAL_HDL, BLE_ESS_PRES_CCC_IDX
); );
APP_TRACE_INFO1("ble-ess: read humidity: %u\n", humidity); APP_TRACE_INFO1("ble-ess: read humidity: %u\n", humidity);
return ATT_SUCCESS; return ATT_SUCCESS;
case ESS_PRESSURE_VAL_HDL: case ESS_PRESSURE_VAL_HDL:
pressure = data.pressure * 1000; sendNotification(
AttsSetAttr( connId, ESS_TEMPERATURE_VAL_HDL, BLE_ESS_TEMP_CCC_IDX
ESS_PRESSURE_VAL_HDL, );
sizeof(pressure), sendNotification(
(uint8_t *)&pressure connId, ESS_HUMIDITY_VAL_HDL, BLE_ESS_HUMI_CCC_IDX
); );
APP_TRACE_INFO1("ble-ess: read pressure: %u\n", pressure); APP_TRACE_INFO1("ble-ess: read pressure: %u\n", pressure);
return ATT_SUCCESS; return ATT_SUCCESS;
...@@ -238,50 +276,18 @@ static attsGroup_t svcESSGroup = { ...@@ -238,50 +276,18 @@ static attsGroup_t svcESSGroup = {
void bleESS_update(void) void bleESS_update(void)
{ {
int16_t temperature = 0; struct bme680_sensor_data data;
AttsSetAttr( int ret = epic_bme680_read_sensors(&data);
ESS_TEMPERATURE_VAL_HDL, if (ret != 0) {
sizeof(temperature), return;
(uint8_t *)&temperature }
); setAttrFromBME680(&data);
uint16_t humidity = 0;
AttsSetAttr(
ESS_HUMIDITY_VAL_HDL, sizeof(humidity), (uint8_t *)&humidity
);
uint32_t pressure = 0;
AttsSetAttr(
ESS_PRESSURE_VAL_HDL, sizeof(pressure), (uint8_t *)&pressure
);
/* Send notifications (if enabled) for all characteristics. */
dmConnId_t connId = AppConnIsOpen(); dmConnId_t connId = AppConnIsOpen();
if (connId != DM_CONN_ID_NONE) { sendNotification(connId, ESS_TEMPERATURE_VAL_HDL, BLE_ESS_TEMP_CCC_IDX);
if (AttsCccEnabled(connId, BLE_ESS_TEMP_CCC_IDX)) { sendNotification(connId, ESS_HUMIDITY_VAL_HDL, BLE_ESS_HUMI_CCC_IDX);
AttsHandleValueNtf( sendNotification(connId, ESS_PRESSURE_VAL_HDL, BLE_ESS_PRES_CCC_IDX);
connId,
ESS_TEMPERATURE_VAL_HDL,
sizeof(temperature),
(uint8_t *)&temperature
);
}
if (AttsCccEnabled(connId, BLE_ESS_HUMI_CCC_IDX)) {
AttsHandleValueNtf(
connId,
ESS_HUMIDITY_VAL_HDL,
sizeof(humidity),
(uint8_t *)&humidity
);
}
if (AttsCccEnabled(connId, BLE_ESS_PRES_CCC_IDX)) {
AttsHandleValueNtf(
connId,
ESS_PRESSURE_VAL_HDL,
sizeof(pressure),
(uint8_t *)&pressure
);
}
}
} }
/* /*
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment