@@ -8,25 +8,29 @@ use crate::capture::{
88 PacketId ,
99} ;
1010use crate :: decoder:: Decoder ;
11+ use crate :: pcap:: Writer ;
1112
1213use anyhow:: { Context , Error } ;
1314use futures_lite:: future:: block_on;
1415use nusb:: transfer:: RequestBuffer ;
1516
17+ use std:: path:: PathBuf ;
1618use std:: thread:: sleep;
1719use std:: time:: Duration ;
1820
19- pub fn run_test ( ) {
20- for ( speed, ep_addr, length, sof) in [
21- ( Speed :: High , 0x81 , 4096 , Some ( ( 124500 , 125500 , 500 ) ) ) ,
22- ( Speed :: Full , 0x82 , 512 , Some ( ( 995000 , 1005000 , 50 ) ) ) ,
23- ( Speed :: Low , 0x83 , 64 , None ) ]
21+ pub fn run_test ( save_captures : bool ) {
22+ for ( name , speed, ep_addr, length, sof) in [
23+ ( "HS" , Speed :: High , 0x81 , 4096 , Some ( ( 124500 , 125500 , 500 ) ) ) ,
24+ ( "FS" , Speed :: Full , 0x82 , 512 , Some ( ( 995000 , 1005000 , 50 ) ) ) ,
25+ ( "LS" , Speed :: Low , 0x83 , 64 , None ) ]
2426 {
25- test ( speed, ep_addr, length, sof) . unwrap ( ) ;
27+ test ( save_captures , name , speed, ep_addr, length, sof) . unwrap ( ) ;
2628 }
2729}
2830
29- fn test ( speed : Speed ,
31+ fn test ( save_capture : bool ,
32+ name : & str ,
33+ speed : Speed ,
3034 ep_addr : u8 ,
3135 length : usize ,
3236 sof : Option < ( u64 , u64 , u64 ) > )
@@ -96,6 +100,19 @@ fn test(speed: Speed,
96100 . context ( "Error decoding packet" ) ?;
97101 }
98102
103+ if save_capture {
104+ // Write the capture to a file.
105+ let path = PathBuf :: from ( format ! ( "./HITL-{name}.pcap" ) ) ;
106+ let mut writer = Writer :: open ( path) ?;
107+ for i in 0 ..reader. packet_index . len ( ) {
108+ let packet_id = PacketId :: from ( i) ;
109+ let packet = reader. packet ( packet_id) ?;
110+ let timestamp_ns = reader. packet_time ( packet_id) ?;
111+ writer. add_packet ( & packet, timestamp_ns) ?;
112+ }
113+ writer. close ( ) ?;
114+ }
115+
99116 // Look for the test device in the capture.
100117 let device_id = DeviceId :: from ( 1 ) ;
101118 let device_data = reader. device_data ( & device_id) ?;
0 commit comments