USB HID y dispositivo de juegos

Muy buena la información. Me bajé el libro USB COMPLETE, y alli encontré mas información sobre el tema, esta un poco mas detallada. Ya empecé a hacer un desarrollo para poner mas señales análogas y digitales, esta en pruebas por ahora. Cuando lo tenga completo, lo subo.

La otra parte del desarrollo que quiero hacer es ponerle el force feedback a la cabrilla, y un sistema de vibración y movimiento de acuerdo al juego. Eso tambien se hace con HID, y toca tener en cuenta unas tablas de PID, no estoy del todo seguro. Voy a seguir investigando, pero si alguno sabe como, le agradezco
 
Que interesante, te corrió la simulación que subí ?

En la nota de aplicación de ST titulada: USING THE ST7263 KIT TO IMPLEMENT A USB GAME PAD, implementan un convertidor de control de PSX a USB HID no la he revisado a fondo pero me parece que manejan lo del force feedback. La otra opción sería que implementaras dicha nota de aplicación pero con un PÏC18F4550 :) en vez del ST7263 . Ahí viene el HID Report completo.
 
no he probado el que subiste. lo hago el fin de semana. Estuve probando uno que encontré en otra pagina, que simula un joystick como los de microsoft, y funciona bastante bien. Voy a seguir trabajando en eso, aunque ahora me tocó dedicarme mas a la parte del force feedback y movimiento. Les estaré contando sobre eso tambien
 
Hola LIAM tengo unas preguntas para hacerte:

1° -
Código:
out_data[0]=ejes; // Ejes X y Y
En esta parte del código aparece que envías 1 byte con los datos de los ejes X e Y. Ahora yo tengo un mando analógico de play conectando el eje X al pin RA0 de un PIC18F2550 y el eje Y conectado al pin RA1.

Mi pregunta sería: Como hago para mandar los 2 valores analógicos de los 2 ejes ?



2° -

Según tu configuración para el mando analógico:
Código:
Si quieres una resolución de 8 bits para los ejes X y Y te quedaría algo así:

0x09, 0x30, // USAGE (X)
0x09, 0x31, // USAGE (Y)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x35, 0x00, // PHYSICAL_MINIMUM (0)
0x46, 0xff, 0x00, // PHYSICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8) bits
0x95, 0x02, // REPORT_COUNT (2)

Tendría el siguiente problema:

http://img26.imageshack.us/my.php?image=pregunta.jpg


Como serían los descriptores si no es mucha molestia, para 8 botones y 1 pad analógico de 8 bits de resolución de 2 ejes?

Gracias por tu ayuda
 
primero tienes que aumentar el tamaño de out_data, hacer la rutina de lecturas análogas a tu gusto y ponerlas en las variables correspondientes (eje_x, eje_y). Cuando vayas a cargar esa información en out_data, lo haces de la siguiente manera:

out_data[0]=eje_x;
out_data[1]=eje_y;
out_data[2]=botones;

El orden que pongas en ese arreglo debe coinciidir con el orden de las variables que estén en el descriptor HID, es decir que el descriptor debe tener primero la información de una variable analoga, luego otra variable análoga y por ultimo 8 botones.
 
alejandroc242 dijo:
primero tienes que aumentar el tamaño de out_data, hacer la rutina de lecturas análogas a tu gusto y ponerlas en las variables correspondientes (eje_x, eje_y). Cuando vayas a cargar esa información en out_data, lo haces de la siguiente manera:

out_data[0]=eje_x;
out_data[1]=eje_y;
out_data[2]=botones;

El orden que pongas en ese arreglo debe coinciidir con el orden de las variables que estén en el descriptor HID, es decir que el descriptor debe tener primero la información de una variable analoga, luego otra variable análoga y por ultimo 8 botones.

No pudo quedar mejor explicado, a ver si lo implemento al rato y subo el código.

Por cierto alejandroc242 como vas con tu proyecto, que pasó con el force feedback ?
 
Puedes usar el HID Descriptor Tool para ayudarte con la elaboración de los descriptores de acuerdo a tus necesidades, en el programa tienes algunos ejemplos. El del joystick sirve para hacer esa aplicación.

La semana pasada encontré una pagina donde está otro desarrollo de este tipo. Lo bajé y lo probé en el PC de la oficina, pero no me funcionaba, decía que no se reconocía el dispositivo. Me dió por probarlo en otras PC de la oficina y funcionó perfectamente. El problema: Aun no se bien.. pero se lo atribuyo a que el usb de mi pc es 1.0 (no estoy seguro, lo digo porque la board es medio vieja) y el de los otros es 2.0.

Ahora: Empecé a hacer las pruebas de mi desarrollo, que es parecido a lo que está haciendo Jonathan, y sucedió todo lo contrario: Mi PC reconoce el dispositivo, pero los otros mas modernos no lo reconocen. Probé el que subió Liamneeson la semana pasada y sucede lo mismo.

Es raro porque conecté un dispositivo de juegos microsoft en los 2 tipos de PC y en ambos los reconoce sin problema. Que creen que sea y como arreglarlo?
 
Moyano Jonathan dijo:
Hola LIAM tengo unas preguntas para hacerte: ....

Te adjunto una imagen de como lo interpreta la PC y tambien te adjunto el descriptor de como queda, ya está probado.

Como dice alejandroc242 los datos que mandas a la PC quedarìan:

alejandroc242 dijo:
primero tienes que aumentar el tamaño de out_data, hacer la rutina de lecturas análogas a tu gusto y ponerlas en las variables correspondientes (eje_x, eje_y). Cuando vayas a cargar esa información en out_data, lo haces de la siguiente manera:

out_data[0]=eje_x;
out_data[1]=eje_y;
out_data[2]=botones;

El orden que pongas en ese arreglo debe coinciidir con el orden de las variables que estén en el descriptor HID, es decir que el descriptor debe tener primero la información de una variable analoga, luego otra variable análoga y por ultimo 8 botones.
 

Adjuntos

  • picture_417.jpg
    picture_417.jpg
    12.6 KB · Visitas: 158
  • usb_gamepad_hid_analog_by_liam_neeson__240309_410.zip
    3.3 KB · Visitas: 200
Hola

me parece muy interesante este proyecto.
si me queda algo de tiempo intentare reconstruir un gamepad de PSone usando su hardware botones palancas analogicas y demas para conactarlo por usb usando el pic 18f2550 o el 4550.
pero mientras seguire el tema muy de cerca.

salu2:)

Edito.

ya probe el programa de Liam y me funciona de maravilla en simulacion. intentare grabarlo y probarlo en el protoboard.
 
Atrás
Arriba