33 lines
807 B
Python
Executable File
33 lines
807 B
Python
Executable File
import struct
|
|
|
|
# Initialize nodes data
|
|
nodelist = {}
|
|
|
|
|
|
def check_datacode(datacode):
|
|
|
|
# Data types & sizes (number of bytes)
|
|
datacodes = {'b': '1', 'h': '2', 'i': '4', 'l': '4', 'q': '8', 'f': '4', 'd': '8',
|
|
'B': '1', 'H': '2', 'I': '4', 'L': '4', 'Q': '8', 'c': '1', '?': '1'}
|
|
|
|
# if datacode is valid return the data size in bytes
|
|
if datacode in datacodes:
|
|
return int(datacodes[datacode])
|
|
# if not valid return False
|
|
else:
|
|
return False
|
|
|
|
|
|
def decode(datacode, frame):
|
|
# Ensure little-endian & standard sizes used
|
|
e = '<'
|
|
|
|
# set the base data type to bytes
|
|
b = 'B'
|
|
|
|
# get data size from data code
|
|
s = int(check_datacode(datacode))
|
|
|
|
result = struct.unpack(e + datacode[0], struct.pack(e + b*s, *frame))
|
|
return result[0]
|