余っているAndroidスマホをオシロにしよう!
スマホにバルク転送する実験をしたいでーす.
こんなUSB接続でね.
Linux(host) ----> スマホ(device)
それでまずはLinux hostに何等かのバルク転送をさせたいでーす.
PythonのUSBpyで簡単にできるようです.こちらのページなどを参考にします.
ぶっちゃけこういうPython sourceで動きました.簡単でいいや.
VID/PID=18d1/4ee7はAndroid One S5のUSBデバッグモードにおける値です.読者の手持ちのスマホによっては異なる数字かもしれません.その他の詳細説明は参考ページを見てください.
import usb.core
dev = usb.core.find(idVendor=0x18d1, idProduct=0x4ee7)
if dev is None:
raise ValueError('Device not found')
dev.set_configuration()
dev.reset()
cfg = dev.get_active_configuration()
intf = cfg[(0,0)]
ep = usb.util.find_descriptor( intf,
custom_match = lambda e: \
usb.util.endpoint_direction(e.bEndpointAddress) == \
usb.util.ENDPOINT_OUT)
print(ep)
assert ep is not None
ep.write('test')
これを text.py に保存し、Linux上で python3 text.py で動かします.無印pythonだと動きません.importで停まる.
実際にUSBへバルクの"test"が飛んだかどうかは未確認ですが、たぶん飛んでると思います.
ーーーー
ここでひとつ注意があります.
USB deviceとしてAndroid One S5をLinuxへ接続したわけですが、、、
USB接続モードをMTPなどにしておくと上記python codeがエラーで停まります.
usb.core.USBError: [Errno 16] Resource busy
誰かがS5を掴んで離さないみたいです.lsusbで調べますと、
% lsusb -t
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 480M
|__ Port 2: Dev 22, If 0, Class=Vendor Specific Class, Driver=usbfs, 480M
原因はDriver=usbfsです.S5にUSB file systemのデバドラがbindされちゃってました.MTPなのでさもありなんですね.PTPにしたらしたで画像デバドラがbindされちゃうと思われます.
解決するには、USB接続モードをUSBデバッグモードにしておきます.(Linux hostにはAndroid StudioのADBがインストされてないとする)
% lsusb -t
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 480M
|__ Port 2: Dev 19, If 0, Class=Vendor Specific Class, Driver=, 480M
Driver=""のようにフリーになったので上記python codeがちゃんと動きます.
かしこ
0 件のコメント:
コメントを投稿