merged upstream 0.18 version and resolved conflict

This commit is contained in:
Hans Erik van Elburg
2020-02-02 17:26:47 +01:00
parent 0675a6e2e7
commit fee3f696c4
4 changed files with 34 additions and 5 deletions

View File

@@ -1,7 +1,7 @@
import logging
import re
from PyCRC.CRC16 import CRC16
from ctypes import c_ushort
from dsmr_parser.objects import MBusObject, CosemObject, Telegram
from dsmr_parser.exceptions import ParseError, InvalidChecksumError
@@ -79,7 +79,7 @@ class TelegramParser(object):
'incomplete. The checksum and/or content values are missing.'
)
calculated_crc = CRC16().calculate(checksum_contents.group(0))
calculated_crc = TelegramParser.crc16(checksum_contents.group(0))
expected_crc = int(checksum_hex.group(0), base=16)
if calculated_crc != expected_crc:
@@ -91,6 +91,29 @@ class TelegramParser(object):
)
)
@staticmethod
def crc16(telegram):
crc16_tab = []
for i in range(0, 256):
crc = c_ushort(i).value
for j in range(0, 8):
if (crc & 0x0001):
crc = c_ushort(crc >> 1).value ^ 0xA001
else:
crc = c_ushort(crc >> 1).value
crc16_tab.append(hex(crc))
crcValue = 0x0000
for c in telegram:
d = ord(c)
tmp = crcValue ^ d
rotated = c_ushort(crcValue >> 8).value
crcValue = rotated ^ int(crc16_tab[(tmp & 0x00ff)], 0)
return crcValue
class DSMRObjectParser(object):
"""