From 6c0e642bd6e6d8697a8a95f167420ecf91bc08b6 Mon Sep 17 00:00:00 2001 From: David Lamparter Date: Wed, 20 Jun 2012 22:13:59 +0200 Subject: dali: assign shortaddrs --- dali_ctl.c | 30 ++++++++++++++++++++++++++---- lightctrl.c | 1 + 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/dali_ctl.c b/dali_ctl.c index 98e7cef..726387e 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; +EEMEM uint8_t dali_nextaddr = 0x02; +static uint8_t dali_assign; + static bool dali_compare(void) { uint16_t manchester = dalistat.manchester, falsestart = dalistat.falsestart, noise = dalistat.noise; @@ -76,6 +79,8 @@ static void dali_search(void) dali_twice(DALI_C_INITIALISE); // dali_twice(DALI_C_RANDOMISE); + dali_assign = eeprom_read_byte(&dali_nextaddr); + do { dali_search_single(); if (!dali_s_notfound) { @@ -85,16 +90,33 @@ static void dali_search(void) uart_puthex(dali_sl); dali_send(DALI_C_QURYSHORT); if (dali_rx_avail) { - uart_puts(" short: "); - uart_puthex(dali_rx); - uart_puts("\n"); + if ((dali_rx & 0x81) == 0x01) { + uart_puts(" short: "); + uart_puthex(dali_rx >> 1); + uart_puts("\n"); + } else { + uart_puts(" noshort "); + + dali_send(DALI_C_PROGSHORT | (dali_assign << 1)); + dali_send(DALI_C_VRFYSHORT | (dali_assign << 1)); + if (dali_rx_avail) { + uart_puts("prog "); + uart_puthex(dali_assign); + uart_puts("\n"); + } else + uart_puts("progfail\n"); + + dali_assign++; + } } else - uart_puts(" noshort\n"); + uart_puts(" error\n"); dali_send(DALI_C_WITHDRAW); } } while (!dali_s_notfound); dali_twice(DALI_C_TERMINATE); uart_puts("dali scan end\n"); + + eeprom_write_byte(&dali_nextaddr, dali_assign); } diff --git a/lightctrl.c b/lightctrl.c index ce9117c..79fdeee 100644 --- a/lightctrl.c +++ b/lightctrl.c @@ -4,6 +4,7 @@ #include #include #include +#include #include const uint8_t __signature[3] __attribute__((section (".signature"), used)) = -- cgit v1.2.1