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);
}
|
