Skip to content
Snippets Groups Projects

Fix LED mutex stuff

Merged rahix requested to merge rahix/more-mutex into master
All threads resolved!
2 files
+ 17
55
Compare changes
  • Side-by-side
  • Inline
Files
2
+ 15
39
@@ -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);
}
Loading