2010年06月12日
GPSをUSBに PC側のプログラムサンプル
PC側(Visual C++ 6.0)
USBのドライバーはUUSBD Beta2
UUSBD.INFは以下のように設定
;
; Uusbd setup INF file ver 2.0
; kasiwano masahiro
;
;
;
[Version]
Signature="$CHICAGO$"
Class=UUSBD
ClassGUID={69910468-8802-11d3-ABC7-A756B2FDFB29}
provider=%KASHIWANO%
[ClassInstall]
Addreg=USBClassReg
[ClassInstall32]
Addreg=USBClassReg
[USBClassReg]
HKR,,,,%UUSBDClassName%
HKR,,Icon,,-20
[Manufacturer]
%MfgName%=Kashiwano
[Kashiwano]
;新しいデバイスを追加する場合はこの下に追加するデバイスの
;Vendor ID,Product IDを調べ例にならって記述する。複数行記述可。
;これに対応して[Strings]セクションも変更すること
;
;例
; %USB\VID_0627&PID_0002.DeviceDesc%=UUSBD.Dev, USB\VID_0627&PID_0002
; ~~~~ ~~~~ ~~~~ ~~~~
%USB\VID_04A1&PID_0002.DeviceDesc%=UUSBD.Dev, USB\VID_04A1&PID_0002
;%USB\CLASS_FF.DeviceDesc%=USBD.Dev, USB\CLASS_FF
%USB\VID_04A0&PID_0001.DeviceDesc%=UUSBD.Dev, USB\VID_04A0&PID_0001
[PreCopySection]
HKR,,NoSetupUI,,1
[DestinationDirs]
UUSBD.Files.Ext = 10,System32\Drivers
UUSBD.Files.Inf = 10,INF
[UUSBD.Dev]
CopyFiles=UUSBD.Files.Ext, UUSBD.Files.Inf
AddReg=UUSBD.AddReg
[UUSBD.Dev.HW]
AddReg=UUSBD.AddReg.HW
[UUSBD.Dev.NT]
CopyFiles=UUSBD.Files.Ext, UUSBD.Files.Inf
AddReg=UUSBD.AddReg
[UUSBD.Dev.NT.Services]
Addservice = UUSBD, 0x00000002, UUSBD.AddService
[UUSBD.AddService]
DisplayName = %UUSBD.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 2 ; SERVICE_AUTO_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %10%\System32\Drivers\uusbd.sys
LoadOrderGroup = Base
[UUSBD.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,uusbd.sys
;MaxTransferSizeの値を変更する場合は次の4行のようにして
;値を設定する。
;[UUSBD.Dev.NT.HW]
;AddReg=UUSBD.AddReg.HW
;
;[UUSBD.AddReg.HW]
;HKR,,"MaxTransferSize",0x00010001,0x40000
; ~~~~~~~~ここに値を書く
[UUSBD.Files.Ext]
uusbd.sys
[UUSBD.Files.Inf]
uusbd.Inf
;---------------------------------------------------------------;
[Strings]
KASHIWANO="Kashiwano"
MfgName="Kashiwano soft"
UUSBD.SvcDesc="Universal USB Driver"
UUSBDClassName="UUSBD用USBデバイス"
;
;デバイスを追加したら、ここにそのデバイスの名前を記述すること
;例
; USB\VID_0627&PID_0002.DeviceDesc="Universal USB Driver (Mouse)"
;
USB\VID_04A1&PID_0002.DeviceDesc="Universal USB Driver (RallyConputer)"
USB\VID_04A0&PID_0001.DeviceDesc="Universal USB Driver (GPS_module)"
まずは、USB機器のオープン処理
husb=Uusbd_Open_mask(UU_MASK_VENDOR&&UU_MASK_PRODUCT,0xFF,0xFF,0x04A1,0x0002,0);
if(husb == INVALID_HANDLE_VALUE) {
・・・・・・エラー処理・・・・・・・・・
}
else {
sprintf( charbuf, "USBデバイスと接続しました");
AfxMessageBox(charbuf);
USBOPEN_OK=OK;
EP1 = Uusbd_OpenPipe(husb, 0, 0);// デバイスのインターフェース0パイプ0のハンドルを得る
EP2 = Uusbd_OpenPipe(husb, 0, 1);// デバイスのインターフェース0パイプ1のハンドルを得る
}
オープンがあるならば終了はクローズ処理
ここでパイプを終了しないで!!いきなりハンドルをクローズすると、最悪PCが落ちます
Uusbd_AbortPipe(EP1);//パイプ0をクローズ
Uusbd_AbortPipe(EP2);//パイプ1をクローズ
CloseHandle(EP1);//開いたUSBのハンドルEP1をクローズ
CloseHandle(EP2);//開いたUSBのハンドルEP2をクローズ
Uusbd_Close(husb);
書き込み処理
Write_eroor=WriteFile(EP2, "R\r", 21, &size, NULL);//Rという文字列をUSBバッファに書き込む
if(!Write_eroor){
Uusbd_AbortPipe(EP1);
Uusbd_AbortPipe(EP2);
CloseHandle(EP2);
CloseHandle(EP1);
Uusbd_Close(husb);
sprintf( charbuf, "USBデバイスが抜き取られました。プログラムを再起動して下さい。");
AfxMessageBox(charbuf);
ここに故意にUSBが抜き取られた場合の処理を入れる
}
ブログ一覧 | クルマ
Posted at
2010/06/12 22:04:43
今、あなたにおすすめ