Beispiel #1
0
 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
Beispiel #3
0
 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
Beispiel #4
0
 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
Beispiel #5
0
 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
Beispiel #6
0
 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
Beispiel #7
0
 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
Beispiel #8
0
	
	#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
Beispiel #9
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
Beispiel #10
0
 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