From d20c608ce833fb8949dce527f92887775d216823 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Mon, 2 Jun 2014 22:05:11 -0700 Subject: [PATCH] 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 --- src/kernel/ao_pyro.c | 10 ++++++++-- src/kernel/ao_pyro.h | 2 ++ 2 files changed, 10 insertions(+), 2 deletions(-) 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; -- 2.30.2