From f97119cb48801b28307fbe69f8480c53a63eeba7 Mon Sep 17 00:00:00 2001 From: leo Date: Sun, 27 Nov 2022 11:11:15 +0100 Subject: [PATCH] co2 characteristic presentation format --- components/BTlib/BTlib_nimble.c | 25 ++++++++++++-- components/BTlib/include/BTlib_nimble.h | 44 +++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 2 deletions(-) diff --git a/components/BTlib/BTlib_nimble.c b/components/BTlib/BTlib_nimble.c index a676f8c..4997a17 100644 --- a/components/BTlib/BTlib_nimble.c +++ b/components/BTlib/BTlib_nimble.c @@ -50,6 +50,14 @@ ES_char_descr_t hum_char_descr = { .measurement_uncertainty = 30, }; +char_pres_format_t CO2_char_pres_format = { + .format = FORMAT_INT16, + .exponent = 0, + .unit = PPM_UNIT_UUID, + .namespc = 1, + .descr = NSP_DESC_MAIN, +}; + struct ble_hs_adv_fields adv_fields = { .flags = BLE_HS_ADV_F_DISC_GEN | BLE_HS_ADV_F_BREDR_UNSUP, .tx_pwr_lvl_is_present = 1, @@ -85,6 +93,11 @@ static struct ble_gatt_svc_def gatt_svr_svcs[] = { .att_flags = BLE_ATT_F_READ, .access_cb = gatt_svr_chr_access_co2, }, + { + .uuid = BLE_UUID16_DECLARE(CHAR_PRES_FORMAT), + .att_flags = BLE_ATT_F_READ, + .access_cb = gatt_svr_chr_access_co2, + }, { 0 }, }, }, @@ -135,8 +148,16 @@ static int gatt_svr_chr_access_co2(uint16_t conn_handle, uint16_t attr_handle, s case BLE_GATT_ACCESS_OP_READ_CHR: rc = os_mbuf_append(ctxt->om, &main_app_conf->measure->co2, sizeof(main_app_conf->measure->co2)); break; - case BLE_GATT_ACCESS_OP_READ_DSC: - rc = os_mbuf_append(ctxt->om, &CO2_char_descr, 11); // hardcoded size 'cause struct gets padded to 12bytes + case BLE_GATT_ACCESS_OP_READ_DSC:{ + uint16_t uuid = ble_uuid_u16(ctxt->dsc->uuid); + switch(uuid){ + case ES_MEASUREMENT_UUID: + rc = os_mbuf_append(ctxt->om, &CO2_char_descr, 11); // hardcoded size 'cause struct gets padded to 12bytes + break; + case CHAR_PRES_FORMAT: + rc = os_mbuf_append(ctxt->om, &CO2_char_pres_format, 7); + } + } break; } return rc == 0 ? 0 : BLE_ATT_ERR_INSUFFICIENT_RES; diff --git a/components/BTlib/include/BTlib_nimble.h b/components/BTlib/include/BTlib_nimble.h index 846965a..07ef39c 100644 --- a/components/BTlib/include/BTlib_nimble.h +++ b/components/BTlib/include/BTlib_nimble.h @@ -14,6 +14,10 @@ #define CHAR_TEMP_UUID 0x2A6E #define CHAR_HUM_UUID 0x2A6F #define CO2_SENSOR_APPEARANCE 0x054A +#define CHAR_PRES_FORMAT 0x2904 +#define PPM_UNIT_UUID 0x27C4 +#define NSP_DESC_MAIN 0x0106 + #define DEFAULT_NAME "CO2_ble" #define DEFAULT_NAME_LEN 7 @@ -67,6 +71,37 @@ enum { ES_APP_SOLAR, }; +enum { + FORMAT_RFU, + FORMAT_BOOL, + FORMAT_UINT2, + FORMAT_UINT4, + FORMAT_UINT8, + FORMAT_UINT12, + FORMAT_UINT16, + FORMAT_UINT24, + FORMAT_UINT32, + FORMAT_UINT48, + FORMAT_UINT64, + FORMAT_UINT128, + FORMAT_INT8, + FORMAT_INT12, + FORMAT_INT16, + FORMAT_INT24, + FORMAT_INT32, + FORMAT_INT48, + FORMAT_INT64, + FORMAT_INT128, + FORMAT_FLOAT32, + FORMAT_FLOAT64, + FORMAT_IEEE11073_SFLOAT16, + FORMAT_IEEE11073_FLOAT32, + FORMAT_IEEE20601, + FORMAT_UTF8, + FORMAT_UTF16, + FORMAT_OPAQUE, +}; + enum{ ES_SVC_IDX, }; @@ -87,6 +122,15 @@ struct ES_char_descr { }; typedef struct ES_char_descr ES_char_descr_t; +struct char_pres_format { + uint8_t format; + uint8_t exponent; + uint16_t unit; + uint8_t namespc; + uint16_t descr; +}; +typedef struct char_pres_format char_pres_format_t; + void initBle(configuration_data_t* main_conf); void ble_sensor_notify(); #endif