From ff7505c0a9d6b5332db32ae9b23326bc466f0b01 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Thu, 5 May 2011 23:11:38 +0200 Subject: digital/io-hub: add base robospierre io-hub program --- digital/io-hub/src/robospierre/Makefile | 24 +++++ digital/io-hub/src/robospierre/README | 24 +++++ digital/io-hub/src/robospierre/avrconfig.h | 107 ++++++++++++++++++++++ digital/io-hub/src/robospierre/bot.h | 37 ++++++++ digital/io-hub/src/robospierre/main.c | 142 +++++++++++++++++++++++++++++ digital/io-hub/src/robospierre/simu.host.c | 61 +++++++++++++ digital/io-hub/src/robospierre/simu.host.h | 34 +++++++ 7 files changed, 429 insertions(+) create mode 100644 digital/io-hub/src/robospierre/Makefile create mode 100644 digital/io-hub/src/robospierre/README create mode 100644 digital/io-hub/src/robospierre/avrconfig.h create mode 100644 digital/io-hub/src/robospierre/bot.h create mode 100644 digital/io-hub/src/robospierre/main.c create mode 100644 digital/io-hub/src/robospierre/simu.host.c create mode 100644 digital/io-hub/src/robospierre/simu.host.h (limited to 'digital/io-hub') diff --git a/digital/io-hub/src/robospierre/Makefile b/digital/io-hub/src/robospierre/Makefile new file mode 100644 index 00000000..768fe9a4 --- /dev/null +++ b/digital/io-hub/src/robospierre/Makefile @@ -0,0 +1,24 @@ +# Base directory of AVR. +BASE = ../../../avr +# Name of the program to build. +PROGS = io_hub +# Sources to compile. +io_hub_SOURCES = main.c \ + twi_master.c asserv.c mimot.c \ + chrono.c timer.avr.c simu.host.c +# Modules needed for IO. +MODULES = proto uart twi utils \ + math/fixed math/geometry +AI_MODULES = twi_master common utils +# Configuration file. +CONFIGFILE = avrconfig.h +AVR_MCU = at90usb1287 +# Optimize for speed. +OPTIMIZE = -O2 +HOST_LIBS = -lm + +vpath %.c $(AI_MODULES:%=../../../ai/src/%) +vpath %.h $(AI_MODULES:%=../../../ai/src/%) +INCLUDES += -I. $(AI_MODULES:%=-I../../../ai/src/%) + +include $(BASE)/make/Makefile.gen diff --git a/digital/io-hub/src/robospierre/README b/digital/io-hub/src/robospierre/README new file mode 100644 index 00000000..eaa65ad4 --- /dev/null +++ b/digital/io-hub/src/robospierre/README @@ -0,0 +1,24 @@ +robospierre - Eurobot 2011 AI. + +AI & IO for the APBTeam Robot Robospierre. + + +Copyright (C) 2011 Nicolas Schodet + +APBTeam: + Web: http://apbteam.org/ + Email: team AT apbteam DOT org + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. diff --git a/digital/io-hub/src/robospierre/avrconfig.h b/digital/io-hub/src/robospierre/avrconfig.h new file mode 100644 index 00000000..11635646 --- /dev/null +++ b/digital/io-hub/src/robospierre/avrconfig.h @@ -0,0 +1,107 @@ +#ifndef avrconfig_h +#define avrconfig_h +/* avrconfig.h */ +/* io - Input & Output with Artificial Intelligence (ai) support on AVR. {{{ + * + * Copyright (C) 2008 Dufour Jérémy + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ + +/* global */ +/** AVR Frequency : 1000000, 1843200, 2000000, 3686400, 4000000, 7372800, + * 8000000, 11059200, 14745600, 16000000, 18432000, 20000000. */ +#define AC_FREQ 16000000 + +/* uart - UART module. */ +/** Select hardware uart for primary uart: 0, 1 or -1 to disable. */ +#define AC_UART0_PORT 1 +/** Baudrate: 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 76800, + * 115200, 230400, 250000, 500000, 1000000. */ +#define AC_UART0_BAUDRATE 38400 +/** Send mode: + * - POLLING: no interrupts. + * - RING: interrupts, ring buffer. */ +#define AC_UART0_SEND_MODE RING +/** Recv mode, same as send mode. */ +#define AC_UART0_RECV_MODE RING +/** Character size: 5, 6, 7, 8, 9 (only 8 implemented). */ +#define AC_UART0_CHAR_SIZE 8 +/** Parity : ODD, EVEN, NONE. */ +#define AC_UART0_PARITY EVEN +/** Stop bits : 1, 2. */ +#define AC_UART0_STOP_BITS 1 +/** Send buffer size, should be power of 2 for RING mode. */ +#define AC_UART0_SEND_BUFFER_SIZE 32 +/** Recv buffer size, should be power of 2 for RING mode. */ +#define AC_UART0_RECV_BUFFER_SIZE 32 +/** If the send buffer is full when putc: + * - DROP: drop the new byte. + * - WAIT: wait until there is room in the send buffer. */ +#define AC_UART0_SEND_BUFFER_FULL WAIT +/** In HOST compilation: + * - STDIO: use stdin/out. + * - PTS: use pseudo terminal. */ +#define AC_UART0_HOST_DRIVER STDIO +/** Same thing for secondary port. */ +#define AC_UART1_PORT -1 +#define AC_UART1_BAUDRATE 115200 +#define AC_UART1_SEND_MODE RING +#define AC_UART1_RECV_MODE RING +#define AC_UART1_CHAR_SIZE 8 +#define AC_UART1_PARITY EVEN +#define AC_UART1_STOP_BITS 1 +#define AC_UART1_SEND_BUFFER_SIZE 32 +#define AC_UART1_RECV_BUFFER_SIZE 32 +#define AC_UART1_SEND_BUFFER_FULL WAIT +#define AC_UART1_HOST_DRIVER PTS + +/* proto - Protocol module. */ +/** Maximum argument size. */ +#define AC_PROTO_ARGS_MAX_SIZE 12 +/** Callback function name. */ +#define AC_PROTO_CALLBACK proto_callback +/** Putchar function name. */ +#define AC_PROTO_PUTC uart0_putc +/** Support for quote parameter. */ +#define AC_PROTO_QUOTE 1 + +/* twi - TWI module. */ +/** Driver to implement TWI: HARD, SOFT, or USI. */ +#define AC_TWI_DRIVER HARD +/** Do not use interrupts. */ +#define AC_TWI_NO_INTERRUPT 0 +/** TWI frequency, should really be 100 kHz. */ +#define AC_TWI_FREQ 100000 +/** Enable slave part. */ +#define AC_TWI_SLAVE_ENABLE 0 +/** Enable master part. */ +#define AC_TWI_MASTER_ENABLE 1 +/** Master transfer completion callback, optionally defined by the user, called + * at end of master transfer. */ +#undef AC_TWI_MASTER_DONE +/** Use internal pull up. */ +#define AC_TWI_PULL_UP 0 + +/* io-hub - io/ai board. */ +/** TWI address of the io board. */ +#define AC_IO_TWI_ADDRESS 10 + +#endif /* avrconfig_h */ diff --git a/digital/io-hub/src/robospierre/bot.h b/digital/io-hub/src/robospierre/bot.h new file mode 100644 index 00000000..fa65ca07 --- /dev/null +++ b/digital/io-hub/src/robospierre/bot.h @@ -0,0 +1,37 @@ +#ifndef bot_h +#define bot_h +/* bot.h */ +/* robospierre - Eurobot 2011 AI. {{{ + * + * Copyright (C) 2011 Nicolas Schodet + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ + +/** Robot specific defines. */ + +/** Scaling factor, millimeter per step. */ +#ifdef HOST +# define BOT_SCALE 0.0395840674352314 +#else +# define BOT_SCALE 0.0415178942124 +#endif + +#endif /* bot_h */ diff --git a/digital/io-hub/src/robospierre/main.c b/digital/io-hub/src/robospierre/main.c new file mode 100644 index 00000000..5a987240 --- /dev/null +++ b/digital/io-hub/src/robospierre/main.c @@ -0,0 +1,142 @@ +/* main.c */ +/* robospierre - Eurobot 2011 AI. {{{ + * + * Copyright (C) 2011 Nicolas Schodet + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ +#include "common.h" + +#include "modules/utils/utils.h" +#include "modules/uart/uart.h" +#include "modules/proto/proto.h" + +#include "timer.h" +#include "chrono.h" +#include "simu.host.h" + +#include "asserv.h" +#include "mimot.h" +#include "twi_master.h" + +#include "io.h" + +/** Our color. */ +enum team_color_e team_color; + +/** Asserv stats counters. */ +static uint8_t main_stats_asserv_, main_stats_asserv_cpt_; + +/** Main initialisation. */ +static void +main_init (void) +{ + /* Serial port */ + uart0_init (); + /* Enable interrupts */ + sei (); + /* Main timer */ + timer_init (); + /* TWI communications */ + asserv_init (); + mimot_init (); + twi_master_init (); + /* Initialization done. */ + proto_send0 ('z'); +} + +/** Main events management. */ +void +main_event_to_fsm (void) +{ +} + +/** Main (and infinite) loop. */ +static void +main_loop (void) +{ + while (1) + { + /* Wait until next cycle. */ + timer_wait (); + /* Update chrono. */ + chrono_update (); + /* Is match over? */ + if (chrono_is_match_over ()) + { + /* End it and block here indefinitely. */ + chrono_end_match (42); + return; + } + /* Handle commands from UART. */ + while (uart0_poll ()) + proto_accept (uart0_getc ()); + /* Only manage events if slaves are synchronised. */ + if (twi_master_sync ()) + main_event_to_fsm (); + /* Send stats if requested. */ + if (main_stats_asserv_ && !--main_stats_asserv_cpt_) + { + /* Get current position */ + position_t cur_pos; + asserv_get_position (&cur_pos); + /* Send stats */ + proto_send3w ('A', cur_pos.v.x, cur_pos.v.y, cur_pos.a); + /* Reset stats counter */ + main_stats_asserv_cpt_ = main_stats_asserv_; + } + } +} + +/** Handle received commands. */ +void +proto_callback (uint8_t cmd, uint8_t size, uint8_t *args) +{ +#define c(cmd, size) (cmd << 8 | size) + switch (c (cmd, size)) + { + case c ('z', 0): + /* Reset */ + utils_reset (); + break; + /* Stats commands. + * - b: interval between stats. */ + case c ('A', 1): + /* Position stats. */ + main_stats_asserv_ = main_stats_asserv_cpt_ = args[0]; + break; + default: + /* Unknown commands */ + proto_send0 ('?'); + return; + } + /* When no error, acknowledge commands */ + proto_send (cmd, size, args); +#undef c +} + +int +main (int argc, char **argv) +{ + avr_init (argc, argv); + main_init (); + main_loop (); + return 0; +} diff --git a/digital/io-hub/src/robospierre/simu.host.c b/digital/io-hub/src/robospierre/simu.host.c new file mode 100644 index 00000000..76e48edd --- /dev/null +++ b/digital/io-hub/src/robospierre/simu.host.c @@ -0,0 +1,61 @@ +/* simu.host.c - Host simulation. */ +/* robospierre - Eurobot 2011 AI. {{{ + * + * Copyright (C) 2011 Nicolas Schodet + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ +#include "common.h" +#include "simu.host.h" + +#include "modules/utils/utils.h" +#include "modules/host/host.h" +#include "modules/host/mex.h" +#include "io.h" + +/** Initialise simulation. */ +void +simu_init (void) +{ + const char *mex_instance; + mex_node_connect (); + mex_instance = host_get_instance ("io-hub0", 0); +} + +/** Make a simulation step. */ +void +simu_step (void) +{ +} + +void +timer_init (void) +{ + simu_init (); +} + +uint8_t +timer_wait (void) +{ + mex_node_wait_date (mex_node_date () + 4); + simu_step (); + return 0; +} + diff --git a/digital/io-hub/src/robospierre/simu.host.h b/digital/io-hub/src/robospierre/simu.host.h new file mode 100644 index 00000000..76326a31 --- /dev/null +++ b/digital/io-hub/src/robospierre/simu.host.h @@ -0,0 +1,34 @@ +#ifndef simu_host_h +#define simu_host_h +/* simu.host.h - Host simulation. */ +/* robospierre - Eurobot 2011 AI. {{{ + * + * Copyright (C) 2011 Nicolas Schodet + * + * APBTeam: + * Web: http://apbteam.org/ + * Email: team AT apbteam DOT org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * }}} */ + +#ifdef HOST + +#else /* !defined (HOST) */ + +#endif /* !defined (HOST) */ + +#endif /* simu_host_h */ -- cgit v1.2.3