diff options
author | David Lamparter <equinox@diac24.net> | 2015-01-13 22:37:55 +0100 |
---|---|---|
committer | David Lamparter <equinox@diac24.net> | 2015-01-13 22:42:50 +0100 |
commit | 455913cca424976c03bc4b87500d69e115b2b517 (patch) | |
tree | 8ac09532eb61e875695fa5f19deb554b48aac99a | |
parent | 8d52c392f895d1fbc486a8b5b62202be3f7b66ff (diff) |
lightctrl_v2: refresh every 30 sec
-rw-r--r-- | lightctrl_v2.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/lightctrl_v2.c b/lightctrl_v2.c index 5d90850..22dc0b2 100644 --- a/lightctrl_v2.c +++ b/lightctrl_v2.c @@ -85,6 +85,8 @@ static void target_set(uint8_t dst, uint8_t val); #define target_present(addr) devices[addr].present #define target_set_present(addr) devices[addr].present = 1 +#define REFRESH_TIMER 30 /* seconds */ + #include "uart.c" #include "tick.c" #include "dali2.c" @@ -113,9 +115,14 @@ static void target_set(uint8_t dst, uint8_t val) devices[dst].set = val; } +static uint8_t refresh_timer = 0; + /* irqonly */ static void systick_user_1hz(void) { + if (global_state == G_BOOTING) + return; + for (uint8_t i = 0; i < DALI_NUMDEV; i++) { if (!devices[i].cooldown) continue; @@ -125,6 +132,20 @@ static void systick_user_1hz(void) devices[i].need_poweron = NEED_POWERON; } } + if (refresh_timer) + refresh_timer--; + else { + uart_puts("periodic DALI refresh triggered\n"); + for (uint8_t i = 0; i < DALI_NUMDEV; i++) { + if (!target_present(i)) + continue; + if (devices[i].set) + devices[i].need_set |= 1; + else + devices[i].need_poweroff |= 1; + } + refresh_timer = REFRESH_TIMER; + } } /* irqonly */ @@ -501,6 +522,7 @@ int main(void) DDRD |= (1 << D_LED1) | (1 << D_LED2 ) | (1 << D_TXD) | (1 << D_DALIO); PORTD |= (1 << D_LED1) | (1 << D_TAST); PORTD &= ~(1 << D_LED1); + refresh_timer = REFRESH_TIMER; uart_init(); tick_init(); |