summaryrefslogtreecommitdiff
path: root/n/es-2006/src/sensor_rvb.c
diff options
context:
space:
mode:
Diffstat (limited to 'n/es-2006/src/sensor_rvb.c')
-rw-r--r--n/es-2006/src/sensor_rvb.c33
1 files changed, 24 insertions, 9 deletions
diff --git a/n/es-2006/src/sensor_rvb.c b/n/es-2006/src/sensor_rvb.c
index fae1c27..9d15223 100644
--- a/n/es-2006/src/sensor_rvb.c
+++ b/n/es-2006/src/sensor_rvb.c
@@ -23,13 +23,13 @@
*
* }}} */
#include "sensor_rvb.h"
-#include "timer_1.h"
#include "io.h"
#include "modules/utils/utils.h" /* regv */
#include "modules/proto/proto.h"
#include "sniff_rvb.h"
+#include "timer_1.h"
/**
* Somes defines.
@@ -75,12 +75,14 @@ volatile uint8_t sensor_rvb_color_;
/** Number of overflow interruption since last edge change. */
volatile uint8_t sensor_rvb_overflow_count_;
/** Results table for 9 RVB sensors (RVCB) */
-volatile uint16_t sensor_rvb_values[RVB_MAX_SENSOR][4];
+volatile uint16_t sensor_rvb_values[RVB_MAX_SENSOR][RVB_MAX_INDEX];
/** Count the number of IC before starting a good capture. */
uint8_t sensor_rvb_ic_count_;
/** Barillet sensors are enabled ? */
volatile uint8_t sensor_rvb_barillet_flag_;
volatile uint8_t sensor_rvb_low_sensor_flag_;
+/** We are not pooling all the sensors */
+volatile uint8_t sensor_rvb_cur_;
/** Update everything for you. */
inline void sensor_rvb_update (void);
@@ -115,7 +117,6 @@ sensor_rvb_color_select (uint8_t sensor_rvb_color)
uint8_t
sensor_rvb_sensor_select (uint8_t sensor_rvb_num)
{
- static uint8_t sensor_cur = 0;
switch (sensor_rvb_num)
{
case 1:
@@ -134,12 +135,12 @@ sensor_rvb_sensor_select (uint8_t sensor_rvb_num)
else
{
/* Alternatively one sensor of the following */
- if (sensor_cur == 0)
+ if (sensor_rvb_cur_ == 0)
PORTC = ~_BV(5);
else
PORTC = 0x7F;
- if (++sensor_cur == 2)
- sensor_cur = 0;
+ if (++sensor_rvb_cur_ == 2)
+ sensor_rvb_cur_ = 0;
}
break;
case 6:
@@ -287,7 +288,13 @@ SIGNAL (SIG_OVERFLOW1)
if (++sensor_rvb_overflow_count_ >= sensor_rvb_conf_max_ov_)
{
/* Invalidate the sensor */
- sensor_rvb_values[sensor_rvb_number_ - 1][0] = RVB_INVALID_CAPTURE;
+ if (!sensor_rvb_low_sensor_flag_ && (sensor_rvb_number_ == 5))
+ if (sensor_rvb_cur_ == 0)
+ sensor_rvb_values[6][0] = RVB_INVALID_CAPTURE;
+ else
+ sensor_rvb_values[4][0] = RVB_INVALID_CAPTURE;
+ else
+ sensor_rvb_values[sensor_rvb_number_ - 1][0] = RVB_INVALID_CAPTURE;
/* Disable IC interrupt */
TIMSK &= ~_BV (TICIE1);
/* Ask for next sensor */
@@ -303,6 +310,7 @@ SIGNAL (SIG_INPUT_CAPTURE1)
{
/* Save it earlier ! */
uint16_t ic1_cache = ICR1;
+ uint16_t result;
switch (sensor_rvb_state_)
{
case RVB_STATE_WAIT_IC:
@@ -328,9 +336,16 @@ SIGNAL (SIG_INPUT_CAPTURE1)
break;
case RVB_STATE_STOP_CAPTURE:
/* Compute value */
- sensor_rvb_values[sensor_rvb_number_ - 1][sensor_rvb_color_] =
- ic1_cache + sensor_rvb_overflow_count_ * (TC1_TOP + 1) -
+ result = ic1_cache + sensor_rvb_overflow_count_ * (TC1_TOP + 1) -
sensor_rvb_value_;
+ if (!sensor_rvb_low_sensor_flag_ && (sensor_rvb_number_ == 5))
+ if (sensor_rvb_cur_ == 0)
+ sensor_rvb_values[6][sensor_rvb_color_] = result;
+ else
+ sensor_rvb_values[4][sensor_rvb_color_] = result;
+ else
+ sensor_rvb_values[sensor_rvb_number_ - 1][sensor_rvb_color_] =
+ result;
/* Disable IC interrupt */
TIMSK &= ~_BV (TICIE1);
sensor_rvb_state_ = RVB_STATE_NEXT_COLOR;