| B級なPowerMateの研究(ミドルウェア編) | ||||||||||||||||||||||||||||||||||||||||||
| Sorry, this page is written in Japanese(ISO-2022-JP). | ||||||||||||||||||||||||||||||||||||||||||
![]() |
|
|||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
■目次■USBディスクリプタの解説PowerMateは以下のようなディスクリプタを返します.
[Device]
Class .................. 0
Subclass ............... 0
Protocol ............... 0
Vendor ID .............. 0x077d
Product ID ............. 0x0410
Version ................ 0x0109
Manufacturer String .... "Griffin Technology, Inc."
Product String ......... "Griffin PowerMate"
Serial Number .......... ""
[Configuration 0]
[Interface 0]
Class .............. 3
Subclass ........... 1
Protocol ........... 2
[Endpoint 0]
MaxPacketSize .... 3
Interval ......... 10
Type ............. Interrupt
Direction ........ Output
このディスクリプタを見る限り,PowerMateはデバイスクラス0,サブクラス0,プロトコル0の HID(Human Interface Device)として働きます.すなわちUSBマウスと同類ということです. 参考までに,USBマウス(ロジテックOEM N48)のディスクリプタを次に示します.
[Device]
Class .................. 0
Subclass ............... 0
Protocol ............... 0
Vendor ID .............. 0x046d
Product ID ............. 0xc001
Version ................ 0x0401
Manufacturer String .... "Logitech"
Product String ......... "N48"
Serial Number .......... ""
[Configuration 0]
[Interface 0]
Class .............. 3
Subclass ........... 1
Protocol ........... 2
[Endpoint 0]
MaxPacketSize .... 8
Interval ......... 10
Type ............. Interrupt
Direction ........ Output
唯一普通のマウスと異なるのは,Endpoint 0に対するMaxPacketSizeが3バイトであるところです. 普通はEndpoint 0(コントロールエンドポイント)に対しては8バイトです. ディスクリプタとしては他に特筆すべきところはありません. ■USBコマンドの解説PowerMateは,Endpoint 0のInterrupt Out転送で得られる3バイトのデータを用いて, ダイヤルの左右回転,ダイヤルのクリックをPC(ホスト)側に通知します. また,PC(ホスト)はInterface 0へのVendor RequestによってLEDの発光状態を 制御します. 以下にダイヤルの状態を示すコントロールOUTエンドポイントの 3バイトのフォーマットを示します.
以下にLEDの発光状態を制御するためのInterfaceへの Vendor Requestのフォーマットを示します.
さて,解説はここまでにしてここからがB級なPowerMateの実践研究です. ■実践研究以下の例ではBeOS R5.0.3で実験を行なっています. 例題1: LEDを制御するでは例によってBeOS on x86を使って,LEDを制御してみましょう. ここではpokeコマンドを叩いて簡単に試すワケにもいかないので, 簡単なアプリを作って制御します. とりあえず,BeOSのusbkitのmouse.cppを改造したモノがこれ.(ソース) $ gcc -c pmled.cpp $ gcc -o pmled pm.o ../usb/USBKit.a -lbe で,以下のようにターミナルから実行します. $ ./pmled /dev/bus/usb/0/0 実行後,PowerMateのダイヤルを回すと,PowerMateのLEDが右に回すと明るく, 左に回すと暗くなるハズです. なお,一旦Control-Cで実行を中止した後, 再度実行してもLEDの明度は変わりません. なぜかはよくわかりません. |
||||||||||||||||||||||||||||||||||||||||||
| [B技研TOPへ戻る] [B級なミドルウェアの研究へ戻る] | ||||||||||||||||||||||||||||||||||||||||||
| Copyright (c) 2002 Shuichi NAKAMURA All rights
reserevd. You can link this page freely. |
||||||||||||||||||||||||||||||||||||||||||