Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def packMessage(DeviceID, Offset, dataLength=None,
- Byte0=None, Byte1=None, Byte2=None, Byte3=None,
- Word0=None, Word1=None, DWord0=None):
- Bytes = [Byte0, Byte1, Byte2, Byte3]
- #check if the values to be used are in range
- if Offset >= 2**16:
- raise ValueError
- else:
- Offset_low = Offset & 0x00FF
- Offset_high = Offset & 0xFF00 >> 8
- if dataLength is not None and not 1 <= dataLength <= 4:
- raise ValueError
- #split bigger data to bytes and check the data length
- if DWord0 is not None:
- if 0 <= DWord0 <= 2**32:
- Bytes[0] = DWord0 & 0xFF
- Bytes[1] = (DWord0 & 0xFF00) >> 8
- Bytes[2] = (DWord0 & 0xFF0000) >> 16
- Bytes[3] = (DWord0 & 0xFF000000) >> 24
- length = 4
- else:
- raise ValueError
- elif Word0 is not None:
- if 0 <= Word0 <= 2**16:
- Bytes[0] = Word0 & 0xFF
- Bytes[1] = (Word0 & 0xFF00) >> 8
- else:
- raise ValueError
- if Word1 is not None:
- if 0 <= Word0 <= 2**16:
- Byte2 = Word1 & 0xFF
- Byte3 = (Word1 & 0xFF00) >> 8
- length = 4
- else:
- raise ValueError
- else:
- Word1 = 0
- Byte2 = Byte3 = 0
- length = 2
- else:
- for i in range(len(Bytes)):
- if Bytes(i) is not None:
- length = i
- else:
- Bytes[i] = 0
- #if no length given take calculated length
- if dataLength is None:
- dataLength = length
- #return the Message
- return bytearray([DeviceID, dataLength, Offset_low,
- Offset_high, Bytes[0], Bytes[1], Bytes[2], Bytes[3]])
- if Byte0 is not None:
- if Byte1 is not None:
- if Byte2 is not None:
- if Byte3 is not None:
- length = 4
- else:
- Byte3 = 0
- else:
- length = 3
- Byte2 = 0
- Byte3 = 0
- else:
- length = 2
- Byte1 = 0
- Byte2 = 0
- Byte3 = 0
- else:
- length = 1
- Byte0 = 0
- Byte1 = 0
- Byte2 = 0
- Byte3 = 0
Add Comment
Please, Sign In to add comment