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')
Ejemplo n.º 2
0
    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)))
Ejemplo n.º 4
0
    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)))