summaryrefslogtreecommitdiff
path: root/dali_ctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'dali_ctl.c')
-rw-r--r--dali_ctl.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/dali_ctl.c b/dali_ctl.c
index 726387e..797f58f 100644
--- a/dali_ctl.c
+++ b/dali_ctl.c
@@ -16,6 +16,9 @@
static uint8_t dali_s_byte, dali_sh, dali_sm, dali_sl;
static bool dali_s_notfound;
+/* [0] bit 0 => addr 0, [0] bit 1 => addr 1, etc. */
+static uint8_t dali_map[8];
+
EEMEM uint8_t dali_nextaddr = 0x02;
static uint8_t dali_assign;
@@ -90,9 +93,13 @@ static void dali_search(void)
uart_puthex(dali_sl);
dali_send(DALI_C_QURYSHORT);
if (dali_rx_avail) {
+ uint8_t addr = 0xff;
+
if ((dali_rx & 0x81) == 0x01) {
+ addr = dali_rx >> 1;
+
uart_puts(" short: ");
- uart_puthex(dali_rx >> 1);
+ uart_puthex(addr);
uart_puts("\n");
} else {
uart_puts(" noshort ");
@@ -106,8 +113,12 @@ static void dali_search(void)
} else
uart_puts("progfail\n");
+ addr = dali_assign;
dali_assign++;
}
+
+ if (addr < 64)
+ dali_map[addr >> 3] |= 1 << (addr & 0x7);
} else
uart_puts(" error\n");
dali_send(DALI_C_WITHDRAW);