📄 usbhost.tcl
字号:
lappend usbtest::_out_endpoints_in_use $endpoint } default { error "Invalid direction passed to usbtest::use_endpoint" } } } } proc test_submitted { } { incr usbtest::_tests_submitted } proc start { timeout } { set result 0 if { 0 == $usbtest::_tests_submitted } { error "Attempt to start tests when no tests are scheduled to run." } elseif { ! [string is integer -strict $timeout] } { error "Invalid timeout specified, it should be a simple number." } else { set usbtest::results [list] set result [usbtest::_run $timeout] set usbtest::_tests_submitted 0 set usbtest::_control_endpoint_in_use 0 array unset _in_endpoints_in_use array unset _out_endpoints_in_use } return $result }}# }}}# {{{ Bulk tests # Prepare to run a bulk test.## This test requires rather a lot of parameters, many of which# will have sensible defaults.namespace eval usbtest { proc bulktest { endpoint direction number_packets args } { # Parameters to be passed to the C code. Most are # held in an array indexed by the option name, # facilitating command-line parsing. set arguments(format) "none" set arguments(data1) 0 set arguments(data*) 1 set arguments(data+) 0 set arguments(data1*) 1 set arguments(data1+) 0 set arguments(data**) 1 set arguments(data*+) 0 set arguments(data+*) 1 set arguments(data++) 0 set arguments(mechanism) "usb" set arguments(txsize1) 32 set arguments(txsize>=) 0 set arguments(txsize<=) -1 set arguments(txsize*) 1 set arguments(txsize/) 1 set arguments(txsize+) 0 set arguments(rxsize1) 0 set arguments(rxsize>=) 0 set arguments(rxsize<=) -1 set arguments(rxsize*) 1 set arguments(rxsize/) 1 set arguments(rxsize+) 0 set arguments(txdelay1) 0 set arguments(txdelay>=) 0 set arguments(txdelay<=) 1000000000 set arguments(txdelay*) 1 set arguments(txdelay/) 1 set arguments(txdelay+) 0 set arguments(rxdelay1) 0 set arguments(rxdelay>=) 0 set arguments(rxdelay<=) 1000000000 set arguments(rxdelay*) 1 set arguments(rxdelay/) 1 set arguments(rxdelay+) 0 set endpoint_param "" # Target limits set target_min_size 0 set target_max_size 0 set target_padding 0 set target_devtab "" # Start by validating the endpoint and direction arguments. # Also check that the specified endpoint is not yet in use. if { ![string is integer -strict $endpoint] } { error "Invalid endpoint argument \"$endpoint\": should be a number" } if { ($endpoint < 1) || ($endpoint > 15) } { error "Invalid bulk endpoint argument \"$endpoint\": should be between 1 and 15" } switch -- $direction { "in" - "In" - "IN" { set direction "in" if { -1 == [lsearch -exact $usbtest::bulk_in_endpoints $endpoint] } { error "Invalid bulk endpoint argument \"$endpoint\": the target does not list that as a bulk IN endpoint" } set target_min_size $usbtest::bulk_in($endpoint,min_size) set target_max_size $usbtest::bulk_in($endpoint,max_size) set target_padding $usbtest::bulk_in($endpoint,max_in_padding) set target_devtab $usbtest::bulk_in($endpoint,devtab); set endpoint_param [expr $endpoint | $usbtest::_USB_DIR_IN] } "out" - "Out" - "OUT" { set direction "out" if { -1 == [lsearch -exact $usbtest::bulk_out_endpoints $endpoint] } { error "Invalid bulk endpoint argument \"$endpoint\": the target does not list that as a bulk OUT endpoint" } set target_min_size $usbtest::bulk_out($endpoint,min_size) set target_max_size $usbtest::bulk_out($endpoint,max_size) set target_devtab $usbtest::bulk_out($endpoint,devtab); set target_padding 0; # Not applicable set endpoint_param $endpoint } default { error "Invalid direction argument \"$direction\": should be \"in\" or \"out\"" } } # Now parse any remaining arguments usbtest::process_arguments $args arguments # Convert two of the arguments from strings to numbers, for the # convenience of the C code switch -- $arguments(format) { "none" { set arguments(format) $usbtest::_DATA_NONE } "bytefill" { set arguments(format) $usbtest::_DATA_BYTE_FILL } "wordfill" { set arguments(format) $usbtest::_DATA_WORD_FILL } "byteseq" { set arguments(format) $usbtest::_DATA_BYTE_GEN } "wordseq" { set arguments(format) $usbtest::_DATA_WORD_GEN } default { error "Invalid data format argument \"$arguments(data)\"\n \ Should be \"none\", \"bytefill\", \"wordfill\", \"byteseq\" or \"wordseq\"" } } switch -- $arguments(mechanism) { "usb" { set arguments(mechanism) $usbtest::_IO_MECHANISM_USB } "devtab" { set arguments(mechanism) $usbtest::_IO_MECHANISM_DEV } default { error "Invalid mechanism argument \"$arguments(mechanism)\"\n \ Should be \"usb\" or \"devtab\"" } } puts "validating fields" # Validate the remaining fields foreach field [list data1 data* data+ data1* data1+ data** data*+ data+* data++ \ txsize1 txsize>= txsize<= txsize* txsize/ txsize+ \ rxsize1 rxsize>= rxsize<= rxsize* rxsize/ rxsize+ \ txdelay1 txdelay>= txdelay<= txdelay* txdelay/ txdelay+ \ rxdelay1 rxdelay>= rxdelay<= rxdelay* rxdelay/ rxdelay+] { if { ![string is integer -strict $arguments($field)] } { error "Invalid value \"$arguments($field)\" for argument $field, should be an integer." } } if { $arguments(txsize>=) < $target_min_size } { set arguments(txsize>=) $target_min_size } if { (-1 == $arguments(txsize<=) ) || ($arguments(txsize<=) > $target_max_size) } { set arguments(txsize<=) $target_max_size } if { $arguments(rxsize<=) == -1 } { set arguments(rxsize<=) $target_max_size } if { $arguments(txsize1) < $arguments(txsize>=) } { set arguments(txsize1) $arguments(txsize>=) } # Make sure the endpoint is not already in use usbtest::use_endpoint $endpoint $direction puts "Submitting test" # Now submit the test. This is handled by C code. usbtest::_test_bulk \ $number_packets \ $endpoint_param \ $arguments(txsize1) \ $arguments(txsize>=) \ $arguments(txsize<=) \ $arguments(txsize*) \ $arguments(txsize/) \ $arguments(txsize+) \ $arguments(rxsize1) \ $arguments(rxsize>=) \ $arguments(rxsize<=) \ $arguments(rxsize*) \ $arguments(rxsize/) \ $arguments(rxsize+) \ $target_padding \ $arguments(txdelay1) \ $arguments(txdelay>=) \ $arguments(txdelay<=) \ $arguments(txdelay*) \ $arguments(txdelay/) \ $arguments(txdelay+) \ $arguments(rxdelay1) \ $arguments(rxdelay>=) \ $arguments(rxdelay<=) \ $arguments(rxdelay*) \ $arguments(rxdelay/) \ $arguments(rxdelay+) \ $arguments(mechanism) \ $arguments(format) \ $arguments(data1) \ $arguments(data*) \ $arguments(data+) \ $arguments(data1*) \ $arguments(data1+) \ $arguments(data**) \ $arguments(data*+) \ $arguments(data+*) \ $arguments(data++) test_submitted }}# }}}# {{{ Execute the specified test script # Interpret the arguments as a test script plus auxiliary data.set script [lindex $::argv 0]set ::argv [lrange $::argv 1 end]set result [catch { set path [file join [pwd] $script] if { ![file exists $path] } { set path "$path.tcl" if { ![file exists $path] } { set path [file join $usbtest::USBAUXDIR $script] if { ![file exists $path] } { set path "$path.tcl" if { ![file exists $path] } { error "Error: unknown test script $script" } } } } source $path } message]if { 0 != $result } { puts $message}# }}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -