summaryrefslogtreecommitdiffhomepage
path: root/digital
diff options
context:
space:
mode:
authorNicolas Schodet2013-04-05 23:42:16 +0200
committerNicolas Schodet2013-04-05 23:42:16 +0200
commitfa22e3f3204043504669f960ab3c33340f23b0d3 (patch)
tree8ec8043481bced7f12f16e53993ec82a98f3db2c /digital
parent143327bb7e9472691718572243c0f59bb0c02086 (diff)
digital/io-hub/src/apbirthday: add zigbit update mode from UART
Diffstat (limited to 'digital')
-rw-r--r--digital/io-hub/src/apbirthday/hardware.hh2
-rw-r--r--digital/io-hub/src/apbirthday/hardware.host.cc6
-rw-r--r--digital/io-hub/src/apbirthday/hardware.stm32.cc26
-rw-r--r--digital/io-hub/src/apbirthday/robot.cc5
4 files changed, 28 insertions, 11 deletions
diff --git a/digital/io-hub/src/apbirthday/hardware.hh b/digital/io-hub/src/apbirthday/hardware.hh
index 577d5c03..49ed9077 100644
--- a/digital/io-hub/src/apbirthday/hardware.hh
+++ b/digital/io-hub/src/apbirthday/hardware.hh
@@ -108,6 +108,8 @@ struct Hardware
void wait ();
// Handle zb programmation.
void zb_handle ();
+ // Handle zb programmation from specific stream.
+ void zb_handle (ucoo::Stream &s);
};
#endif // hardware_hh
diff --git a/digital/io-hub/src/apbirthday/hardware.host.cc b/digital/io-hub/src/apbirthday/hardware.host.cc
index 4a2afbb0..b9af78fe 100644
--- a/digital/io-hub/src/apbirthday/hardware.host.cc
+++ b/digital/io-hub/src/apbirthday/hardware.host.cc
@@ -92,3 +92,9 @@ Hardware::zb_handle ()
// No zb on host.
}
+void
+Hardware::zb_handle (ucoo::Stream &s)
+{
+ // No zb on host.
+}
+
diff --git a/digital/io-hub/src/apbirthday/hardware.stm32.cc b/digital/io-hub/src/apbirthday/hardware.stm32.cc
index abbfa477..48b69c2b 100644
--- a/digital/io-hub/src/apbirthday/hardware.stm32.cc
+++ b/digital/io-hub/src/apbirthday/hardware.stm32.cc
@@ -123,16 +123,20 @@ Hardware::zb_handle ()
{
// Switch to AVRISP?
if (zb_usb_avrisp.poll ())
- {
- // Uart pins are reused.
- zb_uart.disable ();
- gpio_mode_setup (GPIOD, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO8 | GPIO9);
- // Go to special AVRISP mode.
- zb_avrisp (zb_usb_avrisp);
- // Restore.
- gpio_mode_setup (GPIOD, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO8 | GPIO9);
- gpio_set_af (GPIOD, GPIO_AF7, GPIO8 | GPIO9);
- zb_uart.enable (38400, ucoo::Uart::EVEN, 1);
- }
+ zb_handle (zb_usb_avrisp);
+}
+
+void
+Hardware::zb_handle (ucoo::Stream &s)
+{
+ // Uart pins are reused.
+ zb_uart.disable ();
+ gpio_mode_setup (GPIOD, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO8 | GPIO9);
+ // Go to special AVRISP mode.
+ zb_avrisp (s);
+ // Restore.
+ gpio_mode_setup (GPIOD, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO8 | GPIO9);
+ gpio_set_af (GPIOD, GPIO_AF7, GPIO8 | GPIO9);
+ zb_uart.enable (38400, ucoo::Uart::EVEN, 1);
}
diff --git a/digital/io-hub/src/apbirthday/robot.cc b/digital/io-hub/src/apbirthday/robot.cc
index bc0c3552..4b822f1a 100644
--- a/digital/io-hub/src/apbirthday/robot.cc
+++ b/digital/io-hub/src/apbirthday/robot.cc
@@ -193,6 +193,11 @@ Robot::proto_handle (ucoo::Proto &proto, char cmd, const uint8_t *args, int size
// Reset.
ucoo::arch_reset ();
break;
+ case c ('Z', 0):
+ // Enter zigbit update from uart.
+ proto.send ('Z');
+ hardware.zb_handle (hardware.dev_uart);
+ return;
case c ('f', 0):
// Enter FSM debug mode, then step once.
fsm_debug_state_ = FSM_DEBUG_STEP;