From: Keith Packard Date: Tue, 3 Jun 2014 05:05:11 +0000 (-0700) Subject: altos: Fetch/store only 8 bits for pyro state values X-Git-Tag: 1.3.2.2~26 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=d20c608ce833fb8949dce527f92887775d216823 altos: Fetch/store only 8 bits for pyro state values These fields are uint8_t, not int16_t. Fetching and storing 16 bits is a bad idea. Signed-off-by: Keith Packard --- diff --git a/src/kernel/ao_pyro.c b/src/kernel/ao_pyro.c index 56758fa4..0ee7fbee 100644 --- a/src/kernel/ao_pyro.c +++ b/src/kernel/ao_pyro.c @@ -403,7 +403,10 @@ ao_pyro_show(void) if (ao_pyro_values[v].offset != NO_VALUE) { int16_t value; - value = *((int16_t *) ((char *) pyro + ao_pyro_values[v].offset)); + if (ao_pyro_values[v].flag & AO_PYRO_8_BIT_VALUE) + value = *((uint8_t *) ((char *) pyro + ao_pyro_values[v].offset)); + else + value = *((int16_t *) ((char *) pyro + ao_pyro_values[v].offset)); printf ("%6d ", value); } else { printf (" "); @@ -467,7 +470,10 @@ ao_pyro_set(void) ao_cmd_decimal(); if (ao_cmd_status != ao_cmd_success) return; - *((int16_t *) ((char *) &pyro_tmp + ao_pyro_values[v].offset)) = ao_cmd_lex_i; + if (ao_pyro_values[v].flag & AO_PYRO_8_BIT_VALUE) + *((uint8_t *) ((char *) &pyro_tmp + ao_pyro_values[v].offset)) = ao_cmd_lex_i; + else + *((int16_t *) ((char *) &pyro_tmp + ao_pyro_values[v].offset)) = ao_cmd_lex_i; } } _ao_config_edit_start(); diff --git a/src/kernel/ao_pyro.h b/src/kernel/ao_pyro.h index 34c99078..b37aaeb1 100644 --- a/src/kernel/ao_pyro.h +++ b/src/kernel/ao_pyro.h @@ -65,6 +65,8 @@ struct ao_pyro { uint8_t fired; }; +#define AO_PYRO_8_BIT_VALUE (ao_pyro_state_less|ao_pyro_state_greater_or_equal) + extern uint8_t ao_pyro_wakeup; extern uint16_t ao_pyro_fired;