samples: mesh: nrf52: Removed bug in reassignment of transition type

This PR will solve bug in reassignment of transition type to
Server.

Signed-off-by: Vikrant More <vikrant8051@gmail.com>
This commit is contained in:
Vikrant More 2018-11-15 14:50:48 +05:30 committed by Johan Hedberg
commit 21f7bad751
3 changed files with 79 additions and 57 deletions

View file

@ -151,7 +151,7 @@ static bool gen_onoff_setunack(struct bt_mesh_model *model,
struct bt_mesh_msg_ctx *ctx,
struct net_buf_simple *buf)
{
u8_t tid, onoff, tt;
u8_t tid, onoff, tt, delay;
s64_t now;
struct generic_onoff_state *state = model->user_data;
@ -170,8 +170,8 @@ static bool gen_onoff_setunack(struct bt_mesh_model *model,
switch (buf->len) {
case 0x00: /* No optional fields are available */
state->transition->tt = default_tt;
state->transition->delay = 0;
tt = default_tt;
delay = 0;
break;
case 0x02: /* Optional fields are available */
tt = net_buf_simple_pull_u8(buf);
@ -179,13 +179,16 @@ static bool gen_onoff_setunack(struct bt_mesh_model *model,
return false;
}
state->transition->tt = tt;
state->transition->delay = net_buf_simple_pull_u8(buf);
delay = net_buf_simple_pull_u8(buf);
break;
default:
return false;
}
bound_states_transition_type_reassignment(ONOFF);
state->transition->tt = tt;
state->transition->delay = delay;
*ptr_counter = 0;
k_timer_stop(ptr_timer);
@ -323,7 +326,7 @@ static bool gen_level_setunack(struct bt_mesh_model *model,
struct bt_mesh_msg_ctx *ctx,
struct net_buf_simple *buf)
{
u8_t tid, tt;
u8_t tid, tt, delay;
s16_t level;
s64_t now;
struct generic_level_state *state = model->user_data;
@ -339,8 +342,8 @@ static bool gen_level_setunack(struct bt_mesh_model *model,
switch (buf->len) {
case 0x00: /* No optional fields are available */
state->transition->tt = default_tt;
state->transition->delay = 0;
tt = default_tt;
delay = 0;
break;
case 0x02: /* Optional fields are available */
tt = net_buf_simple_pull_u8(buf);
@ -348,13 +351,20 @@ static bool gen_level_setunack(struct bt_mesh_model *model,
return false;
}
state->transition->tt = tt;
state->transition->delay = net_buf_simple_pull_u8(buf);
delay = net_buf_simple_pull_u8(buf);
break;
default:
return false;
}
if (bt_mesh_model_elem(model)->addr == elements[0].addr) {
bound_states_transition_type_reassignment(LEVEL);
} else if (bt_mesh_model_elem(model)->addr == elements[1].addr) {
bound_states_transition_type_reassignment(LEVEL_TEMP);
}
state->transition->tt = tt;
state->transition->delay = delay;
*ptr_counter = 0;
k_timer_stop(ptr_timer);
@ -410,7 +420,7 @@ static bool gen_delta_setunack(struct bt_mesh_model *model,
struct bt_mesh_msg_ctx *ctx,
struct net_buf_simple *buf)
{
u8_t tid, tt;
u8_t tid, tt, delay;
s32_t tmp32, delta;
s64_t now;
struct generic_level_state *state = model->user_data;
@ -434,8 +444,8 @@ static bool gen_delta_setunack(struct bt_mesh_model *model,
switch (buf->len) {
case 0x00: /* No optional fields are available */
state->transition->tt = default_tt;
state->transition->delay = 0;
tt = default_tt;
delay = 0;
break;
case 0x02: /* Optional fields are available */
tt = net_buf_simple_pull_u8(buf);
@ -443,13 +453,20 @@ static bool gen_delta_setunack(struct bt_mesh_model *model,
return false;
}
state->transition->tt = tt;
state->transition->delay = net_buf_simple_pull_u8(buf);
delay = net_buf_simple_pull_u8(buf);
break;
default:
return false;
}
if (bt_mesh_model_elem(model)->addr == elements[0].addr) {
bound_states_transition_type_reassignment(LEVEL);
} else if (bt_mesh_model_elem(model)->addr == elements[1].addr) {
bound_states_transition_type_reassignment(LEVEL_TEMP);
}
state->transition->tt = tt;
state->transition->delay = delay;
*ptr_counter = 0;
k_timer_stop(ptr_timer);
@ -513,7 +530,7 @@ static bool gen_move_setunack(struct bt_mesh_model *model,
struct bt_mesh_msg_ctx *ctx,
struct net_buf_simple *buf)
{
u8_t tid, tt;
u8_t tid, tt, delay;
s16_t delta;
s32_t tmp32;
s64_t now;
@ -530,8 +547,8 @@ static bool gen_move_setunack(struct bt_mesh_model *model,
switch (buf->len) {
case 0x00: /* No optional fields are available */
state->transition->tt = default_tt;
state->transition->delay = 0;
tt = default_tt;
delay = 0;
break;
case 0x02: /* Optional fields are available */
tt = net_buf_simple_pull_u8(buf);
@ -539,13 +556,20 @@ static bool gen_move_setunack(struct bt_mesh_model *model,
return false;
}
state->transition->tt = tt;
state->transition->delay = net_buf_simple_pull_u8(buf);
delay = net_buf_simple_pull_u8(buf);
break;
default:
return false;
}
if (bt_mesh_model_elem(model)->addr == elements[0].addr) {
bound_states_transition_type_reassignment(LEVEL);
} else if (bt_mesh_model_elem(model)->addr == elements[1].addr) {
bound_states_transition_type_reassignment(LEVEL_TEMP);
}
state->transition->tt = tt;
state->transition->delay = delay;
*ptr_counter = 0;
k_timer_stop(ptr_timer);
@ -904,7 +928,7 @@ static bool light_lightness_setunack(struct bt_mesh_model *model,
struct bt_mesh_msg_ctx *ctx,
struct net_buf_simple *buf)
{
u8_t tid, tt;
u8_t tid, tt, delay;
u16_t actual;
s64_t now;
struct light_lightness_state *state = model->user_data;
@ -920,8 +944,8 @@ static bool light_lightness_setunack(struct bt_mesh_model *model,
switch (buf->len) {
case 0x00: /* No optional fields are available */
state->transition->tt = default_tt;
state->transition->delay = 0;
tt = default_tt;
delay = 0;
break;
case 0x02: /* Optional fields are available */
tt = net_buf_simple_pull_u8(buf);
@ -929,13 +953,16 @@ static bool light_lightness_setunack(struct bt_mesh_model *model,
return false;
}
state->transition->tt = tt;
state->transition->delay = net_buf_simple_pull_u8(buf);
delay = net_buf_simple_pull_u8(buf);
break;
default:
return false;
}
bound_states_transition_type_reassignment(ACTUAL);
state->transition->tt = tt;
state->transition->delay = delay;
*ptr_counter = 0;
k_timer_stop(ptr_timer);
@ -1035,7 +1062,7 @@ static bool light_lightness_linear_setunack(struct bt_mesh_model *model,
struct bt_mesh_msg_ctx *ctx,
struct net_buf_simple *buf)
{
u8_t tid, tt;
u8_t tid, tt, delay;
u16_t linear;
s64_t now;
struct light_lightness_state *state = model->user_data;
@ -1051,8 +1078,8 @@ static bool light_lightness_linear_setunack(struct bt_mesh_model *model,
switch (buf->len) {
case 0x00: /* No optional fields are available */
state->transition->tt = default_tt;
state->transition->delay = 0;
tt = default_tt;
delay = 0;
break;
case 0x02: /* Optional fields are available */
tt = net_buf_simple_pull_u8(buf);
@ -1060,13 +1087,16 @@ static bool light_lightness_linear_setunack(struct bt_mesh_model *model,
return false;
}
state->transition->tt = tt;
state->transition->delay = net_buf_simple_pull_u8(buf);
delay = net_buf_simple_pull_u8(buf);
break;
default:
return false;
}
bound_states_transition_type_reassignment(LINEAR);
state->transition->tt = tt;
state->transition->delay = delay;
*ptr_counter = 0;
k_timer_stop(ptr_timer);
@ -1380,7 +1410,7 @@ static bool light_ctl_setunack(struct bt_mesh_model *model,
struct bt_mesh_msg_ctx *ctx,
struct net_buf_simple *buf)
{
u8_t tid, tt;
u8_t tid, tt, delay;
s16_t delta_uv;
u16_t lightness, temp;
s64_t now;
@ -1403,8 +1433,8 @@ static bool light_ctl_setunack(struct bt_mesh_model *model,
switch (buf->len) {
case 0x00: /* No optional fields are available */
state->transition->tt = default_tt;
state->transition->delay = 0;
tt = default_tt;
delay = 0;
break;
case 0x02: /* Optional fields are available */
tt = net_buf_simple_pull_u8(buf);
@ -1412,13 +1442,16 @@ static bool light_ctl_setunack(struct bt_mesh_model *model,
return false;
}
state->transition->tt = tt;
state->transition->delay = net_buf_simple_pull_u8(buf);
delay = net_buf_simple_pull_u8(buf);
break;
default:
return false;
}
bound_states_transition_type_reassignment(CTL);
state->transition->tt = tt;
state->transition->delay = delay;
*ptr_counter = 0;
k_timer_stop(ptr_timer);
@ -1758,7 +1791,7 @@ static bool light_ctl_temp_setunack(struct bt_mesh_model *model,
struct bt_mesh_msg_ctx *ctx,
struct net_buf_simple *buf)
{
u8_t tid, tt;
u8_t tid, tt, delay;
s16_t delta_uv;
u16_t temp;
s64_t now;
@ -1780,8 +1813,8 @@ static bool light_ctl_temp_setunack(struct bt_mesh_model *model,
switch (buf->len) {
case 0x00: /* No optional fields are available */
state->transition->tt = default_tt;
state->transition->delay = 0;
tt = default_tt;
delay = 0;
break;
case 0x02: /* Optional fields are available */
tt = net_buf_simple_pull_u8(buf);
@ -1789,13 +1822,16 @@ static bool light_ctl_temp_setunack(struct bt_mesh_model *model,
return false;
}
state->transition->tt = tt;
state->transition->delay = net_buf_simple_pull_u8(buf);
delay = net_buf_simple_pull_u8(buf);
break;
default:
return false;
}
bound_states_transition_type_reassignment(CTL_TEMP);
state->transition->tt = tt;
state->transition->delay = delay;
*ptr_counter = 0;
k_timer_stop(ptr_timer);

View file

@ -62,7 +62,7 @@ void calculate_rt(struct transition *transition)
/* Function to calculate Remaining Time (End) */
static void bound_states_transition_type_reassignment(u8_t type)
void bound_states_transition_type_reassignment(u8_t type)
{
switch (type) {
case ONOFF:
@ -118,8 +118,6 @@ static void tt_values_calculator(struct transition *transition)
void onoff_tt_values(struct generic_onoff_state *state)
{
bound_states_transition_type_reassignment(ONOFF);
tt_values_calculator(state->transition);
if (state->transition->counter == 0) {
@ -136,12 +134,6 @@ void level_tt_values(struct generic_level_state *state)
{
u32_t counter;
if (state == &gen_level_srv_root_user_data) {
bound_states_transition_type_reassignment(LEVEL);
} else if (state == &gen_level_srv_s0_user_data) {
bound_states_transition_type_reassignment(LEVEL_TEMP);
}
tt_values_calculator(state->transition);
counter = state->transition->counter;
@ -167,8 +159,6 @@ void light_lightness_actual_tt_values(struct light_lightness_state *state)
{
u32_t counter;
bound_states_transition_type_reassignment(ACTUAL);
tt_values_calculator(state->transition);
counter = state->transition->counter;
@ -191,8 +181,6 @@ void light_lightness_linear_tt_values(struct light_lightness_state *state)
{
u32_t counter;
bound_states_transition_type_reassignment(LINEAR);
tt_values_calculator(state->transition);
counter = state->transition->counter;
@ -215,8 +203,6 @@ void light_ctl_tt_values(struct light_ctl_state *state)
{
u32_t counter;
bound_states_transition_type_reassignment(CTL);
tt_values_calculator(state->transition);
counter = state->transition->counter;
@ -247,8 +233,6 @@ void light_ctl_temp_tt_values(struct light_ctl_state *state)
{
u32_t counter;
bound_states_transition_type_reassignment(CTL_TEMP);
tt_values_calculator(state->transition);
counter = state->transition->counter;

View file

@ -41,6 +41,8 @@ extern struct k_timer dummy_timer;
void calculate_rt(struct transition *transition);
void bound_states_transition_type_reassignment(u8_t type);
void onoff_tt_values(struct generic_onoff_state *state);
void level_tt_values(struct generic_level_state *state);
void light_lightness_actual_tt_values(struct light_lightness_state *state);