from HexStrDataParser import HexStrDataParser, DataToHexStr

parser = HexStrDataParser('b')
assert(parser.stringToData('0A')[0] == 10)

parser = HexStrDataParser('I')
assert(parser.stringToData('0A000000')[0] == 10)

parser = HexStrDataParser('I')
assert(parser.stringToData('00000080')[0] == 2**31)

parser = HexStrDataParser('I')
assert(parser.stringToData('00010000')[0] == 256)

parser = HexStrDataParser('Ib')
assert(parser.stringToData('000100000A')[0] == 256)
assert(parser.stringToData('000100000A')[1] == 10)

parser = HexStrDataParser('fb')
assert(parser.stringToData('0000803f0A')[0] == 1.0)
assert(parser.stringToData('0000803f0A')[1] == 10)

parser = HexStrDataParser('ff')
assert(parser.stringToData('0000803f000080bf')[0] == 1.0)
assert(parser.stringToData('0000803f000080bf')[1] == -1.0)

packer = DataToHexStr('ffB')
packedStr = packer.dataToString([1.0, -1.0, 255])

parser = HexStrDataParser('ffB')
assert(parser.stringToData(packedStr)[0] == 1.0)
示例#2
0
"""
uint32_t 	time;					# 0	
uint32_t	lineSensors;
uint32_t	usedSensors;
uint32_t	adc1;	

float			pidFeedback;			# 4
float			pidK, pidI, pidD, pidU;		# 5 6 7 8
float			pwmLeft, pwmRight;		# 9 10

float			battVoltage;			# 11
uint32_t		lastLapTime			# 12
uint8_t			finishLineDetected;		# 13
"""

parser = HexStrDataParser("IIII" + "f" + "ffff" + "fff" + "Ib")

"""
float 		leftPwm, rightPwm;		# 0 1
float		basePwm, pidK, pidI, pidD;	# 2 3 4 5
uint32_t 	cmdType;			# 6
enum CommandFromPC { Stop = 0, Run = 1, SetPid = 2, SetPwm  = 3 };
"""

packetBuilder = DataToHexStr("ff" + "ffff" + "I")
packetStruct = [0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0]


def sendPacketStruct(packetStruct):
    global sercom
    packet = StartByte + packetBuilder.dataToString(packetStruct) + EndByte