FrontPage
2011/09/02からのアクセス回数
2011年9月9日のトラ技オフ会にそなえて、これまで調べた
をまとめて見ることにしました。
電子工作でUSBデバイスを作る場合に問題となるのは、
等がありました。
これに対する解が、 http://www.amazon.co.jp/dp/4274501868/ で紹介されている、
でした。これを試してみたのが、
でした。
しかしながら、ARMマイコンパーフェクト学習基板でUSBのデバイスを作成しようとすると、 USB-ROMのドライバーを使用するため、avr/USB接続で行ったusb_control_msg関数 で情報を受け渡しする方法が使えません。
そこで、libhidを使ってARMマイコンパーフェクト学習基板を制御することにしました。 ( arm/libhidでARMマイコンパーフェクト学習基板にアクセス参照)
つぎに、OSに依存しないアプリケーションを作成するために、libhidを参考にjavaで ARMマイコンパーフェクト学習基板にアクセスしてみました。 (arm/JavaからARMマイコンパーフェクト学習基板にアクセス参照)
今回の発表に備えて、javaで作ったGUIを持つHIDクライアントソフトから、
ARMマイコンパーフェクト学習基板に接続したブレッドボードのLEDとスイッチ を制御してみることにしました。
ここまで、OSやドライバーに依存しない環境を求めてきたので、 開発環境もOSに依存しないものにしました。
arm/CodeBaseを使ったARMマイコンパーフェクト学習基板の使い方で紹介しましたCodeBaseは、 GCCベースのコンパイラーを使ったLPC1343用のライブラリーです。
元々は、 http://www.microbuilder.eu/Projects/LPC1343ReferenceDesign.aspx に開発されたみたいですが、今はBSD licenseで公開されているます。
CodeBaseでは、projectconfig.hでデバイスの配置を定義しています。 HIDデバイスを作成する場合には、
をセットする必要があります。
/* USB Configuration */
/* Printf Redirection */
}}
また、USB-Romから呼び出されるHID要求関数(core/usbhid-rom/usbhid.c)
を以下のように修正しました。
void usbHIDGetInReport (uint8_t src[], uint32_t length) {
}
void usbHIDSetOutReport (uint8_t dst[], uint32_t length) {
} }}
ここでは、main.cにあるtargetUsbHIDxxxxReport関数に処理を委譲するだけです。 実際の、処理はinput関数を使ってボードのスイッチの4bitを読み込む処理とoutput関数を使ってLEDを 点灯させる処理をします。
void targetUsbHIDGetInReport (uint8_t src[], uint32_t length) {
}
void targetUsbHIDSetOutReport (uint8_t dst[], uint32_t length) {
} }}
こんなに簡単な処理で、オリジナルのUSB HIDデバイスを作成することができます。以下にmain.cをアップします。
javaでのGUIはEclipseのプラグインVisualEditorを使って簡単に作成できます。 ほとんどお絵かき状態!
arm/JavaからARMマイコンパーフェクト学習基板にアクセスで作成したGeneric1ByteHIDの使い方は、 ともて簡単です。
mainメソッドでFrameのhidにGeneric1ByteHIDをセットし、その後のwhile文で定期的にPollingするだけです。
}}
USB HID Clientのソース一式を以下にアップします。
ブレッドボードでの実験には、 http://www.embeddedartists.com/products/boards/lpc1343_qsb.php
がお薦めです。
皆様のご意見、ご希望をお待ちしております。