ref: f819d24c8a6228ab9c3ec3f2a0e336af35938166
parent: 1bca7d5b604e03d274bbb68bf72ebe9ec57e7c3d
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Thu Jan 5 14:27:13 EST 2023
usbtree: a little helper to pretty print usb hubs and devices in a tree
--- /dev/null
+++ b/rc/bin/usbtree
@@ -1,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
+}
--
⑨