Question:
Est-il possible de créer un périphérique USB qui modifierait les données de la souris à la volée?
JYelton
2012-03-31 01:29:00 UTC
view on stackexchange narkive permalink

J'ai un ami qui a du mal à trouver des pilotes / fabricants de souris prenant en charge diverses options pour la dyslexie. L'inversion des axes X et Y est une fonctionnalité simple que la plupart des programmes et pilotes ignorent.

J'ai pensé qu'il serait possible de construire un petit périphérique USB (similaire à une clé USB ou PS / 2) dans lequel un utilisateur peut brancher une souris USB et, à l'aide de quelques commutateurs DIP, inverser un ou les deux axes.

J'ai une connaissance de base de la programmation (C # / C +) et de l'électronique, mais je ne sais pas s'il existe un protocole standard pour les souris USB.

Je préfère éviter d'utiliser un convertisseur série (même si je sais qu'il a un protocole plus ou moins standard). Quelqu'un a-t-il utilisé des souris USB avec un projet électronique personnalisé, ou peut-il expliquer s'il est possible de construire un adaptateur USB-USB pour inverser le mouvement?

Une autre façon d'inverser les axes X et Y serait de simplement tourner la souris à l'envers. Essayez-le pendant quelques minutes, le défi est bon pour votre cerveau.
La manière «facile» de commencer est de commencer avec une souris USB non optique (= ancienne) et d'interfacer aux interrupteurs rotatifs de la boule. Vous êtes complètement en dehors de tout protocole ou logiciel et travaillez avec l'environnement physique. Vous pouvez par exemple capter les signaux d'une souris, les traiter et les insérer dans une autre si vous le souhaitez. Loin d'être idal mais susceptible de permettre une mise en route très rapide.
@Kevin Le problème avec l'inversion physique de la souris est que cela rend les différents boutons plus difficiles (voire presque impossibles) à utiliser. Ne vous méprenez pas, cependant, la personne dyslexique en question a fait cela de temps en temps alors qu'aucune autre solution n'était disponible.
Six réponses:
rluks
2012-03-31 02:07:02 UTC
view on stackexchange narkive permalink

Et une solution logicielle?

Sous Windows, vous pouvez intercepter les actions de la souris avec une application, ce qui peut être aussi simple que ceci AutoHotKey script:

  #NoEnvSetBatchLines -1Process Priority ,, RBlockInput Mouse; l'entrée de la souris de l'utilisateur est ignorée pendant MouseMoveCoordMode Mouse, Screen; coordonnées absoluesSysGet m, Monitor; obtenir les bords de l'écran mLeft + = 1, mRight - = 2, mTop + = 1, mBottom - = 2SetMouseDelay -1; actionMouseGetPos la plus rapide x0, y0; obtenir l'emplacement initial du pointeur de la souris. SetTimer WatchMouse, 1; exécutez le sous-programme rapidement (10..16ms) ReturnWatchMouse: MouseGetPos x, y; obtenir la position actuelle de la souris x0 + = 2 * (x0-x), x0: = x0 < mLeft? mLeft: (x0 > mDroite? mDroite: x0) y0 + = 2 * (y0-y), y0: = y0 < mTop? mTop: (y0 > mBottom? mBottom: y0) MouseMove x0, y0, 0; définir la nouvelle position comme ancienne, pour le prochain timerReturn! z :: ExitApp; Arrète la folie; rendre le script persistant  

La même logique peut être utilisée pour résoudre le problème dans n'importe quel environnement de programmation d'application (C ++, C #, etc.) qui peut accéder aux fonctions de curseur Windows.

Sous Linux, c'est aussi simple que de modifier une propriété de votre souris avec xinput , comme l'écrit ben:

  xinput set-int-prop "USB Optical Mouse" "Evdev Axis Inversion" 8 0 1  

Vous devrez remplacer le nom de votre appareil ( xinput -list | grep - i 'mouse' ) pour "USB Optical Mouse".

Les questions supplémentaires sur ce logiciel doivent être adressées à Stack Overflow, notre site de programmation.

Mais je suis d'accord, que ce serait formidable d'avoir une solution de périphérique USB "dans la boîte", cette personne resterait simplement dans le port USB et ce serait tout. L'installation de sw prend un certain temps, mais créer un tel appareil, le programmer et le faire fonctionner prendrait encore plus de temps.
Les solutions logicielles pour cela sont malheureusement très peu nombreuses. Il semble que les fabricants de souris devraient l'inclure par défaut dans le panneau de configuration de leur appareil, pour s'assurer qu'elles sont autant que possible utiles aux personnes handicapées. C'est, après tout, une fonction mathématique extrêmement simple.
Rocketmagnet
2012-03-31 01:39:32 UTC
view on stackexchange narkive permalink

Ce serait une chose assez difficile à réaliser. Votre appareil devrait se comporter à la fois comme un hôte USB et un périphérique USB. Il peut y avoir des microcontrôleurs qui peuvent faire cela, mais vous pourriez finir par devoir en utiliser deux, un pour être l'hôte et un pour l'esclave.

Si vous suggérez quelque chose comme l'utilisation d'une souris série, alors votre travail serait beaucoup plus facile à réaliser. Vous auriez juste besoin d'un microcontrôleur avec 2 ports série, plus deux puces d'interface série (comme MAX202, ou selon la version la plus récente).

Une option encore plus simple pourrait être d'essayer d'écrire un programme Windows qui ferait l'inversion.

Je suis d'accord, une solution logicielle serait un moyen plus simple et meilleur pour réaliser ce que vous voulez.
J'adorerais écrire une solution logicielle, mais ma connaissance des pilotes de bas niveau fait défaut. De plus, je ne suis pas sûr que quelque chose puisse être facilement écrit qui soit compatible avec différentes marques de périphériques d'entrée ou fonctionne de manière conviviale avec les pilotes du fabricant natifs. [MAFMouse] (http://www.maf-soft.de/mafmouse/) existe, mais semble être obsolète. Si trouver ou écrire un logiciel était plus facile, croyez-moi, je n'aurais pas pensé à concevoir un petit périphérique USB. :)
Que diriez-vous d'un appareil PS2?
J'ai écrit une version du logiciel, car il ne semble pas y avoir de solution de travail agréable nulle part. http://superuser.com/questions/406502/how-can-i-reverse-mouse-movement-x-y-axis-system-wide-win-7-x64/406865#406865
@Poly Merci beaucoup pour vos efforts! Je vais devoir essayer, même si je pense que je vais toujours essayer une solution matérielle juste pour le défi.
JonnyBoats
2012-03-31 07:01:04 UTC
view on stackexchange narkive permalink

Bien que ce soit probablement loin d'être la solution la moins chère ou la plus élégante, c'est celle qui vous offrira une grande flexibilité.

Un ordinateur monocarte Arduino peut se tourner vers un Windows ordinateur hôte comme un Human Interface Device (HID), en d’autres termes une souris. Il n'est cependant pas limité aux souris; les claviers et autres appareils sont également HID.

Vous pouvez connecter une souris série directement au port série de l'Arduino ou si vous préférez utiliser une souris USB, vous pouvez la connecter à l'Arduino via un USB bouclier hôte.

Puisque vous pouvez programmer l'Arduino en C, vous pouvez traduire toutes sortes d'entrées de la souris en commandes que vous aimez aller sur le PC. Vous pourriez par exemple traduire un triple clic du bouton droit de la souris en une commande de saisie au clavier, le ciel est la limite.

Je pense que c'est ce qui se rapproche le plus de rendre possible la mise en œuvre d'une solution matérielle. Les réponses logicielles ont été utiles, tout comme les suggestions de série PS2, mais en fin de compte, c'est probablement ce que je vais essayer car j'ai des kits de prototypage Arduino et cela semble être une bonne approche.
En réalité, l'utilisation d'une souris PS / 2 serait la meilleure forme de cette idée, car c'est la seule option qui ne nécessite pas d'interface supplémentaire (convertisseur de niveau série ou bouclier hôte USB) à prendre en charge.Une fois que vous envisagez de mettre un bouclier d'hôte sur un Uno, vous utilisez la mauvaise carte de base pour le travail.
ben
2012-03-31 01:51:26 UTC
view on stackexchange narkive permalink

Vous pouvez utiliser la pile LUFA open source pour faire des projets natifs USB HID (human interface device). Adafruit possède une carte de développement open source compatible avec la pile LUFA.

Utiliser une souris USB avec votre carte personnalisée serait délicat. L'utilisation d'une souris PS / 2 devrait cependant être beaucoup plus facile. Le protocole est plus simple et vous pouvez probablement trouver une bibliothèque quelque part. Voici une bibliothèque Arduino qui peut lire à partir d'une souris PS / 2 qui pourrait être d'une certaine utilité.

Pour le connecteur PS / 2, SparkFun possède une carte de dérivation et port qui devraient fonctionner.

Il y a de fortes chances que vous puissiez également changer certains logiciels sur l'ordinateur pour faire cela, ce qui serait le moins cher, mais moins portable. Une recherche rapide sur Google montre qu'il s'agit essentiellement d'une commande pour un ordinateur Linux.

Rocketmagnet
2012-03-31 02:50:11 UTC
view on stackexchange narkive permalink

OK, voici une solution possible:

Comme l'a dit Ben, ce serait beaucoup plus facile si vous utilisiez une souris PS / 2, car ce sont essentiellement des données série simples.

Cependant, si vous avez vraiment besoin que ce soit un périphérique USB, alors peut-être peut-être utiliser un convertisseur USB-PS / 2 et un convertisseur PS / 2-USB, et placez votre appareil entre eux.

J'ai jeté un coup d'œil et je n'ai pas pu trouver immédiatement un chipset qui ferait le travail, bien qu'ils doivent exister. Mais vous pouvez simplement acheter les unités:

USB PS2 converters

Malheureusement, ces appareils illustrés ne sont que des adaptateurs de câblage qui permettent à certaines souris conçues en interne pour gérer à la fois les protocoles série USB et PS / 2 à faible vitesse d'être branchées sur l'autre port. Il n'y a pas de circuits actifs à l'intérieur.
Est-ce vrai? Pas étonnant qu'ils ne fonctionnent pas toujours!
Les périphériques HID basés sur un jeu de puces USB basse vitesse Cypress spécifique peuvent détecter à la mise sous tension si les fils de données sont connectés à un port PS2 ou à une clé USB basse vitesse. Donc, tout ce qui est nécessaire pour utiliser une souris ou un clavier basé sur ces puces sur l'un ou l'autre port est la bonne forme de connecteur, d'où l'existence de ces choses. Tous les appareils à faible vitesse ne sont pas implémentés pour prendre en charge cette astuce, et je pense qu'il est beaucoup plus difficile de distinguer l'USB pleine vitesse (ou haute vitesse) d'un port PS2, de sorte que ces appareils ne feront généralement pas cette astuce.
Rocketmagnet
2012-03-31 02:52:08 UTC
view on stackexchange narkive permalink

Une autre solution serait d’installer le pilote MAF-Soft mouse axis inverter pour Windows.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...