From cb6ed73691eb39ad313effe21ef37a43626b8136 Mon Sep 17 00:00:00 2001 From: rbaron Date: Fri, 9 Dec 2022 19:02:55 +0100 Subject: [PATCH] Add battery percentage computation --- .../nrf-connect/prstlib/include/prstlib/adc.h | 7 +- .../prstlib/include/prstlib/sensors.h | 2 +- code/nrf-connect/prstlib/src/adc.c | 36 +++- code/nrf-connect/prstlib/src/sensors.c | 9 +- code/nrf-connect/samples/ble/src/encoding.c | 8 +- .../nrf-connect/samples/zigbee/CMakeLists.txt | 1 + code/nrf-connect/samples/zigbee/prj.conf | 25 +-- code/nrf-connect/samples/zigbee/src/main.c | 158 +++++------------- .../samples/zigbee/src/prst_zb_attrs.c | 31 ++++ .../samples/zigbee/src/prst_zb_attrs.h | 6 +- .../zigbee/src/prst_zb_endpoint_defs.h | 46 ++--- 11 files changed, 156 insertions(+), 173 deletions(-) create mode 100644 code/nrf-connect/samples/zigbee/src/prst_zb_attrs.c diff --git a/code/nrf-connect/prstlib/include/prstlib/adc.h b/code/nrf-connect/prstlib/include/prstlib/adc.h index 5ec3e9e..2fc29ce 100644 --- a/code/nrf-connect/prstlib/include/prstlib/adc.h +++ b/code/nrf-connect/prstlib/include/prstlib/adc.h @@ -9,6 +9,11 @@ typedef struct { float voltage; } prst_adc_read_t; +typedef struct { + prst_adc_read_t adc_read; + float percentage; +} prst_batt_t; + typedef struct { prst_adc_read_t adc_read; // A value from 0 (completely dry) to 2^10 (completely wet). @@ -25,7 +30,7 @@ typedef struct prst_adc_photo_sensor { int prst_adc_init(); -int prst_adc_batt_read(prst_adc_read_t* out); +int prst_adc_batt_read(prst_batt_t* out); int prst_adc_soil_read(float battery_voltage, prst_adc_soil_moisture_t* out); diff --git a/code/nrf-connect/prstlib/include/prstlib/sensors.h b/code/nrf-connect/prstlib/include/prstlib/sensors.h index 23c1c03..0f8f669 100644 --- a/code/nrf-connect/prstlib/include/prstlib/sensors.h +++ b/code/nrf-connect/prstlib/include/prstlib/sensors.h @@ -7,7 +7,7 @@ typedef struct { prst_adc_soil_moisture_t soil; prst_adc_photo_sensor_t photo; - prst_adc_read_t batt; + prst_batt_t batt; prst_shtc3_read_t shtc3; } prst_sensors_t; diff --git a/code/nrf-connect/prstlib/src/adc.c b/code/nrf-connect/prstlib/src/adc.c index d22f542..1856f7e 100644 --- a/code/nrf-connect/prstlib/src/adc.c +++ b/code/nrf-connect/prstlib/src/adc.c @@ -48,6 +48,37 @@ struct gpio_dt_spec ldr_enable_dt = #endif +typedef struct { + // High (h) and low (p) voltage (v) and % (p) points. + float vh, vl, ph, pl; +} batt_disch_linear_section_t; + +static void set_battery_percent(const prst_adc_read_t* read, prst_batt_t* out) { + // Must be sorted by .vh. + static const batt_disch_linear_section_t sections[] = { + {.vh = 3.00f, .vl = 2.90f, .ph = 1.00f, .pl = 0.42f}, + {.vh = 2.90f, .vl = 2.74f, .ph = 0.42f, .pl = 0.18f}, + {.vh = 2.74f, .vl = 2.44f, .ph = 0.18f, .pl = 0.06f}, + {.vh = 2.44f, .vl = 2.01f, .ph = 0.06f, .pl = 0.00f}, + }; + + const float v = read->voltage; + + if (v > sections[0].vh) { + out->percentage = 1.0f; + return; + } + for (int i = 0; i < ARRAY_SIZE(sections); i++) { + const batt_disch_linear_section_t* s = §ions[i]; + if (v > s->vl) { + out->percentage = s->pl + (v - s->vl) * ((s->ph - s->pl) / (s->vh - s->vl)); + return; + } + } + out->percentage = 0.0f; + return; +} + static inline float get_soil_moisture_percent(float battery_voltage, int16_t raw_adc_output) { const double x = battery_voltage; @@ -93,8 +124,9 @@ int prst_adc_init() { return 0; } -int prst_adc_batt_read(prst_adc_read_t* out) { - RET_IF_ERR(read_adc_spec(&adc_batt_spec, out)); +int prst_adc_batt_read(prst_batt_t* out) { + RET_IF_ERR(read_adc_spec(&adc_batt_spec, &out->adc_read)); + set_battery_percent(&out->adc_read, out); return 0; } diff --git a/code/nrf-connect/prstlib/src/sensors.c b/code/nrf-connect/prstlib/src/sensors.c index 8b8cc2a..e0b1ca9 100644 --- a/code/nrf-connect/prstlib/src/sensors.c +++ b/code/nrf-connect/prstlib/src/sensors.c @@ -10,17 +10,18 @@ LOG_MODULE_REGISTER(sensors, LOG_LEVEL_WRN); int prst_sensors_read_all(prst_sensors_t *sensors) { RET_IF_ERR(prst_adc_batt_read(&sensors->batt)); - RET_IF_ERR(prst_adc_soil_read(sensors->batt.voltage, &sensors->soil)); - RET_IF_ERR(prst_adc_photo_read(sensors->batt.voltage, &sensors->photo)); + RET_IF_ERR(prst_adc_soil_read(sensors->batt.adc_read.voltage, &sensors->soil)); + RET_IF_ERR(prst_adc_photo_read(sensors->batt.adc_read.voltage, &sensors->photo)); RET_IF_ERR(prst_shtc3_read(&sensors->shtc3)) - LOG_DBG("Batt: %d mV", sensors->batt.millivolts); + LOG_DBG("Batt: %d mV (%.2f%%)", sensors->batt.adc_read.millivolts, + 100 * sensors->batt.percentage); LOG_DBG("Soil: %.0f %% (%.3f mV)", 100 * sensors->soil.percentage, sensors->soil.adc_read.voltage); LOG_DBG("Photo: %u lx (%.3f mV)", sensors->photo.brightness, sensors->soil.adc_read.voltage); LOG_DBG("Temp: %f oC", sensors->shtc3.temp_c); - LOG_DBG("Humi: %.0f %%", 100.0 * sensors->shtc3.rel_humi); + LOG_DBG("Humi: %.0f %%", 100 * sensors->shtc3.rel_humi); LOG_DBG("--------------------------------------------------"); return 0; diff --git a/code/nrf-connect/samples/ble/src/encoding.c b/code/nrf-connect/samples/ble/src/encoding.c index 82a5a21..93b24d1 100644 --- a/code/nrf-connect/samples/ble/src/encoding.c +++ b/code/nrf-connect/samples/ble/src/encoding.c @@ -25,8 +25,8 @@ int prst_ble_encode_service_data(const prst_sensors_t* sensors, // 4 bits for a small wrap-around counter for deduplicating messages on the // receiver. // out[3] = sensors->run_counter & 0x0f; - out[4] = sensors->batt.millivolts >> 8; - out[5] = sensors->batt.millivolts & 0xff; + out[4] = sensors->batt.adc_read.millivolts >> 8; + out[5] = sensors->batt.adc_read.millivolts & 0xff; int16_t temp_centicelsius = 100 * sensors->shtc3.temp_c; out[6] = temp_centicelsius >> 8; out[7] = temp_centicelsius & 0xff; @@ -82,7 +82,7 @@ int prst_ble_encode_service_data(const prst_sensors_t* sensors, // Type - voltage. out[15] = 0x0c; // Value. Factor of 0.001. - uint16_t batt_val = sensors->batt.millivolts; + uint16_t batt_val = sensors->batt.adc_read.millivolts; out[16] = batt_val & 0xff; out[17] = batt_val >> 8; @@ -116,7 +116,7 @@ int prst_ble_encode_service_data(const prst_sensors_t* sensors, // Battery voltage. out[13] = 0x0c; // Value. Factor of 0.001. - uint16_t batt_val = sensors->batt.millivolts; + uint16_t batt_val = sensors->batt.adc_read.millivolts; out[14] = batt_val & 0xff; out[15] = batt_val >> 8; // Soil moisture. diff --git a/code/nrf-connect/samples/zigbee/CMakeLists.txt b/code/nrf-connect/samples/zigbee/CMakeLists.txt index ca8d2e3..db0b194 100644 --- a/code/nrf-connect/samples/zigbee/CMakeLists.txt +++ b/code/nrf-connect/samples/zigbee/CMakeLists.txt @@ -12,6 +12,7 @@ include_directories(src) target_sources(app PRIVATE src/main.c + src/prst_zb_attrs.c src/prst_zb_soil_moisture_defs.c ) diff --git a/code/nrf-connect/samples/zigbee/prj.conf b/code/nrf-connect/samples/zigbee/prj.conf index b1a522a..4a91f5d 100644 --- a/code/nrf-connect/samples/zigbee/prj.conf +++ b/code/nrf-connect/samples/zigbee/prj.conf @@ -1,12 +1,5 @@ -# -# Copyright (c) 2021 Nordic Semiconductor ASA -# -# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause -# -CONFIG_NCS_SAMPLES_DEFAULTS=y - -CONFIG_CBPRINTF_FP_SUPPORT=y +CONFIG_LOG=y CONFIG_PWM=y CONFIG_I2C=y CONFIG_ADC=y @@ -18,12 +11,7 @@ CONFIG_PM_DEVICE=y CONFIG_NEWLIB_LIBC=y CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y -CONFIG_UART_INTERRUPT_DRIVEN=y -CONFIG_SERIAL=y - -# Make sure printk is not printing to the UART console -CONFIG_CONSOLE=y -CONFIG_UART_CONSOLE=y +CONFIG_SERIAL=n CONFIG_HEAP_MEM_POOL_SIZE=2048 CONFIG_MAIN_THREAD_PRIORITY=7 @@ -32,9 +20,6 @@ CONFIG_ZIGBEE=y CONFIG_ZIGBEE_APP_UTILS=y CONFIG_ZIGBEE_ROLE_END_DEVICE=y -# Enable DK LED and Buttons library -CONFIG_DK_LIBRARY=y - # This example requires more workqueue stack CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048 @@ -51,4 +36,8 @@ CONFIG_NET_IP_ADDR_CHECK=n CONFIG_NET_UDP=n # Get Zigbee to scan every channel. -CONFIG_ZIGBEE_CHANNEL_SELECTION_MODE_MULTI=y \ No newline at end of file +CONFIG_ZIGBEE_CHANNEL_SELECTION_MODE_MULTI=y + +# Enable API for powering down unused RAM parts. +# https://developer.nordicsemi.com/nRF_Connect_SDK/doc/1.7.1/nrf/ug_zigbee_configuring.html#power-saving-during-sleep +CONFIG_RAM_POWER_DOWN_LIBRARY=y diff --git a/code/nrf-connect/samples/zigbee/src/main.c b/code/nrf-connect/samples/zigbee/src/main.c index e0625fb..4cb9630 100644 --- a/code/nrf-connect/samples/zigbee/src/main.c +++ b/code/nrf-connect/samples/zigbee/src/main.c @@ -1,14 +1,3 @@ -/* - * Copyright (c) 2021 Nordic Semiconductor ASA - * - * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause - */ - -/** @file - * - * @brief Zigbee application template. - */ - #include #include #include @@ -29,8 +18,7 @@ #include "prst_zb_endpoint_defs.h" #include "prst_zb_soil_moisture_defs.h" -#define IDENTIFY_MODE_BUTTON DK_BTN4_MSK -#define FACTORY_RESET_BUTTON IDENTIFY_MODE_BUTTON +#define FACTORY_RESET_BUTTON DK_BTN4_MSK LOG_MODULE_REGISTER(app, LOG_LEVEL_INF); @@ -92,7 +80,7 @@ PRST_ZB_ZCL_DECLARE_SOIL_MOISTURE_ATTRIB_LIST( soil_moisture_attr_list, &dev_ctx.soil_moisture_attrs.percentage); -ZB_DECLARE_RANGE_EXTENDER_CLUSTER_LIST( +PRST_ZB_DECLARE_CLUSTER_LIST( app_template_clusters, basic_attr_list, identify_attr_list, @@ -101,7 +89,7 @@ ZB_DECLARE_RANGE_EXTENDER_CLUSTER_LIST( basic_attr_list, soil_moisture_attr_list); -ZB_DECLARE_RANGE_EXTENDER_EP( +PRST_ZB_DECLARE_ENDPOINT( app_template_ep, PRST_ZIGBEE_ENDPOINT, app_template_clusters); @@ -110,79 +98,6 @@ ZBOSS_DECLARE_DEVICE_CTX_1_EP( app_template_ctx, app_template_ep); -static void app_clusters_attr_init(void) { - dev_ctx.basic_attr.zcl_version = ZB_ZCL_VERSION; - dev_ctx.basic_attr.power_source = ZB_ZCL_BASIC_POWER_SOURCE_BATTERY; - ZB_ZCL_SET_STRING_VAL( - dev_ctx.basic_attr.mf_name, - PRST_BASIC_MANUF_NAME, - ZB_ZCL_STRING_CONST_SIZE(PRST_BASIC_MANUF_NAME)); - - ZB_ZCL_SET_STRING_VAL( - dev_ctx.basic_attr.model_id, - PRST_BASIC_MODEL_ID, - ZB_ZCL_STRING_CONST_SIZE(PRST_BASIC_MODEL_ID)); - - dev_ctx.identify_attr.identify_time = - ZB_ZCL_IDENTIFY_IDENTIFY_TIME_DEFAULT_VALUE; -} - -static void toggle_identify_led(zb_bufid_t bufid) { - static int blink_status; - ZB_SCHEDULE_APP_ALARM(toggle_identify_led, bufid, ZB_MILLISECONDS_TO_BEACON_INTERVAL(100)); -} - -static void identify_cb(zb_bufid_t bufid) { - zb_ret_t zb_err_code; - - if (bufid) { - ZB_SCHEDULE_APP_CALLBACK(toggle_identify_led, bufid); - } else { - zb_err_code = ZB_SCHEDULE_APP_ALARM_CANCEL(toggle_identify_led, ZB_ALARM_ANY_PARAM); - ZVUNUSED(zb_err_code); - } -} - -static void start_identifying(zb_bufid_t bufid) { - ZVUNUSED(bufid); - - if (ZB_JOINED()) { - if (dev_ctx.identify_attr.identify_time == - ZB_ZCL_IDENTIFY_IDENTIFY_TIME_DEFAULT_VALUE) { - zb_ret_t zb_err_code = zb_bdb_finding_binding_target( - PRST_ZIGBEE_ENDPOINT); - - if (zb_err_code == RET_OK) { - LOG_INF("Enter identify mode"); - } else if (zb_err_code == RET_INVALID_STATE) { - LOG_WRN("RET_INVALID_STATE - Cannot enter identify mode"); - } else { - ZB_ERROR_CHECK(zb_err_code); - } - } else { - LOG_INF("Cancel identify mode"); - zb_bdb_finding_binding_target_cancel(); - } - } else { - LOG_WRN("Device not in a network - cannot enter identify mode"); - } -} - -static void button_changed(uint32_t button_state, uint32_t has_changed) { - if (IDENTIFY_MODE_BUTTON & has_changed) { - if (IDENTIFY_MODE_BUTTON & button_state) { - } else { - if (was_factory_reset_done()) { - LOG_DBG("After Factory Reset - ignore button release"); - } else { - ZB_SCHEDULE_APP_CALLBACK(start_identifying, 0); - } - } - } - - check_factory_reset_button(button_state, has_changed); -} - void zboss_signal_handler(zb_bufid_t bufid) { ZB_ERROR_CHECK(zigbee_default_signal_handler(bufid)); if (bufid) { @@ -198,36 +113,37 @@ void update_sensors_cb(zb_uint8_t arg) { return; } - static zb_uint8_t batt = 10; - batt += 1; - zb_zcl_set_attr_val(PRST_ZIGBEE_ENDPOINT, ZB_ZCL_CLUSTER_ID_POWER_CONFIG, - ZB_ZCL_CLUSTER_SERVER_ROLE, ZB_ZCL_ATTR_POWER_CONFIG_BATTERY_VOLTAGE_ID, - (zb_uint8_t*)&batt, ZB_FALSE); + // Battery voltlage in units of 100 mV. + uint8_t batt_voltage = sensors.batt.adc_read.millivolts / 100; + prst_zb_set_attr_value(ZB_ZCL_CLUSTER_ID_POWER_CONFIG, + ZB_ZCL_ATTR_POWER_CONFIG_BATTERY_VOLTAGE_ID, + &batt_voltage); - static zb_uint8_t batt_percentage = 10; - batt_percentage += 1; - zb_zcl_set_attr_val(PRST_ZIGBEE_ENDPOINT, ZB_ZCL_CLUSTER_ID_POWER_CONFIG, - ZB_ZCL_CLUSTER_SERVER_ROLE, ZB_ZCL_ATTR_POWER_CONFIG_BATTERY_PERCENTAGE_REMAINING_ID, - (zb_uint8_t*)&batt_percentage, ZB_FALSE); + // Battery percentage in units of 0.5%. + zb_uint8_t batt_percentage = 2 * 100 * sensors.batt.percentage; + prst_zb_set_attr_value(ZB_ZCL_CLUSTER_ID_POWER_CONFIG, + ZB_ZCL_ATTR_POWER_CONFIG_BATTERY_PERCENTAGE_REMAINING_ID, + &batt_percentage); - static zb_int16_t temperature_value = 27; - temperature_value += 1; - zb_zcl_set_attr_val(PRST_ZIGBEE_ENDPOINT, ZB_ZCL_CLUSTER_ID_TEMP_MEASUREMENT, - ZB_ZCL_CLUSTER_SERVER_ROLE, ZB_ZCL_ATTR_TEMP_MEASUREMENT_VALUE_ID, - (zb_uint8_t*)&temperature_value, ZB_FALSE); + // Temperature in units of 0.01 degrees Celcius. + zb_int16_t temperature_value = 100 * sensors.shtc3.temp_c; + prst_zb_set_attr_value(ZB_ZCL_CLUSTER_ID_TEMP_MEASUREMENT, + ZB_ZCL_ATTR_TEMP_MEASUREMENT_VALUE_ID, + &temperature_value); - static zb_int16_t rel_humi = 12; - rel_humi += 1; - zb_zcl_set_attr_val(PRST_ZIGBEE_ENDPOINT, ZB_ZCL_CLUSTER_ID_REL_HUMIDITY_MEASUREMENT, - ZB_ZCL_CLUSTER_SERVER_ROLE, ZB_ZCL_ATTR_REL_HUMIDITY_MEASUREMENT_VALUE_ID, - (zb_uint8_t*)&rel_humi, ZB_FALSE); + // Relative humidity in units of 0.01%. + zb_int16_t rel_humi = 100 * 100 * sensors.shtc3.rel_humi; + prst_zb_set_attr_value(ZB_ZCL_CLUSTER_ID_REL_HUMIDITY_MEASUREMENT, + ZB_ZCL_ATTR_REL_HUMIDITY_MEASUREMENT_VALUE_ID, + &rel_humi); + // Soil moisture in units of 0.01%. zb_int16_t soil_moisture = 100 * 100 * sensors.soil.percentage; - zb_zcl_set_attr_val(PRST_ZIGBEE_ENDPOINT, PRST_ZB_ZCL_ATTR_SOIL_MOISTURE_CLUSTER_ID, - ZB_ZCL_CLUSTER_SERVER_ROLE, PRST_ZB_ZCL_ATTR_SOIL_MOISTURE_VALUE_ID, - (zb_uint8_t*)&soil_moisture, ZB_FALSE); + prst_zb_set_attr_value(PRST_ZB_ZCL_ATTR_SOIL_MOISTURE_CLUSTER_ID, + PRST_ZB_ZCL_ATTR_SOIL_MOISTURE_VALUE_ID, + &soil_moisture); - ZB_SCHEDULE_APP_ALARM(update_sensors_cb, NULL, ZB_TIME_ONE_SECOND * 1); + ZB_SCHEDULE_APP_ALARM(update_sensors_cb, NULL, ZB_TIME_ONE_SECOND * 10); } int main(void) { @@ -235,23 +151,27 @@ int main(void) { RET_IF_ERR(prst_led_init()); RET_IF_ERR(prst_button_init()); + // We do this to quickly put the shtc3 to sleep. + prst_sensors_read_all(&sensors); + + zigbee_configure_sleepy_behavior(/*enable=*/true); + zb_set_rx_on_when_idle(ZB_FALSE); + register_factory_reset_button(FACTORY_RESET_BUTTON); - app_clusters_attr_init(); + prst_zb_attrs_init(&dev_ctx); ZB_AF_REGISTER_DEVICE_CTX(&app_template_ctx); - ZB_AF_SET_IDENTIFY_NOTIFICATION_HANDLER(PRST_ZIGBEE_ENDPOINT, identify_cb); - update_sensors_cb(/*arg=*/0); - // zigbee_configure_sleepy_behavior(/*enable=*/true); - RET_IF_ERR(prst_led_flash(2)); + // One minute. + zb_zdo_pim_set_long_poll_interval(60000); + power_down_unused_ram(); zigbee_enable(); - - LOG_INF("Zigbee application template started"); + zigbee_configure_sleepy_behavior(/*enable=*/true); return 0; } diff --git a/code/nrf-connect/samples/zigbee/src/prst_zb_attrs.c b/code/nrf-connect/samples/zigbee/src/prst_zb_attrs.c new file mode 100644 index 0000000..95c9873 --- /dev/null +++ b/code/nrf-connect/samples/zigbee/src/prst_zb_attrs.c @@ -0,0 +1,31 @@ +#include "prst_zb_attrs.h" + +#include + +#include "prst_zb_endpoint_defs.h" + +void prst_zb_attrs_init(struct zb_device_ctx *dev_ctx) { + dev_ctx->basic_attr.zcl_version = ZB_ZCL_VERSION; + dev_ctx->basic_attr.power_source = ZB_ZCL_BASIC_POWER_SOURCE_BATTERY; + ZB_ZCL_SET_STRING_VAL( + dev_ctx->basic_attr.mf_name, + PRST_BASIC_MANUF_NAME, + ZB_ZCL_STRING_CONST_SIZE(PRST_BASIC_MANUF_NAME)); + + ZB_ZCL_SET_STRING_VAL( + dev_ctx->basic_attr.model_id, + PRST_BASIC_MODEL_ID, + ZB_ZCL_STRING_CONST_SIZE(PRST_BASIC_MODEL_ID)); + + dev_ctx->identify_attr.identify_time = + ZB_ZCL_IDENTIFY_IDENTIFY_TIME_DEFAULT_VALUE; +} + +zb_zcl_status_t prst_zb_set_attr_value(zb_uint16_t cluster_id, zb_uint16_t attr_id, void *data) { + return zb_zcl_set_attr_val(PRST_ZIGBEE_ENDPOINT, + cluster_id, + ZB_ZCL_CLUSTER_SERVER_ROLE, + attr_id, + (zb_uint8_t *)data, + ZB_FALSE); +} diff --git a/code/nrf-connect/samples/zigbee/src/prst_zb_attrs.h b/code/nrf-connect/samples/zigbee/src/prst_zb_attrs.h index e996962..60222c7 100644 --- a/code/nrf-connect/samples/zigbee/src/prst_zb_attrs.h +++ b/code/nrf-connect/samples/zigbee/src/prst_zb_attrs.h @@ -1,7 +1,7 @@ #ifndef _PRST_ZB_ATTRS_H_ #define _PRST_ZB_ATTRS_H_ -#include +#include // Relative humimdity cluster - section 4.7.2.2.1. typedef struct { @@ -38,4 +38,8 @@ struct zb_device_ctx { prst_soil_moisture_attrs_t soil_moisture_attrs; }; +void prst_zb_attrs_init(struct zb_device_ctx *dev_ctx); + +zb_zcl_status_t prst_zb_set_attr_value(zb_uint16_t cluster_id, zb_uint16_t attr_id, void *data); + #endif // _PRST_ZB_ATTRS_H_ diff --git a/code/nrf-connect/samples/zigbee/src/prst_zb_endpoint_defs.h b/code/nrf-connect/samples/zigbee/src/prst_zb_endpoint_defs.h index df2ffd1..796f805 100644 --- a/code/nrf-connect/samples/zigbee/src/prst_zb_endpoint_defs.h +++ b/code/nrf-connect/samples/zigbee/src/prst_zb_endpoint_defs.h @@ -14,7 +14,7 @@ #define PRST_ZB_CLUSTER_NUM (PRST_ZB_IN_CLUSTER_NUM + PRST_ZB_OUT_CLUSTER_NUM) #define PRST_ZB_ATTR_REPORTING_COUNT 4 -#define ZB_DECLARE_RANGE_EXTENDER_CLUSTER_LIST( \ +#define PRST_ZB_DECLARE_CLUSTER_LIST( \ cluster_list_name, \ basic_attr_list, \ identify_attr_list, \ @@ -61,31 +61,31 @@ ZB_ZCL_CLUSTER_SERVER_ROLE, \ ZB_ZCL_MANUF_CODE_INVALID)} -#define ZB_ZCL_DECLARE_RANGE_EXTENDER_SIMPLE_DESC(ep_name, ep_id, in_clust_num, out_clust_num) \ - ZB_DECLARE_SIMPLE_DESC(in_clust_num, out_clust_num); \ - ZB_AF_SIMPLE_DESC_TYPE(in_clust_num, out_clust_num) \ - simple_desc_##ep_name = \ - { \ - ep_id, \ - ZB_AF_HA_PROFILE_ID, \ - PRST_ZB_DEVICE_ID, \ - PRST_ZB_DEVICE_VERSION, \ - 0, \ - in_clust_num, \ - out_clust_num, \ - { \ - ZB_ZCL_CLUSTER_ID_BASIC, \ - ZB_ZCL_CLUSTER_ID_IDENTIFY, \ - ZB_ZCL_CLUSTER_ID_TEMP_MEASUREMENT, \ - ZB_ZCL_CLUSTER_ID_REL_HUMIDITY_MEASUREMENT, \ - PRST_ZB_ZCL_ATTR_SOIL_MOISTURE_CLUSTER_ID, \ - ZB_ZCL_CLUSTER_ID_POWER_CONFIG, \ +#define PRST_ZB_DECLARE_SIMPLE_DESC(ep_name, ep_id, in_clust_num, out_clust_num) \ + ZB_DECLARE_SIMPLE_DESC(in_clust_num, out_clust_num); \ + ZB_AF_SIMPLE_DESC_TYPE(in_clust_num, out_clust_num) \ + simple_desc_##ep_name = \ + { \ + ep_id, \ + ZB_AF_HA_PROFILE_ID, \ + PRST_ZB_DEVICE_ID, \ + PRST_ZB_DEVICE_VERSION, \ + 0, \ + in_clust_num, \ + out_clust_num, \ + { \ + ZB_ZCL_CLUSTER_ID_BASIC, \ + ZB_ZCL_CLUSTER_ID_IDENTIFY, \ + ZB_ZCL_CLUSTER_ID_TEMP_MEASUREMENT, \ + ZB_ZCL_CLUSTER_ID_REL_HUMIDITY_MEASUREMENT, \ + PRST_ZB_ZCL_ATTR_SOIL_MOISTURE_CLUSTER_ID, \ + ZB_ZCL_CLUSTER_ID_POWER_CONFIG, \ }} -#define ZB_DECLARE_RANGE_EXTENDER_EP(ep_name, ep_id, cluster_list) \ +#define PRST_ZB_DECLARE_ENDPOINT(ep_name, ep_id, cluster_list) \ ZBOSS_DEVICE_DECLARE_REPORTING_CTX(reporting_ctx_##ep_name, PRST_ZB_ATTR_REPORTING_COUNT); \ - ZB_ZCL_DECLARE_RANGE_EXTENDER_SIMPLE_DESC(ep_name, ep_id, \ - PRST_ZB_IN_CLUSTER_NUM, PRST_ZB_OUT_CLUSTER_NUM); \ + PRST_ZB_DECLARE_SIMPLE_DESC(ep_name, ep_id, \ + PRST_ZB_IN_CLUSTER_NUM, PRST_ZB_OUT_CLUSTER_NUM); \ ZB_AF_DECLARE_ENDPOINT_DESC(ep_name, ep_id, ZB_AF_HA_PROFILE_ID, \ /*reserved_length=*/0, /*reserved_ptr=*/NULL, \ ZB_ZCL_ARRAY_SIZE(cluster_list, zb_zcl_cluster_desc_t), cluster_list, \