📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Menus,
HidControllerClass, Hid;
type
// the simple form we show
THidReadWriteDemoForm = class(TForm)
MainMenu: TMainMenu;
QuitMenuItem: TMenuItem;
FileMenu: TMenuItem;
Button1: TButton;
procedure FormCreate (Sender: TObject);
procedure QuitMenuItemClick(Sender: TObject);
procedure Button1Click (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
HidController: TJvHidDeviceController;
end;
var
HidReadWriteDemoForm: THidReadWriteDemoForm;
implementation
{$R *.DFM}
const
crlf = #13#10;
procedure THidReadWriteDemoForm.FormCreate(Sender: TObject);
begin
HidController := TJvHidDeviceController.Create(Self);
end;
procedure THidReadWriteDemoForm.QuitMenuItemClick(Sender: TObject);
begin
Close;
end;
// "Wim van der Vegt" <Wim.vanderVegt@ou.nl>
// I've updated & debugged the sample procedure i wrote for accessing the
// Cypress demo from lvr.
// It now uses SetUsageValue & GetUsageValue and worked fine under w2k.
// came down to supplying the correct usage values (i extracted them with
// the HIDClient sample from the NTDDK).
// This sample and it's data is rigged to the www.lvr.com hid sample
// for the cypress evaluation board. The sample takes 2 bytes for
// 'output report id 0' and adds one to each byte for returning
// it during 'input report id 0'.
procedure THidReadWriteDemoForm.Button1Click(Sender: TObject);
var
buffer: array [0..8] of Byte;
towrite: DWORD;
toread: DWORD;
red: DWORD;
written: DWORD;
u: DWORD;
HidDev: TJvHidDevice;
begin
if HidController.CheckOutByID(HidDev,$0925,$1234) then
begin
ZeroMemory(@buffer,Sizeof(buffer));
buffer[0] := $00; // report id 0
HidDev.ReportTypeParam := HidP_Output;
HidDev.LinkCollectionParam := 0;
HidDev.UsagePageParam := $ffa1;
// Set Cap #0, Usage(0x06) to 0x23
HidDev.UsageParam := $06;
u := $22;
if HidDev.SetUsageValue(u,buffer,3) = HIDP_STATUS_SUCCESS then
ShowMessageFmt('SetUsageValue(0x0%X) to 0x0%X',[HidDev.UsageParam,u]);
// Set Cap #1, Usage(0x05) to 0x21
HidDev.UsageParam := $05;
u := $21;
if HidDev.SetUsageValue(u,buffer,3) = HIDP_STATUS_SUCCESS then
ShowMessageFmt('SetUsageValue(0x0%X) to 0x0%X',[HidDev.UsageParam,u]);
towrite := HidDev.Caps.OutputReportByteLength;
written := 0;
if HidDev.WriteFile(buffer,towrite,written) then
ShowMessageFmt('Check :' + crlf + 'Report ID=%d,' + crlf +
'Values Written : 0x%2.2x - 0x%2.2x,' + crlf +
'%d out of %d bytes written.',
[buffer[0], buffer[1], buffer[2], written, towrite])
else
ShowMessageFmt('Lasterror(%d).',[GetLastError]);
ZeroMemory(@buffer,Sizeof(buffer));
toread := HidDev.Caps.InputReportByteLength;
red := 0;
if HidDev.ReadFile(buffer,toread,red) then
begin
ShowMessageFmt('Check : ' + crlf + 'Report ID=%d,' + crlf +
'Values Read : 0x%2.2x - 0x%2.2x,' + crlf + '%d out of %d bytes read.',
[buffer[0], buffer[1], buffer[2], red, towrite]);
// Dump made with HIDClient from the NTDDK,
// Don't start HIDClient with devices plugged
// in or it will crash.
// Input cap #0 cap #1
// Report ID 0x00
// Usage Page 0xffa1
// Bit Size 0x8
// Report Count 0x1
// Unit Exp 0x0
// Has Null 0x0
// Usage 0x4 0x3
// DataIndex 0x0 0x1
// Physical Min 0
// Physical Max -1
// Logical Min 0xffffff80 (-128)
// Logical Max 0x7f (+127)
// String Index 0x0
// Designator Index 0x0
// Absolute Yes
// Output cap #0 cap #1
// Report ID 0x00
// Usage Page 0xffa1
// Bit Size 0x8
// Report Count 0x1
// Unit Exp 0x0
// Has Null 0x0
// Usage 0x6 0x5
// DataIndex 0x0 0x1
// Physical Min 0
// Physical Max -1
// Logical Min 0xffffff80 (-128)
// Logical Max 0x7f (+127)
// String Index 0x0
// Designator Index 0x0
// Absolute Yes
HidDev.ReportTypeParam := HidP_Input;
HidDev.LinkCollectionParam := 0;
HidDev.UsagePageParam := $ffa1;
// Fetch Cap #0, Usage($04)
HidDev.UsageParam := $04;
if HidDev.GetUsageValue(u,buffer,3) = HIDP_STATUS_SUCCESS then
ShowMessageFmt('GetUsageValue(0x0%X)=0x0%X',[HidDev.UsageParam,u]);
// Fetch Cap #1, Usage($03)
HidDev.UsageParam := $03;
if HidDev.GetUsageValue(u,buffer,3) = HIDP_STATUS_SUCCESS then
ShowMessageFmt('GetUsageValue(0x0%X)=0x0%X',[HidDev.UsageParam,u]);
end
else
ShowMessageFmt('Lasterror(%d).',[GetLastError()]);
HidController.CheckIn(HidDev);
end
else
ShowMessage('CheckOut Failed.');
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -