summaryrefslogtreecommitdiffhomepage
path: root/digital/io-hub/src/apbirthday
diff options
context:
space:
mode:
authorNicolas Schodet2013-05-03 22:00:33 +0200
committerNicolas Schodet2013-05-03 22:46:11 +0200
commitd2c683593a988d467b94fd94fdb209c4e627c9de (patch)
treed34dbeacca32e6115983710b964d7f266c9f41ef /digital/io-hub/src/apbirthday
parent750a6d3966925482bd17f6ba6d77e28bba636601 (diff)
digital/io-hub/src/apbirthday: add LCD access on secondary I2C bus
Diffstat (limited to 'digital/io-hub/src/apbirthday')
-rw-r--r--digital/io-hub/src/apbirthday/Makefile2
-rw-r--r--digital/io-hub/src/apbirthday/hardware.hh4
-rw-r--r--digital/io-hub/src/apbirthday/hardware.host.cc2
-rw-r--r--digital/io-hub/src/apbirthday/hardware.stm32.cc7
-rw-r--r--digital/io-hub/src/apbirthday/robot.cc11
-rw-r--r--digital/io-hub/src/apbirthday/robot.hh5
6 files changed, 24 insertions, 7 deletions
diff --git a/digital/io-hub/src/apbirthday/Makefile b/digital/io-hub/src/apbirthday/Makefile
index 75c38c98..105d230a 100644
--- a/digital/io-hub/src/apbirthday/Makefile
+++ b/digital/io-hub/src/apbirthday/Makefile
@@ -4,7 +4,7 @@ TARGETS = host stm32f4
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 \
+ i2c_queue.cc asserv.cc mimot.cc lcd.cc beacon.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 \
diff --git a/digital/io-hub/src/apbirthday/hardware.hh b/digital/io-hub/src/apbirthday/hardware.hh
index 911ea1ca..2d016587 100644
--- a/digital/io-hub/src/apbirthday/hardware.hh
+++ b/digital/io-hub/src/apbirthday/hardware.hh
@@ -58,10 +58,10 @@ struct Hardware
#ifdef TARGET_stm32
ucoo::UsbStreamControl usb_control;
ucoo::UsbStream usb, zb_usb_avrisp;
- ucoo::I2cHard main_i2c, zb_i2c;
+ ucoo::I2cHard main_i2c, secondary_i2c, zb_i2c;
#else
ucoo::HostStream usb;
- ucoo::I2cHost main_i2c, zb_i2c;
+ ucoo::I2cHost main_i2c, secondary_i2c, zb_i2c;
#endif
ucoo::Gpio
raw_jack,
diff --git a/digital/io-hub/src/apbirthday/hardware.host.cc b/digital/io-hub/src/apbirthday/hardware.host.cc
index 7ebee185..80d55eae 100644
--- a/digital/io-hub/src/apbirthday/hardware.host.cc
+++ b/digital/io-hub/src/apbirthday/hardware.host.cc
@@ -31,7 +31,7 @@ HardwareHost::HardwareHost ()
Hardware::Hardware ()
: dev_uart (), zb_uart ("zb_uart"), usb ("usb"),
- main_i2c (host, 0), zb_i2c (host, 1),
+ main_i2c (host, 0), secondary_i2c (host, 1), zb_i2c (host, 2),
raw_jack (host, "raw_jack"),
ihm_color (host, "ihm_color"),
ihm_strat (host, "ihm_strat"),
diff --git a/digital/io-hub/src/apbirthday/hardware.stm32.cc b/digital/io-hub/src/apbirthday/hardware.stm32.cc
index 9c7bb089..32ffcffd 100644
--- a/digital/io-hub/src/apbirthday/hardware.stm32.cc
+++ b/digital/io-hub/src/apbirthday/hardware.stm32.cc
@@ -35,7 +35,7 @@ Hardware::Hardware ()
: dev_uart (4), zb_uart (2),
usb_control ("APBTeam", "APBirthday"), usb (usb_control, 0),
zb_usb_avrisp (usb_control, 1),
- main_i2c (2), zb_i2c (1),
+ main_i2c (2), secondary_i2c (0), zb_i2c (1),
raw_jack (GPIOD, 12),
ihm_color (GPIOD, 14),
ihm_strat (GPIOD, 13),
@@ -94,6 +94,11 @@ Hardware::Hardware ()
gpio_set_af (GPIOA, GPIO_AF4, GPIO8);
gpio_set_af (GPIOC, GPIO_AF4, GPIO9);
main_i2c.enable ();
+ // secondary_i2c
+ gpio_mode_setup (GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO8 | GPIO9);
+ gpio_set_output_options (GPIOB, GPIO_OTYPE_OD, GPIO_OSPEED_2MHZ, GPIO8 | GPIO9);
+ gpio_set_af (GPIOB, GPIO_AF4, GPIO8 | GPIO9);
+ secondary_i2c.enable ();
// zb_i2c
gpio_mode_setup (GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO10 | GPIO11);
gpio_set_output_options (GPIOB, GPIO_OTYPE_OD, GPIO_OSPEED_2MHZ,
diff --git a/digital/io-hub/src/apbirthday/robot.cc b/digital/io-hub/src/apbirthday/robot.cc
index 560c11c3..6df7f7ee 100644
--- a/digital/io-hub/src/apbirthday/robot.cc
+++ b/digital/io-hub/src/apbirthday/robot.cc
@@ -36,7 +36,9 @@
Robot *robot;
Robot::Robot ()
- : main_i2c_queue_ (hardware.main_i2c), zb_i2c_queue_ (hardware.zb_i2c),
+ : main_i2c_queue_ (hardware.main_i2c),
+ secondary_i2c_queue_ (hardware.secondary_i2c),
+ zb_i2c_queue_ (hardware.zb_i2c),
asserv (main_i2c_queue_, BOT_SCALE),
mimot (main_i2c_queue_),
#ifdef TARGET_host
@@ -44,6 +46,7 @@ Robot::Robot ()
#else
pot_regul (main_i2c_queue_, 0x7),
#endif
+ lcd (secondary_i2c_queue_),
beacon (zb_i2c_queue_),
dev_proto (*this, hardware.dev_uart),
zb_proto (*this, hardware.zb_uart),
@@ -136,6 +139,7 @@ Robot::main_loop ()
top_update ();
// Handle communications.
bool sync = main_i2c_queue_.sync ();
+ secondary_i2c_queue_.sync ();
zb_i2c_queue_.sync ();
Position robot_pos = asserv.get_position ();
beacon.send_position (robot_pos.v);
@@ -298,6 +302,11 @@ Robot::proto_handle (ucoo::Proto &proto, char cmd, const uint8_t *args, int size
pot_regul.set_wiper (args[0], ucoo::bytes_pack (args[1], args[2]),
args[3] ? true : false);
break;
+ case c ('l', 3):
+ // Test LCD interface, set team color.
+ // - 3B: R, G, B.
+ lcd.team_color (args[0], args[1], args[2]);
+ break;
case c ('A', 1):
// Asserv position stats.
// 1B: stat interval.
diff --git a/digital/io-hub/src/apbirthday/robot.hh b/digital/io-hub/src/apbirthday/robot.hh
index 549415f3..3483803e 100644
--- a/digital/io-hub/src/apbirthday/robot.hh
+++ b/digital/io-hub/src/apbirthday/robot.hh
@@ -25,6 +25,7 @@
// }}}
#include "hardware.hh"
#include "asserv.hh"
+#include "lcd.hh"
#include "beacon.hh"
#ifdef TARGET_host
# include "potentiometer.host.hh"
@@ -73,7 +74,7 @@ class Robot : public ucoo::Proto::Handler
Hardware hardware;
private:
/// I2C queues.
- I2cQueue main_i2c_queue_, zb_i2c_queue_;
+ I2cQueue main_i2c_queue_, secondary_i2c_queue_, zb_i2c_queue_;
public:
/// Public access to asserv class.
Asserv asserv;
@@ -85,6 +86,8 @@ class Robot : public ucoo::Proto::Handler
#else
Potentiometer pot_regul;
#endif
+ /// Public access to LCD class.
+ LCD lcd;
/// Public access to beacon class.
Beacon beacon;
private: