⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 基于DELPHI的API
💻 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 + -