X-Git-Url: http://git.droids-corp.org/?p=aversive.git;a=blobdiff_plain;f=projects%2Fmicrob2010%2Fmainboard%2Fmain.c;h=14a2aad68ef5b18d140a0fb932e27dc6070c952a;hp=aa766514f81a4ae9f1f6988c80e85566a88f60ee;hb=4e7801883ed4076cb14b63a0571467747894c0f8;hpb=bb790b7c2a31fb94f505193e872f787e2def9d89 diff --git a/projects/microb2010/mainboard/main.c b/projects/microb2010/mainboard/main.c index aa76651..14a2aad 100755 --- a/projects/microb2010/mainboard/main.c +++ b/projects/microb2010/mainboard/main.c @@ -59,12 +59,15 @@ #include "../common/i2c_commands.h" #include "main.h" +#include "robotsim.h" #include "ax12_user.h" #include "strat.h" #include "cmdline.h" #include "sensor.h" #include "actuator.h" #include "cs.h" +#include "strat_base.h" +#include "strat_db.h" #include "i2c_protocol.h" /* 0 means "programmed" @@ -81,9 +84,10 @@ struct genboard gen; struct mainboard mainboard; -struct cobboard cobboard; -struct ballboard ballboard; +volatile struct cobboard cobboard; +volatile struct ballboard ballboard; +#ifndef HOST_VERSION /***********************/ void bootloader(void) @@ -130,9 +134,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) @@ -143,11 +159,11 @@ static void main_timer_interrupt(void) if ((cpt & 0x3) == 0) scheduler_interrupt(); } +#endif int main(void) { - uint16_t seconds; - +#ifndef HOST_VERSION /* brake */ BRAKE_DDR(); BRAKE_OFF(); @@ -163,25 +179,24 @@ int main(void) LED2_OFF(); LED3_OFF(); LED4_OFF(); +#endif 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; /* UART */ uart_init(); + uart_register_rx_event(CMDLINE_UART, emergency); +#ifndef HOST_VERSION #if CMDLINE_UART == 3 fdevopen(uart3_dev_send, uart3_dev_recv); - uart_register_rx_event(3, emergency); #elif CMDLINE_UART == 1 fdevopen(uart1_dev_send, uart1_dev_recv); - uart_register_rx_event(1, emergency); -#else -# error not supported #endif - eeprom_write_byte(EEPROM_MAGIC_ADDRESS, EEPROM_MAGIC_MAINBOARD); + //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) { @@ -189,6 +204,7 @@ int main(void) printf_P(PSTR("Bad eeprom value\r\n")); while(1); } +#endif /* ! HOST_VERSION */ /* LOGS */ error_register_emerg(mylog); @@ -197,6 +213,7 @@ int main(void) error_register_notice(mylog); error_register_debug(mylog); +#ifndef HOST_VERSION /* SPI + ENCODERS */ encoders_spi_init(); /* this will also init spi hardware */ @@ -240,47 +257,69 @@ int main(void) PWM_NG_INIT16(&gen.servo4, 5, C, 10, PWM_NG_MODE_NORMAL, NULL, 0); support_balls_deploy(); /* init pwm for servos */ +#endif /* !HOST_VERSION */ /* SCHEDULER */ scheduler_init(); +#ifdef HOST_VERSION + hostsim_init(); + robotsim_init(); +#endif +#ifndef HOST_VERSION scheduler_add_periodical_event_priority(do_led_blink, NULL, 100000L / SCHEDULER_UNIT, LED_PRIO); +#endif /* !HOST_VERSION */ + /* all cs management */ microb_cs_init(); - /* sensors, will also init hardware adc */ - sensor_init(); - /* TIME */ time_init(TIME_PRIO); +#ifndef HOST_VERSION + /* sensors, will also init hardware adc */ + sensor_init(); + /* start i2c slave polling */ scheduler_add_periodical_event_priority(i2c_poll_slaves, NULL, 8000L / SCHEDULER_UNIT, I2C_POLL_PRIO); +#endif /* !HOST_VERSION */ /* strat */ gen.logs[0] = E_USER_STRAT; gen.log_level = 5; - strat_reset_infos(); + strat_db_init(); /* strat-related event */ scheduler_add_periodical_event_priority(strat_event, NULL, - 25000L / SCHEDULER_UNIT, + 10000L / SCHEDULER_UNIT, STRAT_PRIO); +#ifndef HOST_VERSION /* eeprom time monitor */ scheduler_add_periodical_event_priority(do_time_monitor, NULL, 1000000L / SCHEDULER_UNIT, EEPROM_TIME_PRIO); +#endif /* !HOST_VERSION */ sei(); printf_P(PSTR("\r\n")); printf_P(PSTR("Respect et robustesse.\r\n")); - seconds = eeprom_read_word(EEPROM_TIME_ADDRESS); - printf_P(PSTR("Running since %d mn %d\r\n"), seconds/60, seconds%60); +#ifndef HOST_VERSION + { + uint16_t seconds; + seconds = eeprom_read_word(EEPROM_TIME_ADDRESS); + printf_P(PSTR("Running since %d mn %d\r\n"), seconds/60, seconds%60); + } +#endif + +#ifdef HOST_VERSION + strat_reset_pos(400, COLOR_Y(400), COLOR_A(-90)); +#endif + cmdline_interact(); return 0;