summaryrefslogtreecommitdiff
path: root/rc
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2023-01-05 19:27:13 +0000
committercinap_lenrek <cinap_lenrek@felloff.net>2023-01-05 19:27:13 +0000
commit6cbcac7382b847ed824a471402702fbae7ad9004 (patch)
tree2e6de9aa9d3403d8167adecbe18c040f7638e2f8 /rc
parent457ba087b13a881b013940f6e54c09566ec10ed1 (diff)
usbtree: a little helper to pretty print usb hubs and devices in a tree
Diffstat (limited to 'rc')
-rwxr-xr-xrc/bin/usbtree50
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
+}