PICでUSBを!(知識ゼロからのスタートです)
PIC18F14K50のUSB機能を100%自前のソフトで制御する試みです。しかもアセンブラで!
当記事は2009年12月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 |
2011.7.10 前へ 次へ 目次へ戻る ホームページトップへ戻る |
☆C++でUSB(HID)アクセスプログラムを作成 PIC側のプログラムはC18コンパイラを使わずPICアセンブラで作成しますが、パソコン側のUSB(HID)アクセスプログラムはBorland C++コンパイラで作成します。 しかしこれがまた難物で悪戦苦闘の連続でありました。 |
[第50回]
●VenderIDとVendorID
HIDテストプログラムのソースリストを見ていて、気がつきました。
いままでずっと、説明としてはVenderIDと書いてきましたが、プログラムをよくよく見てみましたら、VendorIDなのですね。
うっかりしていて、全く気がつきませんでした。
ソースプログラムのその部分です。
HIDD_ATTRIBUTES attr; HidD_GetAttributes( handle, &attr ) ; cout<<"VenderID: " <<attr.VendorID <<endl; cout<<"ProductID: " <<attr.ProductID<<endl; cout<<endl; |
なお、今回のHIDテストプログラムは、ema log(http://emaame.com/20061227.html)様のサイトにありましたソースリストをもとに作成させていただきました。
プログラムを作成する過程では、あちこちのサイトを検索しまわったために、どことどこのサイトを参考にさせていただいたのか、今となってははっきりわかりません。
でも、やっぱりこのままではいかんなあ、ということで、あらためて検索をし直したり、HDDに残っている古いソースリストを調べたりして、上記ema様のサイトにありましたソースプログラムをもとにさせていただいたことがわかりました。
遅くなりましたが、ema様には感謝申し上げます。
念の為に辞書で調べてみましたら、VenderでもVendorでも、どちらでもよいようです。
それならば、ということで、attr.VenderIDに書き直してコンパイルしてみましたら。
やっぱり、VendorIDでなければダメなのだそうです。
●デバイスみつけた!
そろそろ、PICの側のプログラムについての説明に入らなければいけないのですけれど、どこからはじめていったらよいものか、思案中です。
説明することもなかなかむつかしいです。
とりあえず今回のところは、C++のプログラムをもう少し先に進めておくことにいたします。
前回までの説明で、USBに接続されているデバイスのVendorIDとProductIDを検出するところまでできました。
今回は、そのVendorIDとProductIDをチェックして、ターゲットデバイスのhandleを確定するところまでいきたいと思います。
そこまでできれば、そのあとは本当にWriteFile()とReadFile()で、ターゲットデバイスと送受信するだけになります。
前回までのプログラムに以下の部分を付け加えます。
今回付け加える部分は、とても簡単です。
// // VendorIDとProductIDの取得 // HIDD_ATTRIBUTES attr; HidD_GetAttributes( handle, &attr ) ; cout<<"VendorID: " <<attr.VendorID <<endl; cout<<"ProductID: " <<attr.ProductID<<endl; cout<<endl; // //ここから下が追加する部分 // if (attr.VendorID==0x4d8 && attr.ProductID==0xa){cout << "GET!" <<endl;getmk=1;break;} // CloseHandle(handle); } if (getmk==0){cout <<"not found" <<endl;return;} // //write file & read file // // ここにWriteFile()とReadFile()のプログラムを書く // CloseHandle(handle); } |
int getmk=0; HANDLE handle; for( int index = 0; ; index++ ) { |