2022年2月8日火曜日

【Android USB oscilloscope】(14) Android open Accessory

余っているAndroidスマホをオシロにしよう!

スマホでこんなUSB接続をしたい.ただ情報が少ない.
     Linux(host) ----> スマホ(device)
世間の主流は、OTG接続USBを利用してスマホをhostにするようで、こちらの情報は多い.

AndroidではUSB機器をhostであろうがdeviceであろうがAccessoryと呼ぶらしい.
Accessoryを開発するライブラリとして、AOA(Android open Accessory)が提供されているが、AOAの情報は少ない.AOAの情報が少ない理由は古いから.2011年ごろにgoogleがプロモートしていた.ADKという開発kitも販売されていて、なんと今でも秋月で売られている.八潮店に在庫が1つ残っているそうだ.
オリジナル情報はAOA kitのページなのだろう.まだあまり読んでない.

AOAはUSB hostにもUSB deviceにもどちらにも対応しているのかどうかは不明.2011年だとスマホにOTGが搭載され普及するよりも微妙に前なので、AOAはUSB hostにはなれない可能性がありそうに思ってる.

sample codeの情報で判り易いのはこちら.
2011年の記事なのでとても古い.

同ページによるとAOAの接続はなかなか厄介らしい.

USB deviceのプラグインプレイは基本的にVID/PIDで行われる.(例外もある)
ところがAndroid Accessoryの場合は2段階を要するみたいなんだ.

第1段階
スマホの最初の顔はデバッグモードである.例えばVID/PID=18D1/4EE7
ホストPCは、VID/PIDでスマホを検出し、処理を始める.
ホストPCは、スマホに対してAOA対応機かどうかを問い合わせる.
AOA対応機だったなら、ホストはスマホへAccessoryの顔で再起動せよと命じる.

第2段階
スマホは別のVID/PID=18D1/2D00または18D1/2D01に化けて再起動し、改めてUSBに接続する.
ホストPCは、スマホにmanufacture="xxxx"、product="yyyy"ですか?と問いかける.
スマホは"xxxx""yyyy"で待ち受けているので門戸を開く.

以上でhost PCとAccessoryスマホが接続開通する.以降はUSB通信ができる.細かいところに誤解はあるだろうが、ざっとこのような経緯を辿るみたい.かったるい.

#PID=2D00のところを補足.
スマホが最初から18D1/2D00ならいいじゃないかと一瞬思うのだが、素の状態のスマホは2D00には成れないのだろう.
PIDは全部でこれだけある.(Android8以降はオーディオ機能が無くなったらしい)
2D00     一般用途、バルクEPを2本持つ
2D01     一般用途+debug用
2D02     オーディオ
2D03     オーディオ+debug
2D04     一般用途+オーディオ
2D05     一般用途+オーディオ+debug

13へ           15へ

かしこ

0 件のコメント:

コメントを投稿