diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2023-01-05 19:27:13 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2023-01-05 19:27:13 +0000 |
commit | 6cbcac7382b847ed824a471402702fbae7ad9004 (patch) | |
tree | 2e6de9aa9d3403d8167adecbe18c040f7638e2f8 /rc | |
parent | 457ba087b13a881b013940f6e54c09566ec10ed1 (diff) |
usbtree: a little helper to pretty print usb hubs and devices in a tree
Diffstat (limited to 'rc')
-rwxr-xr-x | rc/bin/usbtree | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/rc/bin/usbtree b/rc/bin/usbtree new file mode 100755 index 000000000..b139d87e1 --- /dev/null +++ b/rc/bin/usbtree @@ -0,0 +1,50 @@ +#!/bin/rc +rfork e + +cd '#u/usb' + +root=() +for(ep in ep*.0){ + < $ep/ctl { + info1=`{read} + info2=`{read} + } + info1_^$ep=$info1 + info2_^$ep=$info2 + if(~ $info1(18) hub){ + hub=$info1(19) + if(~ $hub 0) + root=($root $ep) + if not { + hub=ep^$hub^'.0' + devhub_^$ep=$hub + if(~ $info1(20) port){ + port=$info1(21) + portdev_^$hub^_^$port=$ep + } + } + } +} + +fn indent { + sed 's/^/ /g' +} + +fn printdev { + info2=info2_^$1 + info2=$$info2 + echo $1^':' $info2 + if(~ $info2(1) *hub){ + for(port in `{seq 1 16}){ + x=portdev_^$1^_^$port + if(~ $#$x 1){ + echo ' port'^$port^': ' + printdev $$x | indent + } + } + } +} + +for(ep in $root) { + printdev $ep +} |