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

feat(ess): Add humidity characteristic

parent 39a2b81d
Branches
No related tags found
No related merge requests found
...@@ -230,6 +230,7 @@ static const attsCccSet_t bleCccSet[BLE_NUM_CCC_IDX] = ...@@ -230,6 +230,7 @@ static const attsCccSet_t bleCccSet[BLE_NUM_CCC_IDX] =
{GATT_SC_CH_CCC_HDL, ATT_CLIENT_CFG_INDICATE, DM_SEC_LEVEL_NONE}, /* BLE_GATT_SC_CCC_IDX */ {GATT_SC_CH_CCC_HDL, ATT_CLIENT_CFG_INDICATE, DM_SEC_LEVEL_NONE}, /* BLE_GATT_SC_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 */
}; };
/************************************************************************************************** /**************************************************************************************************
......
...@@ -5,6 +5,7 @@ enum ...@@ -5,6 +5,7 @@ enum
BLE_GATT_SC_CCC_IDX, /*! GATT service, service changed characteristic */ BLE_GATT_SC_CCC_IDX, /*! GATT service, service changed characteristic */
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_NUM_CCC_IDX BLE_NUM_CCC_IDX
}; };
...@@ -27,15 +27,29 @@ static const uint8_t UUID_char_temperature[] = { ...@@ -27,15 +27,29 @@ static const uint8_t UUID_char_temperature[] = {
UINT16_TO_BYTES(ATT_UUID_TEMPERATURE) UINT16_TO_BYTES(ATT_UUID_TEMPERATURE)
}; };
/* BLE UUID for humidity */
static const uint8_t UUID_char_humidity[] = {
ATT_PROP_READ | ATT_PROP_NOTIFY,
UINT16_TO_BYTES(ESS_HUMIDITY_VAL_HDL),
UINT16_TO_BYTES(ATT_UUID_HUMIDITY)
};
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) };
static uint16_t initTemperatureLen = sizeof(initTemperatureValue); static uint16_t initTemperatureLen = sizeof(initTemperatureValue);
/* Battery level client characteristic configuration */ static uint8_t initHumidityValue[] = { UINT16_TO_BYTES(0) };
static uint16_t initHumidityLen = sizeof(initHumidityValue);
/* 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);
/* Humidity client characteristic configuration */
static uint8_t essValHumidityChCcc[] = {UINT16_TO_BYTES(0x0000)};
static const uint16_t essLenHumidityChCcc = sizeof(essValHumidityChCcc);
/* clang-format on */ /* clang-format on */
/* /*
...@@ -79,6 +93,35 @@ static const attsAttr_t ESSSvcAttrList[] = { ...@@ -79,6 +93,35 @@ static const attsAttr_t ESSSvcAttrList[] = {
(ATTS_PERMIT_READ | (ATTS_PERMIT_READ |
ATTS_PERMIT_WRITE) // How about security? ATTS_PERMIT_WRITE) // How about security?
}, },
// Humidity
{
.pUuid = attChUuid,
.pValue = (uint8_t *)UUID_char_humidity,
.pLen = (uint16_t *)&UUID_char_len,
.maxLen = sizeof(UUID_char_humidity),
.permissions = ATTS_PERMIT_READ,
},
{
.pUuid = attHumidityChUuid,
.pValue = initHumidityValue,
.pLen = &initHumidityLen,
.maxLen = sizeof(initHumidityValue),
.permissions = ATTS_PERMIT_READ | ATTS_PERMIT_READ_ENC |
ATTS_PERMIT_READ_AUTH,
},
/* Characteristic CCC descriptor */
{
.pUuid = attCliChCfgUuid,
.pValue = essValHumidityChCcc,
.pLen = (uint16_t *)&essLenHumidityChCcc,
.maxLen = sizeof(essValHumidityChCcc),
.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
...@@ -129,6 +172,11 @@ void bleESS_update(void) ...@@ -129,6 +172,11 @@ void bleESS_update(void)
uint16_t i16 = 0; uint16_t i16 = 0;
AttsSetAttr(ESS_TEMPERATURE_VAL_HDL, sizeof(i16), (uint8_t *)&i16); AttsSetAttr(ESS_TEMPERATURE_VAL_HDL, sizeof(i16), (uint8_t *)&i16);
uint16_t humidity = 0;
AttsSetAttr(
ESS_HUMIDITY_VAL_HDL, sizeof(humidity), (uint8_t *)&humidity
);
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)) {
...@@ -139,6 +187,14 @@ void bleESS_update(void) ...@@ -139,6 +187,14 @@ void bleESS_update(void)
(uint8_t *)&i16 (uint8_t *)&i16
); );
} }
if (AttsCccEnabled(connId, BLE_ESS_HUMI_CCC_IDX)) {
AttsHandleValueNtf(
connId,
ESS_HUMIDITY_VAL_HDL,
sizeof(humidity),
(uint8_t *)&humidity
);
}
} }
} }
......
...@@ -12,6 +12,11 @@ enum { ...@@ -12,6 +12,11 @@ enum {
ESS_TEMPERATURE_CH_HDL, ESS_TEMPERATURE_CH_HDL,
ESS_TEMPERATURE_VAL_HDL, ESS_TEMPERATURE_VAL_HDL,
ESS_TEMP_CH_CCC_HDL, /*!< Temperature CCCD */ ESS_TEMP_CH_CCC_HDL, /*!< Temperature CCCD */
/*!< \brief humidity characteristic */
ESS_HUMIDITY_CH_HDL,
ESS_HUMIDITY_VAL_HDL,
ESS_HUMI_CH_CCC_HDL, /*!< Humidity CCCD */
/*!< \brief Maximum handle. */ /*!< \brief Maximum handle. */
ESS_MAX_HDL ESS_MAX_HDL
}; };
......
...@@ -215,6 +215,7 @@ extern "C" { ...@@ -215,6 +215,7 @@ extern "C" {
#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_TEMPERATURE 0x2A6E #define ATT_UUID_TEMPERATURE 0x2A6E
#define ATT_UUID_HUMIDITY 0x2A6F
/**@}*/ /**@}*/
/** \name GATT Unit UUIDs /** \name GATT Unit UUIDs
...@@ -534,6 +535,7 @@ extern const uint8_t attCteTxDurChUuid[ATT_16_UUID_LEN]; /*!< \brief Constant To ...@@ -534,6 +535,7 @@ extern const uint8_t attCteTxDurChUuid[ATT_16_UUID_LEN]; /*!< \brief Constant To
extern const uint8_t attCteIntChUuid[ATT_16_UUID_LEN]; /*!< \brief Constant Tone Extension interval */ extern const uint8_t attCteIntChUuid[ATT_16_UUID_LEN]; /*!< \brief Constant Tone Extension interval */
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];
/**@}*/ /**@}*/
/*! \} */ /* STACK_ATT_API */ /*! \} */ /* STACK_ATT_API */
......
...@@ -187,3 +187,4 @@ const uint8_t attCteTxDurChUuid[ATT_16_UUID_LEN] = {UINT16_TO_BYTES(ATT_UUID_CTE ...@@ -187,3 +187,4 @@ const uint8_t attCteTxDurChUuid[ATT_16_UUID_LEN] = {UINT16_TO_BYTES(ATT_UUID_CTE
const uint8_t attCteIntChUuid[ATT_16_UUID_LEN] = {UINT16_TO_BYTES(ATT_UUID_CTE_INTERVAL)}; const uint8_t attCteIntChUuid[ATT_16_UUID_LEN] = {UINT16_TO_BYTES(ATT_UUID_CTE_INTERVAL)};
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)};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment