MC9S08JS8 にGUIアプリケーションを書く (3) [USB]
ハードウェアが出来た。 In-Circuit Program も出来た。 次は、 USB アプリケーションに挑戦です。
前回の記事では、MC9S08JS8で作成したUSBデバイスをPCに認識させました。 今回は、GUIアプリケーションを作成します。
STEP3.1 : 開発環境の準備
アプリケーションの開発には、やはり開発環境が必要です。 トレーニング資料では、Visual C#が使用されていましたが、私は、Visual BASICを使ってみる事にしました。
どちらの言語を使う場合にもVisual Studio 2008 Express Editionを使うことができます。 以前、USB プロジェクト - サンプル・ソフトへの長い道のり(前編)でVisual Studio 2008 Express Editionをダウンロードした時から一年以上の時がすぎました。 当時ダウンロードしたisoファイルから作成したDVDを使おうとしましたが、現在のバージョンはSP1になっているため、すでにインストールできない状態になっていました。 しかたなく、ダウンロードしなおしです。 日本語版が 931MB で、英語版が 748MB でした。
STEP3.2 : GUIアプリケーションの開発
開発環境が準備できたら、いよいよGUIアプリケーションの開発です。 これまで、GUIアプリケーションの開発は、かなりハードルが高かったと記憶しています。 そのため、比較的ライブラリが揃っているHIDの上にアプリケーションを構築しようとしてHIDデバイスをせっせと考えていました。
- USBプロジェクト - ファームウェアに立ち返る (1)
- USBプロジェクト - ファームウェアに立ち返る (2)
- USBプロジェクト - ファームウェアに立ち返る (3)
- USBプロジェクト - ファームウェアに立ち返る (4)
- USBプロジェクト - ファームウェアに立ち返る (5)
- USBプロジェクト - ファームウェアに立ち返る (6)
- USBプロジェクト - ファームウェアに立ち返る (7)
- USBプロジェクト - ファームウェアに立ち返る (8)
- USBプロジェクト - ファームウェアに立ち返る (9)
- USBプロジェクト - ファームウェアに立ち返る (10)
- USBプロジェクト - ファームウェアに立ち返る (11)
- USBプロジェクト - ファームウェアに立ち返る (12)
- USBプロジェクト - ファームウェアに立ち返る (13)
- USBプロジェクト - HIDデバイス(1)
- USBプロジェクト - HIDデバイス(2)
- USBプロジェクト - HIDデバイス(3)
- USBプロジェクト - 複合デバイスを考えた
- USBプロジェクト - HIDデバイス(4)
- USBプロジェクト - HIDデバイス(5)
ただ、HIDデバイス向けのアプリケーションにしても結構な記述量(技量?)が必要です。 結局、サンプルプログラムの範囲を超えられませんでした。 今回は、あんなに苦労をしなくてもアプリケーションが開発できるらしいのです。
トレーニング資料に従って、新しいプロジェクトを作成します。 そして、 SimpleUSB という謎のコンポーネントを Visual Studio のコンポーネント一覧に入れます。 このコンポーネントは、機能は限定されるけれど、簡単にWinUSBを通じたアプリケーションを作成することが出来るラッパ・プログラムのようです。
作成したGUI画面は、こんな風になりました。 USBに接続・切断するための"OPEN"ボタンと"CLOSE"ボタン、それに"LED0"の点灯・消灯を決める"LED0"チェックボックスがウィンドウ上の主な登場人物です。
下の方に表示されているコンポーネント"js8"は、"SimpleUSB"コンポーネントのインスタンスです。 このインスタンスを通じてUSBデバイスとデータのやり取りを行います。 記述したプログラムコードは、以下の通りです。
Public Class MainForm Private Sub openButton_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs _ ) Handles openButton.Click If js8.DeviceConnected Then statusLabel.Text = "Already connected" Else statusLabel.Text = "Opening :" js8.OpenConnection() End If End Sub Private Sub closeButton_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs _ ) Handles closeButton.Click Dim status As SimpleUSB.STATUS_CODE statusLabel.Text = "" status = js8.CloseConnection() statusLabel.Text += status.ToString End Sub Private Sub js8_onDeviceConnect() Handles js8.onDeviceConnect statusLabel.Text += "Connected :" End Sub Private Sub js8_onDeviceDisconnect() Handles js8.onDeviceDisconnect statusLabel.Text += "Disconnected :" End Sub Private Sub led0Cbox_CheckedChanged( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs _ ) Handles led0Cbox.CheckedChanged putLed() End Sub Private Sub putLed() Dim outBuffer(0) As Byte Dim status As SimpleUSB.STATUS_CODE outBuffer(0) = 0 If led0Cbox.Checked Then outBuffer(0) = outBuffer(0) + 1 End If status = js8.WriteData(1, outBuffer, 1) statusLabel.Text = status.ToString End Sub End Class
実行したら、こんなアプリケーションになりました。 "OPEN"ボタンでUSBデバイスに接続し、"LED0"チェック・ボックスでLEDを制御します。 少しサイズが大きいのですが、このリンクを "UsbGuiTrain01.zip" という名前で保存すると、プロジェクト・ディレクトリを再現することが出来ます。
参考サイト
- USBJM_TRAINING: How to make a graphical user interface (GUI) for USB communication
- 今回の記事は、ここで見つけたお話を基にしています。 私がGUI開発に使用したのは、 Visual BASIC でしたが、このサイトでは Visual C# が使用されています。 お好みに合わせて、お使いください。
参考文献
USBハード&ソフト開発のすべて―USBコントローラの使い方からWindows/Linuxドライバの作成まで (TECHI―Bus Interface)
- 作者: インターフェース編集部
- 出版社/メーカー: CQ出版
- 発売日: 2006/07
- メディア: 単行本
USBターゲット機器開発のすべて―各種USBコントローラの使い方と基本ソフトウェアの作成法 (TECHI―Bus Interface)
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2005/08
- メディア: 単行本
Usb Complete: Everything You Need To Develop Custom Usb Peripherals (Complete Guides Series)
- 作者: Jan Axelson
- 出版社/メーカー: Lakeview Research
- 発売日: 2005/06/15
- メディア: ペーパーバック
HID用のC# / VB アプリには、このライブラリが Microchip USB フォーラムで人気です。
USB Hid Device Library
http://labs.mike-obrien.net/Document.aspx?id=hidlibrary
Tsuneo
by Tsuneo (2009-04-29 11:36)
なるほど、みんな考えることは同じなのですね。
もちろん、このライブラリもマイコンを選んだりはしないのですよね。
by noritan (2009-04-30 23:18)
> もちろん、このライブラリもマイコンを選んだりはしないのですよね。
はい。ソースを一通り見た限り、デバイスが通常のvendor-specificな(つまり、マウスやキーボードではない)HIDでありさえすれば、良いようです。
by Tsuneo (2009-05-02 06:08)