From 78d2f3d295c56e976c13b187b7723670411e4101 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Wed, 24 Apr 2013 22:44:30 +0200 Subject: digital/io-hub/src/apbirthday, host/simu: add cherries cannon simulation --- digital/io-hub/src/apbirthday/Makefile | 2 +- digital/io-hub/src/apbirthday/robot.cc | 4 ++ digital/io-hub/src/apbirthday/robot.hh | 10 ++++- digital/io-hub/src/common-cc/potentiometer.cc | 51 ---------------------- digital/io-hub/src/common-cc/potentiometer.hh | 42 ------------------ digital/io-hub/src/common-cc/potentiometer.host.cc | 43 ++++++++++++++++++ digital/io-hub/src/common-cc/potentiometer.host.hh | 42 ++++++++++++++++++ .../io-hub/src/common-cc/potentiometer.stm32.cc | 51 ++++++++++++++++++++++ .../io-hub/src/common-cc/potentiometer.stm32.hh | 42 ++++++++++++++++++ digital/io-hub/tools/io_hub/mex.py | 22 +++++++++- 10 files changed, 213 insertions(+), 96 deletions(-) delete mode 100644 digital/io-hub/src/common-cc/potentiometer.cc delete mode 100644 digital/io-hub/src/common-cc/potentiometer.hh create mode 100644 digital/io-hub/src/common-cc/potentiometer.host.cc create mode 100644 digital/io-hub/src/common-cc/potentiometer.host.hh create mode 100644 digital/io-hub/src/common-cc/potentiometer.stm32.cc create mode 100644 digital/io-hub/src/common-cc/potentiometer.stm32.hh (limited to 'digital/io-hub') diff --git a/digital/io-hub/src/apbirthday/Makefile b/digital/io-hub/src/apbirthday/Makefile index 19296e0f..c07574bd 100644 --- a/digital/io-hub/src/apbirthday/Makefile +++ b/digital/io-hub/src/apbirthday/Makefile @@ -5,7 +5,7 @@ PROGS = apbirthday apbirthday_SOURCES = main.cc robot.cc hardware.host.cc hardware.stm32.cc \ simu_report.host.cc zb_avrisp.stm32.cc \ i2c_queue.cc asserv.cc mimot.cc beacon.cc \ - potentiometer.cc \ + potentiometer.host.cc potentiometer.stm32.cc \ pressure.cc chrono.host.cc chrono.stm32.cc debounce.cc \ radar.cc radar_2013.cc obstacles.cc path.cc strat.cc \ outputs.cc \ diff --git a/digital/io-hub/src/apbirthday/robot.cc b/digital/io-hub/src/apbirthday/robot.cc index 7137ea3e..e5910d74 100644 --- a/digital/io-hub/src/apbirthday/robot.cc +++ b/digital/io-hub/src/apbirthday/robot.cc @@ -35,7 +35,11 @@ Robot::Robot () : main_i2c_queue_ (hardware.main_i2c), zb_i2c_queue_ (hardware.zb_i2c), asserv (main_i2c_queue_, BOT_SCALE), mimot (main_i2c_queue_), +#ifdef TARGET_host + pot_regul (hardware.host), +#else pot_regul (main_i2c_queue_, 0x7), +#endif beacon (zb_i2c_queue_), dev_proto (*this, hardware.dev_uart), zb_proto (*this, hardware.zb_uart), diff --git a/digital/io-hub/src/apbirthday/robot.hh b/digital/io-hub/src/apbirthday/robot.hh index 556e29eb..3d9a62ce 100644 --- a/digital/io-hub/src/apbirthday/robot.hh +++ b/digital/io-hub/src/apbirthday/robot.hh @@ -26,7 +26,11 @@ #include "hardware.hh" #include "asserv.hh" #include "beacon.hh" -#include "potentiometer.hh" +#ifdef TARGET_host +# include "potentiometer.host.hh" +#else +# include "potentiometer.stm32.hh" +#endif #include "fsm_queue.hh" #include "chrono.hh" #include "pressure.hh" @@ -72,7 +76,11 @@ class Robot : public ucoo::Proto::Handler /// Public access to mimot class. Mimot mimot; /// Public access to potentiometer class. +#ifdef TARGET_host + PotentiometerHost pot_regul; +#else Potentiometer pot_regul; +#endif /// Public access to beacon class. Beacon beacon; private: diff --git a/digital/io-hub/src/common-cc/potentiometer.cc b/digital/io-hub/src/common-cc/potentiometer.cc deleted file mode 100644 index a5a519bb..00000000 --- a/digital/io-hub/src/common-cc/potentiometer.cc +++ /dev/null @@ -1,51 +0,0 @@ -// io-hub - Modular Input/Output. {{{ -// -// Copyright (C) 2013 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 "potentiometer.hh" - -Potentiometer::Potentiometer (I2cQueue &queue, int a2a1a0) - : I2cQueue::Slave (queue, 0x50 | (a2a1a0 << 1), 0) -{ -} - -void -Potentiometer::recv_status (const uint8_t *status) -{ -} - -void -Potentiometer::send_command (int mem_addr, int data) -{ - uint8_t buf[] = { - (uint8_t) ((mem_addr << 4) | ((data >> 8) & 1)), - (uint8_t) (data & 0xff), - }; - send (buf, sizeof (buf), I2cQueue::RAW); -} - -void -Potentiometer::set_wiper (int index, int data, bool eeprom) -{ - send_command (index + (eeprom ? 2 : 0), data); -} - diff --git a/digital/io-hub/src/common-cc/potentiometer.hh b/digital/io-hub/src/common-cc/potentiometer.hh deleted file mode 100644 index a7204af8..00000000 --- a/digital/io-hub/src/common-cc/potentiometer.hh +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef potentiometer_hh -#define potentiometer_hh -// io-hub - Modular Input/Output. {{{ -// -// Copyright (C) 2013 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 "i2c_queue.hh" - -/// I2C potentiometer, MCP4661. -class Potentiometer : public I2cQueue::Slave -{ - public: - /// Constructor with address variable part. - Potentiometer (I2cQueue &queue, int a2a1a0); - /// See I2cQueue::Slave::recv_status. - void recv_status (const uint8_t *status); - /// Send a low level command. - void send_command (int mem_addr, int data); - /// Set wiper to specified level. - void set_wiper (int index, int data, bool eeprom = false); -}; - -#endif // potentiometer_hh diff --git a/digital/io-hub/src/common-cc/potentiometer.host.cc b/digital/io-hub/src/common-cc/potentiometer.host.cc new file mode 100644 index 00000000..50670e17 --- /dev/null +++ b/digital/io-hub/src/common-cc/potentiometer.host.cc @@ -0,0 +1,43 @@ +// io-hub - Modular Input/Output. {{{ +// +// Copyright (C) 2013 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 "potentiometer.host.hh" + +PotentiometerHost::PotentiometerHost (ucoo::Host &host) + : node_ (host.get_node ()) +{ + std::string instance (host.get_instance ()); + mtype_ = node_.reserve (instance + ":potentiometer"); +} + +void +PotentiometerHost::set_wiper (int index, int data, bool eeprom) +{ + if (!eeprom) + { + ucoo::mex::Msg msg (mtype_); + msg.push ("BH") << index << data; + node_.send (msg); + } +} + diff --git a/digital/io-hub/src/common-cc/potentiometer.host.hh b/digital/io-hub/src/common-cc/potentiometer.host.hh new file mode 100644 index 00000000..bc6969ff --- /dev/null +++ b/digital/io-hub/src/common-cc/potentiometer.host.hh @@ -0,0 +1,42 @@ +#ifndef potentiometer_host_hh +#define potentiometer_host_hh +// io-hub - Modular Input/Output. {{{ +// +// Copyright (C) 2013 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 "ucoolib/arch/host/host.hh" +#include "defs.hh" + +/// Potentiometer, Host stub. +class PotentiometerHost +{ + public: + /// Constructor. + PotentiometerHost (ucoo::Host &host); + /// Set wiper to specified level. + void set_wiper (int index, int data, bool eeprom = false); + private: + ucoo::mex::Node &node_; + ucoo::mex::mtype_t mtype_; +}; + +#endif // potentiometer_host_hh diff --git a/digital/io-hub/src/common-cc/potentiometer.stm32.cc b/digital/io-hub/src/common-cc/potentiometer.stm32.cc new file mode 100644 index 00000000..637e2511 --- /dev/null +++ b/digital/io-hub/src/common-cc/potentiometer.stm32.cc @@ -0,0 +1,51 @@ +// io-hub - Modular Input/Output. {{{ +// +// Copyright (C) 2013 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 "potentiometer.stm32.hh" + +Potentiometer::Potentiometer (I2cQueue &queue, int a2a1a0) + : I2cQueue::Slave (queue, 0x50 | (a2a1a0 << 1), 0) +{ +} + +void +Potentiometer::recv_status (const uint8_t *status) +{ +} + +void +Potentiometer::send_command (int mem_addr, int data) +{ + uint8_t buf[] = { + (uint8_t) ((mem_addr << 4) | ((data >> 8) & 1)), + (uint8_t) (data & 0xff), + }; + send (buf, sizeof (buf), I2cQueue::RAW); +} + +void +Potentiometer::set_wiper (int index, int data, bool eeprom) +{ + send_command (index + (eeprom ? 2 : 0), data); +} + diff --git a/digital/io-hub/src/common-cc/potentiometer.stm32.hh b/digital/io-hub/src/common-cc/potentiometer.stm32.hh new file mode 100644 index 00000000..8683ae27 --- /dev/null +++ b/digital/io-hub/src/common-cc/potentiometer.stm32.hh @@ -0,0 +1,42 @@ +#ifndef potentiometer_stm32_hh +#define potentiometer_stm32_hh +// io-hub - Modular Input/Output. {{{ +// +// Copyright (C) 2013 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 "i2c_queue.hh" + +/// I2C potentiometer, MCP4661. +class Potentiometer : public I2cQueue::Slave +{ + public: + /// Constructor with address variable part. + Potentiometer (I2cQueue &queue, int a2a1a0); + /// See I2cQueue::Slave::recv_status. + void recv_status (const uint8_t *status); + /// Send a low level command. + void send_command (int mem_addr, int data); + /// Set wiper to specified level. + void set_wiper (int index, int data, bool eeprom = false); +}; + +#endif // potentiometer_stm32_hh diff --git a/digital/io-hub/tools/io_hub/mex.py b/digital/io-hub/tools/io_hub/mex.py index ff3bea61..2a27a4ce 100644 --- a/digital/io-hub/tools/io_hub/mex.py +++ b/digital/io-hub/tools/io_hub/mex.py @@ -187,6 +187,24 @@ class Mex: m.push ('b', c) self.node.send (m) + class Potentiometer (Observable): + """I2C Potentiometer. + + - wiper: list of wiper values (0 ... 1). + + """ + + def __init__ (self, node, instance): + Observable.__init__ (self) + self.wiper = [ 0, 0 ] + node.register (instance + ':potentiometer', self.__handle) + + def __handle (self, msg): + index, value = msg.pop ('BH') + value = value / 256. + self.wiper[index] = value + self.notify () + class Path (Observable): """Path finding algorithm report. @@ -256,7 +274,7 @@ class Mex: def __init__ (self, node, instance = 'io-hub0', pwm_nb = 0, contact_nb = 0, output_nb = 0, gpios = False, - adc_channels = False, codebar = False): + adc_channels = False, codebar = False, potentiometer = False): self.adc = tuple (self.ADC (node, instance, i) for i in range (0, ADC_NB)) if pwm_nb: self.pwm = tuple (self.PWM () for i in range (0, pwm_nb)) @@ -278,6 +296,8 @@ class Mex: self.__codebar_pack = self.Codebar.Pack (node, instance) self.codebar = tuple (self.Codebar (self.__codebar_pack, i) for i in (0, 1)) + if potentiometer: + self.potentiometer = self.Potentiometer (node, instance) self.path = self.Path (node, instance) self.pos_report = self.PosReport (node, instance) self.debug_draw = self.DebugDraw (node, instance) -- cgit v1.2.3