Help sur l’utilisation de Lowlevel.library

6 sujets de 1 à 6 (sur un total de 6)

  • Sharynn

      #9966

      Hello AmiWorld!!!

      Dans un petit projet que je fais actuellement, j’ai besoin d’utiliser la Lowlevel.library pour remonter les infos souris, clavier et joystick.

      Je sais le faire en Asm68k, mais mon projet est en C et pour un soucis de portage possible, je voudrais utiliser les librairies systèmes connues et ne pas aller plonger dans les registres systèmes du Miga.

      Je n’arrive pas à utiliser les fonctions : SetJoyPortAttrsA ou SetJoyPortAttrs et ReadJoyPort.

      Impossible d’avoir des valeurs en retour…

      Connaissez-vous comment cela marche et/ou avez-vous des bouts de sources avec l’utilisation de la librairie.

      Merki par avance

      :-D

      Amos un jour, Amos Toujours
      -----------------------------------
      AmOS4 - Library Amos sous C (Os3-Os4)

      Gilloo

        #152431

        Seuls ReadJoyPort() et GetKey() sont vraiment utilisables.

        As-tu regardé ici:

        http://amigadev.elowar.com/read/ADCD_2.1/Includes_and_Autodocs_3._guide/node0460.html

        Sinon tu dois confondre

        BOOL SetJoyPortAttrsA(ULONG, struct TagItem *);

        et

        BOOL SetJoyPortAttrs(ULONG portNumber, ULONG firstTag, …);

        la première réclame un tableau de TagItem, la deuxième est un artifice en C pour créer un tableau de tagitems sur la pile.

        écrire:

        SetJoyPortAttrs(1, SJA_Type, SJA_TYPE_AUTOSENSE, SJA_Reinitialize, 0, TAG_DONE) ;

        est quand même plus classe que :

        struct TagItem t[3] ;

        t[0].ti_Tag = SJA_Type ;

        t[0].ti_Data = SJA_TYPE_AUTOSENSE ;

        t[1].ti_Tag = SJA_Reinitialize ;

        t[1].ti_Data = 0 ;

        t[2].ti_Tag = TAG_END ;

        t[2].ti_Data = 0 ;

        SetJoyPortAttrsA(1, &t) ;

        Attention, le système minimum est 3.1 (V40) pour lowlevel.library… les précédentes plantent…

        Sharynn

          #152432

          Hélas pour moi, j’ai déjà toutes les information, mais je n’arrive pas à avoir même un résultat faux(se serait un début!!!).

          Je pense que je m’y prend pas comme il le faut.

          Aurais-tu un exemple écrit pour que je test si cela fonctionne !!

          :-D

          Amos un jour, Amos Toujours
          -----------------------------------
          AmOS4 - Library Amos sous C (Os3-Os4)

          Gilloo

            #152433

            #include

            #include

            #include

            #include

            #include

            struct Library *LowLevelBase = NULL ;

            int main(int argc, char *argv[])

            {

            int i ;

            ULONG getkey ;

            ULONG readjoyport0, readjoyport1, readjoyport2, readjoyport3 ;

            LowLevelBase = OpenLibrary(“lowlevel.library”, 0) ;

            if (LowLevelBase != NULL)

            {

            for (i=0; i<200; i++)

            {

            getkey = GetKey() ;

            readjoyport0 = ReadJoyPort(0) ;

            readjoyport1 = ReadJoyPort(1) ;

            readjoyport2 = ReadJoyPort(2) ;

            readjoyport3 = ReadJoyPort(3) ;

            printf(“GetKey %08lx”, getkey) ;

            printf(“ReadJoyPort(0) %08lx”, readjoyport0) ;

            printf(“ReadJoyPort(1) %08lx”, readjoyport1) ;

            printf(“ReadJoyPort(2) %08lx”, readjoyport2) ;

            printf(“ReadJoyPort(3) %08lx”, readjoyport3) ;

            }

            CloseLibrary(LowLevelBase) ;

            }

            return 0 ;

            }

            compiler, puis lancer en bougeant la souris, tapant une touche ou gesticulant le joystick… cela devrait afficher des valeurs en accord avec la doc.

            je te laisse le soin de faire une boucle plus adéquate… ;-)

            Sharynn

              #152434

              Merci pour le routine.. voici mon résultat après bricolage de ton aide très précieuse:

              ULONG port1;

              port1 =ReadJoyPort(1); // Lis le resultat du port

              if(port1 & JP_TYPE_MASK) // MASK du type sur le port

              {

              if(port1 & (JPF_BUTTON_BLUE|JPF_BUTTON_RED))

              // MASK pour voir que les boutons

              {

              if(port1 & JPF_BUTTON_RED) // Bouton 1 ?

              {

              return 1;

              }

              if(port1 & JPF_BUTTON_BLUE) // Bouton 2

              {

              return 2;

              }

              }

              }

              Les deux valeurs des bouton de la souris sont bien retournés, mais je n’arrive pas a supprimer l’action de mouvement car si je bouge la routine valide le bouton 1..

              :-D Galère cette LowLevel

              Sous OS4, j’ai aucun retour.. les port sont-ils gérés autrement ? :-(

              Amos un jour, Amos Toujours
              -----------------------------------
              AmOS4 - Library Amos sous C (Os3-Os4)

              Gilloo

                #152435

                Euh… !! j’aurais plutôt écrit ceci :

                ULONG port1;

                port1 =ReadJoyPort(1);

                if (port1 & (JP_TYPE_JOYSTK|JP_TYPE_GAMECTLR|JP_TYPE_MOUSE))

                {

                if (port1 & JPF_BUTTON_BLUE) return 2 ;

                if (port1 & JPF_BUTTON_RED) return 1 ;

                }

                sur OS4 il doit exister une préférence pour input et lowlevel…

              6 sujets de 1 à 6 (sur un total de 6)

              • Vous devez être connecté pour répondre à ce sujet.

              Forums AmigaOS, MorphOS et AROS Développement Help sur l’utilisation de Lowlevel.library

              Amiga Impact