壊れたメガネ

ホッチキスの達人の意識の高いブログ。

PHP で USB デバイスを制御したい

PHP の libusb-1.0 バインディングを書いています。
libusb: Modules にある API をそのまんま移植する形で書いています。( Asynchronous device I/O と Polling and timing は手をつけていません。)

USB の勉強がしたくて libusb を用いて C でプログラムを書いていたのですが、思ったより面倒くさかったので PHP で書けたらいいな〜と思ってこの PHP 拡張を書き始めました。
現状は isochronous transfer 以外の転送方法 (control, bulk, interrupt) を実装しています。
いろいろな USB Class で遊んであとにオブジェクト指向API を用意する予定です。

この拡張を用いて USB プリンタで遊んで見ました。

USB プリンタ (Canon iP2700)

f:id:oasynnoum:20130322005600j:plain

試した PHP スクリプト
print2ip2700.php

結果

f:id:oasynnoum:20130321015200j:plain

無残な結果に。。
この PHP スクリプトの印刷データを用意するあたりを見ていただければ分かりますが、僕はプリンタに送るデータをどのように用意すればいいのか分からなかったので、Wireshark でキャプチャしたそれらしいデータを bulk transfer でプリンタに送りつけたらこうなりました。
この辺は USB Printer Class というより、プリンタドライバを読んで勉強するあたりなんだろうと思います。
というわけでこの php-usb はそれなりに動いているようです。