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

NodeJS Discussion :

Lire l'état d'un périphérique (Manette Xbox 360)


Sujet :

NodeJS

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Mai 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur validation

    Informations forums :
    Inscription : Mai 2021
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Lire l'état d'un périphérique (Manette Xbox 360)
    Bonjour,

    Pour commencer, voici mon projet à terme : Surveiller les changements d'états de mes boutons de manette XBOX360 sous NodeJS, sur un raspberry pi 3.

    J'ai bien entendu cherché des solutions clés en mains qui me permettraient de le faire, en vain.

    Alors, je me dis que je pourrais peut être coder moi même une solution. Par contre j'aimerais vraiment éviter de passer par d'autres langages que Javascript sous NodeJS.

    Ma stratégie, peut être irréaliste, était de surveiller les "signaux" que remonterait mon périphérique à l'OS. Mais aucune une idée de comment faire.

    L'idée serait de guetter, depuis un script nodeJS des évènements en provenance de ce périphérique. Seulement , comment faire pour avoir ces évènements . Existent t-ils ?
    Je vois bien que ma connaissance de Linux me limite.

    Si je prends comme exemple/comparaison la bibliothèque SFML en C++, il est "assez simple" de guetter des évènements en provenance des claviers/ souris /manette. Mais je n'ai aucune idée des mécanismes entre la manette, l'OS, la bibliothèque SFML.

    Comment avoir sous node JS quelque chose de "comparable"

    Attention, je ne cherche pas du tout une solution générique. Si je dois installer un exécutable/ driver particulier et utiliser une bibliothèque précise pour node-JS, je n'ai aucun soucis.
    Je ne cherche pas à faire un code qui fonctionne avec tout type de manette.
    Simplement un code en nodeJS sous Linux pour lire une manette de 360.

    Merci d'avance pour vos remarques et réponses

    Edit 1 >> J'ai trouvé un code C à cette page https://opencoursehub.cs.sfu.ca/bfra...k.hLibrary.pdf
    En fouillant un peu, j'ai trouvé les codes sources ici:
    joystick.c = https://gist.github.com/jasonwhite/c5b2048c15993d285130
    joystick.h = https://github.com/torvalds/linux/bl...nux/joystick.h

    J'ai compilé ce code C avec la commande indiqué dans le fichier joystick.c. Le code se lance bien, et je vois bien que ça réagit avec ma manette.

    J'ai donc fouillé ce code C. Je vois que le code va ouvrir le fichier /dev/input/js0 et guetter chaque écriture sur ce fichier.
    Je n'ai pas compris comment le code s'y prenait pour voir qu'a chaque itération où il lit, qu'il y avait une nouvelle valeur ou non. Si vous arrivez à m"expliquer c'est avec plaisirs.

    Dans les commentaires du code, je vois également qu'il m'est conseillé de regarder cette page, ce que je ferais demain maintenant :-) : https://www.kernel.org/doc/Documenta...ystick-api.txt
    Vu le nom de cette page, je suis confiant :-) En espérant y trouver de faire un beau code JS pour communiquer avec cette API.

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    d'après ce que j'ai compris du code c, il y a une boucle infinie qui lit le contenu du fichier.
    essayez peut-être de lire ce fichier en node.js et si vous avez peur de surcharger le processeur, commencez par faire une petite boucle qui lit 10 fois le fichier avec une seconde d'attente entre chaque lecture.

    pour l'utilisation de "ioctl" par contre, j'en ai aucune idée de la façon de faire cela en node.js. d'après ce que j'ai compris ce sont des appels directs au pilote du périphérique. peut-être que vous aurez plus d'aide pour analyser cela en commençant une nouvelle discussion sur le forum c.
    j'ai trouvé quelques informations là :
    https://www.kernel.org/doc/html/late...tl-number.html

    en attendant d'avoir plus d'informations, vous pouvez essayer de lire le résultat du programme en c dans node.js. ce n'est pas optimal pour les ressources mais peut-être que ce n'est pas gênant pour votre projet.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Mai 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur validation

    Informations forums :
    Inscription : Mai 2021
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Bonsoir Mathieu,

    merci pour votre retour.
    J'ai effectivement passé mon samedi à porter le code C vers du javascript pour NodeJS.
    J'arrive à lire en directe mes appuis sur les touches, c'est déjà une très bonne chose.

    J'ai poursuivis ma stratégie de portage, mais cette fois en analysant l'exécutable Jstest (qui se base en fait sur joystick.c et h) mais qui effectivement utilise la fonction ioctl pour identifier le driver par exemple. Et c'est précisément sur ce point que je suis au moment où je lis votre message.
    Je vais m'arrêter là pour ce soir , et je reprendrais demain je l'espère.

    J'ai cru voir qu'on pouvait intégrer du code C au code nodeJS. Je ne suis pas fan de cette stratégie, mais admettons.
    J'ai également vu que la foncton ioctl était portée sur nodeJS, mais je n'ai encore réussi à la faire fonctionner . Demain peut-etre !
    Je regarderais aussi votre lien demain. Merci

    Si je bloque, je me tournerais effectivement vers le forum C

  4. #4
    Membre éclairé
    Homme Profil pro
    Urbaniste
    Inscrit en
    Août 2023
    Messages
    386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Août 2023
    Messages : 386
    Points : 788
    Points
    788

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Mai 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur validation

    Informations forums :
    Inscription : Mai 2021
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    J'arrive à faire fonctionner le portage de la fonction ioctl pour nodejs.
    Il a en revanche fallu que je change de bibliothèque:
    - Celle-ci n'a pas marché pour moi :ioctl
    - Celle-ci fonctionne très bien : ioctl-napi

    Le code que je porte utilise beaucoup de macro définies dans le header sysroot/usr/include/asm-generic/ioctl.h
    (j'en profite pour venter le site https://elixir.bootlin.com/ qui m'a permis de retrouver beaucoup de valeur de constante noyées dans les dépendances !)
    Je porte donc également ces macros, sous forme de fonctions.
    (j'en ai besoin pour finir mon portage)

Discussions similaires

  1. VBA manette XBOX - DirectX - DirectInput
    Par Kiro20 dans le forum Général VBA
    Réponses: 0
    Dernier message: 19/04/2022, 14h46
  2. Contrôler les LED de la manette Xbox 360
    Par nightcall dans le forum C++
    Réponses: 1
    Dernier message: 25/03/2013, 14h56
  3. jquery / manette xbox 360
    Par wisfloski dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/11/2012, 09h00
  4. [Direct Input] Manette Xbox 360, où est le D-Pad ?
    Par norwy dans le forum DirectX
    Réponses: 1
    Dernier message: 17/12/2007, 10h13

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