def test_usb_diff_sample_data(self): # Read files containing 100 Full-speed SOF packets # Note that these packets were collected with segmented acquisition and are ~5us # apart rather than the proper 1ms. dp_samples, sample_period, start_time = tsup.read_bin_file( 'test/data/usb_100segs_dp.bin') dp_it = stream.samples_to_sample_stream(dp_samples, sample_period, start_time) dm_samples, sample_period, start_time = tsup.read_bin_file( 'test/data/usb_100segs_dm.bin') dm_it = stream.samples_to_sample_stream(dm_samples, sample_period, start_time) # generate differential waveform d_diff_it = sigp.sum_streams(dp_it, sigp.invert(dm_it)) records_it = usb.usb_diff_decode(d_diff_it, stream_type=stream.StreamType.Samples) records = list(records_it) self.assertEqual(len(records), 100, 'Missing records, expected to decode 100') # The SOF packet frame_num fields should be monotonically increasing cur_frame = records[0].packet.frame_num for r in records[1:]: cur_frame += 1 self.assertEqual(r.packet.frame_num, cur_frame, 'SOF frame_num not decoded properly')
def test_usb_diff_sample_data(self): # Read files containing 100 Full-speed SOF packets # Note that these packets were collected with segmented acquisition and are ~5us # apart rather than the proper 1ms. dp_samples, sample_period, start_time = tsup.read_bin_file('test/data/usb_100segs_dp.bin') dp_it = stream.samples_to_sample_stream(dp_samples, sample_period, start_time) dm_samples, sample_period, start_time = tsup.read_bin_file('test/data/usb_100segs_dm.bin') dm_it = stream.samples_to_sample_stream(dm_samples, sample_period, start_time) # generate differential waveform d_diff_it = sigp.sum_streams(dp_it, sigp.invert(dm_it)) records_it = usb.usb_diff_decode(d_diff_it, stream_type=stream.StreamType.Samples) records = list(records_it) self.assertEqual(len(records), 100, 'Missing records, expected to decode 100') # The SOF packet frame_num fields should be monotonically increasing cur_frame = records[0].packet.frame_num for r in records[1:]: cur_frame += 1 self.assertEqual(r.packet.frame_num, cur_frame, 'SOF frame_num not decoded properly')
def test_usb_decode(self): self.test_name = 'USB transmission' self.trial_count = 70 for i in xrange(self.trial_count): self.update_progress(i + 1) bus_speed = random.choice( (usb.USBSpeed.LowSpeed, usb.USBSpeed.FullSpeed, usb.USBSpeed.HighSpeed)) #print('\nBus speed', bus_speed) # Build a set of packets packet_num = random.randint(1, 10) #print('\nGEN PACKETS:', packet_num) use_protocol = random.choice( ('single-ended', 'differential', 'hsic')) if use_protocol == 'hsic': bus_speed = usb.USBSpeed.HighSpeed # force bus speed for HSIC packets = [] for _ in xrange(packet_num): packets.append(_gen_random_usb_packet(bus_speed)) pid = packets[-1].pid if pid == usb.USBPID.PRE and bus_speed == usb.USBSpeed.FullSpeed: # Add a Low-speed packet after the PREamble pkt = usb.USBDataPacket(usb.USBPID.Data0, [1, 2, 3, 4], speed=usb.USBSpeed.LowSpeed) pkt.swap_jk = True packets.append(pkt) if use_protocol == 'single-ended': # Synthesize edge waveforms dp, dm = usb.usb_synth(packets, 1.0e-7, 3.0e-7) # Do the decode records_it = usb.usb_decode( dp, dm, stream_type=stream.StreamType.Edges) elif use_protocol == 'differential': # Synthesize a differential edge waveform diff_d = usb.usb_diff_synth(packets, 1.0e-7, 3.0e-7) # Do the decode records_it = usb.usb_diff_decode( diff_d, stream_type=stream.StreamType.Edges) else: # hsic # Synthesize edge waveforms strobe, data = usb.usb_hsic_synth(packets, 1.0e-7, 3.0e-7) # Do the decode records_it = usb.usb_hsic_decode( strobe, data, stream_type=stream.StreamType.Edges) records = list(records_it) # Check results pkt_cnt = 0 pkt_ix = 0 match = True if len(records) > 0 else False #print('PACKETS:', len(records)) for r in records: if r.kind == 'USB packet': #print(' ', repr(r.packet)) pkt_cnt += 1 if r.packet != packets[pkt_ix]: match = False break pkt_ix += 1 else: pass #print('ERROR:', repr(r)) if not match: print('\nProtocol:', use_protocol) print('\nOriginal packets:') for p in packets: print(' ', p) print('\nDecoded packets:') for r in records: if r.kind == 'USB packet': print(' ', r.packet) else: print(' ', repr(r), r.status) self.assertTrue(match, msg='Packets not decoded successfully') self.assertEqual(pkt_cnt, len(packets), \ 'Missing or extra decoded packets (got {} , expected {})'.format(pkt_cnt, len(packets)))
def test_usb_decode(self): self.test_name = 'USB transmission' self.trial_count = 70 for i in xrange(self.trial_count): self.update_progress(i+1) bus_speed = random.choice((usb.USBSpeed.LowSpeed, usb.USBSpeed.FullSpeed, usb.USBSpeed.HighSpeed)) #print('\nBus speed', bus_speed) # Build a set of packets packet_num = random.randint(1, 10) #print('\nGEN PACKETS:', packet_num) use_protocol = random.choice(('single-ended', 'differential', 'hsic')) if use_protocol == 'hsic': bus_speed = usb.USBSpeed.HighSpeed # force bus speed for HSIC packets = [] for _ in xrange(packet_num): packets.append(_gen_random_usb_packet(bus_speed)) pid = packets[-1].pid if pid == usb.USBPID.PRE and bus_speed == usb.USBSpeed.FullSpeed: # Add a Low-speed packet after the PREamble pkt = usb.USBDataPacket(usb.USBPID.Data0, [1,2,3,4], speed=usb.USBSpeed.LowSpeed) pkt.swap_jk = True packets.append(pkt) if use_protocol == 'single-ended': # Synthesize edge waveforms dp, dm = usb.usb_synth(packets, 1.0e-7, 3.0e-7) # Do the decode records_it = usb.usb_decode(dp, dm, stream_type=stream.StreamType.Edges) elif use_protocol == 'differential': # Synthesize a differential edge waveform diff_d = usb.usb_diff_synth(packets, 1.0e-7, 3.0e-7) # Do the decode records_it = usb.usb_diff_decode(diff_d, stream_type=stream.StreamType.Edges) else: # hsic # Synthesize edge waveforms strobe, data = usb.usb_hsic_synth(packets, 1.0e-7, 3.0e-7) # Do the decode records_it = usb.usb_hsic_decode(strobe, data, stream_type=stream.StreamType.Edges) records = list(records_it) # Check results pkt_cnt = 0 pkt_ix = 0 match = True if len(records) > 0 else False #print('PACKETS:', len(records)) for r in records: if r.kind == 'USB packet': #print(' ', repr(r.packet)) pkt_cnt += 1 if r.packet != packets[pkt_ix]: match = False break pkt_ix += 1 else: pass #print('ERROR:', repr(r)) if not match: print('\nProtocol:', use_protocol) print('\nOriginal packets:') for p in packets: print(' ', p) print('\nDecoded packets:') for r in records: if r.kind == 'USB packet': print(' ', r.packet) else: print(' ', repr(r), r.status) self.assertTrue(match, msg='Packets not decoded successfully') self.assertEqual(pkt_cnt, len(packets), \ 'Missing or extra decoded packets (got {} , expected {})'.format(pkt_cnt, len(packets)))