18th
Ноя

Работа с джойстиком через USB

Posted by bullvinkle under Пост-обзор

Пишу приложение по работе с игровым джойстиком через USB-порт. Кто сталкивался с этим? Буду благодарен за любую информацию и ссылки.

Ситуация следующая: к ПК под WinXP подключен джойстик (заранее не определенно, какой джойстик будет подключен), клавиатуры подключенно не будет. Независимо от модели джойстика, необходимо отлавливать и определять нажатия стрелок и двух-трех основных кнопок. Кто что посовеует?

————————————————————————————————-

как правило джойстики являются hid устройствами и драйвера не требуют… работать с ними не очень просто, а бы сказал очень просто через обращения к классам hid/ для облегчения труда разработчиков уже есть такой компонент – JvHidController (прилагаю к сообщению)…

…читаем подключенные hid:

Код:

function TForm1.hidEnumerate(HidDev: TJvHidDevice;
  const Idx: Integer): Boolean;
var n: Integer;
begin
 n:= ListBox1.Items.Add(DeviceName(HidDev));
 Hid.CheckOutByIndex(Dev, Idx);
 Dev.NumInputBuffers      := 128;
 Dev.NumOverlappedBuffers := 128;
 ListBox1.Items.Objects[n]:= Dev;
 Result:= True
end;

читаем данные:

Код:

procedure TForm1.hidDeviceData(HidDev: TJvHidDevice; ReportID: Byte;
  const Data: Pointer; Size: Word);
var i: integer;
    s: string;
    k: longword;
begin
 for i:= 0 to Size - 1 do
  s:= s + Format('%.2x ', [Cardinal(PChar(Data))]);
 caption:= s;
 // тут преобразуем если в двух-байтном
 // например смещением
end;

как узнать что это ваше устройство (фильтруем по VID и PID):

Код:

function DeviceName(HidDev: TJvHidDevice): string;
begin
 if HidDev.ProductName <> '' then Result:= HidDev.ProductName
  else Result:= Format('Device VID=%.4x PID=%.4x',
                       [HidDev.Attributes.VendorID,
                       HidDev.Attributes.ProductID]);
 if HidDev.SerialNumber <> '' then // проверка наличия Serial Num
  Result:= Result + Format(' (Serial=%s)', [HidDev.SerialNumber])
end;

пример чтения-обращения к моему hid термометру прилагаю… думаю разберетесь

пы-сы: если что спрашивайте…

Вложения
Тип файла: zip HID.USB термометр_тестовый прием.zip (242.1 Кб, 70 просмотров)
Тип файла: zip компонент для доступа к HID устройствам.zip (249.3 Кб, 62 просмотров)

Тема на форуме.

Случайные статьи