class CHECK_CONTROL(unittest.TestCase): DEBUG = True def setUp(self): self.phy = Phy() self.dut = Datalink(self.phy) self.phy.clear() def test_write_ack(self): self.phy.set_ack(self.dut) obt = self.dut.write([ 42, ]) self.assertEqual(obt, True) def test_write_nack(self): self.phy.set_nack(self.dut) obt = self.dut.write([ 42, ]) self.assertEqual(obt, False) def test_write_no_answer(self): retry_cnt = self.dut.retry_cnt obt = self.dut.write([ 42, ]) self.assertIsNone(obt) self.assertEqual(self.phy.any_check_cnt, retry_cnt)
class Test_Remote(unittest.TestCase): SER_DEV='/dev/ttyACM0' def setUp(self): self._com=dl_com(self.SER_DEV, baudrate=115200) self._dl=Datalink(self._com) def teardown(self): self._com.close() def test_send_receive(self): data = "Hello world" self._dl.write(data) obt=self._dl.read_str() self.assertEqual(data, obt)
class Test_Remote(unittest.TestCase): SER_DEV = '/dev/ttyACM0' def setUp(self): self._com = dl_com(self.SER_DEV, baudrate=115200) self._dl = Datalink(self._com) def teardown(self): self._com.close() def test_send_receive(self): data = "Hello world" self._dl.write(data) obt = self._dl.read_str() self.assertEqual(data, obt)
def main(): ser = dl_com(uart_dev, baudrate=baud, timeout=80.0/baud) com = Datalink(ser, debug=False) while True: data=bytes("Hello world!", "ascii") ans=com.write(data) if ans: ans = com.read() print("received answer") if ans is not None and len(ans)>0: print(ans)
def main(): ser = dl_com(uart_dev, baudrate=baud, timeout=80.0 / baud) com = Datalink(ser, debug=False) while True: data = bytes("Hello world!", "ascii") ans = com.write(data) if ans: ans = com.read() print("received answer") if ans is not None and len(ans) > 0: print(ans)
class CHECK_CONTROL(unittest.TestCase): DEBUG = True def setUp(self): self.phy = Phy() self.dut = Datalink(self.phy) self.phy.clear() def test_write_ack(self): self.phy.set_ack(self.dut) obt = self.dut.write([42, ]) self.assertEqual(obt, True) def test_write_nack(self): self.phy.set_nack(self.dut) obt = self.dut.write([42, ]) self.assertEqual(obt, False) def test_write_no_answer(self): retry_cnt = self.dut.retry_cnt obt = self.dut.write([42, ]) self.assertIsNone(obt) self.assertEqual(self.phy.any_check_cnt, retry_cnt )
class CHECK_WRITE(unittest.TestCase): DEBUG = False def setUp(self): self.phy = Phy() self.data = [ random.randint(0,255) for i in range(10) ] self.dut = Datalink(self.phy) def calc_packet_crc(self, payload): packet=[] if self.dut.USE_PACKET_TYPE: packet.append(self.dut.PACKET_TYPE['DATA']) crc = self.dut.crc(packet) payload_esc = [] for val in payload: payload_esc.extend(self.dut.ESC_MAP.get(val, [val,])) if self.dut.USE_LENGTH_FIELD: length = len(payload_esc) if self.dut.INCLUDE_HEADER_IN_LENGTH: length += self.dut._header_size packet.append(length) crc.dut.crc([length,], crc) crc = self.dut.crc(payload, crc) packet.extend(payload_esc) return crc def test_crc_list(self): exp = calc_crc(self.data) obt = self.dut.crc(self.data) if self.DEBUG: print("Exp: 0x%02x Obtained: 0x%02x" % (exp, obt)) self.assertEqual(obt, exp) def test_write_no_escape(self): for exp in range(256): if exp in self.dut.ESC_MAP.keys(): continue self.phy.set_ack(self.dut) self.dut.write([exp, ]) res = self.phy.get_written() exp_len = 5 packet = [exp,] crc = self.calc_packet_crc(packet) if crc in self.dut.ESC_MAP.keys(): exp_len+=1 self.assertEqual(exp_len, len(res)) for idx, val in enumerate(self.dut.ESCAPE['SOF']): self.assertEqual(res[idx], val) for idx, val in enumerate(self.dut.ESCAPE['EOF']): ridx = len(self.dut.ESCAPE['EOF']) self.assertEqual(res[-(ridx+idx)], val) for e,o in zip([self.dut.PACKET_TYPE['DATA'], exp, ], res[1:-1]): self.assertEqual(e, o) def test_write_escape(self): for esc, val in self.dut.ESC_MAP.items(): self.phy.set_ack(self.dut) self.dut.write([esc, ]) res = self.phy.get_written() exp_len = 6 crc = self.calc_packet_crc([esc,]) if crc in self.dut.ESC_MAP.keys(): exp_len+=1 self.assertEqual(exp_len, len(res)) for idx,v in enumerate(self.dut.ESCAPE['SOF']): self.assertEqual(res[0+idx], self.dut.ESCAPE['SOF'][idx]) self.assertEqual(res[1], self.dut.PACKET_TYPE['DATA']) self.assertEqual(res[2], val[0]) self.assertEqual(res[3], val[1]) eof_idx=len(res)-len(self.dut.ESCAPE['EOF']) for idx,v in enumerate(self.dut.ESCAPE['EOF']): self.assertEqual(res[eof_idx+idx], self.dut.ESCAPE['EOF'][idx]) def test_write_no_answer(self): val = 42 state = self.dut.write([val, ]) self.assertIsNone(state)
class CHECK_READ(unittest.TestCase): DEBUG = False def setUp(self): self.phy = Phy() self.data = [ random.randint(0,255) for i in range(10) ] self.dut = Datalink(self.phy) self.phy.set_ack(self.dut) self.dut.write([0x1B, ]) self.phy_out = self.phy.get_written() def test_ignore_everything_before_sof(self): ignore_data = [41, 42, 43, 44, 0x04] self.phy.set_readable(ignore_data) self.phy.set_readable(self.phy_out) self.phy.set_ack(self.dut) # # Test # obt = self.dut.read() # # Evaluate # self.assertEqual(1, len(obt)) def test_read_ack(self): for val in range(256): self.phy.clear() self.phy.set_ack(self.dut) self.dut.write([val, ]) phy_out = self.phy.get_written() self.phy.set_readable(phy_out) # # Test # obt = self.dut.read() # # Evaluate # self.assertEqual(1, len(obt)) for e,o in zip([val,], obt): self.assertEqual(e, o) ans_pkt = self.phy.get_written() self.assertEqual(ans_pkt[2], self.dut.STATES['ACK']) def test_read_corrupted_no_nack_or_ack(self): self.phy.clear() self.phy.set_ack(self.dut) self.dut.write([42, ]) phy_out = self.phy.get_written() self.phy.set_readable(phy_out[0:-3]) # # Test # obt = self.dut.read() # # Evaluate # ans_pkt = self.phy.get_written() self.assertIsNone(ans_pkt) self.assertIsNone(obt) def test_read_wrong_crc_nack(self): self.phy.set_ack(self.dut) self.dut.write([42, ]) phy_out = self.phy.get_written() phy_out[-2]=0 self.phy.set_readable(phy_out) # # Test # obt = self.dut.read() # # Evaluate # ans_pkt = self.phy.get_written() self.assertEqual(ans_pkt[2], self.dut.STATES['NACK']) self.assertIsNone(obt) def test_write_read_long(self): data = [i for i in range(256)] self.phy.clear() self.phy.set_ack(self.dut) self.dut.write(data) phy_out = self.phy.get_written() self.phy.set_readable(phy_out) # # Test # obt = self.dut.read() # # Evaluate # self.assertEqual(len(data), len(obt)) for e,o in zip(data, obt): self.assertEqual(e, o) def test_echo(self): self.phy.set_readable(self.phy_out) #self.phy.set_ack(self.dut) self.dut.echo()
class CHECK_WRITE(unittest.TestCase): DEBUG = False def setUp(self): self.phy = Phy() self.data = [random.randint(0, 255) for i in range(10)] self.dut = Datalink(self.phy) def calc_packet_crc(self, payload): packet = [] if self.dut.USE_PACKET_TYPE: packet.append(self.dut.PACKET_TYPE['DATA']) crc = self.dut.crc(packet) payload_esc = [] for val in payload: payload_esc.extend(self.dut.ESC_MAP.get(val, [ val, ])) if self.dut.USE_LENGTH_FIELD: length = len(payload_esc) if self.dut.INCLUDE_HEADER_IN_LENGTH: length += self.dut._header_size packet.append(length) crc.dut.crc([ length, ], crc) crc = self.dut.crc(payload, crc) packet.extend(payload_esc) return crc def test_crc_list(self): exp = calc_crc(self.data) obt = self.dut.crc(self.data) if self.DEBUG: print("Exp: 0x%02x Obtained: 0x%02x" % (exp, obt)) self.assertEqual(obt, exp) def test_write_no_escape(self): for exp in range(256): if exp in self.dut.ESC_MAP.keys(): continue self.phy.set_ack(self.dut) self.dut.write([ exp, ]) res = self.phy.get_written() exp_len = 5 packet = [ exp, ] crc = self.calc_packet_crc(packet) if crc in self.dut.ESC_MAP.keys(): exp_len += 1 self.assertEqual(exp_len, len(res)) for idx, val in enumerate(self.dut.ESCAPE['SOF']): self.assertEqual(res[idx], val) for idx, val in enumerate(self.dut.ESCAPE['EOF']): ridx = len(self.dut.ESCAPE['EOF']) self.assertEqual(res[-(ridx + idx)], val) for e, o in zip([ self.dut.PACKET_TYPE['DATA'], exp, ], res[1:-1]): self.assertEqual(e, o) def test_write_escape(self): for esc, val in self.dut.ESC_MAP.items(): self.phy.set_ack(self.dut) self.dut.write([ esc, ]) res = self.phy.get_written() exp_len = 6 crc = self.calc_packet_crc([ esc, ]) if crc in self.dut.ESC_MAP.keys(): exp_len += 1 self.assertEqual(exp_len, len(res)) for idx, v in enumerate(self.dut.ESCAPE['SOF']): self.assertEqual(res[0 + idx], self.dut.ESCAPE['SOF'][idx]) self.assertEqual(res[1], self.dut.PACKET_TYPE['DATA']) self.assertEqual(res[2], val[0]) self.assertEqual(res[3], val[1]) eof_idx = len(res) - len(self.dut.ESCAPE['EOF']) for idx, v in enumerate(self.dut.ESCAPE['EOF']): self.assertEqual(res[eof_idx + idx], self.dut.ESCAPE['EOF'][idx]) def test_write_no_answer(self): val = 42 state = self.dut.write([ val, ]) self.assertIsNone(state)
class CHECK_READ(unittest.TestCase): DEBUG = False def setUp(self): self.phy = Phy() self.data = [random.randint(0, 255) for i in range(10)] self.dut = Datalink(self.phy) self.phy.set_ack(self.dut) self.dut.write([ 0x1B, ]) self.phy_out = self.phy.get_written() def test_ignore_everything_before_sof(self): ignore_data = [41, 42, 43, 44, 0x04] self.phy.set_readable(ignore_data) self.phy.set_readable(self.phy_out) self.phy.set_ack(self.dut) # # Test # obt = self.dut.read() # # Evaluate # self.assertEqual(1, len(obt)) def test_read_ack(self): for val in range(256): self.phy.clear() self.phy.set_ack(self.dut) self.dut.write([ val, ]) phy_out = self.phy.get_written() self.phy.set_readable(phy_out) # # Test # obt = self.dut.read() # # Evaluate # self.assertEqual(1, len(obt)) for e, o in zip([ val, ], obt): self.assertEqual(e, o) ans_pkt = self.phy.get_written() self.assertEqual(ans_pkt[2], self.dut.STATES['ACK']) def test_read_corrupted_no_nack_or_ack(self): self.phy.clear() self.phy.set_ack(self.dut) self.dut.write([ 42, ]) phy_out = self.phy.get_written() self.phy.set_readable(phy_out[0:-3]) # # Test # obt = self.dut.read() # # Evaluate # ans_pkt = self.phy.get_written() self.assertIsNone(ans_pkt) self.assertIsNone(obt) def test_read_wrong_crc_nack(self): self.phy.set_ack(self.dut) self.dut.write([ 42, ]) phy_out = self.phy.get_written() phy_out[-2] = 0 self.phy.set_readable(phy_out) # # Test # obt = self.dut.read() # # Evaluate # ans_pkt = self.phy.get_written() self.assertEqual(ans_pkt[2], self.dut.STATES['NACK']) self.assertIsNone(obt) def test_write_read_long(self): data = [i for i in range(256)] self.phy.clear() self.phy.set_ack(self.dut) self.dut.write(data) phy_out = self.phy.get_written() self.phy.set_readable(phy_out) # # Test # obt = self.dut.read() # # Evaluate # self.assertEqual(len(data), len(obt)) for e, o in zip(data, obt): self.assertEqual(e, o) def test_echo(self): self.phy.set_readable(self.phy_out) #self.phy.set_ack(self.dut) self.dut.echo()