Microchip社デモソフトPICとUSB通信を行なう場合、マイクロチップ社から提供(公開)されているいるUSBフレームワークのCDCクラスを使うPC側のソフトはサンプルソフトがマイクロチップ社のHPに公開されています。Communicationフォルダに収納されているVC++Cのサンプルプログラムです。DM163025)($59.99ドル)用デモソフトのPC側ソフトです。ソースコードの変更は行なっていません。全体&PIC側を参照願います。API関数により以下のような通信が可能となります。//書き込むデリゲート関数を宣言する。//デザインに係る要求事項が記載されている。//ということである。//全COMポートのチェック、すでにリストにあったポートがチェックする。//この関数にはすべてのCOMポートからのデータが入ってくる。//この関数はメインスレッドとは別のスレッド上にある。//メインスレッドへのアクセスはデリゲート関数が必要となる。//デリゲート関数へのインスタンスを生成し、SetText()関数へ割り当てる。リッチテキストボックスに表示される。Termで受信し、これをウィンドウに表示する。キーイン後、エンターキーを押しRS232C経由でPIC側(PICDEM相当)にデータを送信する。�APIC側では受信データをそのままUSBケーブル経由でPC側に送信する。�BPC側ではPICDEMデモソフトの右記ウィンドウのリッチテキストボックスで受信データを表示する。全体&PIC側参照(注)TeraTermのローカルエコーがONであるのでキーインしたデータが表示されている。液晶付)の例を紹介します。CDCクラス通信で送信する。・PIC側では受信した文字列を液晶上段に、受信データに基づき返信したデータを液晶下段に表示する。・PC側でも受信したデータをテキストボックスに表示する。PIC側からの返信データは以下とする。//書き込むデリゲート関数を宣言する。//ということである。//全COMポートのチェック、すでにリストにあったポートがチェックする。//この関数にはすべてのCOMポートからのデータが入ってくる。//この関数はメインスレッドとは別のスレッド上にある。//メインスレッドへのアクセスはデリゲート関数が必要となる。//デリゲート関数へのインスタンスを生成し、SetText()関数へ割り当てる。必要なデザイナ変数です。サポートに必要なメソッドです。エディタで変更しないでください。PC側のウィンドウから仮想COM8ポートを選択してを接続ボタンをクリックする。選択して送信ボタンをクリックする。液晶の上段に表示されています。プログラムで選択され、これを液晶下段に表示されています。同時にPC側にも送信されています。受信データ用テキストボックスに表示しています。返信された場合も表示されています。返信された場合も表示されています。PICとUSB通信を行なう場合、マイクロチップ社から提供(公開)されているいるUSBフレームワークの汎用クラスを使うPC側のソフトはサンプルソフトがマイクロチップ社のHPに公開されています。Express\Codeフォルダに収納されているVC++Cのサンプルプログラムです。DM163025)($59.99ドル)用デモソフトのPC側ソフトです。ソースコードの変更は行なっていません。全体&PIC側を参照願います。API関数により以下のような通信が可能となります。汎用(Generic)クラス通信で送信する。Model)ドライバを用いる・PIC側からの送信データは8msec毎にPC側におくり、PC側では送られてきたデータをステータスバーに表示する。Play)によりアタッチの自動検出を支障なく実施してステータスバー表示がすみやかにできること。マイクロチップのヘッダーファイルは末尾にUMがついている。_DEVICECHANGEメッセージを受信する場合は以下の関数が必要となる。//Windowsから通知されるWM_DEVICECHANGEメッセージを使用します。//別スレッドにしないと関数やユーザインターフェースに支障がでることがある。)の遅れが必要である。//8msec毎にインターバルタイマがONしたときグローバル変数を読み取りユーザインターフェースのウィンドウが更新される。//WM_DEVICECHANGEには多々ある。接続したPICからとは限らない。MCHPUSBPnPDemo<動作結果>PIC側ターゲットボードの可変抵抗器電圧値を8msec毎に読み込みステータスバーに表示が行なわれている。PICとUSB通信を行なう場合、マイクロチップ社から提供(公開)されているいるUSBフレームワークの汎用クラスを使うPC側のソフトはサンプルソフトがマイクロチップ社のHPに公開されています。Express\Codeフォルダに収納されているVC++Cのサンプルプログラムです。DM163025)($59.99ドル)用デモソフトのPC側ソフトです。ソースコードの変更は行なっていません。全体&PIC側を参照願います。API関数により以下のような通信が可能となります。汎用(Generic)クラス通信を用いる。・デバイスドライバとしてはWinUSBを使用する・PCのウィンドウ上のボタンによりPIC側基板上にあるLEDをON/OFFする。・PIC側キバン上のスイッチをON/OFFした場合のをモニタPC側ウィンドウ上に表示する。WDKドライバーをつかってコンパイルするには以下のファイルをインクルードする必要がある。PCにセットアップする必要がある。マイクロチップのUSB関連のファイルと全く同名のファイルも//あるのでインクルードに際しては注意する必要がある。c:\WinDDK\6001.18002\inc\ddkフォルダにコピーしてコンパイルを//実施した。.NETのマネージド環境でも、アンマネージドの関数を使用するには.dllをインポートすればよい。ある我々がすでに使用している関数との混乱をさけるためである。条件付きコンパイルができるようにできるように下記プリプロセッサを記載しておく。われわれはアプリケーションをUSBデバイスを検出して、接続しなければならない。デバイスが接続されているが、デバイスの選択はユニークなベンダーIDとプロダクトIDで行なわれる。マイクロソフトからはUSBデバイスに係る下記関数がMSDNライブラリの中に提供されている。関連のデータ型は下記である。//指定されたGUIDに適合したUSBデバイスが現存するかチェックする。現存するとハンドルが返ってくる。現存しないと0が返ってくる。//レジストリからハードウェアIDを回復する。ハードウェアIDにはVIDとPIDも含まれる。SP_DEVINFO_DATA構造に初期化する。この構造はSetupDiGetDeviceRegistryProperty()関数で必要となる。//最初の質問はハードウェアIDのサイズである。この結果データ用のバッファーサイズが決まる。//WinUSBインターフェースハンドルをオープンする。実際のデバイスパスが必要となる。//関数により取得する。この関数は2回使用する。1回目は要求構造サイズと詳細インターフェースのバッファーサイズを取得するために使用する。//2回目は実際に構造を取得する。WinUsb_ReadPipe()関数を使ってエンドポイントの読み書きができる状態です。PIC側キバン上のLED点灯/消灯のコマンドである。PIC側キバン上のスイッチの状態取得のコマンドである。//InputPacketBuffer[0]は送信コマンドのエコーバックである。//InputPacketBuffer[1]はPIC側キバン上のスイッチの状態に対するI/Oポートの値である。PIC側PC側からウィンドウ上のトグルスイッチをクリックして、PIC側キバン上のLEDをON/OFFしているところです。PIC側キバン上のスイッチON/OFFをモニタしているところです。送受信の例を紹介します。Express\Codeフォルダに収納されているVC++Cのサンプルプログラムを参考にして作成したものです。汎用クラス通信で送信する。・ドラバーはWinUSBドライバーを使用する。・送信文字コードはシフトJISを使用する・PIC側では受信した文字列を液晶上段に、受信データに基づき返信したデータを液晶下段に表示する。・PC側でも受信したデータをリストボックスに表示する。PIC側からの返信データは以下とする。WDKドライバーをつかってコンパイルするには以下のファイルをインクルードする必要がある。PCにセットアップする必要がある。マイクロチップのUSB関連のファイルと全く同名のファイルも//あるのでインクルードに際しては注意する必要がある。c:\WinDDK\6001.18002\inc\ddkフォルダにコピーしてコンパイルを//実施した。.NETのマネージド環境でも、アンマネージドの関数を使用するには.dllをインポートすればよい。条件付きコンパイルができるようにできるように下記プリプロセッサを記載しておく。われわれはアプリケーションをUSBデバイスを検出して、接続しなければならない。デバイスが接続されているが、デバイスの選択はユニークなベンダーIDとプロダクトIDで行なわれる。マイクロソフトからはUSBデバイスに係る下記関数がMSDNライブラリの中に提供されている。関連のデータ型は下記である。//指定されたGUIDに適合したUSBデバイスが現存するかチェックする。現存するとハンドルが返ってくる。現存しないと0が返ってくる。//レジストリからハードウェアIDを回復する。ハードウェアIDにはVIDとPIDも含まれる。SP_DEVINFO_DATA構造に初期化する。この構造はSetupDiGetDeviceRegistryProperty()関数で必要となる。//最初の質問はハードウェアIDのサイズである。この結果データ用のバッファーサイズが決まる。//WinUSBインターフェースハンドルをオープンする。実際のデバイスパスが必要となる。//関数により取得する。この関数は2回使用する。1回目は要求構造サイズと詳細インターフェースのバッファーサイズを取得するために使用する。//2回目は実際に構造を取得する。WinUsb_ReadPipe()関数を使ってエンドポイントの読み書きができる状態です。必要なデザイナ変数です。サポートに必要なメソッドです。エディタで変更しないでください。Japanを送信した時にPIC側から実際に返信されるデータは、0x938c(東)0x8b9e(京)です。ffはコンパイラC18のバグ(?)か、制御文字の場合の仕様によるもので実際には送信データに含まれていません。