def encode(self): """ compelete the encoding process and return the frame """ fr = self._buf self._buf = '' fr = buf_unpack(fr) fr = cobs.encode(fr) return buf_pack(fr)
def encode(self, packet): out = [] out.append((int(packet.rtr) << 6) | ((packet.id & 0x700) >> 8)) out.append(packet.id & 0xff) out.extend(packet.data) out = [chr(x) for x in out] crc = self.checksum(out) out.append(chr( (crc & 0xff00)>>8 )) out.append(chr( crc & 0xff )) encoded = cobs.encode(''.join(out)) encoded += '\x00' return encoded
def encode(self, packet): out = [] out.append((int(packet.rtr) << 6) | ((packet.id & 0x700) >> 8)) out.append(packet.id & 0xff) out.extend(packet.data) out = [chr(x) for x in out] crc = self.checksum(out) out.append(chr((crc & 0xff00) >> 8)) out.append(chr(crc & 0xff)) encoded = cobs.encode(''.join(out)) encoded += '\x00' return encoded
def transmit(self, data): success = False try: # print('<', str(list(data))) packet = cobs.encode(data) + bytes([0]) # print('<', str(packet)) len_sent = self.oven.write(packet) if len(packet) == len_sent: success = True else: print('Error: Failed to transmit {} of {} bytes.'.format( len(packet) - len_sent, len(packet))) except Exception as e: print(f'Error: Failed to transmit got exception {e}.') return success
def read(self, addr): tx = bytearray(4) tx[0] = (addr & 0x3F0000) >> 16 tx[1] = (addr & 0xFF00) >> 8 tx[2] = addr & 0xFF tx[3] = 3 self.dev.write(cobs.encode(tx)) del tx self.dev.write(b'\x00') # expect 7 bytes back + 1 overhead + 1 framing rx = self.dev.read(9) pk = cobs.decode(rx[:8]) val = pk[3] val |= (pk[4] << 8) val |= (pk[5] << 16) val |= (pk[6] << 24) del rx del pk return val
def write(self, addr, val): tx = bytearray(7) tx[0] = (addr & 0x3F0000) >> 16 tx[0] |= 0x80 tx[1] = (addr & 0xFF00) >> 8 tx[2] = addr & 0xFF tx[3] = val & 0xFF tx[4] = (val & 0xFF00) >> 8 tx[5] = (val & 0xFF0000) >> 16 tx[6] = (val & 0xFF000000) >> 24 self.dev.write(cobs.encode(tx)) del tx self.dev.write(b'\x00') # expect 4 bytes back + 1 overhead + 1 framing rx = self.dev.read(6) pk = cobs.decode(rx[:5]) val = pk[3] del rx del pk return val
def send_packet(self, code, data): if data is None: packet_out = (struct.pack('<h', code)) else: packet_out = (struct.pack('<h', code)) + data # ce je port odprt if self.ser.isOpen() == True: # pripravim za posiljanje crc_of_data = CRC16(True).calculate(bytes(packet_out)) crc_of_data_bytes = struct.pack("<H", crc_of_data) packet_array = bytearray(packet_out) packet_array.append(crc_of_data_bytes[0]) packet_array.append(crc_of_data_bytes[1]) # zakodiram cobs_encoded = cobs.encode(bytes(packet_array)) # dodam se 0x00 za konec paketa cobs_encoded.append(0) # posljem, tx_threadu self.tx_queue.put(cobs_encoded) pass
#collapse extra spaces between words response = ' '.join(response.split()) if (len(response) > 0): new_message=True message_firsthalf = response[:70].ljust(70) message_secondhalf = response[70:160].ljust(90) #execute requests if (new_color): print ("Color Incoming") item_sent = False retries = 0 while (item_sent == False and retries < 2): droid.bluetoothWriteBinary(b64encode(cobs.encode(color_array)).decode(),connID) item_sent = btconfirmation() retries = retries + 1 if (new_message): print ("Message Incoming") item_sent = False retries = 0 while (item_sent == False and retries < 2): message_firsthalf2 = bytearray(map(ord, message_firsthalf)) droid.bluetoothWriteBinary(b64encode(cobs.encode(message_firsthalf2)).decode(),connID) item_sent = btconfirmation() retries = retries + 1 item_sent = False retries = 0
def packet_crc_cobs(self): mycrc = crc.crc(self.packet_as_str()) data = cobs.encode(self.packet_as_str() + chr(mycrc & 0xFF) + chr((mycrc >> 8) & 0xFF)) data = data + "\x00" return data
def send(self, pkt): data = pkt.build() if self.raw_log_callback: self.raw_log_callback(1, data) self.serial_port.write(cobs.encode(data) + b'\x00') self.tx_pkts += 1