summaryrefslogtreecommitdiff
path: root/n/es-2006/src
diff options
context:
space:
mode:
authordufourj2006-05-10 00:10:50 +0000
committerdufourj2006-05-10 00:10:50 +0000
commita4266f564c72cbf02266eebea6989b6cb2cbe7e7 (patch)
treec4ee261deff4b4def4a3e943b72c64fdd5173643 /n/es-2006/src
parente7fb4f1b6b94fbcbaf56bbd350e4d45c1d7eef39 (diff)
ES (RVB) :
- correction d'un bug dans la machine a états des capteurs RVB ; - fonctionne avec deux capteurs RVB simultanément !
Diffstat (limited to 'n/es-2006/src')
-rw-r--r--n/es-2006/src/main.c9
-rw-r--r--n/es-2006/src/sensor_rvb.c26
-rw-r--r--n/es-2006/src/timer_main.h1
3 files changed, 19 insertions, 17 deletions
diff --git a/n/es-2006/src/main.c b/n/es-2006/src/main.c
index f5e15a8..e95db14 100644
--- a/n/es-2006/src/main.c
+++ b/n/es-2006/src/main.c
@@ -28,6 +28,7 @@
#include "modules/uart/uart.h"
#include "modules/proto/proto.h"
#include "modules/utils/utils.h"
+#include "modules/utils/byte.h"
#include "timer_main.h" /* main timer */
#include "sensor_rvb.h" /* RVB sensors management */
@@ -43,6 +44,7 @@ void
proto_callback (uint8_t cmd, uint8_t size, uint8_t *args)
{
uint8_t compt;
+ uint16_t temp_16b;
/* This macro combine command and size in one integer. */
#define c(cmd, size) (cmd << 8 | size)
switch (c (cmd, size))
@@ -53,14 +55,11 @@ proto_callback (uint8_t cmd, uint8_t size, uint8_t *args)
break;
/* RVB sensors stats */
case c ('S', 3):
+ temp_16b = v8_to_v16 (args[0], args[1]);
for (compt = 0; compt < RVB_MAX_SENSOR; compt++)
- // TODO improve this !
- if ( ((compt >= 8) && (args[0] & _BV(compt)))
- || ((compt < 8) && (args[1] & _BV(compt))) )
- {
+ if (temp_16b & _BV(compt))
sensor_rvb_stat_enable[compt] = sensor_rvb_stats[compt] =
args[2];
- }
break;
// case c ('s', 2):
// sensor_rvb_watch (args[0], args[1]);
diff --git a/n/es-2006/src/sensor_rvb.c b/n/es-2006/src/sensor_rvb.c
index a354c53..b6576e1 100644
--- a/n/es-2006/src/sensor_rvb.c
+++ b/n/es-2006/src/sensor_rvb.c
@@ -27,8 +27,6 @@
#include "io.h"
#include "modules/utils/utils.h" /* regv */
-#include "modules/uart/uart.h"
-#include "modules/proto/proto.h"
/**
* Somes defines.
@@ -37,7 +35,7 @@
#define S1RVB 7
#define S0RVB 6
/** Max input capture before considering we can start the real capture. */
-#define RVB_MAX_FALSE_IC 4
+#define RVB_MAX_FALSE_IC 8
/** Max overflow of the timer 1 before thinking the sensor is HS. */
/* TODO Find a way to compute this value */
#define RVB_MAX_OVERFLOW 250
@@ -206,6 +204,9 @@ sensor_rvb_update (void)
else
{
sensor_rvb_state_ = RVB_STATE_WAIT_IC;
+ /* Ensure we have no pending interrupt for IC1. */
+ // XXX | ?
+ TIFR |= _BV (ICF1);
/* Enable interrupt for IC1 */
TIMSK |= _BV (TICIE1);
}
@@ -227,6 +228,9 @@ sensor_rvb_update (void)
sensor_rvb_color_select (sensor_rvb_color_ = 0);
sensor_rvb_state_ = RVB_STATE_WAIT_IC;
sensor_rvb_overflow_count_ = 0;
+ /* Ensure we have no pending interrupt for IC1. */
+ // XXX | ?
+ TIFR |= _BV (ICF1);
/* Enable interrupt for IC1 and counter overflow */
TIMSK |= _BV (TICIE1);
TIMSK |= _BV (TOIE1);
@@ -238,7 +242,7 @@ SIGNAL (SIG_OVERFLOW1)
{
switch (sensor_rvb_state_)
{
- case RVB_STATE_START_CAPTURE:
+ case RVB_STATE_STOP_CAPTURE:
++sensor_rvb_overflow_count_;
break;
case RVB_STATE_WAIT_IC:
@@ -265,28 +269,26 @@ SIGNAL (SIG_INPUT_CAPTURE1)
case RVB_STATE_WAIT_IC:
sensor_rvb_ic_count_ = RVB_MAX_FALSE_IC;
sensor_rvb_state_ = RVB_STATE_WAIT_IC2;
+ /* nobreak */
case RVB_STATE_WAIT_IC2:
if (!--sensor_rvb_ic_count_)
/* Last ignored capture */
sensor_rvb_state_ = RVB_STATE_START_CAPTURE;
break;
case RVB_STATE_START_CAPTURE:
- sensor_rvb_overflow_count_ = 0;
/* Save capture start */
sensor_rvb_value_ = ICR1;
+ sensor_rvb_overflow_count_ = 0;
/* New capture */
sensor_rvb_state_ = RVB_STATE_STOP_CAPTURE;
break;
case RVB_STATE_STOP_CAPTURE:
+ /* Save */
+ // XXX Check this please
+ sensor_rvb_values[sensor_rvb_number_ - 1][sensor_rvb_color_] = ICR1 +
+ sensor_rvb_overflow_count_ * TC1_TOP - sensor_rvb_value_;
/* Disable IC interrupt */
TIMSK &= ~_BV (TICIE1);
- /* Ensure we have no pending interrupt for IC1. */
- TIFR = _BV (ICF1);
- /* Compute value */
- sensor_rvb_value_ = ICR1 + sensor_rvb_overflow_count_ * TC1_TOP -
- sensor_rvb_value_;
- /* Save */
- sensor_rvb_values[sensor_rvb_number_ - 1][sensor_rvb_color_] = sensor_rvb_value_;
sensor_rvb_state_ = RVB_STATE_NEXT_COLOR;
/* Next please */
sensor_rvb_update ();
diff --git a/n/es-2006/src/timer_main.h b/n/es-2006/src/timer_main.h
index 458db2e..6a932b7 100644
--- a/n/es-2006/src/timer_main.h
+++ b/n/es-2006/src/timer_main.h
@@ -45,6 +45,7 @@ timer_main_wait (void)
while (!(TIFR & _BV (TOV0)))
;
/* Write 1 to clear. */
+ // XXX Check why there is no |
TIFR = _BV (TOV0);
}