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(
((sizeof(ESSSvcAttrList) / sizeof(ESSSvcAttrList[0])) ==
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.
*
......@@ -184,40 +223,39 @@ static uint8_t readESSCB(
uint16_t offset,
attsAttr_t *pAttr
) {
int16_t temperature;
uint16_t humidity;
uint32_t pressure;
struct bme680_sensor_data data;
int ret = epic_bme680_read_sensors(&data);
if (ret != 0) {
return ATT_ERR_UNDEFINED;
}
setAttrFromBME680(&data);
/* Send notifications (if enabled) for the _other_ characteristics. */
switch (handle) {
case ESS_TEMPERATURE_VAL_HDL:
temperature = data.temperature * 100;
AttsSetAttr(
ESS_TEMPERATURE_VAL_HDL,
sizeof(temperature),
(uint8_t *)&temperature
sendNotification(
connId, ESS_HUMIDITY_VAL_HDL, BLE_ESS_HUMI_CCC_IDX
);
sendNotification(
connId, ESS_PRESSURE_VAL_HDL, BLE_ESS_PRES_CCC_IDX
);
APP_TRACE_INFO1("ble-ess: read temperature: %d\n", temperature);
return ATT_SUCCESS;
case ESS_HUMIDITY_VAL_HDL:
humidity = data.humidity * 100;
AttsSetAttr(
ESS_HUMIDITY_VAL_HDL,
sizeof(humidity),
(uint8_t *)&humidity
sendNotification(
connId, ESS_TEMPERATURE_VAL_HDL, BLE_ESS_TEMP_CCC_IDX
);
sendNotification(
connId, ESS_PRESSURE_VAL_HDL, BLE_ESS_PRES_CCC_IDX
);
APP_TRACE_INFO1("ble-ess: read humidity: %u\n", humidity);
return ATT_SUCCESS;
case ESS_PRESSURE_VAL_HDL:
pressure = data.pressure * 1000;
AttsSetAttr(
ESS_PRESSURE_VAL_HDL,
sizeof(pressure),
(uint8_t *)&pressure
sendNotification(
connId, ESS_TEMPERATURE_VAL_HDL, BLE_ESS_TEMP_CCC_IDX
);
sendNotification(
connId, ESS_HUMIDITY_VAL_HDL, BLE_ESS_HUMI_CCC_IDX
);
APP_TRACE_INFO1("ble-ess: read pressure: %u\n", pressure);
return ATT_SUCCESS;
......@@ -238,50 +276,18 @@ static attsGroup_t svcESSGroup = {
void bleESS_update(void)
{
int16_t temperature = 0;
AttsSetAttr(
ESS_TEMPERATURE_VAL_HDL,
sizeof(temperature),
(uint8_t *)&temperature
);
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
);
struct bme680_sensor_data data;
int ret = epic_bme680_read_sensors(&data);
if (ret != 0) {
return;
}
setAttrFromBME680(&data);
/* Send notifications (if enabled) for all characteristics. */
dmConnId_t connId = AppConnIsOpen();
if (connId != DM_CONN_ID_NONE) {
if (AttsCccEnabled(connId, BLE_ESS_TEMP_CCC_IDX)) {
AttsHandleValueNtf(
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
);
}
}
sendNotification(connId, ESS_TEMPERATURE_VAL_HDL, BLE_ESS_TEMP_CCC_IDX);
sendNotification(connId, ESS_HUMIDITY_VAL_HDL, BLE_ESS_HUMI_CCC_IDX);
sendNotification(connId, ESS_PRESSURE_VAL_HDL, BLE_ESS_PRES_CCC_IDX);
}
/*
......
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