diff --git a/epicardium/ble/ess.c b/epicardium/ble/ess.c index 5395503561e4a98b691db61da37713e759a9bfc8..4f880a7a0041dea90dc9a34b02d70080eb7a2c3a 100644 --- a/epicardium/ble/ess.c +++ b/epicardium/ble/ess.c @@ -88,11 +88,11 @@ static const attsAttr_t ESSSvcAttrList[] = { .permissions = ATTS_PERMIT_READ, }, { - .pUuid = attTemperatureChUuid, - .pValue = initTemperatureValue, - .pLen = &initTemperatureLen, - .maxLen = sizeof(initTemperatureValue), - //.settings = ATTS_SET_READ_CBACK, + .pUuid = attTemperatureChUuid, + .pValue = initTemperatureValue, + .pLen = &initTemperatureLen, + .maxLen = sizeof(initTemperatureValue), + .settings = ATTS_SET_READ_CBACK, .permissions = ATTS_PERMIT_READ | ATTS_PERMIT_READ_ENC | ATTS_PERMIT_READ_AUTH, }, @@ -121,6 +121,7 @@ static const attsAttr_t ESSSvcAttrList[] = { .pValue = initHumidityValue, .pLen = &initHumidityLen, .maxLen = sizeof(initHumidityValue), + .settings = ATTS_SET_READ_CBACK, .permissions = ATTS_PERMIT_READ | ATTS_PERMIT_READ_ENC | ATTS_PERMIT_READ_AUTH, }, @@ -149,6 +150,7 @@ static const attsAttr_t ESSSvcAttrList[] = { .pValue = initPressureValue, .pLen = &initPressureLen, .maxLen = sizeof(initPressureValue), + .settings = ATTS_SET_READ_CBACK, .permissions = ATTS_PERMIT_READ | ATTS_PERMIT_READ_ENC | ATTS_PERMIT_READ_AUTH, }, @@ -171,12 +173,9 @@ WSF_CT_ASSERT( ((sizeof(ESSSvcAttrList) / sizeof(ESSSvcAttrList[0])) == ESS_END_HDL - ESS_START_HDL + 1)); -#if 0 /* * BLE ESS read callback. * - * Disabled at the moment as no dynamic handling of read requests - * is needed and all fields are updated by bleESS_update() */ static uint8_t readESSCB( dmConnId_t connId, @@ -185,25 +184,53 @@ static uint8_t readESSCB( uint16_t offset, attsAttr_t *pAttr ) { - uint16_t i16 = 0; + 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; + } + switch (handle) { - // Temperature case ESS_TEMPERATURE_VAL_HDL: - //*((int16_t *)pAttr->pValue) = i16; - //APP_TRACE_INFO1("ble-ess: read temperature: %d\n", i16); + temperature = data.temperature * 100; + AttsSetAttr( + ESS_TEMPERATURE_VAL_HDL, + sizeof(temperature), + (uint8_t *)&temperature + ); + 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 + ); + 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 + ); + APP_TRACE_INFO1("ble-ess: read pressure: %u\n", pressure); return ATT_SUCCESS; default: APP_TRACE_INFO0("ble-card10: read no handler found\n"); return ATT_ERR_HANDLE; } } -#endif static attsGroup_t svcESSGroup = { - .pNext = NULL, - .pAttr = (attsAttr_t *)ESSSvcAttrList, - .readCback = NULL, - //.readCback = readESSCB, + .pNext = NULL, + .pAttr = (attsAttr_t *)ESSSvcAttrList, + .readCback = readESSCB, .writeCback = NULL, .startHandle = ESS_START_HDL, .endHandle = ESS_END_HDL,