The following steps and codes show you how to add a reporting period configuration with configuration command class to allow changing auto report period in Z-Wave Multilevel sensor example running on BRD2603A/ZGM230S
1. Create zwave_soc_multilevel_sensor in Simplicity Studio v5 with GSDK4.3.1/Z-Wave SDK 7.20.1.0.
2. Add 3rd parameter to "configurations:" section in MultilevelSensor.cc_config and SSv5 would rebuilt parameters in parameter_pool inside cc_configuration_config.c accordingly
- name: "auto report period"
number: 3
file_id: 2
info: "sensor auto reporting period"
size: CC_CONFIG_PARAMETER_SIZE_32_BIT
format: CC_CONFIG_PARAMETER_FORMAT_SIGNED_INTEGER
min_value: 1
max_value: 3600
default_value: 1800
altering_capabilities: 0
read_only: 0
advanced: 0
3. In CC_MultilevelSensor_Support.c, revise the following codes:
#define DEBUGPRINT
#include "DebugPrint.h"
#include "CC_Configuration.h"
SSwTimer cc_multilevel_sensor_autoreport_timer;
uint32_t autoreport_time = 30;
static void cc_multilevel_sensor_init(void)
{
cc_multilevel_sensor_config_register_instances();
cc_multilevel_sensor_init_all_sensor();
ZAF_nvm_read(2, &autoreport_time, 4);
DPRINTF("configuration_pool_init[2].parameters->attributes.default_value %d\r\n", (int)autoreport_time );
AppTimerDeepSleepPersistentRegister(&cc_multilevel_sensor_autoreport_timer, false, cc_multilevel_sensor_autoreport_callback);
AppTimerDeepSleepPersistentStart(&cc_multilevel_sensor_autoreport_timer, autoreport_time*1000);
}
static void cc_multilevel_sensor_autoreport_callback(SSwTimer *pTimer)
{
UNUSED(pTimer);
cc_multilevel_sensor_send_sensor_data();
AppTimerDeepSleepPersistentStart(&cc_multilevel_sensor_autoreport_timer, autoreport_time*1000);
}
4. In CC_Configuration.c, add the following red lines into cc_configuration_set.
#include "SwTimer.h"
extern SSwTimer cc_multilevel_sensor_autoreport_timer;
extern uint32_t autoreport_time;
static cc_config_configuration_set_return_value
cc_configuration_set(uint16_t parameter_number, cc_config_parameter_value_t* new_value, cc_config_parameter_size_t size)
{
cc_config_configuration_set_return_value return_value = CC_CONFIG_RETURN_CODE_OK;
bool io_transaction_result = false;
bool is_value_in_range = false;
bool has_to_break = false;
cc_config_parameter_buffer_t parameter_buffer;
if (parameter_number==3){
autoreport_time = new_value->as_uint32;
ZAF_nvm_write(2, &autoreport_time, 4);
DPRINTF("cc_configuration_set para no. %d size %d: autoreport_time %d seconds\r\n", (int)parameter_number, (int)size, (int)autoreport_time );
AppTimerDeepSleepPersistentStart(&cc_multilevel_sensor_autoreport_timer);
AppTimerDeepSleepPersistentStart(&cc_multilevel_sensor_autoreport_timer, autoreport_time*1000);
}
for(uint16_t parameter_ix = 0 ; parameter_ix < configuration_pool->numberOfParameters ; parameter_ix++)
{
...
}
5. Build and run firmware on BRD2603A to join zwave_soc_multilevel_sensor into PC controller. You can use CONFIGURATION_SET to change auto report period with parameter 3.
No comments:
Post a Comment