samples: mesh: feature to save Lightness & Temp. Range on Flash
With this commit, it is now possible to save Lightness & temperature Range values on SoC flash. Signed-off-by: Vikrant More <vikrant8051@gmail.com>
This commit is contained in:
parent
f4f6426582
commit
a61f7c39aa
5 changed files with 83 additions and 14 deletions
|
@ -51,6 +51,8 @@ static void light_default_status_init(void)
|
|||
gen_onoff_srv_root_user_data.onoff = STATE_OFF;
|
||||
}
|
||||
|
||||
/* Retrieve Default Lightness & Temperature Values */
|
||||
|
||||
if (light_ctl_srv_user_data.lightness_temp_def) {
|
||||
light_ctl_srv_user_data.lightness_def = (u16_t)
|
||||
(light_ctl_srv_user_data.lightness_temp_def >> 16);
|
||||
|
@ -64,6 +66,24 @@ static void light_default_status_init(void)
|
|||
|
||||
light_ctl_srv_user_data.temp = light_ctl_srv_user_data.temp_def;
|
||||
|
||||
/* Retrieve Range of Lightness & Temperature */
|
||||
|
||||
if (light_lightness_srv_user_data.lightness_range) {
|
||||
light_lightness_srv_user_data.light_range_max = (u16_t)
|
||||
(light_lightness_srv_user_data.lightness_range >> 16);
|
||||
|
||||
light_lightness_srv_user_data.light_range_min = (u16_t)
|
||||
(light_lightness_srv_user_data.lightness_range);
|
||||
}
|
||||
|
||||
if (light_ctl_srv_user_data.temperature_range) {
|
||||
light_ctl_srv_user_data.temp_range_max = (u16_t)
|
||||
(light_ctl_srv_user_data.temperature_range >> 16);
|
||||
|
||||
light_ctl_srv_user_data.temp_range_min = (u16_t)
|
||||
(light_ctl_srv_user_data.temperature_range);
|
||||
}
|
||||
|
||||
switch (gen_power_onoff_srv_user_data.onpowerup) {
|
||||
case STATE_OFF:
|
||||
gen_onoff_srv_root_user_data.onoff = STATE_OFF;
|
||||
|
|
|
@ -1657,14 +1657,14 @@ static bool light_lightness_range_setunack(struct bt_mesh_model *model,
|
|||
if (min <= max) {
|
||||
state->status_code = RANGE_SUCCESSFULLY_UPDATED;
|
||||
|
||||
state->light_range_min = min;
|
||||
state->light_range_max = max;
|
||||
if (state->light_range_min != min ||
|
||||
state->light_range_max != max) {
|
||||
|
||||
/* Do some work here to save values of
|
||||
* state->light_range_min &
|
||||
* state->light_range_max
|
||||
* on SoC flash
|
||||
*/
|
||||
state->light_range_min = min;
|
||||
state->light_range_max = max;
|
||||
|
||||
save_on_flash(LIGHTNESS_RANGE);
|
||||
}
|
||||
} else {
|
||||
/* The provided value for Range Max cannot be set */
|
||||
state->status_code = CANNOT_SET_RANGE_MAX;
|
||||
|
@ -2127,13 +2127,15 @@ static bool light_ctl_temp_range_setunack(struct bt_mesh_model *model,
|
|||
|
||||
if (min <= max) {
|
||||
state->status_code = RANGE_SUCCESSFULLY_UPDATED;
|
||||
state->temp_range_min = min;
|
||||
state->temp_range_max = max;
|
||||
|
||||
/* Do some work here to save values of
|
||||
* state->temp_range_min & state->temp_range_min
|
||||
* on SoC flash
|
||||
*/
|
||||
if (state->temp_range_min != min ||
|
||||
state->temp_range_max != max) {
|
||||
|
||||
state->temp_range_min = min;
|
||||
state->temp_range_max = max;
|
||||
|
||||
save_on_flash(TEMPERATURE_RANGE);
|
||||
}
|
||||
} else {
|
||||
/* The provided value for Range Max cannot be set */
|
||||
state->status_code = CANNOT_SET_RANGE_MAX;
|
||||
|
|
|
@ -87,6 +87,7 @@ struct light_lightness_state {
|
|||
u8_t status_code;
|
||||
u16_t light_range_min;
|
||||
u16_t light_range_max;
|
||||
u32_t lightness_range;
|
||||
|
||||
u8_t last_tid;
|
||||
u16_t last_src_addr;
|
||||
|
@ -112,6 +113,7 @@ struct light_ctl_state {
|
|||
u8_t status_code;
|
||||
u16_t temp_range_min;
|
||||
u16_t temp_range_max;
|
||||
u32_t temperature_range;
|
||||
|
||||
u16_t lightness_def;
|
||||
u16_t temp_def;
|
||||
|
|
|
@ -56,6 +56,29 @@ static void save_lightness_temp_last_state(void)
|
|||
printk("Light CTL Last values have beed saved !!\n");
|
||||
}
|
||||
|
||||
static void save_lightness_range(void)
|
||||
{
|
||||
light_lightness_srv_user_data.lightness_range =
|
||||
(u32_t) ((light_lightness_srv_user_data.light_range_max << 16) |
|
||||
light_lightness_srv_user_data.light_range_min);
|
||||
|
||||
settings_save_one("ps/lr",
|
||||
&light_lightness_srv_user_data.lightness_range,
|
||||
sizeof(light_lightness_srv_user_data.lightness_range)
|
||||
);
|
||||
}
|
||||
|
||||
static void save_temperature_range(void)
|
||||
{
|
||||
light_ctl_srv_user_data.temperature_range =
|
||||
(u32_t) ((light_ctl_srv_user_data.temp_range_max << 16) |
|
||||
light_ctl_srv_user_data.temp_range_min);
|
||||
|
||||
settings_save_one("ps/tr",
|
||||
&light_ctl_srv_user_data.temperature_range,
|
||||
sizeof(light_ctl_srv_user_data.temperature_range));
|
||||
}
|
||||
|
||||
static void storage_work_handler(struct k_work *work)
|
||||
{
|
||||
switch (storage_id) {
|
||||
|
@ -74,6 +97,12 @@ static void storage_work_handler(struct k_work *work)
|
|||
case LIGHTNESS_TEMP_LAST_STATE:
|
||||
save_lightness_temp_last_state();
|
||||
break;
|
||||
case LIGHTNESS_RANGE:
|
||||
save_lightness_range();
|
||||
break;
|
||||
case TEMPERATURE_RANGE:
|
||||
save_temperature_range();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -123,6 +152,20 @@ static int ps_set(int argc, char **argv, void *val_ctx)
|
|||
sizeof(light_ctl_srv_user_data.lightness_temp_last));
|
||||
}
|
||||
|
||||
if (!strcmp(argv[0], "lr")) {
|
||||
len = settings_val_read_cb(
|
||||
val_ctx,
|
||||
&light_lightness_srv_user_data.lightness_range,
|
||||
sizeof(light_lightness_srv_user_data.lightness_range));
|
||||
}
|
||||
|
||||
if (!strcmp(argv[0], "tr")) {
|
||||
len = settings_val_read_cb(
|
||||
val_ctx,
|
||||
&light_ctl_srv_user_data.temperature_range,
|
||||
sizeof(light_ctl_srv_user_data.temperature_range));
|
||||
}
|
||||
|
||||
return (len < 0) ? len : 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -13,7 +13,9 @@ enum ps_variables_id {
|
|||
GEN_DEF_TRANS_TIME_STATE,
|
||||
GEN_ONPOWERUP_STATE,
|
||||
LIGHTNESS_TEMP_DEF_STATE,
|
||||
LIGHTNESS_TEMP_LAST_STATE
|
||||
LIGHTNESS_TEMP_LAST_STATE,
|
||||
LIGHTNESS_RANGE,
|
||||
TEMPERATURE_RANGE
|
||||
};
|
||||
|
||||
extern u8_t reset_counter;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue