From a90882ab6912fc85436b9a5b5ae51d3b2007ed3e Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Wed, 1 May 2013 12:51:10 +0200 Subject: digital/io-hub/src/apbirthday: compute code CRC --- digital/io-hub/src/apbirthday/hardware.hh | 2 ++ digital/io-hub/src/apbirthday/hardware.host.cc | 7 +++++++ digital/io-hub/src/apbirthday/hardware.stm32.cc | 12 ++++++++++++ digital/io-hub/src/apbirthday/robot.cc | 4 ++++ 4 files changed, 25 insertions(+) (limited to 'digital') diff --git a/digital/io-hub/src/apbirthday/hardware.hh b/digital/io-hub/src/apbirthday/hardware.hh index 818ca769..911ea1ca 100644 --- a/digital/io-hub/src/apbirthday/hardware.hh +++ b/digital/io-hub/src/apbirthday/hardware.hh @@ -113,6 +113,8 @@ struct Hardware void zb_handle (ucoo::Stream &s); // Go to bootloader. void bootloader (); + // Compute code CRC. + uint32_t crc (); }; #endif // hardware_hh diff --git a/digital/io-hub/src/apbirthday/hardware.host.cc b/digital/io-hub/src/apbirthday/hardware.host.cc index 9e074f7c..7ebee185 100644 --- a/digital/io-hub/src/apbirthday/hardware.host.cc +++ b/digital/io-hub/src/apbirthday/hardware.host.cc @@ -106,3 +106,10 @@ Hardware::bootloader () // No bootloader on host. } +uint32_t +Hardware::crc () +{ + // No CRC on host. + return 0; +} + diff --git a/digital/io-hub/src/apbirthday/hardware.stm32.cc b/digital/io-hub/src/apbirthday/hardware.stm32.cc index e60ebf78..9c7bb089 100644 --- a/digital/io-hub/src/apbirthday/hardware.stm32.cc +++ b/digital/io-hub/src/apbirthday/hardware.stm32.cc @@ -27,6 +27,7 @@ #include #include #include "ucoolib/hal/gpio/gpio.hh" +#include "ucoolib/utils/crc.hh" #include "zb_avrisp.stm32.hh" @@ -173,3 +174,14 @@ Hardware::bootloader () (*(void (**) ()) (bootloader_address + 4)) (); } +extern unsigned _data_loadaddr, _data, _edata; + +uint32_t +Hardware::crc () +{ + int binsize = ((int) &_data_loadaddr & 0x1fffff) + + (int) &_edata - (int) &_data; + const uint8_t *binaddr = (const uint8_t *) 0x08000000; + return ucoo::crc32_compute (binaddr, binsize); +} + diff --git a/digital/io-hub/src/apbirthday/robot.cc b/digital/io-hub/src/apbirthday/robot.cc index 76545a9a..598881a0 100644 --- a/digital/io-hub/src/apbirthday/robot.cc +++ b/digital/io-hub/src/apbirthday/robot.cc @@ -225,6 +225,10 @@ Robot::proto_handle (ucoo::Proto &proto, char cmd, const uint8_t *args, int size // Reset to bootloader. hardware.bootloader (); break; + case c ('c', 0): + // Compute code CRC. + proto.send ('c', "L", hardware.crc ()); + break; case c ('Z', 0): // Enter zigbit update from uart. proto.send ('Z'); -- cgit v1.2.3