commit
						51f821a7fc
					
				| @ -11,6 +11,8 @@ logger = logging.getLogger(__name__) | |||||||
| 
 | 
 | ||||||
| class TelegramParser(object): | class TelegramParser(object): | ||||||
| 
 | 
 | ||||||
|  |     crc16_tab = [] | ||||||
|  | 
 | ||||||
|     def __init__(self, telegram_specification, apply_checksum_validation=True): |     def __init__(self, telegram_specification, apply_checksum_validation=True): | ||||||
|         """ |         """ | ||||||
|         :param telegram_specification: determines how the telegram is parsed |         :param telegram_specification: determines how the telegram is parsed | ||||||
| @ -93,8 +95,14 @@ class TelegramParser(object): | |||||||
| 
 | 
 | ||||||
|     @staticmethod |     @staticmethod | ||||||
|     def crc16(telegram): |     def crc16(telegram): | ||||||
|         crc16_tab = [] |         """ | ||||||
|  |         Calculate the CRC16 value for the given telegram | ||||||
| 
 | 
 | ||||||
|  |         :param str telegram: | ||||||
|  |         """ | ||||||
|  |         crcValue = 0x0000 | ||||||
|  | 
 | ||||||
|  |         if len(TelegramParser.crc16_tab) == 0: | ||||||
|             for i in range(0, 256): |             for i in range(0, 256): | ||||||
|                 crc = c_ushort(i).value |                 crc = c_ushort(i).value | ||||||
|                 for j in range(0, 8): |                 for j in range(0, 8): | ||||||
| @ -102,15 +110,13 @@ class TelegramParser(object): | |||||||
|                         crc = c_ushort(crc >> 1).value ^ 0xA001 |                         crc = c_ushort(crc >> 1).value ^ 0xA001 | ||||||
|                     else: |                     else: | ||||||
|                         crc = c_ushort(crc >> 1).value |                         crc = c_ushort(crc >> 1).value | ||||||
|             crc16_tab.append(hex(crc)) |                 TelegramParser.crc16_tab.append(hex(crc)) | ||||||
| 
 |  | ||||||
|         crcValue = 0x0000 |  | ||||||
| 
 | 
 | ||||||
|         for c in telegram: |         for c in telegram: | ||||||
|             d = ord(c) |             d = ord(c) | ||||||
|             tmp = crcValue ^ d |             tmp = crcValue ^ d | ||||||
|             rotated = c_ushort(crcValue >> 8).value |             rotated = c_ushort(crcValue >> 8).value | ||||||
|             crcValue = rotated ^ int(crc16_tab[(tmp & 0x00ff)], 0) |             crcValue = rotated ^ int(TelegramParser.crc16_tab[(tmp & 0x00ff)], 0) | ||||||
| 
 | 
 | ||||||
|         return crcValue |         return crcValue | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user