Bienvenu(e)! Identification Créer un nouveau profil

Recherche avancée

Gamepad HID (32Buttons)

Envoyé par ironglove 
Re: Gamepad HID (32Buttons)
dimanche 17 avril 2011 17:34:29
Bonjour à toi smiling smiley

Merci de me consacrer autant de temps smiling smiley

Je viens de télécharger les codes samples, mais je ne trouve pas d'exemple pour gamepad en HID.
Je vais essayer le Joystick en HID et je te tiens au courant smiling smiley

Edit 1: Ca marche sans bootloader smiling smiley Reconnu en tant que Joystick Demo par Seven smiling smiley
Bon maintenant il me reste à adapter le code et le descriptor smiling smiley

Edit 2: Bon et bien ... ça ne marche pas en faisant mon propre descriptor ...Pour déterminer // Size of this descriptor in bytes

Voila mon descriptor :

ROM struct{BYTE report[HID_RPT01_SIZE];}hid_rpt01={{
  0x05,0x01,        //USAGE_PAGE (Generic Desktop)
  0x09,0x05,        //USAGE (Game Pad)
	0xa1,0x01,     // COLLECTION (Application)
    0x05,0x09,     //   USAGE_PAGE (Button)
    0x19,0x01,     //   USAGE_MINIMUM (Button 1)
    0x29,0x20,     //   USAGE_MAXIMUM (Button 32)
    0x15,0x00,     //   LOGICAL_MINIMUM (0)
    0x25,0x01,     //   LOGICAL_MAXIMUM (1)
    0x75,0x01,     //   REPORT_SIZE (1)
    0x95,0x04,     //   REPORT_COUNT (4)
    0x55,0x00,     //   UNIT_EXPONENT (0)
    0x65,0x00,     //   UNIT (None)
    0x81,0x02,     //   INPUT (Data,Var,Abs)
  0xC0              //END_COLLECTION
}

Et c'est ici que ça pose problème sad smiley
 0x04,    // Size of this descriptor in bytes


Il suffit bien de prendre le nombre de byts qu'occupent les boutons que l'on veut configurer non? Donc dans le cas de 32 boutons, ca devrait faire 0x04. Alors pourquoi il ne reconnait plus le périphérique une fois que je le modifie? sad smiley

je tiendrai le post à jour avec sources pour ceux que ça intéresserait( si je reussis !)



Modifié 3 fois. Dernière modification le 17/04/11 19:59 par ironglove.

Re: Gamepad HID (32Buttons)
lundi 18 avril 2011 20:42:43
Salut,

Je joue actuellement pour placer un petit pad tactile sur mon pc, je compte donc réécrire le code d'exemple de la souris pour le rendre compatible.


Ce qui est vraiment pas mal de faire, c'est d'utiliser ce programme : [www.usb.org]

Il permet de créer le descripteur HID, tu pars de l'exemple que tu as par microchip et tu le réécris au travers du programme, après ça tu comprendras beaucoup plus rapidement comment il est construit et comment le modifier pour en faire un joystick avec 32 boutons.

En soit c'est pas super compliqué je pense, tu dois implémenter dans ton descripteur qu'il va y avoir dans les reports 32 bits variables. Là ou il faut s'y retrouver apres c'est au niveau du firmware microchip, lui faire accepter la nouvelle dimension du descripteur.

A++

Benjamin

.: [www.roboticus.org] :. Control your own world !
Re: Gamepad HID (32Buttons)
mardi 19 avril 2011 07:05:50
Bonjour smiling smiley
Je regarderai ça ce soir alors smiling smiley

Je pense qu'au premier survol de ton lien, qu'il s'agit du même programme que j'utilise pour le descriptor winking smiley
Mais comme je le soupçonne et comme tu le signales, il s'agit d'un problème dans le firmware de microchip...

J'ai compris comment marchait le code au niveau de la détection des boutons et tout, mais je ne bug plus que sur la taille du descriptor xD

Je suis dégouté mais j'ai pas le choix smiling smiley

Bon courage pour ton projet smiling smiley
Re: Gamepad HID (32Buttons)
mardi 19 avril 2011 18:54:01
Bon... J'ai fait ce que tu me recommandais de faire, j'ai recommencé de A a Z pour le descriptor... Mais mon USB n'est toujours " pas reconnu" sad smiley

Aurais tu une idée de l'origine?
Se pourrait il que le descriptor et la taille soit Ok mais que la configuration des touches dans le MAIN soit problématique?
(Par exemple, le descriptor définit des entrées analogiques en origine mais je n'en ai plus (toutes digitales) => Il comprend plus rien.
Est ce possible?
Re: Gamepad HID (32Buttons)
mercredi 20 avril 2011 06:40:12
Salut,

Est-ce Windows qui le refuse? ou Windows le voit-il mais par contre il n'est pas accepté comme joystick?

Poste peut-être ton code, je regarderai (mais je saurai pas avant jeudi)

(Si tu veux fait un MP avec l'archive de tout le code)

A++

Benjamin

.: [www.roboticus.org] :. Control your own world !
Re: Gamepad HID (32Buttons)
mercredi 20 avril 2011 07:09:35
Bonjour smiling smiley

Merci de me proposer ton aide smiling smiley
Je ne sais plus précisément mais j'ai le souvenir qu'il le reconnaissait plus du tout grinning smiley
Tout un temps il reconnaissait le gamepad mais avait une "erreur inconnue" grinning smiley Mais maintenant il le reconnait plus ...
Je te ferai un MP ce soir winking smiley Et je bosserai de mon coté aussi, je recommencerai à Zero et ajouterai un bouton à la fois grinning smiley


A pluch smiling smiley
Re: Gamepad HID (32Buttons)
mercredi 20 avril 2011 12:03:26
Great news everyOne !
J'ai réussi smiling smiley En fait je modifiais la mauvaise ligne du mauvais fichier apparemment ...
Enfin, là ça marche en simulation (Proteus) donc il me reste à tester en "dur" ce soir smiling smiley
Mais j'ai bon espoir.

Si ça marche, je posterai ici ce qu'il faut modifier smiling smiley
Re: Gamepad HID (32Buttons)
mercredi 20 avril 2011 17:21:10
Bon,

Mon PIC est reconnu en tant que Gamepad 32 boutons smiling smiley

Mais c'est pas pour autant qu'il réagit...

Pourrais tu m'éclaircir sur ce point?
Il y a le fichier "HARDWAREPROFILE - PICDEM FSUSB." qui contient ceci en partie :

 #define mInitAllLEDs()      LATD &= 0xF0; TRISD &= 0xF0;
    
    #define mLED_1              LATDbits.LATD0
    #define mLED_2              LATDbits.LATD1
    #define mLED_3              LATDbits.LATD2
    #define mLED_4              LATDbits.LATD3
  	#define mLED_5              LATDbits.LATD5

et le MAIN.C qui contient ceci (mais qui n'arrive pas à se lancer apparemment ...

 if(!HIDTxHandleBusy(lastTransmission))
    {
        //If the button is pressed
        if(Switch3IsPressed())
        {
			
            //Indicate that the "x" button is pressed, but none others
Re: Gamepad HID (32Buttons)
jeudi 21 avril 2011 20:28:29
Salut,

Les defines sont justes des raccourcis, lors de la compilation, les chaines mLED_1, mLED_2 ... sont remplacée par LATDbits.LATDx ...

c'est purement un remplacement de chaine de caractères afin de rendre le code plus claire surtout par rapport aux composants installés sur les sorties (des leds ici). Si maintenant dans ton montage tu places tes leds sur le portb, il te suffit de remplacer les LATD par LATB sans toucher au reste du code... Attention, si maintenant dans ton montage tu as des boutons sur LATD, vérifie que l'ancien code n'écrase pas la configuration de ton trisd pour le remettre en sortie!

Switch3IsPressed est une fonction définie comme:
BOOL Switch3IsPressed(void)
{
    if(sw3 != old_sw3)
    {
        old_sw3 = sw3;                  // Save new value
        if(sw3 == 0)                    // If pressed
            return TRUE;                // Was pressed
    }//end if
    return FALSE;                       // Was not pressed
}//end Switch3IsPressed


avec sw3 un même define que pour les leds mais cette fois ci en entrée
/** SWITCH *********************************************************/
    #define mInitAllSwitches()  TRISBbits.TRISB4=1;TRISBbits.TRISB0=1;
    #define mInitSwitch2()      TRISBbits.TRISB4=1;
    #define mInitSwitch3()      TRISBbits.TRISB0=1;
    #define sw2                 PORTBbits.RB4
    #define sw3                 PORTBbits.RB0


Si tu n'as pas placé de bouton sur RB0 ça risque de poser problème!

.: [www.roboticus.org] :. Control your own world !
Re: Gamepad HID (32Buttons)
vendredi 22 avril 2011 07:08:37
Bonjour smiling smiley

Pour les defines, j'avais bien compris cela comme ça winking smiley

Mais même en changeant les ports et en mettant des ports en entrées pour test + des ports en sorties pour allumer une led, ça déconne.

Par contre j'ai remarqué que même le code de Microchip ne répondait pas correctement... Je faisais un contact et Hop ! Boucle infinie "On-Off" du bouton 2 et des HAT...

Donc je suis en train de monter une plaque sur laquelle je vais travailler - plutôt qu'une breadboard.

Je te tiendrai au courant smiling smiley
Merci smiling smiley
Seuls les utilisateurs enregistrés peuvent poster des messages dans ce forum.

Cliquez ici pour vous connecter