usbhid-dumpでdumpしたUSBのreport descriptorを見るとき、2byteで1セットになることが多い(当然例外はめっちゃあるが…)ので一旦2項目ずつに整理して見てみたい。つまり
003:007:000:DESCRIPTOR 1668742987.009398 05 01 09 06 A1 01 05 07 19 E0 29 E7 15 00 25 01 75 01 95 08 81 02 75 08 95 01 81 01 05 08 19 01 29 05 75 01 95 05 91 02 75 03 95 01 91 01 05 07 19 00 2A FF 00 15 00 26 FF 00 75 08 95 06 81 00 C0
これを
05 01 09 06 A1 01 05 07 ... 75 08 95 06 81 00 C0
こうしたい。間違ってるところはあとで修正する前提。Rubyだと近いことを Enumerable#each_slice
でできる。
シュッとワンライナー書けないかな〜と思っていたところ、xargsでそれっぽいことができそうだった。05 01 09 ...
をクリップボードに入れておいて
$ xsel -ob | sed 's/ /\n/g' | grep -v '^$' | xargs -L2 echo 05 01 09 06 A1 01 05 07 ... 75 08 95 06 81 00 C0
という調子。xargsの -L
オプションを指定すると一回で複数の引数を取って展開してくれるので、単純にこれをechoする。普段便利に使ってるコマンドでも意外と知らないオプションがある。
そしてこの記事を書き終えた後に
$ sudo usbhid-dump -e descriptor -a ***:*** | grep -v : | xxd -r -p | hidrd-convert -o code 0x05, 0x01, /* Usage Page (Desktop), */ 0x09, 0x02, /* Usage (Mouse), */ 0xA1, 0x01, /* Collection (Application), */ 0x09, 0x01, /* Usage (Pointer), */
で一番やりたかったことができるのを知るのであった……