IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Plateformes Discussion :

Émulation d'un clavier à partir d'une télécommande


Sujet :

Plateformes

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Avril 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Émulation d'un clavier à partir d'une télécommande
    Salut a tous,
    je travaille avec Qt embedded, j'ai écris un code qui permet d'émuler un clavier et une souris a partir des signaux d'une télécommande, le code fonctionne correctement je peut bouger le curseur et émuler tout les boutons du clavier sauf que ma télécommande a un clavier a 9 touches alphanumérique (comme le téléphone), je voudrais modifier mon code pour pouvoir écrire correctement tout les caractères.
    Exemple: si je clic 3 fois sur le bouton 2 j'ai le caractère 'C' en sortie.
    Voici un bout du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    switch(msg) // Test sur le signal venant de la télécommande 
    {
     
         case 2: // ici code du signal Ex:bouton 2 sortie 'A'
     
          QWSServer::sendKeyEvent( 'A', Qt::Key_A,0, 1, 0);
         break;
    ...........
    ...........
    ...........
         case 37:
          QWSServer::sendKeyEvent( 0, Qt::Key_Space,0, 1, 0);
         break;
    }

    Merci.

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Bonjour

    Je vois deux méthodes :
    - tu enregistre le moment et la touche appuyé à chaque fois que tu appuies sur une touche. Si la différence de temps est inférieure à LIMIT (par exemple 100 ms) et que c'est la même touche, tu incrémentes ton caractère (A->B->C)
    - quand tu appuies sur une touche : tu enregistres la touche et tu lances un QTimer qui efface la touche enregistrée après un certain temps ou si un timer est lancé, tu vérifies que touche est la même ou non.

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Avril 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Oui la méthode avec Qtimer semble être une bonne solution.
    Pourrais-tu s'il te plais m'écrire un petit bout de code, squelette ou même algorithmiquement pour que je puisse continuer sur celui ci.
    Je ne suis pas un spécialiste en C++ tout mes codes sont un peut bricolé

    Merci.

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    class PersistantKey : QObject
    {
       private:
          QStringList list;
          QTimer* timer;
          int pos;
          int key;
       signals:
          void valideKey(char c);
       public:
          PersistantKey()
          {
             charList << "ABC" 
                        << "DEF"
                        << "GH"; // etc. je ne connais la liste des touches
             timer = new QTimer(this);
             connect(timer, SIGNAL(SIGNAL(timeout()), this, SLOT(finish()));
             timer->setInterval (100);
             pos = 1;
             key = -1;
          }
     
          void newKeyEvent(int new_key)
          {
             timer->stop();
             if(key != new_key)
             {
                 emit valideKey(list[key][pos]);
                 pos = 1;
                 key = new_key;
                 timer->start();
             }
             else
             {
                 pos++;
                 if(pos > list[key].size()) pos=1;
                 timer->start();
             }
          }
     
          private slots:
          void finish()
          {
             timer->stop();
             emit valideKey(list[key][pos]);
             pos = 1;
             key = -1;
          }
    };
     
    // creation
    PersistantKey pk = new PersistantKey();
    connect(pk, SIGNAL(valideKey(char)), this, SLOT(mon_slot(char)));
     
    // quand on reçoit un event touche pressée
    pk->newKeyEvent(msg);
    Code non testé. Dis si tu as besoin d'explications

Discussions similaires

  1. Requête update à partir d'une autre table
    Par amiral thrawn dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/02/2024, 11h40
  2. Procédure à partir d'une touche clavier
    Par Cisco1 dans le forum Débuter
    Réponses: 8
    Dernier message: 21/11/2011, 17h10
  3. Réponses: 6
    Dernier message: 19/03/2009, 16h24
  4. pb de récup de handle à partir d'une dll
    Par yokito dans le forum Langage
    Réponses: 2
    Dernier message: 20/08/2002, 12h29
  5. Réponses: 3
    Dernier message: 19/04/2002, 00h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo