Optimize timer callbacks
It turned out that esp_event was adding extra complexity to the code base and it was completely unnecessary. So it has been removed from the component completely. The actions are now executed directly in the `relay_chn_distpacth_cmd()` and `relay_chn_tilt_dispatch_cmd()` functions. This change has simplified the component as well as reduced the memory footprint. Fixes #1084, refs #1083
This commit is contained in:
@@ -39,8 +39,6 @@ static const char *TAG = "RELAY_CHN_TILT";
|
||||
* 100 / (RELAY_CHN_TILT_RUN_MAX_MS - RELAY_CHN_TILT_RUN_MIN_MS) )
|
||||
/**@}*/
|
||||
|
||||
ESP_EVENT_DEFINE_BASE(RELAY_CHN_TILT_CMD_EVENT_BASE);
|
||||
|
||||
|
||||
/// @brief Tilt steps.
|
||||
typedef enum {
|
||||
@@ -78,21 +76,6 @@ static relay_chn_tilt_ctl_t tilt_ctl;
|
||||
#endif
|
||||
|
||||
|
||||
esp_err_t relay_chn_tilt_dispatch_cmd(relay_chn_tilt_ctl_t *tilt_ctl, relay_chn_tilt_cmd_t cmd)
|
||||
{
|
||||
if (cmd == RELAY_CHN_TILT_CMD_NONE) return ESP_ERR_INVALID_ARG;
|
||||
|
||||
// Since the event_loop library creates a deep copy of the event data,
|
||||
// and we need to pass the pointer of the relevant tilt control, here we need
|
||||
// to pass the pointer to the pointer of the tilt_control (&tilt_ctl) so that
|
||||
// the pointer value is preserved in the event data.
|
||||
return esp_event_post_to(relay_chn_event_loop,
|
||||
RELAY_CHN_TILT_CMD_EVENT_BASE,
|
||||
cmd,
|
||||
&tilt_ctl,
|
||||
sizeof(tilt_ctl), portMAX_DELAY);
|
||||
}
|
||||
|
||||
// Returns the required timing before tilting depending on the last run.
|
||||
static uint32_t relay_chn_tilt_get_required_timing_before_tilting(relay_chn_tilt_ctl_t *tilt_ctl, relay_chn_tilt_cmd_t cmd)
|
||||
{
|
||||
@@ -561,13 +544,11 @@ static void relay_chn_tilt_execute_pause(relay_chn_tilt_ctl_t *tilt_ctl)
|
||||
tilt_ctl->step = RELAY_CHN_TILT_STEP_MOVE;
|
||||
}
|
||||
|
||||
static void relay_chn_tilt_event_handler(void *handler_arg, esp_event_base_t event_base, int32_t event_id, void *event_data)
|
||||
esp_err_t relay_chn_tilt_dispatch_cmd(relay_chn_tilt_ctl_t *tilt_ctl, relay_chn_tilt_cmd_t cmd)
|
||||
{
|
||||
relay_chn_tilt_ctl_t* tilt_ctl = *(relay_chn_tilt_ctl_t**) event_data;
|
||||
ESP_RETURN_VOID_ON_FALSE(tilt_ctl != NULL, TAG, "event_data is NULL");
|
||||
ESP_LOGD(TAG, "relay_chn_event_handler: Command: %s", relay_chn_cmd_str(event_id));
|
||||
ESP_LOGD(TAG, "relay_chn_tilt_dispatch_cmd: Command: %d", cmd);
|
||||
|
||||
switch(event_id) {
|
||||
switch(cmd) {
|
||||
case RELAY_CHN_TILT_CMD_STOP:
|
||||
relay_chn_tilt_execute_stop(tilt_ctl);
|
||||
break;
|
||||
@@ -582,8 +563,9 @@ static void relay_chn_tilt_event_handler(void *handler_arg, esp_event_base_t eve
|
||||
relay_chn_update_state(tilt_ctl->chn_ctl, RELAY_CHN_STATE_TILT_REVERSE);
|
||||
break;
|
||||
default:
|
||||
ESP_LOGW(TAG, "Unexpected relay channel tilt command: %ld!", event_id);
|
||||
ESP_LOGW(TAG, "Unexpected relay channel tilt command: %d!", cmd);
|
||||
}
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
// Timer callback for the relay_chn_tilt_control_t::tilt_timer
|
||||
@@ -693,8 +675,10 @@ esp_err_t relay_chn_tilt_init(relay_chn_ctl_t *chn_ctls)
|
||||
sensitivity = RELAY_CHN_TILT_DEFAULT_SENSITIVITY;
|
||||
tilt_count = 0;
|
||||
#endif // RELAY_CHN_ENABLE_NVS == 1
|
||||
relay_chn_tilt_ctl_init(&tilt_ctls[i], &chn_ctls[i], tilt_count, sensitivity);
|
||||
ret = relay_chn_tilt_ctl_init(&tilt_ctls[i], &chn_ctls[i], tilt_count, sensitivity);
|
||||
ESP_RETURN_ON_ERROR(ret, TAG, "Failed to init tilt control for channel %d", i);
|
||||
}
|
||||
return ESP_OK;
|
||||
#else
|
||||
sensitivity = RELAY_CHN_TILT_DEFAULT_SENSITIVITY;
|
||||
tilt_count = 0;
|
||||
@@ -704,13 +688,8 @@ esp_err_t relay_chn_tilt_init(relay_chn_ctl_t *chn_ctls)
|
||||
ret = relay_chn_tilt_load_tilt_count(0, &tilt_count);
|
||||
ESP_RETURN_ON_ERROR(ret, TAG, "Failed to load tilt count for channel %d", 0);
|
||||
#endif // RELAY_CHN_ENABLE_NVS == 1
|
||||
relay_chn_tilt_ctl_init(&tilt_ctl, chn_ctls, tilt_count, sensitivity);
|
||||
return relay_chn_tilt_ctl_init(&tilt_ctl, chn_ctls, tilt_count, sensitivity);
|
||||
#endif // RELAY_CHN_COUNT > 1
|
||||
|
||||
return esp_event_handler_register_with(relay_chn_event_loop,
|
||||
RELAY_CHN_TILT_CMD_EVENT_BASE,
|
||||
ESP_EVENT_ANY_ID,
|
||||
relay_chn_tilt_event_handler, NULL);
|
||||
}
|
||||
|
||||
void relay_chn_tilt_ctl_deinit(relay_chn_tilt_ctl_t *tilt_ctl)
|
||||
@@ -736,8 +715,4 @@ void relay_chn_tilt_deinit()
|
||||
#else
|
||||
relay_chn_tilt_ctl_deinit(&tilt_ctl);
|
||||
#endif // RELAY_CHN_COUNT > 1
|
||||
esp_event_handler_unregister_with(relay_chn_event_loop,
|
||||
RELAY_CHN_TILT_CMD_EVENT_BASE,
|
||||
ESP_EVENT_ANY_ID,
|
||||
relay_chn_tilt_event_handler);
|
||||
}
|
||||
Reference in New Issue
Block a user