co2 characteristic presentation format

This commit is contained in:
leo 2022-11-27 11:11:15 +01:00
parent f0888d131e
commit f97119cb48
Signed by: leo
GPG Key ID: 0DD993BFB2B307DB
2 changed files with 67 additions and 2 deletions

View File

@ -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,9 +148,17 @@ 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:
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;
}

View File

@ -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