From 258c7af4690d8729709be7692951f132abd9f86f Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Thu, 14 Nov 2013 19:38:59 +0100 Subject: [PATCH] Bridge library is now platform independent. --- libraries/Bridge/library.properties | 2 +- libraries/Bridge/src/Bridge.cpp | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/libraries/Bridge/library.properties b/libraries/Bridge/library.properties index 0a3a28f61..77335ee37 100644 --- a/libraries/Bridge/library.properties +++ b/libraries/Bridge/library.properties @@ -4,7 +4,7 @@ email=info@arduino.cc sentence=The library to use the Arduino YUN. The Bridge library create a link between the 32U4 and the AR9331 enabling to control most of the linux features from the sketch. paragraph=The Bridge library feature: access to the shared storage, run and manage linux processes, open a remote console, access to the linux file system, including the SD card, enstablish http clients or servers. url=http://arduino.cc/en/Reference/YunBridgeLibrary -architectures=avr +architectures=* version=1.0 dependencies=none core-dependencies=arduino (>1.5.4) diff --git a/libraries/Bridge/src/Bridge.cpp b/libraries/Bridge/src/Bridge.cpp index bbd4d3118..7e4ee02c8 100644 --- a/libraries/Bridge/src/Bridge.cpp +++ b/libraries/Bridge/src/Bridge.cpp @@ -17,7 +17,6 @@ */ #include "Bridge.h" -#include BridgeClass::BridgeClass(Stream &_stream) : index(0), stream(_stream), started(false), max_retries(0) { @@ -94,11 +93,23 @@ unsigned int BridgeClass::get(const char *key, uint8_t *value, unsigned int maxl return l; } -void BridgeClass::crcUpdate(uint8_t c) { +#if defined(ARDUINO_ARCH_AVR) +// AVR use an optimized implementation of CRC +#include +#else +// Generic implementation for non-AVR architectures +uint16_t _crc_ccitt_update(uint16_t crc, uint8_t data) +{ + data ^= crc & 0xff; + data ^= data << 4; + return ((((uint16_t)data << 8) | ((crc >> 8) & 0xff)) ^ + (uint8_t)(data >> 4) ^ + ((uint16_t)data << 3)); +} +#endif +void BridgeClass::crcUpdate(uint8_t c) { CRC = _crc_ccitt_update(CRC, c); - //CRC = CRC ^ c; - //CRC = (CRC >> 8) + (CRC << 8); } void BridgeClass::crcReset() {