2012年1月31日火曜日

libusb with pyUSB

pythonでUSBを使わなければならなかったので、試行錯誤の結果をメモ。
必要なもの。
1. libusb
2. pyUSB
3. SnoopyPo

ターゲットはUSB接続のA/D、D/Aモジュール。windows XPまでしかサポートされていないがwindows 7で使いたい。
1)開発環境はUbuntuなのでlibusbとpyUSBはapt-getでinstall
2)SnoopyPoでUSB通信を傍受。使い方は同梱のsnnopy_pro.txtに書いてある。xmlにexportしてBULK_OR_INTERRUPT_TRANSFERのendpointとpayloadbytesに注目
例えば今回の8bitD/A出力だと
    <urb    sequence="13">
        <function>
            BULK_OR_INTERRUPT_TRANSFER
        </function>
        <endpoint>
            -1
        </endpoint>
        <packetcount>
            1
        </packetcount>
        <payload    packet="0">
            <payloadcount>
                4
            </payloadcount>
            <payloadbytes>
                29033300
            </payloadbytes>
        </payload>
    </urb>
 となっている。
3)pyUSBの基礎は他を当たってね。
4)2)の情報からD/A出力は
usb_dev.handle.interruptWrite(usb_dev.endpoints[0].address, [0x29, 0x03, 0xff, 0x34], timeout)

追記:

http://www.jespersaur.com/drupal/book/export/html/21
http://www.cs.indiana.edu/~bpisupat/work/usb.html
http://www.ladyada.net/learn/diykinect/
http://www.linuxjournal.com/article/7353
http://tali.admingilde.org/linux-docbook/writing_usb_driver.pdf
http://www.reactivated.net/weblog-content/20050806-reverse-0.2.txt
http://matthias.vallentin.net/blog/2007/04/writing-a-linux-kernel-driver-for-an-unknown-usb-device/

0 件のコメント:

コメントを投稿