PDA

Ver la Versión Completa : ¿Como activar los motores de un Joystick mediante JEDI?


tarco35
05-07-2015, 21:48:42
Hola... disculpad si el título no es muy explicito.... lo que estoy buscando es:
Tengo un componente del proyecto JEDI que me permite leer y escribir en los dispositivos HID. Estoy usando un joystick, que me sirve para tener entradas analogicas y digitales, que las controlo sin problema... el problema lo tengo cuando quiero activar los motores (tanto izquierdo como derecho) y decirle con que fuerza que han de girar....

En el descriptor me dice que la salida es un grupo de 7 bytes... pero no se que meter en cada byte para activar estas funciones...

Los motores funciones perfectamente porque desde el controlador de windows puedes activar cada uno por independiente y ponerle la fuerza que quiera....

Espero haberme explicado... gracias

Lenguaje : Delphi 6

nlsgarcia
05-07-2015, 22:36:38
tarco35,


...¿Como activar los motores de un Joystick mediante JEDI?...

:rolleyes:

Pregunto:

1- ¿Que versión de Windows (x32/x64) utiliza tu aplicación?.

2- ¿Que componente JEDI estas utilizando para controlar el Joystick?.

3- ¿A que descriptor te refieres?.

4- ¿Cual es el modelo y marca del JoyStick?, ¿Cuales son sus especificaciones? :confused:

5- ¿Puedes publicar el código en cuestión?.

Espero sea útil :)

Nelson.

tarco35
06-07-2015, 01:06:23
Hola.

1 .- pues se va a usar tanto en 32 bits como en 64, win xp, 7, 8, ... (hasta ahora cuando he usado el componente solo ha sido para lectura)

2 .- el componente es : HidControler para delphi 6

3 . -al descriptor que me refiero es al que informa la interfaz al preguntarle al dispositivo:

"DragonRise Inc. " "Generic USB Joystick " VID=$0079 PID=$0006
Input Report Size=8
Output Report Size=7
Feature Report Size=0

Button Input
============

0)
UsagePage: Button ($0009)
ReportID: 0
IsAlias: False
BitField: 2
LinkCollection: 1
LinkUsage: Undefined ($0000)
LinkUsagePage: Generic Desktop ($0001)
IsRange: True
IsStringRange: False
IsDesignatorRange: False
IsAbsolute: True
UsageMin: 1 UsageMax: 12
StringMin: 0 StringMax: 0
DesignatorMin: 0 DesignatorMax: 0
DataIndexMin: 6 DataIndexMax: 17

1)
UsagePage: FF00 ($FF00)
ReportID: 0
IsAlias: False
BitField: 2
LinkCollection: 1
LinkUsage: Undefined ($0000)
LinkUsagePage: Generic Desktop ($0001)
IsRange: False
IsStringRange: False
IsDesignatorRange: False
IsAbsolute: True
Usage: 1 ($0001)
StringIndex: 0
DesignatorIndex: 0
DataIndex: 18

Value Input
===========

0)
UsagePage: Generic Desktop ($0001)
ReportID: 0
IsAlias: False
BitField: 2
LinkCollection: 1
LinkUsage: Undefined ($0000)
LinkUsagePage: Generic Desktop ($0001)
IsRange: False
IsStringRange: False
IsDesignatorRange: False
IsAbsolute: True
HasNull: False
BitSize: 8
ReportCount: 1
UnitsExp: 0
Units: 0
LogicalMin: 0
LogicalMax: 255
PhysicalMin: 0
PhysicalMax: 255
Usage: Relative Z Axis ($0035)
StringIndex: 0
DesignatorIndex: 0
DataIndex: 0

1)
UsagePage: Generic Desktop ($0001)
ReportID: 0
IsAlias: False
BitField: 2
LinkCollection: 1
LinkUsage: Undefined ($0000)
LinkUsagePage: Generic Desktop ($0001)
IsRange: False
IsStringRange: False
IsDesignatorRange: False
IsAbsolute: True
HasNull: False
BitSize: 8
ReportCount: 1
UnitsExp: 0
Units: 0
LogicalMin: 0
LogicalMax: 255
PhysicalMin: 0
PhysicalMax: 255
Usage: Z Axis ($0032)
StringIndex: 0
DesignatorIndex: 0
DataIndex: 1

2)
UsagePage: Generic Desktop ($0001)
ReportID: 0
IsAlias: False
BitField: 2
LinkCollection: 1
LinkUsage: Undefined ($0000)
LinkUsagePage: Generic Desktop ($0001)
IsRange: False
IsStringRange: False
IsDesignatorRange: False
IsAbsolute: True
HasNull: False
BitSize: 8
ReportCount: 1
UnitsExp: 0
Units: 0
LogicalMin: 0
LogicalMax: 255
PhysicalMin: 0
PhysicalMax: 255
Usage: Z Axis ($0032)
StringIndex: 0
DesignatorIndex: 0
DataIndex: 2

3)
UsagePage: Generic Desktop ($0001)
ReportID: 0
IsAlias: False
BitField: 2
LinkCollection: 1
LinkUsage: Undefined ($0000)
LinkUsagePage: Generic Desktop ($0001)
IsRange: False
IsStringRange: False
IsDesignatorRange: False
IsAbsolute: True
HasNull: False
BitSize: 8
ReportCount: 1
UnitsExp: 0
Units: 0
LogicalMin: 0
LogicalMax: 255
PhysicalMin: 0
PhysicalMax: 255
Usage: Y Axis ($0031)
StringIndex: 0
DesignatorIndex: 0
DataIndex: 3

4)
UsagePage: Generic Desktop ($0001)
ReportID: 0
IsAlias: False
BitField: 2
LinkCollection: 1
LinkUsage: Undefined ($0000)
LinkUsagePage: Generic Desktop ($0001)
IsRange: False
IsStringRange: False
IsDesignatorRange: False
IsAbsolute: True
HasNull: False
BitSize: 8
ReportCount: 1
UnitsExp: 0
Units: 0
LogicalMin: 0
LogicalMax: 255
PhysicalMin: 0
PhysicalMax: 255
Usage: X Axis ($0030)
StringIndex: 0
DesignatorIndex: 0
DataIndex: 4

5)
UsagePage: Generic Desktop ($0001)
ReportID: 0
IsAlias: False
BitField: 66
LinkCollection: 1
LinkUsage: Undefined ($0000)
LinkUsagePage: Generic Desktop ($0001)
IsRange: False
IsStringRange: False
IsDesignatorRange: False
IsAbsolute: True
HasNull: True
BitSize: 4
ReportCount: 1
UnitsExp: 0
Units: 20
LogicalMin: 0
LogicalMax: 7
PhysicalMin: 0
PhysicalMax: 315
Usage: Hat Switch ($0039)
StringIndex: 0
DesignatorIndex: 0
DataIndex: 5

Value Output
============

0)
UsagePage: FF00 ($FF00)
ReportID: 0
IsAlias: False
BitField: 2
LinkCollection: 2
LinkUsage: 0 ($0000)
LinkUsagePage: FF00 ($FF00)
IsRange: False
IsStringRange: False
IsDesignatorRange: False
IsAbsolute: True
HasNull: False
BitSize: 8
ReportCount: 7
UnitsExp: 0
Units: 0
LogicalMin: 0
LogicalMax: 255
PhysicalMin: 0
PhysicalMax: 255
Usage: 2 ($0002)
StringIndex: 0
DesignatorIndex: 0
DataIndex: 0


4 .- el modelo y marca: es generico, no tiene una marca especifica, (de forma es igual que los mandos de la play 3) con feedback

5 .- no se a que codigo te refieres.... si es el código de programa es:

procedure TForm1.WriteBtnClick(Sender: TObject);
var
I: Integer;
Buf: array [0..64] of Byte;
Written: Cardinal;
ToWrite: Cardinal;
Str: string;
begin
if Assigned(CurrentDevice) then
begin
Buf[0] := StrToIntDef('$' + ReportID.Text, 0);
ReportID.Text := Format('%.2x', [Buf[0]]);
ToWrite := CurrentDevice.Caps.OutputReportByteLength;
for I := 1 to ToWrite-1 do
begin
Buf[I] := StrToIntDef('$' + Edits[I-1].Text, 0);
Edits[I-1].Text := Format('%.2x', [Buf[I]]);
end;
CurrentDevice.WriteFile(Buf, ToWrite, Written);
Str := Format('W %.2x ', [Buf[0]]);
for I := 1 to Written-1 do
Str := Str + Format('%.2x ', [Buf[I]]);
HistoryListBox.ItemIndex := HistoryListBox.Items.Add(Str);
end;
end;


La lectura de todos los botones y las palanca se realiza bien.

Lo que necesito saber es que valores hay que enviar para activar esos motorcitos... creo que son dos parametros: tiempo en milisegundos y motor izquierdo / derecho ... pero esto no lo se seguro, es una suposicion mia

Si necesitas alguna info mas, solo pedirla
gracias

MaxiDucoli
05-08-2019, 23:18:13
Hola!!!!!
Tiene un fuente de como leer los datos de un Joystick o GamePAd con el componente TJVHIDDeviceController????
Me ayudarías a saber como leer los botones, palancas, etc,etc con ese componente, por favor?
No encuentro nada de nada por la WEB, más que solamente el ejemplo que trae el componente.