diff --git a/epicardium/modules/leds.c b/epicardium/modules/leds.c index 3c474ebfb6081f30aae1a7724abda44d9aa3aa67..ffe5969e103c1e736d502a2c79d8933fc5e5cf6b 100644 --- a/epicardium/modules/leds.c +++ b/epicardium/modules/leds.c @@ -7,19 +7,22 @@ #include <stdbool.h> -//TODO: create smth like vTaskDelay(pdMS_TO_TICKS(//put ms here)) for us, remove blocking delay from /lib/leds.c to avoid process blocking +/* + * TODO: create smth like vTaskDelay(pdMS_TO_TICKS(//put ms here)) for us, + * remove blocking delay from /lib/leds.c to avoid process blocking + */ #define NUM_LEDS 15 /* Take from lib/card10/leds.c */ -static void do_update() +static void do_update(void) { - while (hwlock_acquire_timeout(HWLOCK_LED, portMAX_DELAY) < 0) { - vTaskDelay(pdMS_TO_TICKS(1)); - } + hwlock_acquire(HWLOCK_LED); + hwlock_acquire(HWLOCK_I2C); leds_update_power(); leds_update(); + hwlock_release(HWLOCK_I2C); hwlock_release(HWLOCK_LED); } @@ -96,13 +99,7 @@ void epic_leds_dim_top(uint8_t value) { leds_set_dim_top(value); if (personal_state_enabled() == 0) { - while (hwlock_acquire_timeout(HWLOCK_I2C, portMAX_DELAY) < 0) { - vTaskDelay(pdMS_TO_TICKS(1)); - } - - leds_update(); - - hwlock_release(HWLOCK_I2C); + do_update(); } } @@ -110,35 +107,22 @@ void epic_leds_dim_bottom(uint8_t value) { leds_set_dim_bottom(value); if (personal_state_enabled() == 0) { - while (hwlock_acquire_timeout(HWLOCK_I2C, portMAX_DELAY) < 0) { - vTaskDelay(pdMS_TO_TICKS(1)); - } - - leds_update(); - - hwlock_release(HWLOCK_I2C); + do_update(); } } void epic_leds_set_rocket(int led, uint8_t value) { - while (hwlock_acquire_timeout(HWLOCK_I2C, portMAX_DELAY) < 0) { - vTaskDelay(pdMS_TO_TICKS(1)); - } - - value = value > 31 ? 31 : value; - pmic_set_led(led, value); - + hwlock_acquire(HWLOCK_I2C); + pmic_set_led(led, value > 31 ? 31 : value); hwlock_release(HWLOCK_I2C); } int epic_leds_get_rocket(int led) { int ret = 0; - while (hwlock_acquire_timeout(HWLOCK_I2C, portMAX_DELAY) < 0) { - vTaskDelay(pdMS_TO_TICKS(1)); - } + hwlock_acquire(HWLOCK_I2C); ret = pmic_get_led(led); hwlock_release(HWLOCK_I2C); return ret; @@ -146,12 +130,8 @@ int epic_leds_get_rocket(int led) void epic_set_flashlight(bool power) { - while (hwlock_acquire_timeout(HWLOCK_I2C, portMAX_DELAY) < 0) { - vTaskDelay(pdMS_TO_TICKS(1)); - } - + hwlock_acquire(HWLOCK_I2C); leds_flashlight(power); - hwlock_release(HWLOCK_I2C); } @@ -162,12 +142,8 @@ void epic_leds_update(void) void epic_leds_set_powersave(bool eco) { - while (hwlock_acquire_timeout(HWLOCK_I2C, portMAX_DELAY) < 0) { - vTaskDelay(pdMS_TO_TICKS(1)); - } - + hwlock_acquire(HWLOCK_I2C); leds_powersave(eco); - hwlock_release(HWLOCK_I2C); } diff --git a/epicardium/modules/personal_state.c b/epicardium/modules/personal_state.c index 08028b58b8c31acf98a3ae269018579ad43985f5..285cb872dd37315bf1bb5fd227e6cab3bd968f74 100644 --- a/epicardium/modules/personal_state.c +++ b/epicardium/modules/personal_state.c @@ -31,15 +31,8 @@ int epic_personal_state_set(uint8_t state, bool persistent) personal_state_persistent = persistent; if (was_enabled && !_personal_state_enabled) { - while (hwlock_acquire_timeout(HWLOCK_LED, portMAX_DELAY) < 0) { - vTaskDelay(pdMS_TO_TICKS(1)); - } - leds_prep(PERSONAL_STATE_LED, 0, 0, 0); - leds_update_power(); - leds_update(); - - hwlock_release(HWLOCK_LED); + epic_leds_update(); } return 0; @@ -60,11 +53,6 @@ void vLedTask(void *pvParameters) const int led_animation_rate = 1000 / 25; /* 25Hz -> 40ms*/ while (1) { if (_personal_state_enabled) { - while (hwlock_acquire_timeout( - HWLOCK_LED, portMAX_DELAY) < 0) { - vTaskDelay(pdMS_TO_TICKS(1)); - } - led_animation_ticks++; if (personal_state == STATE_NO_CONTACT) { leds_prep(PERSONAL_STATE_LED, 255, 0, 0); @@ -130,10 +118,8 @@ void vLedTask(void *pvParameters) (float)(1000 / led_animation_rate)))); } - leds_update_power(); - leds_update(); - hwlock_release(HWLOCK_LED); + epic_leds_update(); } vTaskDelay(led_animation_rate / portTICK_PERIOD_MS);