diff --git a/epicardium/ble/ble_main.c b/epicardium/ble/ble_main.c index 98db125d36b6d91c60f60ba31818246ca358d68e..36f832ba6a68e430a2646146b515d782b7fc01be 100644 --- a/epicardium/ble/ble_main.c +++ b/epicardium/ble/ble_main.c @@ -231,6 +231,7 @@ static const attsCccSet_t bleCccSet[BLE_NUM_CCC_IDX] = {BATT_LVL_CH_CCC_HDL, ATT_CLIENT_CFG_NOTIFY, DM_SEC_LEVEL_NONE}, /* BLE_BATT_LVL_CCC_IDX */ {ESS_TEMP_CH_CCC_HDL, ATT_CLIENT_CFG_NOTIFY, DM_SEC_LEVEL_NONE}, /* BLE_ESS_TEMP_CCC_IDX */ {ESS_HUMI_CH_CCC_HDL, ATT_CLIENT_CFG_NOTIFY, DM_SEC_LEVEL_NONE}, /* BLE_ESS_HUMI_CCC_IDX */ + {ESS_PRES_CH_CCC_HDL, ATT_CLIENT_CFG_NOTIFY, DM_SEC_LEVEL_NONE}, /* BLE_ESS_PRES_CCC_IDX */ }; /************************************************************************************************** diff --git a/epicardium/ble/cccd.h b/epicardium/ble/cccd.h index 4ec4e57022c301b068b53cb66e1b9649602728b5..2715f6ebb6252e4995b73bb7980795b4c0354083 100644 --- a/epicardium/ble/cccd.h +++ b/epicardium/ble/cccd.h @@ -6,6 +6,7 @@ enum BLE_BATT_LVL_CCC_IDX, /*! Battery service, battery level characteristic */ BLE_ESS_TEMP_CCC_IDX, /*! Environmental sensing service, temperature characteristic */ BLE_ESS_HUMI_CCC_IDX, /*! Environmental sensing service, humidity characteristic */ + BLE_ESS_PRES_CCC_IDX, /*! Environmental sensing service, pressure characteristic */ BLE_NUM_CCC_IDX }; diff --git a/epicardium/ble/ess.c b/epicardium/ble/ess.c index 3d3ba3d096c11d8adbfbc5e42ae9aa4a70087bfc..5395503561e4a98b691db61da37713e759a9bfc8 100644 --- a/epicardium/ble/ess.c +++ b/epicardium/ble/ess.c @@ -34,6 +34,13 @@ static const uint8_t UUID_char_humidity[] = { UINT16_TO_BYTES(ATT_UUID_HUMIDITY) }; +/* BLE UUID for pressure */ +static const uint8_t UUID_char_pressure[] = { + ATT_PROP_READ | ATT_PROP_NOTIFY, + UINT16_TO_BYTES(ESS_PRESSURE_VAL_HDL), + UINT16_TO_BYTES(ATT_UUID_PRESSURE) +}; + static const uint16_t UUID_char_len = sizeof(UUID_char_temperature); static uint8_t initTemperatureValue[] = { UINT16_TO_BYTES(0) }; @@ -42,6 +49,9 @@ static uint16_t initTemperatureLen = sizeof(initTemperatureValue); static uint8_t initHumidityValue[] = { UINT16_TO_BYTES(0) }; static uint16_t initHumidityLen = sizeof(initHumidityValue); +static uint8_t initPressureValue[] = { UINT32_TO_BYTES(0) }; +static uint16_t initPressureLen = sizeof(initPressureValue); + /* Temperature client characteristic configuration */ static uint8_t essValTempChCcc[] = {UINT16_TO_BYTES(0x0000)}; static const uint16_t essLenTempChCcc = sizeof(essValTempChCcc); @@ -50,6 +60,10 @@ static const uint16_t essLenTempChCcc = sizeof(essValTempChCcc); static uint8_t essValHumidityChCcc[] = {UINT16_TO_BYTES(0x0000)}; static const uint16_t essLenHumidityChCcc = sizeof(essValHumidityChCcc); +/* Pressure client characteristic configuration */ +static uint8_t essValPressureChCcc[] = {UINT16_TO_BYTES(0x0000)}; +static const uint16_t essLenPressureChCcc = sizeof(essValPressureChCcc); + /* clang-format on */ /* @@ -122,6 +136,34 @@ static const attsAttr_t ESSSvcAttrList[] = { ATTS_PERMIT_WRITE) // How about security? }, + // Pressure + { + .pUuid = attChUuid, + .pValue = (uint8_t *)UUID_char_pressure, + .pLen = (uint16_t *)&UUID_char_len, + .maxLen = sizeof(UUID_char_pressure), + .permissions = ATTS_PERMIT_READ, + }, + { + .pUuid = attPressureChUuid, + .pValue = initPressureValue, + .pLen = &initPressureLen, + .maxLen = sizeof(initPressureValue), + .permissions = ATTS_PERMIT_READ | ATTS_PERMIT_READ_ENC | + ATTS_PERMIT_READ_AUTH, + }, + /* Characteristic CCC descriptor */ + { + .pUuid = attCliChCfgUuid, + .pValue = essValPressureChCcc, + .pLen = (uint16_t *)&essLenPressureChCcc, + .maxLen = sizeof(essValPressureChCcc), + .settings = ATTS_SET_CCC, + .permissions = + (ATTS_PERMIT_READ | + ATTS_PERMIT_WRITE) // How about security? + }, + }; // validating that the service really has all charateristics @@ -181,6 +223,11 @@ void bleESS_update(void) ESS_HUMIDITY_VAL_HDL, sizeof(humidity), (uint8_t *)&humidity ); + uint32_t pressure = 0; + AttsSetAttr( + ESS_PRESSURE_VAL_HDL, sizeof(pressure), (uint8_t *)&pressure + ); + dmConnId_t connId = AppConnIsOpen(); if (connId != DM_CONN_ID_NONE) { if (AttsCccEnabled(connId, BLE_ESS_TEMP_CCC_IDX)) { @@ -199,6 +246,14 @@ void bleESS_update(void) (uint8_t *)&humidity ); } + if (AttsCccEnabled(connId, BLE_ESS_PRES_CCC_IDX)) { + AttsHandleValueNtf( + connId, + ESS_PRESSURE_VAL_HDL, + sizeof(pressure), + (uint8_t *)&pressure + ); + } } } diff --git a/epicardium/ble/ess.h b/epicardium/ble/ess.h index 3bd5cf9741dc84b29ade6a0de2a40b492e0330e8..2e0d993aac0858cc56bf317574cb49ca7d9d927c 100644 --- a/epicardium/ble/ess.h +++ b/epicardium/ble/ess.h @@ -16,6 +16,11 @@ enum { ESS_HUMIDITY_CH_HDL, ESS_HUMIDITY_VAL_HDL, ESS_HUMI_CH_CCC_HDL, /*!< Humidity CCCD */ + /*!< \brief pressure characteristic */ + ESS_PRESSURE_CH_HDL, + ESS_PRESSURE_VAL_HDL, + ESS_PRES_CH_CCC_HDL, /*!< Pressure CCCD */ + /*!< \brief Maximum handle. */ ESS_MAX_HDL diff --git a/lib/sdk/Libraries/BTLE/stack/ble-host/include/att_uuid.h b/lib/sdk/Libraries/BTLE/stack/ble-host/include/att_uuid.h index ee28d104ac5a3c4e00ec7de6c204db55a2618c88..a630a14911a880c6690187fe91ecb2dedefdbbaf 100644 --- a/lib/sdk/Libraries/BTLE/stack/ble-host/include/att_uuid.h +++ b/lib/sdk/Libraries/BTLE/stack/ble-host/include/att_uuid.h @@ -214,6 +214,7 @@ extern "C" { #define ATT_UUID_CTE_TX_DURATION 0x7F83 /*!< \brief Constant Tone Extension transmit duration */ #define ATT_UUID_CTE_INTERVAL 0x7F84 /*!< \brief Constant Tone Extension interval */ #define ATT_UUID_CTE_PHY 0x7F85 /*!< \brief Constant Tone Extension PHY */ +#define ATT_UUID_PRESSURE 0x2A6D #define ATT_UUID_TEMPERATURE 0x2A6E #define ATT_UUID_HUMIDITY 0x2A6F /**@}*/ @@ -536,6 +537,7 @@ extern const uint8_t attCteIntChUuid[ATT_16_UUID_LEN]; /*!< \brief Constant To extern const uint8_t attCtePhyChUuid[ATT_16_UUID_LEN]; /*!< \brief Constant Tone Extension PHY */ extern const uint8_t attTemperatureChUuid[ATT_16_UUID_LEN]; extern const uint8_t attHumidityChUuid[ATT_16_UUID_LEN]; +extern const uint8_t attPressureChUuid[ATT_16_UUID_LEN]; /**@}*/ /*! \} */ /* STACK_ATT_API */ diff --git a/lib/sdk/Libraries/BTLE/stack/ble-host/sources/stack/att/att_uuid.c b/lib/sdk/Libraries/BTLE/stack/ble-host/sources/stack/att/att_uuid.c index 5efcfc7507a6a4829a3014715d51a69a6efb9bf8..53296d0b5c5a8be9a69449b0a1730bfd4f0a3734 100644 --- a/lib/sdk/Libraries/BTLE/stack/ble-host/sources/stack/att/att_uuid.c +++ b/lib/sdk/Libraries/BTLE/stack/ble-host/sources/stack/att/att_uuid.c @@ -188,3 +188,4 @@ const uint8_t attCteIntChUuid[ATT_16_UUID_LEN] = {UINT16_TO_BYTES(ATT_UUID_CTE const uint8_t attCtePhyChUuid[ATT_16_UUID_LEN] = {UINT16_TO_BYTES(ATT_UUID_CTE_PHY)}; const uint8_t attTemperatureChUuid[ATT_16_UUID_LEN] = {UINT16_TO_BYTES(ATT_UUID_TEMPERATURE)}; const uint8_t attHumidityChUuid[ATT_16_UUID_LEN] = {UINT16_TO_BYTES(ATT_UUID_HUMIDITY)}; +const uint8_t attPressureChUuid[ATT_16_UUID_LEN] = {UINT16_TO_BYTES(ATT_UUID_PRESSURE)};