diff --git a/conf/messages.xml b/conf/messages.xml index 7c06bce8f5..c2356375b8 100644 --- a/conf/messages.xml +++ b/conf/messages.xml @@ -1515,6 +1515,16 @@ + + + + + + + + + + diff --git a/conf/telemetry/telemetry_booz2.xml b/conf/telemetry/telemetry_booz2.xml index 0110a619a7..2cb860e1e9 100644 --- a/conf/telemetry/telemetry_booz2.xml +++ b/conf/telemetry/telemetry_booz2.xml @@ -16,6 +16,7 @@ + diff --git a/sw/airborne/booz/actuators/booz_actuators_asctec.c b/sw/airborne/booz/actuators/booz_actuators_asctec.c index 96f3662250..e89644e22b 100644 --- a/sw/airborne/booz/actuators/booz_actuators_asctec.c +++ b/sw/airborne/booz/actuators/booz_actuators_asctec.c @@ -114,7 +114,8 @@ void actuators_set(bool_t motors_on) { } #else /* ! ACTUATORS_ASCTEC_V2_PROTOCOL */ void actuators_set(bool_t motors_on) { - if (!cpu_time_sec) return; // FIXME +// if (!cpu_time_sec) return; // FIXME + if (cpu_time_sec < 2) return; // FIXME supervision_run(motors_on, FALSE, booz2_commands); #ifdef KILL_MOTORS DeviceBuf[0] = 0; diff --git a/sw/airborne/booz/booz2_telemetry.h b/sw/airborne/booz/booz2_telemetry.h index 60f5adf371..715dc8ecf7 100644 --- a/sw/airborne/booz/booz2_telemetry.h +++ b/sw/airborne/booz/booz2_telemetry.h @@ -51,6 +51,8 @@ #include "booz2_ins.h" #include "booz_ahrs.h" +#include "i2c_hw.h" + extern uint8_t telemetry_mode_Main_DefaultChannel; #ifdef USE_GPS @@ -752,6 +754,18 @@ extern uint8_t telemetry_mode_Main_DefaultChannel; ); \ } +#define PERIODIC_SEND_I2C_ERRORS(_chan) { \ + DOWNLINK_SEND_I2C_ERRORS(_chan, \ + &i2c_errc_ack_fail, \ + &i2c_errc_miss_start_stop, \ + &i2c_errc_arb_lost, \ + &i2c_errc_over_under, \ + &i2c_errc_pec_recep, \ + &i2c_errc_timeout_tlow, \ + &i2c_errc_smbus_alert \ + ); \ + } + //TODO replace by BOOZ_EXTRA_ADC #ifdef BOOZ2_SONAR #define PERIODIC_SEND_BOOZ2_SONAR(_chan) DOWNLINK_SEND_BOOZ2_SONAR(_chan,&booz2_adc_1,&booz2_adc_2,&booz2_adc_3,&booz2_adc_4); diff --git a/sw/airborne/stm32/i2c_hw.c b/sw/airborne/stm32/i2c_hw.c index 9cd15d6395..a8302e1bc4 100644 --- a/sw/airborne/stm32/i2c_hw.c +++ b/sw/airborne/stm32/i2c_hw.c @@ -41,6 +41,14 @@ static const uint8_t i2c2_direction = I2C_TRANSMITTER; \ } +uint16_t i2c_errc_ack_fail = 0; +uint16_t i2c_errc_miss_start_stop = 0; +uint16_t i2c_errc_arb_lost = 0; +uint16_t i2c_errc_over_under = 0; +uint16_t i2c_errc_pec_recep = 0; +uint16_t i2c_errc_timeout_tlow = 0; +uint16_t i2c_errc_smbus_alert = 0; + void i2c1_hw_init(void) { DEBUG_SERVO1_INIT(); @@ -198,30 +206,39 @@ void i2c1_ev_irq_handler(void) { } } + + void i2c1_er_irq_handler(void) { DEBUG_S1_TOGGLE(); - + if (I2C_GetITStatus(I2C1, I2C_IT_AF)) { /* Acknowledge failure */ + i2c_errc_ack_fail++; I2C_ClearITPendingBit(I2C1, I2C_IT_AF); I2C_GenerateSTOP(I2C1, ENABLE); } if (I2C_GetITStatus(I2C1, I2C_IT_BERR)) { /* Misplaced Start or Stop condition */ + i2c_errc_miss_start_stop++; I2C_ClearITPendingBit(I2C1, I2C_IT_BERR); } if (I2C_GetITStatus(I2C1, I2C_IT_ARLO)) { /* Arbitration lost */ + i2c_errc_arb_lost++; I2C_ClearITPendingBit(I2C1, I2C_IT_ARLO); } if (I2C_GetITStatus(I2C1, I2C_IT_OVR)) { /* Overrun/Underrun */ + i2c_errc_over_under++; I2C_ClearITPendingBit(I2C1, I2C_IT_OVR); } if (I2C_GetITStatus(I2C1, I2C_IT_PECERR)) { /* PEC Error in reception */ + i2c_errc_pec_recep++; I2C_ClearITPendingBit(I2C1, I2C_IT_PECERR); } if (I2C_GetITStatus(I2C1, I2C_IT_TIMEOUT)) { /* Timeout or Tlow error */ + i2c_errc_timeout_tlow++; I2C_ClearITPendingBit(I2C1, I2C_IT_TIMEOUT); } if (I2C_GetITStatus(I2C1, I2C_IT_SMBALERT)) { /* SMBus alert */ + i2c_errc_smbus_alert++; I2C_ClearITPendingBit(I2C1, I2C_IT_SMBALERT); } diff --git a/sw/airborne/stm32/i2c_hw.h b/sw/airborne/stm32/i2c_hw.h index 1d4cb45984..cfa3457567 100644 --- a/sw/airborne/stm32/i2c_hw.h +++ b/sw/airborne/stm32/i2c_hw.h @@ -37,6 +37,14 @@ extern void i2c1_hw_init(void); extern void i2c1_ev_irq_handler(void); extern void i2c1_er_irq_handler(void); +extern uint16_t i2c_errc_ack_fail; +extern uint16_t i2c_errc_miss_start_stop; +extern uint16_t i2c_errc_arb_lost; +extern uint16_t i2c_errc_over_under; +extern uint16_t i2c_errc_pec_recep; +extern uint16_t i2c_errc_timeout_tlow; +extern uint16_t i2c_errc_smbus_alert; + #define I2c1SendStart() { I2C_GenerateSTART(I2C1, ENABLE); I2C_ITConfig(I2C1, I2C_IT_EVT, ENABLE);}