From 6cbcac7382b847ed824a471402702fbae7ad9004 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Thu, 5 Jan 2023 19:27:13 +0000 Subject: [PATCH] usbtree: a little helper to pretty print usb hubs and devices in a tree --- rc/bin/usbtree | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100755 rc/bin/usbtree 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 +}