標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第494回]
●HID送信プログラム(バイナリファイル読み込み)
今まで説明をしておりましたHID送信プログラムはHTXファイル(16進数データをASCIIコードで書いたファイル)を読み込んで、それをバイナリコードに変換してHIDで送信するものでした。
今回は今までのプログラムをちょいと変更して、バイナリファイルを読み込んでそのままHIDで送信するようにしてみました。
//from hidwr2f //hidwr3 //for ND80Z write // //10/5/3 // #include <windows.h> #include <setupapi.h> extern "C" { #include "hidsdi.h" } #include <iostream.h> #pragma comment(lib, "hid.lib") // HANDLE handle; int hidget(); FILE *rfp; char *fname; // void main(int argn,char *args[]) { cout << hex; fname=args[1]; //file open if(!(rfp=fopen(fname,"rb"))) { printf("ファイル名が指定されていないかまたはファイルがみつかりません %s\n",fname); return; } // get hid handle if (!hidget()){cout <<"hid device is not found" <<endl;return;} // DWORD nwrite=65;//not 64! DWORD nwritn=0; unsigned char wbf[65]="\0"; //read file int n; int inbfn; int dtbyte=0; fseek(rfp,0,SEEK_END); inbfn=ftell(rfp); fseek(rfp,0,SEEK_SET); while(inbfn!=0) { // data set to wbf,max 63 bytes for (n=0;n<63;n++,dtbyte++,inbfn--) { if (inbfn==0)break; wbf[n+2]=fgetc(rfp); } wbf[1]=n;//set number of send data to wbf[1] if (dtbyte<=63)printf("s=%x,e=%x\n",wbf[2]*256+wbf[3],wbf[4]*256+wbf[5]); // send data (64bytes) if(!WriteFile(handle,&wbf,nwrite,&nwritn,NULL))cout<<"write error"<<endl; } printf("send data %d(=%x) bytes\n",dtbyte,dtbyte); fclose(rfp); CloseHandle(handle); }
main()はここまでです。
main()に続くhidget()関数は今までのHID送信プログラムと同じですから、今回は省略しました。
今回はファイルを読み込んでそのままwbf[]バッファに書き込めばよいので、そこのところは前回のプログラムよりも簡単になってしまいました。
今回作成したHIDプログラムを実行した画面です。
sound4.btkは、先頭にアドレス情報を付加したバイナリファイルです。
拡張子binのバイナリファイルと区別するために、btkという拡張子を使いました。
TK80用のbinファイルという意味です。
その下のところで、念の為に、sound4.btkのファイルの中身を表示させてみました。
debugコマンドを使うと、簡単に確認をすることができます。
バイナリデータで構成されていて、先頭にアドレスデータがあることがわかります。
え?
sound4.btkはどうやって作ったのか?ですか。
HID受信プログラムを実行して受信したデータをバイナリのまま、sound4.btkの名前で保存したのです。
2010.5.5upload
前へ
次へ
ホームページトップへ戻る