From 5ef11e951e6b056aee44d64d5c1b9451b0753997 Mon Sep 17 00:00:00 2001 From: Jérémy Dufour Date: Mon, 28 Apr 2008 13:33:52 +0200 Subject: * digital/io/src - add protection in get samples against 'stupid' parameter for the bitfield value. --- digital/io/src/getsamples.c | 13 +++++++++++++ digital/io/src/getsamples_cb.c | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) (limited to 'digital/io/src') diff --git a/digital/io/src/getsamples.c b/digital/io/src/getsamples.c index 25c166e9..10dd0840 100644 --- a/digital/io/src/getsamples.c +++ b/digital/io/src/getsamples.c @@ -24,6 +24,9 @@ * }}} */ #include "getsamples.h" #include "fsm.h" +#include "trap.h" /* trap_* */ + +#include "io.h" /* _BV */ /** * 'Private' get samples data used internaly by the FSM. @@ -34,10 +37,20 @@ struct getsamples_data_t getsamples_data_; void getsamples_start (int16_t approach_angle, uint8_t sample_bitfield) { + uint8_t count; /* Set parameters */ getsamples_data_.approach_angle = approach_angle; getsamples_data_.sample_bitfield = sample_bitfield; + /* Remove unhandled traps */ + /* garbage */ + getsamples_data_.sample_bitfield &= ~_BV (garbage); + /* Trap upper than the trap_count */ + for (count = 7; count >= trap_count; count--) + { + getsamples_data_.sample_bitfield &= ~_BV (count); + } + /* Start the get samples FSM */ fsm_init (&getsamples_fsm); fsm_handle_event (&getsamples_fsm, GETSAMPLES_EVENT_start); diff --git a/digital/io/src/getsamples_cb.c b/digital/io/src/getsamples_cb.c index 69a886ea..7e052393 100644 --- a/digital/io/src/getsamples_cb.c +++ b/digital/io/src/getsamples_cb.c @@ -56,7 +56,7 @@ getsamples_configure_classifier (void) { uint8_t trap_num; /* Go through all the bits of the sample bit field */ - for (trap_num = 0; trap_num < trap_count; trap_num++) + for (trap_num = out_left_box; trap_num < trap_count; trap_num++) { /* Is the bit set? */ if (bit_is_set (getsamples_data_.sample_bitfield, trap_num)) -- cgit v1.2.3