ref: 6cbcac7382b847ed824a471402702fbae7ad9004
parent: 457ba087b13a881b013940f6e54c09566ec10ed1
author: cinap_lenrek <[email protected]>
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
+}