Как читать данные устройства HID с помощью TJvHidDevice - PullRequest
0 голосов
/ 16 февраля 2011

Как читать HID Device Данные с помощью TJvHidDevice в Delphi2010. Я хочу прочитать Ink position (X и Y) из InkTable t. Мое устройство называется DigiMemo, это устройство HID для работы с пером и планшетом. Спасибо всем

1 Ответ

2 голосов
/ 19 февраля 2011

Я использую это для чтения Blu-ray пульта PS3 через USB-ключ Bluetooth на ПК.Вы можете использовать его для чтения любого другого устройства HID, просто нужно немного поэкспериментировать с ним, чтобы получить коды для каждого действия.

function JvHidDeviceController1Enumerate(HidDev: TJvHidDevice; const Idx: Integer): Boolean;
procedure PS3Read(HidDev: TJvHidDevice; ReportID: Byte; const Data: Pointer; Size: Word);

PS3Dev: TJvHidDevice;
PS3Box: TGroupBox;
PS3BDRemote: TCheckBox;
ps3DemoLabel: TLabel;

function JvHidDeviceController1Enumerate(HidDev: TJvHidDevice; const Idx: Integer): Boolean;
Var  Dev: TJvHidDevice;
begin
  if HidDev.ProductName = 'BD Remote Control' then
  begin
   PS3Box.Caption:= 'PS3 - Status: found';
   JvHidDeviceController1.CheckOutByIndex(Dev, Idx);
   Dev.NumInputBuffers := 128;
   Dev.NumOverlappedBuffers := 128;
   Dev.OnData := PS3Read;
   PS3Dev:= Dev;
  end;
   Result := True;
end;

procedure test;
begin
 if not PS3BDRemote.Checked then
 begin
  if Assigned(PS3Dev) then
  begin
   JvHidDeviceController1.CheckIn(PS3Dev);
   PS3Dev.OnData := nil;
   PS3Dev:= nil;
  end;
  PS3Box.Caption:= 'PS3 - Disabled';
 end
 else
 begin
  if not Assigned(PS3Dev) then JvHidDeviceController1.Enumerate
   else PS3Box.Caption:= 'PS3 - Status: found';
 end;
end;

procedure PS3Read(HidDev: TJvHidDevice; ReportID: Byte; const Data: Pointer; Size: Word);
var I: Integer;
  Str: string;
begin
  Str := Format('RD %.2x  ', [ReportID]);
  for I := 0 to Size - 1 do
    Str := Str + Format('%.2x ', [Cardinal(PChar(Data)[I])]);
  MyKillChar(Str,' ',false);
  if Str = 'RD010000080BFFFFFFFFFF0103' then
  begin
   // enter was pressed, do stuff here (button down)   
   Exit;
  end;
  if Str = 'RD01000000FFFFFFFFFFFF0003' then
  begin
   // enter was pressed, do stuff here (button up)
   Exit;
  end;
  ps3DemoLabel.Caption:= Str;
  Logs.Memo1.lines.add(str);
end;
...