release-1.0.0 #39
@@ -366,9 +366,6 @@ static void relay_chn_execute_stop(relay_chn_ctl_t *chn_ctl)
|
|||||||
{
|
{
|
||||||
relay_chn_stop_prv(chn_ctl);
|
relay_chn_stop_prv(chn_ctl);
|
||||||
|
|
||||||
// If there is any pending command, cancel it since the STOP command is issued right after it
|
|
||||||
// chn_ctl->pending_cmd = RELAY_CHN_CMD_NONE;
|
|
||||||
|
|
||||||
#if CONFIG_RELAY_CHN_ENABLE_RUN_LIMIT
|
#if CONFIG_RELAY_CHN_ENABLE_RUN_LIMIT
|
||||||
esp_timer_stop(chn_ctl->run_limit_timer);
|
esp_timer_stop(chn_ctl->run_limit_timer);
|
||||||
#endif
|
#endif
|
||||||
@@ -382,8 +379,7 @@ static void relay_chn_execute_stop(relay_chn_ctl_t *chn_ctl)
|
|||||||
chn_ctl->pending_cmd = RELAY_CHN_CMD_IDLE;
|
chn_ctl->pending_cmd = RELAY_CHN_CMD_IDLE;
|
||||||
relay_chn_start_timer_or_idle(chn_ctl, chn_ctl->inertia_timer, CONFIG_RELAY_CHN_OPPOSITE_INERTIA_MS, "idle");
|
relay_chn_start_timer_or_idle(chn_ctl, chn_ctl->inertia_timer, CONFIG_RELAY_CHN_OPPOSITE_INERTIA_MS, "idle");
|
||||||
} else {
|
} else {
|
||||||
// If the channel was not running one of the run or fwd, issue a free command immediately
|
// If the channel was not running forward or reverse, issue a free command immediately
|
||||||
// relay_chn_dispatch_cmd(chn_ctl, RELAY_CHN_CMD_IDLE);
|
|
||||||
relay_chn_execute_idle(chn_ctl);
|
relay_chn_execute_idle(chn_ctl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,8 +75,8 @@ static esp_err_t relay_chn_output_ctl_init(relay_chn_output_t *output,
|
|||||||
#if CONFIG_RELAY_CHN_ENABLE_NVS
|
#if CONFIG_RELAY_CHN_ENABLE_NVS
|
||||||
static esp_err_t relay_chn_output_load_direction(uint8_t ch, relay_chn_direction_t *direction)
|
static esp_err_t relay_chn_output_load_direction(uint8_t ch, relay_chn_direction_t *direction)
|
||||||
{
|
{
|
||||||
|
// relay_chn_nvs_get_direction handles the NOT_FOUND case and returns the provided default value.
|
||||||
esp_err_t ret = relay_chn_nvs_get_direction(ch, direction, RELAY_CHN_DIRECTION_DEFAULT);
|
esp_err_t ret = relay_chn_nvs_get_direction(ch, direction, RELAY_CHN_DIRECTION_DEFAULT);
|
||||||
// relay_chn_nvs_get_direction now handles the NOT_FOUND case and returns a default value.
|
|
||||||
ESP_RETURN_ON_ERROR(ret, TAG, "Failed to get direction from storage for channel %d: %s", ch, esp_err_to_name(ret));
|
ESP_RETURN_ON_ERROR(ret, TAG, "Failed to get direction from storage for channel %d: %s", ch, esp_err_to_name(ret));
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ TEST_CASE("Run reverse does nothing if channel id is invalid", "[relay_chn][core
|
|||||||
TEST_CASE("Relay channels run reverse and update state", "[relay_chn][core]")
|
TEST_CASE("Relay channels run reverse and update state", "[relay_chn][core]")
|
||||||
{
|
{
|
||||||
for (uint8_t i = 0; i < CONFIG_RELAY_CHN_COUNT; i++) {
|
for (uint8_t i = 0; i < CONFIG_RELAY_CHN_COUNT; i++) {
|
||||||
relay_chn_run_reverse(i); // relay_chn_run_reverse returns void
|
relay_chn_run_reverse(i);
|
||||||
vTaskDelay(pdMS_TO_TICKS(TEST_DELAY_MARGIN_MS));
|
vTaskDelay(pdMS_TO_TICKS(TEST_DELAY_MARGIN_MS));
|
||||||
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(i));
|
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(i));
|
||||||
}
|
}
|
||||||
@@ -148,7 +148,7 @@ TEST_CASE("Relay channels stop and update to FREE state", "[relay_chn][core]")
|
|||||||
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(i));
|
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(i));
|
||||||
|
|
||||||
// Now, issue the stop command
|
// Now, issue the stop command
|
||||||
relay_chn_stop(i); // relay_chn_stop returns void
|
relay_chn_stop(i);
|
||||||
// Immediately after stop, state should be STOPPED
|
// Immediately after stop, state should be STOPPED
|
||||||
vTaskDelay(pdMS_TO_TICKS(TEST_DELAY_MARGIN_MS));
|
vTaskDelay(pdMS_TO_TICKS(TEST_DELAY_MARGIN_MS));
|
||||||
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_STOPPED, relay_chn_get_state(i));
|
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_STOPPED, relay_chn_get_state(i));
|
||||||
@@ -201,19 +201,19 @@ TEST_CASE("Multiple channels can operate independently", "[relay_chn][core]")
|
|||||||
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_IDLE, relay_chn_get_state(1)); // Other channel should not be affected
|
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_IDLE, relay_chn_get_state(1)); // Other channel should not be affected
|
||||||
|
|
||||||
// Start Channel 1 in reverse direction
|
// Start Channel 1 in reverse direction
|
||||||
relay_chn_run_reverse(1); // relay_chn_run_reverse returns void
|
relay_chn_run_reverse(1);
|
||||||
vTaskDelay(pdMS_TO_TICKS(TEST_DELAY_MARGIN_MS));
|
vTaskDelay(pdMS_TO_TICKS(TEST_DELAY_MARGIN_MS));
|
||||||
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(0));
|
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state(0));
|
||||||
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(1));
|
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(1));
|
||||||
|
|
||||||
// Stop Channel 0 and wait for it to become FREE
|
// Stop Channel 0 and wait for it to become FREE
|
||||||
relay_chn_stop(0); // relay_chn_stop returns void
|
relay_chn_stop(0);
|
||||||
vTaskDelay(pdMS_TO_TICKS(CONFIG_RELAY_CHN_OPPOSITE_INERTIA_MS + TEST_DELAY_MARGIN_MS));
|
vTaskDelay(pdMS_TO_TICKS(CONFIG_RELAY_CHN_OPPOSITE_INERTIA_MS + TEST_DELAY_MARGIN_MS));
|
||||||
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_IDLE, relay_chn_get_state(0));
|
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_IDLE, relay_chn_get_state(0));
|
||||||
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(1)); // Other channel should continue running
|
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state(1)); // Other channel should continue running
|
||||||
|
|
||||||
// Stop Channel 1 and wait for it to become FREE
|
// Stop Channel 1 and wait for it to become FREE
|
||||||
relay_chn_stop(1); // relay_chn_stop returns void
|
relay_chn_stop(1);
|
||||||
vTaskDelay(pdMS_TO_TICKS(CONFIG_RELAY_CHN_OPPOSITE_INERTIA_MS + TEST_DELAY_MARGIN_MS));
|
vTaskDelay(pdMS_TO_TICKS(CONFIG_RELAY_CHN_OPPOSITE_INERTIA_MS + TEST_DELAY_MARGIN_MS));
|
||||||
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_IDLE, relay_chn_get_state(0));
|
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_IDLE, relay_chn_get_state(0));
|
||||||
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_IDLE, relay_chn_get_state(1));
|
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_IDLE, relay_chn_get_state(1));
|
||||||
@@ -236,7 +236,7 @@ TEST_CASE("Forward to Reverse transition with opposite inertia", "[relay_chn][co
|
|||||||
TEST_ASSERT_EQUAL_UINT_ARRAY(expect_states, states, CONFIG_RELAY_CHN_COUNT);
|
TEST_ASSERT_EQUAL_UINT_ARRAY(expect_states, states, CONFIG_RELAY_CHN_COUNT);
|
||||||
|
|
||||||
// 2. Issue reverse command
|
// 2. Issue reverse command
|
||||||
relay_chn_run_reverse_all(); // relay_chn_run_reverse returns void
|
relay_chn_run_reverse_all();
|
||||||
// Immediately after the command, the motor should be stopped
|
// Immediately after the command, the motor should be stopped
|
||||||
vTaskDelay(pdMS_TO_TICKS(TEST_DELAY_MARGIN_MS));
|
vTaskDelay(pdMS_TO_TICKS(TEST_DELAY_MARGIN_MS));
|
||||||
TEST_ESP_OK(relay_chn_get_state_all(states));
|
TEST_ESP_OK(relay_chn_get_state_all(states));
|
||||||
@@ -256,7 +256,7 @@ TEST_CASE("Forward to Reverse transition with opposite inertia", "[relay_chn][co
|
|||||||
TEST_CASE("Reverse to Forward transition with opposite inertia", "[relay_chn][core][inertia]")
|
TEST_CASE("Reverse to Forward transition with opposite inertia", "[relay_chn][core][inertia]")
|
||||||
{
|
{
|
||||||
// 1. Start in reverse direction
|
// 1. Start in reverse direction
|
||||||
relay_chn_run_reverse_all(); // relay_chn_run_reverse returns void
|
relay_chn_run_reverse_all();
|
||||||
vTaskDelay(pdMS_TO_TICKS(TEST_DELAY_MARGIN_MS));
|
vTaskDelay(pdMS_TO_TICKS(TEST_DELAY_MARGIN_MS));
|
||||||
TEST_ESP_OK(relay_chn_get_state_all(states));
|
TEST_ESP_OK(relay_chn_get_state_all(states));
|
||||||
test_set_expected_state_all(RELAY_CHN_STATE_REVERSE);
|
test_set_expected_state_all(RELAY_CHN_STATE_REVERSE);
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ TEST_CASE("Relay channels run forward and update state", "[relay_chn][core]")
|
|||||||
// TEST_CASE: Test that relays run in the reverse direction and update their state
|
// TEST_CASE: Test that relays run in the reverse direction and update their state
|
||||||
TEST_CASE("Relay channels run reverse and update state", "[relay_chn][core]")
|
TEST_CASE("Relay channels run reverse and update state", "[relay_chn][core]")
|
||||||
{
|
{
|
||||||
relay_chn_run_reverse(); // relay_chn_run_reverse returns void
|
relay_chn_run_reverse();
|
||||||
vTaskDelay(pdMS_TO_TICKS(TEST_DELAY_MARGIN_MS));
|
vTaskDelay(pdMS_TO_TICKS(TEST_DELAY_MARGIN_MS));
|
||||||
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state());
|
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state());
|
||||||
}
|
}
|
||||||
@@ -60,7 +60,7 @@ TEST_CASE("Relay channels stop and update to IDLE state", "[relay_chn][core]")
|
|||||||
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state());
|
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state());
|
||||||
|
|
||||||
// Now, issue the stop command
|
// Now, issue the stop command
|
||||||
relay_chn_stop(); // relay_chn_stop returns void
|
relay_chn_stop();
|
||||||
// Immediately after stop, state should be STOPPED
|
// Immediately after stop, state should be STOPPED
|
||||||
vTaskDelay(pdMS_TO_TICKS(TEST_DELAY_MARGIN_MS));
|
vTaskDelay(pdMS_TO_TICKS(TEST_DELAY_MARGIN_MS));
|
||||||
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_STOPPED, relay_chn_get_state());
|
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_STOPPED, relay_chn_get_state());
|
||||||
@@ -85,7 +85,7 @@ TEST_CASE("Forward to Reverse transition with opposite inertia", "[relay_chn][co
|
|||||||
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state());
|
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_FORWARD, relay_chn_get_state());
|
||||||
|
|
||||||
// 2. Issue reverse command
|
// 2. Issue reverse command
|
||||||
relay_chn_run_reverse(); // relay_chn_run_reverse returns void
|
relay_chn_run_reverse();
|
||||||
// Immediately after the command, the motor should be stopped
|
// Immediately after the command, the motor should be stopped
|
||||||
vTaskDelay(pdMS_TO_TICKS(TEST_DELAY_MARGIN_MS));
|
vTaskDelay(pdMS_TO_TICKS(TEST_DELAY_MARGIN_MS));
|
||||||
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE_PENDING, relay_chn_get_state());
|
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE_PENDING, relay_chn_get_state());
|
||||||
@@ -100,7 +100,7 @@ TEST_CASE("Forward to Reverse transition with opposite inertia", "[relay_chn][co
|
|||||||
TEST_CASE("Reverse to Forward transition with opposite inertia", "[relay_chn][core][inertia]")
|
TEST_CASE("Reverse to Forward transition with opposite inertia", "[relay_chn][core][inertia]")
|
||||||
{
|
{
|
||||||
// 1. Start in reverse direction
|
// 1. Start in reverse direction
|
||||||
relay_chn_run_reverse(); // relay_chn_run_reverse returns void
|
relay_chn_run_reverse();
|
||||||
vTaskDelay(pdMS_TO_TICKS(TEST_DELAY_MARGIN_MS));
|
vTaskDelay(pdMS_TO_TICKS(TEST_DELAY_MARGIN_MS));
|
||||||
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state());
|
TEST_ASSERT_EQUAL(RELAY_CHN_STATE_REVERSE, relay_chn_get_state());
|
||||||
|
|
||||||
|
|||||||
@@ -371,7 +371,6 @@ TEST_CASE("relay_chn_tilt_set_sensitivity functions handle upper boundary", "[re
|
|||||||
// Test tilt counter logic: forward x3, reverse x3, extra reverse fails
|
// Test tilt counter logic: forward x3, reverse x3, extra reverse fails
|
||||||
TEST_CASE("tilt counter logic: forward and reverse consumption", "[relay_chn][tilt][counter]")
|
TEST_CASE("tilt counter logic: forward and reverse consumption", "[relay_chn][tilt][counter]")
|
||||||
{
|
{
|
||||||
|
|
||||||
// Tilt execution time at 100% sensitivity in milliseconds (10 + 90)
|
// Tilt execution time at 100% sensitivity in milliseconds (10 + 90)
|
||||||
#define TEST_TILT_EXECUTION_TIME_MS 100
|
#define TEST_TILT_EXECUTION_TIME_MS 100
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user