static void onoff_state_value_update(app_onoff_server_t * p_server)
{
/* Requirement: If delay and transition time is zero, current state changes to the target state. */
if ((p_server->state.delay_ms == 0 && p_server->state.remaining_time_ms == 0) ||
/* Requirement: If current state is 0 (checked earlier) and target state is 1, current state value changes
* to the target state value immediately after the delay.
*/
(p_server->state.delay_ms == 0 && p_server->state.target_onoff == 1))
{
p_server->state.present_onoff = p_server->state.target_onoff;
generic_onoff_status_params_t status_params;
status_params.present_on_off = p_server->state.present_onoff;
status_params.target_on_off = p_server->state.target_onoff;
status_params.remaining_time_ms = p_server->state.remaining_time_ms;
(void) generic_onoff_server_status_publish(&p_server->server, &status_params);
if (!p_server->value_updated)
{
p_server->onoff_set_cb(p_server, p_server->state.present_onoff);
p_server->value_updated = true;
}
}
__LOG(LOG_SRC_APP, LOG_LEVEL_DBG1, "cur onoff: %d target: %d delay: %d ms remaining time: %d ms\n",
p_server->state.present_onoff, p_server->state.target_onoff, p_server->state.delay_ms, p_server->state.remaining_time_ms);
}