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.c73
1 files changed, 58 insertions, 15 deletions
diff --git a/n/es-2006/src/sensor_rvb.c b/n/es-2006/src/sensor_rvb.c
index 76e956a..fae1c27 100644
--- a/n/es-2006/src/sensor_rvb.c
+++ b/n/es-2006/src/sensor_rvb.c
@@ -78,6 +78,9 @@ volatile uint8_t sensor_rvb_overflow_count_;
volatile uint16_t sensor_rvb_values[RVB_MAX_SENSOR][4];
/** 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_;
/** Update everything for you. */
inline void sensor_rvb_update (void);
@@ -109,7 +112,7 @@ sensor_rvb_color_select (uint8_t sensor_rvb_color)
}
/** Enable a RVB sensor. */
-inline uint8_t
+uint8_t
sensor_rvb_sensor_select (uint8_t sensor_rvb_num)
{
static uint8_t sensor_cur = 0;
@@ -122,22 +125,44 @@ sensor_rvb_sensor_select (uint8_t sensor_rvb_num)
PORTC = ~_BV(sensor_rvb_num);
break;
case 5:
- switch (sensor_cur)
+ /* If we also want the other sensors */
+ if (sensor_rvb_low_sensor_flag_)
{
- case 0:
- case 1:
- case 2:
- PORTC = ~_BV(sensor_rvb_num + sensor_cur);
- break;
- case 3:
- PORTD &= ~_BV(6);
- break;
- case 4:
- PORTC = ~_BV(0);
- break;
+ /* Normal behaviour */
+ PORTC = ~_BV(5);
}
- if (++sensor_cur == 5)
- sensor_cur = 0;
+ else
+ {
+ /* Alternatively one sensor of the following */
+ if (sensor_cur == 0)
+ PORTC = ~_BV(5);
+ else
+ PORTC = 0x7F;
+ if (++sensor_cur == 2)
+ sensor_cur = 0;
+ }
+ break;
+ case 6:
+ if (!sensor_rvb_low_sensor_flag_)
+ {
+ /* High for disable */
+ PORTC = 0xff;
+ PORTD |= _BV(6);
+ /* Wait a little */
+ utils_delay_ns (RVB_SENSOR_DELAY_IO);
+ return 0;
+ }
+ else
+ PORTC = ~_BV(6);
+ break;
+ case 7:
+ PORTC = 0x7F;
+ break;
+ case 8:
+ PORTD &= ~_BV(6);
+ break;
+ case 9:
+ PORTC = ~_BV(0);
break;
default:
/* High for disable */
@@ -345,3 +370,21 @@ sensor_rvb_update_asserv_pins (void)
// which pins we should update.
}
+/** Enable/disable capture for black & white sensors (the ones inside the
+ * barillet).
+ */
+void
+sensor_rvb_upper_sensors (uint8_t enable)
+{
+ if (enable)
+ sensor_rvb_low_sensor_flag_ = 1;
+ else
+ {
+ /* Invalidate all capture */
+ // XXX Good idea ?
+ sensor_rvb_low_sensor_flag_ = 0;
+ sensor_rvb_values[8][0] =
+ sensor_rvb_values[7][0] = RVB_INVALID_CAPTURE;
+ }
+}
+