diff --git a/lib/AmsDecoder/include/crc.h b/lib/AmsDecoder/include/crc.h index b054cd2c..2a29070a 100644 --- a/lib/AmsDecoder/include/crc.h +++ b/lib/AmsDecoder/include/crc.h @@ -12,5 +12,6 @@ uint16_t crc16(const uint8_t* p, int len); uint16_t crc16_x25(const uint8_t* p, int len); +uint16_t crc16_ccit(const uint8_t* p, int len); #endif diff --git a/lib/AmsDecoder/src/crc.cpp b/lib/AmsDecoder/src/crc.cpp index 88fa06ca..2626cf32 100644 --- a/lib/AmsDecoder/src/crc.cpp +++ b/lib/AmsDecoder/src/crc.cpp @@ -21,7 +21,7 @@ uint16_t crc16 (const uint8_t *p, int len) { uint16_t crc = 0; while (len--) { - int i; + uint8_t i; crc ^= *p++; for (i = 0 ; i < 8 ; ++i) { if (crc & 1) @@ -32,4 +32,22 @@ uint16_t crc16 (const uint8_t *p, int len) { } return crc; -} \ No newline at end of file +} + +uint16_t crc16_ccit(const uint8_t *p, int len) +{ + int crc; + char i; + crc = 0; + while (len--) { + uint8_t i; + crc = crc ^ (uint8_t) *p++ << 8; + for (i = 0 ; i < 8 ; ++i) { + if (crc & 0x8000) + crc = crc << 1 ^ 0x1021; + else + crc = crc << 1; + } + } + return (crc); +} diff --git a/src/AmsToMqttBridge.cpp b/src/AmsToMqttBridge.cpp index 61a7da54..826be7b5 100644 --- a/src/AmsToMqttBridge.cpp +++ b/src/AmsToMqttBridge.cpp @@ -346,6 +346,15 @@ void setup() { Serial.flush(); Serial.end(); config.getMeterConfig(meterConfig); + switch(sysConfig.boardType) { + case 5: + case 6: + case 7: + meterConfig.rxPin = 16; + meterConfig.txPin = 9; + break; + } + if(meterConfig.rxPin == 3) { shared = true; #if defined(ESP8266)