diff options
author | David Lamparter <equinox@diac24.net> | 2015-01-13 22:42:19 +0100 |
---|---|---|
committer | David Lamparter <equinox@diac24.net> | 2015-01-13 23:50:33 +0100 |
commit | 86df55b4f275855381a47d6b2fc4b0a0c9959776 (patch) | |
tree | 64a179394ff9f690766dc9edc0ed43a7c2e89490 | |
parent | 455913cca424976c03bc4b87500d69e115b2b517 (diff) |
-rw-r--r-- | dim.c | 10 | ||||
-rw-r--r-- | lightctrl_v2.c | 7 |
2 files changed, 14 insertions, 3 deletions
@@ -3,11 +3,13 @@ struct switchcfg { uint8_t targets1[2]; uint8_t lastclick; int8_t dir; - uint8_t tgt1active; + __extension__ uint8_t tgt1active : 1; + __extension__ uint8_t enabled : 1; + __extension__ uint8_t unused : 6; }; #define T_DOUBLECLICK 75 -struct switchcfg sw; +static struct switchcfg sw; static uint8_t tast_curstate(void) { @@ -27,6 +29,9 @@ static uint8_t tast_curstate(void) static void tast_applystate(uint8_t all, uint8_t target) { + if (!sw.enabled) + return; + target_set(sw.targets0[0], target); target_set(sw.targets0[1], target); if (all) { @@ -120,4 +125,5 @@ static void dim_init(void) sw.lastclick = 0xff; sw.dir = 1; sw.tgt1active = 0; + sw.enabled = 1; } diff --git a/lightctrl_v2.c b/lightctrl_v2.c index 22dc0b2..f9ff43a 100644 --- a/lightctrl_v2.c +++ b/lightctrl_v2.c @@ -166,12 +166,17 @@ static void can_handle_light(uint16_t sublab_addr) /* - 7 allows overlapping writes to a nonaligned address. * "base" below will start out at 0xf9~0xff in that case */ - if (sublab_addr < CANA_DALI_BASE - 7) + if (sublab_addr < CANA_DALI_BASE - 8) return; uint8_t base = sublab_addr - CANA_DALI_BASE, len = can_rx_len(), pos; for (pos = 0; pos < len; pos++) { uint8_t dst = base + pos, val; + if (dst == 0xff) { + /* bus element 43f: hw switch disable */ + sw.enabled = can_rx_data[pos] != 0; + continue; + } if (dst >= 0x40) continue; val = can_rx_data[pos]; |