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

feat(ess): add notification support for temperature

parent 224948f1
No related branches found
No related tags found
No related merge requests found
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
#include "rscp/rscp_api.h" #include "rscp/rscp_api.h"
#include "profiles/gap_api.h" #include "profiles/gap_api.h"
#include "cccd.h" #include "cccd.h"
#include "ess.h"
#include "ble_api.h" #include "ble_api.h"
#include "epicardium.h" #include "epicardium.h"
...@@ -228,6 +229,7 @@ static const attsCccSet_t bleCccSet[BLE_NUM_CCC_IDX] = ...@@ -228,6 +229,7 @@ static const attsCccSet_t bleCccSet[BLE_NUM_CCC_IDX] =
/* cccd handle value range security level */ /* cccd handle value range security level */
{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 */
}; };
/************************************************************************************************** /**************************************************************************************************
......
...@@ -4,6 +4,7 @@ enum ...@@ -4,6 +4,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_NUM_CCC_IDX BLE_NUM_CCC_IDX
}; };
#include "ess.h" #include "ess.h"
#include "cccd.h"
#include "wsf_types.h" #include "wsf_types.h"
#include "util/bstream.h" #include "util/bstream.h"
#include "wsf_assert.h" #include "wsf_assert.h"
#include "att_api.h" #include "att_api.h"
#include "app_api.h"
#include "epicardium.h" #include "epicardium.h"
...@@ -11,21 +14,6 @@ ...@@ -11,21 +14,6 @@
#include <stdbool.h> #include <stdbool.h>
#include <machine/endian.h> #include <machine/endian.h>
/*!< \brief Service start handle. */
#define ESS_START_HDL 0x1000
/*!< \brief Service end handle. */
#define ESS_END_HDL (ESS_MAX_HDL - 1)
enum {
/*!< \brief environmental sensing services service declaration */
ESS_SVC_HDL = ESS_START_HDL,
/*!< \brief temperature characteristic */
ESS_TEMPERATURE_CH_HDL,
ESS_TEMPERATURE_VAL_HDL,
/*!< \brief Maximum handle. */
ESS_MAX_HDL
};
/* clang-format off */ /* clang-format off */
/* BLE UUID for ESS service*/ /* BLE UUID for ESS service*/
...@@ -34,7 +22,7 @@ static const uint16_t UUID_svc_len = sizeof(UUID_svc); ...@@ -34,7 +22,7 @@ static const uint16_t UUID_svc_len = sizeof(UUID_svc);
/* BLE UUID for temperature */ /* BLE UUID for temperature */
static const uint8_t UUID_char_temperature[] = { static const uint8_t UUID_char_temperature[] = {
ATT_PROP_READ, ATT_PROP_READ | ATT_PROP_NOTIFY,
UINT16_TO_BYTES(ESS_TEMPERATURE_VAL_HDL), UINT16_TO_BYTES(ESS_TEMPERATURE_VAL_HDL),
UINT16_TO_BYTES(ATT_UUID_TEMPERATURE) UINT16_TO_BYTES(ATT_UUID_TEMPERATURE)
}; };
...@@ -43,6 +31,12 @@ static const uint16_t UUID_char_len = sizeof(UUID_char_temperature); ...@@ -43,6 +31,12 @@ 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 essValTempChCcc[] = {UINT16_TO_BYTES(0x0000)};
static const uint16_t essLenTempChCcc = sizeof(essValTempChCcc);
/* clang-format on */ /* clang-format on */
/* /*
...@@ -75,6 +69,15 @@ static const attsAttr_t ESSSvcAttrList[] = { ...@@ -75,6 +69,15 @@ static const attsAttr_t ESSSvcAttrList[] = {
.permissions = ATTS_PERMIT_READ | ATTS_PERMIT_READ_ENC | .permissions = ATTS_PERMIT_READ | ATTS_PERMIT_READ_ENC |
ATTS_PERMIT_READ_AUTH, ATTS_PERMIT_READ_AUTH,
}, },
/* Characteristic CCC descriptor */
{
.pUuid = attCliChCfgUuid,
.pValue = essValTempChCcc,
.pLen = (uint16_t *) &essLenTempChCcc,
.maxLen = sizeof(essValTempChCcc),
.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
...@@ -124,6 +127,13 @@ void bleESS_update(void) ...@@ -124,6 +127,13 @@ 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);
dmConnId_t connId = AppConnIsOpen();
if(connId != DM_CONN_ID_NONE) {
if(AttsCccEnabled(connId, BLE_ESS_TEMP_CCC_IDX)) {
AttsHandleValueNtf(connId, ESS_TEMPERATURE_VAL_HDL, sizeof(i16), (uint8_t *)&i16);
}
}
} }
/* /*
......
#pragma once #pragma once
/*!< \brief Service start handle. */
#define ESS_START_HDL 0x1000
/*!< \brief Service end handle. */
#define ESS_END_HDL (ESS_MAX_HDL - 1)
enum {
/*!< \brief environmental sensing services service declaration */
ESS_SVC_HDL = ESS_START_HDL,
/*!< \brief temperature characteristic */
ESS_TEMPERATURE_CH_HDL,
ESS_TEMPERATURE_VAL_HDL,
ESS_TEMP_CH_CCC_HDL, /*!< Temperature CCCD */
/*!< \brief Maximum handle. */
ESS_MAX_HDL
};
void bleESS_update(); void bleESS_update();
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment