From fa22e3f3204043504669f960ab3c33340f23b0d3 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Fri, 5 Apr 2013 23:42:16 +0200 Subject: digital/io-hub/src/apbirthday: add zigbit update mode from UART --- digital/io-hub/src/apbirthday/hardware.hh | 2 ++ digital/io-hub/src/apbirthday/hardware.host.cc | 6 ++++++ digital/io-hub/src/apbirthday/hardware.stm32.cc | 26 ++++++++++++++----------- digital/io-hub/src/apbirthday/robot.cc | 5 +++++ 4 files changed, 28 insertions(+), 11 deletions(-) (limited to 'digital') 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; -- cgit v1.2.3