summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2014-06-02 22:05:11 -0700
committerKeith Packard <keithp@keithp.com>2014-06-02 22:05:11 -0700
commitd20c608ce833fb8949dce527f92887775d216823 (patch)
treea8fe6bc5dcb1f2a35f7b9c90fe0a20c58f1581c4
parentb7abc063fb27da29cd7a717bbea15f92882bd205 (diff)
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 <keithp@keithp.com>
-rw-r--r--src/kernel/ao_pyro.c10
-rw-r--r--src/kernel/ao_pyro.h2
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;