PICでUSBを!(知識ゼロからのスタートです)
PIC18F14K50のUSB機能を100%自前のソフトで制御する試みです。しかもアセンブラで!
当記事は2009年12月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 2011.7.12

前へ
次へ
目次へ戻る
ホームページトップへ戻る
☆USB(HID)送信プログラム

パソコンからPIC18F2550へデータを送信するプログラムの試験的なものはすでにできています。
そのプログラムをもとに実用的なプログラムに作り上げました。
実用になったHID送信プログラムの説明です。

[第67回]

●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の名前で保存したのです。
CPUをつくろう!第494回(2010.5.5upload)を再編集

PICでUSBを![第67回]
2011.7.12upload

前へ
次へ
目次へ戻る
ホームページトップへ戻る