Esempio n. 1
0
 def putMessage(self, msgType, flags, data):
     # data should be bytes
     ph = struct.pack('<HHHL', msgType, flags, len(data), self.msgId)
     crc = calcCrc16(ph)
     crc = calcCrc16(data, crc)
     header = struct.pack('<HHHHL', crc, msgType, flags, len(data), self.msgId)
     msg = header + data
     hexMsg = b'#' + binascii.hexlify(msg).upper() + b'!'
     self.ser.write(hexMsg)
     self.msgId += 2
     print(hexMsg)   # DEBUG
Esempio n. 2
0
 def putMessage(self, msgType, flags, data):
     # data should be bytes
     ph = struct.pack('<HHHL', msgType, flags, len(data), self.msgId)
     crc = calcCrc16(ph)
     crc = calcCrc16(data, crc)
     header = struct.pack('<HHHHL', crc, msgType, flags, len(data),
                          self.msgId)
     msg = header + data
     hexMsg = b'#' + binascii.hexlify(msg).upper() + b'!'
     self.ser.write(hexMsg)
     self.msgId += 2
     print(hexMsg)  # DEBUG
Esempio n. 3
0
    def getMessage(self):
        # Eat up data until the #
        c = b'!'
        while c and c != b'#': c = self.ser.read()
        if not c: raise Exception('Timeout')

        # Read the header
        header = binascii.unhexlify(self.ser.read(24))
        crc, msgType, flags, length, msgId = struct.unpack('<HHHHL', header)
        if length > 512: raise Exception('Corrupt header')

        # Read the message body
        data = binascii.unhexlify(self.ser.read(length * 2))

        # Check the crc
        newCrc = calcCrc16(header[2:])
        newCrc = calcCrc16(data, newCrc)
        if newCrc != crc: raise Exception('CRC error')

        # Handle the CONFIRMATION_NEEDED_FLAG by sending a confirmation
        if flags & 0x01: self.putMessage(0, 0, struct.pack('<L', msgId))

        return msgType, data
Esempio n. 4
0
    def getMessage(self):
        # Eat up data until the #
        c = b'!'
        while c and c != b'#':
            c = self.ser.read()
        if not c: raise Exception('Timeout')

        # Read the header
        header = binascii.unhexlify(self.ser.read(24))
        crc, msgType, flags, length, msgId = struct.unpack('<HHHHL', header)
        if length > 512: raise Exception('Corrupt header')

        # Read the message body
        data = binascii.unhexlify(self.ser.read(length * 2))

        # Check the crc
        newCrc = calcCrc16(header[2:])
        newCrc = calcCrc16(data, newCrc)
        if newCrc != crc: raise Exception('CRC error')

        # Handle the CONFIRMATION_NEEDED_FLAG by sending a confirmation
        if flags & 0x01: self.putMessage(0, 0, struct.pack('<L', msgId))

        return msgType, data