Skip to content
Snippets Groups Projects
Commit 1b03aacd authored by schneider's avatar schneider
Browse files

feat(ess): Add pressure characteristic

parent f124e220
No related branches found
No related tags found
No related merge requests found
...@@ -231,6 +231,7 @@ static const attsCccSet_t bleCccSet[BLE_NUM_CCC_IDX] = ...@@ -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 */ {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_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_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 */
}; };
/************************************************************************************************** /**************************************************************************************************
......
...@@ -6,6 +6,7 @@ enum ...@@ -6,6 +6,7 @@ enum
BLE_BATT_LVL_CCC_IDX, /*! Battery service, battery level characteristic */ BLE_BATT_LVL_CCC_IDX, /*! Battery service, battery level characteristic */
BLE_ESS_TEMP_CCC_IDX, /*! Environmental sensing service, temperature characteristic */ BLE_ESS_TEMP_CCC_IDX, /*! Environmental sensing service, temperature characteristic */
BLE_ESS_HUMI_CCC_IDX, /*! Environmental sensing service, humidity 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 BLE_NUM_CCC_IDX
}; };
...@@ -34,6 +34,13 @@ static const uint8_t UUID_char_humidity[] = { ...@@ -34,6 +34,13 @@ static const uint8_t UUID_char_humidity[] = {
UINT16_TO_BYTES(ATT_UUID_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 const uint16_t UUID_char_len = sizeof(UUID_char_temperature);
static uint8_t initTemperatureValue[] = { UINT16_TO_BYTES(0) }; static uint8_t initTemperatureValue[] = { UINT16_TO_BYTES(0) };
...@@ -42,6 +49,9 @@ static uint16_t initTemperatureLen = sizeof(initTemperatureValue); ...@@ -42,6 +49,9 @@ static uint16_t initTemperatureLen = sizeof(initTemperatureValue);
static uint8_t initHumidityValue[] = { UINT16_TO_BYTES(0) }; static uint8_t initHumidityValue[] = { UINT16_TO_BYTES(0) };
static uint16_t initHumidityLen = sizeof(initHumidityValue); static uint16_t initHumidityLen = sizeof(initHumidityValue);
static uint8_t initPressureValue[] = { UINT32_TO_BYTES(0) };
static uint16_t initPressureLen = sizeof(initPressureValue);
/* Temperature client characteristic configuration */ /* Temperature client characteristic configuration */
static uint8_t essValTempChCcc[] = {UINT16_TO_BYTES(0x0000)}; static uint8_t essValTempChCcc[] = {UINT16_TO_BYTES(0x0000)};
static const uint16_t essLenTempChCcc = sizeof(essValTempChCcc); static const uint16_t essLenTempChCcc = sizeof(essValTempChCcc);
...@@ -50,6 +60,10 @@ 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 uint8_t essValHumidityChCcc[] = {UINT16_TO_BYTES(0x0000)};
static const uint16_t essLenHumidityChCcc = sizeof(essValHumidityChCcc); 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 */ /* clang-format on */
/* /*
...@@ -122,6 +136,34 @@ static const attsAttr_t ESSSvcAttrList[] = { ...@@ -122,6 +136,34 @@ static const attsAttr_t ESSSvcAttrList[] = {
ATTS_PERMIT_WRITE) // How about security? 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 // validating that the service really has all charateristics
...@@ -181,6 +223,11 @@ void bleESS_update(void) ...@@ -181,6 +223,11 @@ void bleESS_update(void)
ESS_HUMIDITY_VAL_HDL, sizeof(humidity), (uint8_t *)&humidity 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(); dmConnId_t connId = AppConnIsOpen();
if (connId != DM_CONN_ID_NONE) { if (connId != DM_CONN_ID_NONE) {
if (AttsCccEnabled(connId, BLE_ESS_TEMP_CCC_IDX)) { if (AttsCccEnabled(connId, BLE_ESS_TEMP_CCC_IDX)) {
...@@ -199,6 +246,14 @@ void bleESS_update(void) ...@@ -199,6 +246,14 @@ void bleESS_update(void)
(uint8_t *)&humidity (uint8_t *)&humidity
); );
} }
if (AttsCccEnabled(connId, BLE_ESS_PRES_CCC_IDX)) {
AttsHandleValueNtf(
connId,
ESS_PRESSURE_VAL_HDL,
sizeof(pressure),
(uint8_t *)&pressure
);
}
} }
} }
......
...@@ -16,6 +16,11 @@ enum { ...@@ -16,6 +16,11 @@ enum {
ESS_HUMIDITY_CH_HDL, ESS_HUMIDITY_CH_HDL,
ESS_HUMIDITY_VAL_HDL, ESS_HUMIDITY_VAL_HDL,
ESS_HUMI_CH_CCC_HDL, /*!< Humidity CCCD */ 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. */ /*!< \brief Maximum handle. */
ESS_MAX_HDL ESS_MAX_HDL
......
...@@ -214,6 +214,7 @@ extern "C" { ...@@ -214,6 +214,7 @@ extern "C" {
#define ATT_UUID_CTE_TX_DURATION 0x7F83 /*!< \brief Constant Tone Extension transmit duration */ #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_INTERVAL 0x7F84 /*!< \brief Constant Tone Extension interval */
#define ATT_UUID_CTE_PHY 0x7F85 /*!< \brief Constant Tone Extension PHY */ #define ATT_UUID_CTE_PHY 0x7F85 /*!< \brief Constant Tone Extension PHY */
#define ATT_UUID_PRESSURE 0x2A6D
#define ATT_UUID_TEMPERATURE 0x2A6E #define ATT_UUID_TEMPERATURE 0x2A6E
#define ATT_UUID_HUMIDITY 0x2A6F #define ATT_UUID_HUMIDITY 0x2A6F
/**@}*/ /**@}*/
...@@ -536,6 +537,7 @@ extern const uint8_t attCteIntChUuid[ATT_16_UUID_LEN]; /*!< \brief Constant To ...@@ -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 attCtePhyChUuid[ATT_16_UUID_LEN]; /*!< \brief Constant Tone Extension PHY */
extern const uint8_t attTemperatureChUuid[ATT_16_UUID_LEN]; extern const uint8_t attTemperatureChUuid[ATT_16_UUID_LEN];
extern const uint8_t attHumidityChUuid[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 */ /*! \} */ /* STACK_ATT_API */
......
...@@ -188,3 +188,4 @@ const uint8_t attCteIntChUuid[ATT_16_UUID_LEN] = {UINT16_TO_BYTES(ATT_UUID_CTE ...@@ -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 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 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 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)};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment