X-Git-Url: http://git.droids-corp.org/?p=aversive.git;a=blobdiff_plain;f=projects%2Fmicrob2010%2Fmainboard%2Fmain.c;h=eb549c591cd944fa2f84f5dbd273e930047d3698;hp=4061d195df164e12184fc7d4139099b20877bc78;hb=5894a1a70f98504fee52e58f45f181aa684d99bf;hpb=ebfaaedd491e61696cc93b353471be15408d23e4 diff --git a/projects/microb2010/mainboard/main.c b/projects/microb2010/mainboard/main.c index 4061d19..eb549c5 100755 --- a/projects/microb2010/mainboard/main.c +++ b/projects/microb2010/mainboard/main.c @@ -67,8 +67,11 @@ #include "actuator.h" #include "cs.h" #include "strat_base.h" +#include "strat_db.h" +#include "strat_avoid.h" #include "i2c_protocol.h" + /* 0 means "programmed" * ---- with 16 Mhz quartz * CKSEL 3-0 : 0111 @@ -83,8 +86,8 @@ struct genboard gen; struct mainboard mainboard; -struct cobboard cobboard; -struct ballboard ballboard; +volatile struct cobboard cobboard; +volatile struct ballboard ballboard; #ifndef HOST_VERSION /***********************/ @@ -133,9 +136,21 @@ void do_time_monitor(void *dummy) void do_led_blink(void *dummy) { -#if 1 /* simple blink */ - LED1_TOGGLE(); -#endif + static uint8_t a = 0; + + if (mainboard.flags & DO_ERRBLOCKING) { + if (a & 1) + LED1_ON(); + else + LED1_OFF(); + } + else { + if (a & 4) + LED1_ON(); + else + LED1_OFF(); + } + a++; } static void main_timer_interrupt(void) @@ -171,7 +186,9 @@ int main(void) memset(&gen, 0, sizeof(gen)); memset(&mainboard, 0, sizeof(mainboard)); mainboard.flags = DO_ENCODERS | DO_CS | DO_RS | - DO_POS | DO_POWER | DO_BD; + DO_POS | DO_POWER | DO_BD | DO_ERRBLOCKING; + ballboard.lcob = I2C_COB_NONE; + ballboard.rcob = I2C_COB_NONE; /* UART */ uart_init(); @@ -183,13 +200,17 @@ int main(void) fdevopen(uart1_dev_send, uart1_dev_recv); #endif - //eeprom_write_byte(EEPROM_MAGIC_ADDRESS, EEPROM_MAGIC_MAINBOARD); /* check eeprom to avoid to run the bad program */ if (eeprom_read_byte(EEPROM_MAGIC_ADDRESS) != EEPROM_MAGIC_MAINBOARD) { + int c; sei(); - printf_P(PSTR("Bad eeprom value\r\n")); - while(1); + printf_P(PSTR("Bad eeprom value ('f' to force)\r\n")); + c = uart_recv(CMDLINE_UART); + if (c == 'f') + eeprom_write_byte(EEPROM_MAGIC_ADDRESS, EEPROM_MAGIC_MAINBOARD); + wait_ms(100); + bootloader(); } #endif /* ! HOST_VERSION */ @@ -262,13 +283,13 @@ int main(void) /* all cs management */ microb_cs_init(); + /* TIME */ + time_init(TIME_PRIO); + #ifndef HOST_VERSION /* sensors, will also init hardware adc */ sensor_init(); - /* TIME */ - time_init(TIME_PRIO); - /* start i2c slave polling */ scheduler_add_periodical_event_priority(i2c_poll_slaves, NULL, 8000L / SCHEDULER_UNIT, I2C_POLL_PRIO); @@ -277,7 +298,6 @@ int main(void) /* strat */ gen.logs[0] = E_USER_STRAT; gen.log_level = 5; - strat_reset_infos(); /* strat-related event */ scheduler_add_periodical_event_priority(strat_event, NULL, @@ -293,6 +313,9 @@ int main(void) sei(); + strat_db_init(); + test_strat_avoid(); + printf_P(PSTR("\r\n")); printf_P(PSTR("Respect et robustesse.\r\n")); #ifndef HOST_VERSION @@ -304,7 +327,7 @@ int main(void) #endif #ifdef HOST_VERSION - strat_reset_pos(1000, 1000, -90); + strat_reset_pos(400, COLOR_Y(400), COLOR_A(-90)); #endif cmdline_interact();