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

feat(ess): Add humidity characteristic

parent 39a2b81d
No related branches found
No related tags found
1 merge request!428Environmental Sensing Service
......@@ -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 */
{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 */
};
/**************************************************************************************************
......
......@@ -5,6 +5,7 @@ enum
BLE_GATT_SC_CCC_IDX, /*! GATT service, service changed characteristic */
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_NUM_CCC_IDX
};
......@@ -27,15 +27,29 @@ static const uint8_t UUID_char_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 uint8_t initTemperatureValue[] = { UINT16_TO_BYTES(0) };
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 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 */
/*
......@@ -79,6 +93,35 @@ static const attsAttr_t ESSSvcAttrList[] = {
(ATTS_PERMIT_READ |
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
......@@ -129,6 +172,11 @@ void bleESS_update(void)
uint16_t i16 = 0;
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();
if (connId != DM_CONN_ID_NONE) {
if (AttsCccEnabled(connId, BLE_ESS_TEMP_CCC_IDX)) {
......@@ -139,6 +187,14 @@ void bleESS_update(void)
(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 {
ESS_TEMPERATURE_CH_HDL,
ESS_TEMPERATURE_VAL_HDL,
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. */
ESS_MAX_HDL
};
......
......@@ -215,6 +215,7 @@ extern "C" {
#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_TEMPERATURE 0x2A6E
#define ATT_UUID_HUMIDITY 0x2A6F
/**@}*/
/** \name GATT Unit UUIDs
......@@ -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 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];
/**@}*/
/*! \} */ /* STACK_ATT_API */
......
......@@ -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 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)};
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