Question

J'ai actuellement un simple glissement de carte USB connecté à une machine Linux embarqué et de ce que je peux dire et de ce que j'ai fait des recherches, il agit comme un clavier et entrées toutes les données comme si je frappe. Maintenant, j'ai un script perl qui prend toutes ces données et les enregistre dans un fichier. Le seul problème est, il ne connaît que de prendre les données lorsque le script perl est en cours d'exécution au premier plan, sinon, d'où vient l'entrée « du clavier » à.

Ma question est de savoir comment puis-je faire cette carte swipe exécuter le script chaque fois qu'il lit l'entrée? Ou pourrais-je capturer en quelque sorte les données avec une application en cours d'exécution en arrière-plan. C'EST À DIRE. dans un c ++ programme, en cours d'exécution en arrière-plan, sera cin lire toute entrée à la machine?

Je n'ai jamais sali autour avec un lecteur de carte magnétique si je ne suis pas sûr à 100% sur la façon dont ils travaillent.

Toutes les suggestions sur ce serait apprécié!

Était-ce utile?

La solution

J'ai une idée, mais il est très général.

Pouvez-vous être surveiller en permanence les données dans un autre programme, le tampon, puis conduit les résultats dans votre script perl lorsque le tampon atteint une certaine taille ou va pendant une certaine période de temps sans activité? Si vous redirigez, vous ne devriez pas avoir à modifier votre script perl, car il sera toujours sur STDIN.

Alors, ce serait comme ceci:

Programme de surveillance -> Recueille des données -> Pipes dans votre programme Perl

J'espère que cette idée est utile.

-Brian J. Stinar -

Autres conseils

J'ai fait presque exactement cela (sauf avec un lecteur de code à barres USB qui est apparu comme un clavier).

Mon système a règle USB personnalisée hotplug qui détecte le périphérique USB lorsqu'il est branché en fonction de son fournisseur et l'ID de produit. Cette règle crée un lien symbolique vers le dispositif de event correspondant à /dev/input/.

J'ai alors un C démon qui fonctionne en tout temps. Il regarde le répertoire /dev/input/, et quand il voit le lien symbolique apparaît qu'il ouvre le dispositif de event. Il utilise ensuite la EVIOCGRAB IOCTL pour saisir l'appareil d'événement pour usage exclusif (ce qui empêche les données apparaissant comme entrée du clavier dans d'autres applications), et lit les événements d'entrée correspondant à des frappes de touches. Le démon convertit les personnages en eux frappes de touches et les stocke dans une base de données.

cin lira entrée provenant du dispositif d'entrée de terminal ci-joint. Sans en savoir plus sur la conception de votre logiciel, ma première intuition est en train de lire les données à partir d'un script Perl est pas le meilleur choix de design. Je peux lire IR sur les télécommandes embarqués périphériques Linux à l'aide d'un script Perl que vous décrivez, mais dans l'interface générale I directement avec le matériel ou une API fourni par le fournisseur à partir de mon application principale. Y avait-il une API fournie avec votre lecteur de carte?

Quel est le nom du périphérique du lecteur de carte quand il est branché sur votre machine (/ dev / *)? Je lis et ouvert qui cette façon.

Je ne l'ai jamais traité de cette sous Linux. Cependant, cela ressemble beaucoup à ce que je l'ai vu dans Windows.

Dans mon expérience, beaucoup de ces types de périphériques sont détectés automatiquement par le système d'exploitation comme un type de clavier de l'appareil. Ainsi, toute entrée du lecteur est introduit dans le même flux de clavier que les utilisations réelles du clavier. Au moment où celle-ci atteint tous les programmes en cours d'exécution réels, il n'y a aucun moyen de dire la différence entre le lecteur de carte saisie de données et un utilisateur tapant simplement vraiment très rapide.

En conséquence, vous obtenez le comportement décrit dans la question initiale:. L'entrée de lecteur de carte va seulement où l'entrée de clavier normal va - au programme en mise au point

Votre meilleure option serait d'enquêter sur le site Web du fabricant (ou de les contacter) et savoir si elles fournissent une sorte de pilote qui permettrait à un programme d'attraper cette entrée tout à fait séparément du flux du clavier.

Si le fabricant ne fournit pas une telle chose, peut-être une 3ème partie fait. Mais malheureusement, je ne l'ai jamais étudié que donc je ne sais pas où vous dire de commencer à chercher.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top