#1 Le 21/11/2008, à 14:12
- CharlyCoste
Comment faire fonctionner son Mir:ror ?
Je sens que là y a du défi pour les développeurs C/C++
J'ai craqué et je me suis acheté un petit gadget : le lecteur RFID de Violet surnommé Mir:ror
( http://www.violet.net/_mirror-le-premier-lecteur-rfid.html )
Cet appareil a pour seul utilité de déclencher des actions lorsque l'on pose dessus un objet muni d'une étiquette rdif.
Par exemple, quand on rentre chez soi on pourrait très bien s'imaginer poser son porte-clée dessus ce qui aurait pour résultat de lancer Pidgin automatiquement, puis éteindre l'ordinateur dès qu'on enlève le porte clée lorsqu'on s'en va.
Le lecteur est sensé être capable de détecter jusqu'à 4 étiquettes simultanément sans problème.
Moi qui suit fan de tout ce qui est interface homme/machine je n'ai pas pu résister.
Par contre, il y a un hic! Comme tous les vendeurs de matos, on dirait que Violet n'en a rien à cirer de Linux, et il faut donc forcément Windows ou Mac OS pour pouvoir profiter d'un périphérique dont le fonctionnement ne m'a pas l'air plus compliqué que celui d'un clavier.
Est-ce que quelqu'un aurait une idée sur la méthode à appliquer pour développer un programme sous ubuntu qui puisse prendre en charge ce lecteur RFID? Est-ce que quelqu'un s'est déjà penché sur ce cas précis?
cecoste@april.org
Hors ligne
#2 Le 21/11/2008, à 15:22
- kuri
Re : Comment faire fonctionner son Mir:ror ?
Configuration requise
* Connexion permanente
* Ordinateur : Mac OS X ou PC sous Windows XP ou Vista
c etait donc pas une surprise
Hors ligne
#3 Le 21/11/2008, à 18:20
- CharlyCoste
Re : Comment faire fonctionner son Mir:ror ?
Non, c'était pas une surprise.
Et alors ?
cecoste@april.org
Hors ligne
#4 Le 21/11/2008, à 20:58
- kuri
Re : Comment faire fonctionner son Mir:ror ?
alors, le plus simple pour ca c est d avoir un windows, les drivers du soft, et utiliser le soft.
tout ca avec un sniffer USB (ca existe, on en avait en BTS) pour comprendre le protocole du machin, et le recoder.
Hors ligne
#5 Le 22/11/2008, à 03:42
- CharlyCoste
Re : Comment faire fonctionner son Mir:ror ?
Intéressant ça... Merci pour le tuyau.
cecoste@april.org
Hors ligne
#6 Le 24/11/2008, à 07:52
- CharlyCoste
Re : Comment faire fonctionner son Mir:ror ?
Après l'avoir testé sous MacOS, il me semble que le Mir:ror ne soit qu'un périphérique de sortie.
J'ai donc essayé de trouver dans quel /dev il s'ajoutait (visiblement ça change d'une machine à l'autre) et j'ai donc tout simplement fait
sudo hexdump /dev/monperipherique
pour voir ce que ça retourne comme code quand je pose un "ztamp" ou quand je le retire (ça marche aussi avec ma carte de tramway, le pied!)
Me reste plus qu'à trouver comment on code un démon ou un module ou que sais-je encore...
Du moins un programme qui trouve le périphérique, l'écoute et agit en conséquence.
Dernière modification par CharlyCoste (Le 24/11/2008, à 07:52)
cecoste@april.org
Hors ligne
#7 Le 02/12/2008, à 01:02
- CharlyCoste
Re : Comment faire fonctionner son Mir:ror ?
J'ai trouvé ce tuto http://pficheux.free.fr/articles/lmf/drivers/
et ça aussi: http://broux.developpez.com/articles/c/driver-c-linux/
Très intéressant, peut-être que ça me permettra de coder un petit truc simpliste au départ.
Dernière modification par CharlyCoste (Le 02/12/2008, à 01:19)
cecoste@april.org
Hors ligne
#8 Le 05/12/2008, à 09:37
- nostalgeek
Re : Comment faire fonctionner son Mir:ror ?
J'ai trouvé ce tuto http://pficheux.free.fr/articles/lmf/drivers/
et ça aussi: http://broux.developpez.com/articles/c/driver-c-linux/Très intéressant, peut-être que ça me permettra de coder un petit truc simpliste au départ.
Je suis sur le point d'en acheter un, mais je me posais une petite question, le mir:ror ne se comporte pas comme un simple peripherique d'entrée HID comme la plupart des lecteurs de codes barres ?
Si tu connectes ton mir:ror, que tu ouvres ton terminal, un editeur de texte et que tu approche un tag aucun texte n'est ecrit ?
J'ai eu l'occasion de travailler sur des solutions avec lecteur de code barre ou le device se comportait comme un clavier bateau, ce qui dans ce cas la supprime de fait la necessité de developper un driver spécifique ...
Peux-tu verifier ca stp ? ou meme jeter un oeil du coté de ton /var/log/messages au moment ou tu branches ton mirror et paster une copie des logs correspondant ici ?
Merci, et promis des que j'ai fini de coder l'interface de controle de mon lance missile USB, je me penche sur le dev pour le mir:ror
Alex
#9 Le 05/12/2008, à 15:21
- Tryum
Re : Comment faire fonctionner son Mir:ror ?
En fait, le mir:ror n'est pas qu'un périphérique de sortie, puisqu'il a aussi un haut-parleur et 3 leds pour avoir un feedback des actions...
J'ai le mien sur mon bureau (au taff) ... j'essaierai de bidouiller ça chez moi .... quand j'aurai remonté une box ubuntu
Hors ligne
#10 Le 05/12/2008, à 15:35
- nostalgeek
Re : Comment faire fonctionner son Mir:ror ?
En fait, le mir:ror n'est pas qu'un périphérique de sortie, puisqu'il a aussi un haut-parleur et 3 leds pour avoir un feedback des actions...
Donc dans ce cas ce n'est pas qu'un peripherique d'entrée ...
#11 Le 05/12/2008, à 15:50
- Tryum
Re : Comment faire fonctionner son Mir:ror ?
Heuu ... oui, au temps pour moi
J'me suis fait berné par les messages précédents.
Hors ligne
#12 Le 06/12/2008, à 23:04
- roger78
Re : Comment faire fonctionner son Mir:ror ?
chez moi sur fedora 8 ca donne ca quand je le branche
Dec 6 20:10:53 terminator kernel: hub 1-0:1.0: unable to enumerate USB device on port 5
Dec 6 20:10:54 terminator kernel: usb 2-3: new full speed USB device using ohci_hcd and address 4
Dec 6 20:10:54 terminator kernel: usb 2-3: configuration #1 chosen from 1 choice
Dec 6 20:10:54 terminator kernel: hiddev96hidraw0: USB HID v1.00 Device [Violet Mirror] on usb-0000:00:1c.0-3
Dec 6 20:10:54 terminator kernel: usb 2-3: New USB device found, idVendor=1da8, idProduct=1301
Dec 6 20:10:54 terminator kernel: usb 2-3: New USB device strings: Mfr=4, Product=18, SerialNumber=32
Dec 6 20:10:54 terminator kernel: usb 2-3: Product: Mirror
Dec 6 20:10:54 terminator kernel: usb 2-3: Manufacturer: Violet
Dec 6 20:10:54 terminator kernel: usb 2-3: SerialNumber: 9DBEFFFF
et en faisant un od -x < /dev/hidraw0 j'ai
*
0056600 0102 0000 d008 1a02 5203 29c1 0017 0000
0056620 0000 0000 0000 0000 0000 0000 0000 0000
*
0070400 0202 0000 d008 1a02 5203 29c1 0017 0000
0070420 0000 0000 0000 0000 0000 0000 0000 0000
*
ceci avec un nanoztag
la premiere sequence demarrant par 0102 quand je le pose avec un bruit "tac"
la deuxieme une seconde plus tard avec un "tac tac"
#13 Le 10/12/2008, à 02:23
- CharlyCoste
Re : Comment faire fonctionner son Mir:ror ?
désolé pour le silence radio.
et en faisant un od -x < /dev/hidraw0 j'ai
*
0056600 0102 0000 d008 1a02 5203 29c1 0017 0000
0056620 0000 0000 0000 0000 0000 0000 0000 0000
*
0070400 0202 0000 d008 1a02 5203 29c1 0017 0000
0070420 0000 0000 0000 0000 0000 0000 0000 0000
*
En effet de mon côté avec hexdump j'ai à peu près les mêmes lignes que toi Roger
J'ai remarqué que les valeurs de la première colonne ne font qu'augmenter. Je pense que ça doit correspondre à une durée depuis l'activation du lecteur.
dans la deuxième colonne il y a un 0102 lorsqu'on place une étiquette (que ce soit un ztamp, un lapin ou une carte de tramway) et un 0202 lorsqu'on l'enlève. La suite donne un l'identifiant de l'étiquette
Par contre aucune idée de ce à quoi servent les deuxièmes lignes (toujours pleines de "0")
cecoste@april.org
Hors ligne
#14 Le 10/12/2008, à 09:26
- kuri
Re : Comment faire fonctionner son Mir:ror ?
ca peut servir a des implementations futures, ils prennent large pour pas avoir a modifier leur protocole d ici 1an (supposition)
en tout cas tu as visiblement compris comment t en servir, il te restes juste a faire le soft qui te permet de gerer ca comme tu l entends (le dialogue avec le peripherique est le plus chiant, et ca c est fait)
Hors ligne
#15 Le 10/12/2008, à 18:06
- CharlyCoste
Re : Comment faire fonctionner son Mir:ror ?
Moi je fais du développement web, alors les pilotes linux je connais pas très bien
Visiblement faut que je fasse un module à charger au démarrage qui puisse reconnaître le périphérique et se charger de traiter les évènements.
Mais les tutos que j'ai trouvé sont (comme d'hab) incomplets et ne me disent pas quels sont les bibliothèques à installer pour pouvoir compiler le module. Donc je n'arrive même pas à compiler un module vide.
Ensuite il faudra que je fasse une GUI pour paramétrer ça.
cecoste@april.org
Hors ligne
#16 Le 10/12/2008, à 18:36
- kuri
Re : Comment faire fonctionner son Mir:ror ?
dans la mesure ou tu sais deja utiliser 'od' pour lire les infos, tu ne serai pas oblige de faire un truc tres propre.
mais bon dans l absolu, oui vaut mieux faire ca bien, avec des events
Hors ligne
#17 Le 11/12/2008, à 02:30
- CharlyCoste
Re : Comment faire fonctionner son Mir:ror ?
surtout que je vois pas comment deviner à l'avance l'adresse du périphérique...
cecoste@april.org
Hors ligne
#18 Le 13/12/2008, à 22:27
- roger78
Re : Comment faire fonctionner son Mir:ror ?
Bon j'ai reussi à faire un petit client xPL en perl qui est capable de générer deux messages un quand on approche le tag et un autre quand on l'eloigne
Aussi avec misterhouse (mon soft de domotique) je suis capable de lui faire dire Bonjour Roger quand j'approches le tag et au revoir Roger quand je l'enleve !
Pour l'instant je ne sais pas récuperer le numéro de tag et le code est pas joli joli
#19 Le 17/12/2008, à 01:02
- CharlyCoste
Re : Comment faire fonctionner son Mir:ror ?
Tu pourrais me filer ton code? Que je vois comment tu t'y es pris?
cecoste@april.org
Hors ligne
#20 Le 18/12/2008, à 20:31
- CharlyCoste
Re : Comment faire fonctionner son Mir:ror ?
petit ajout...
concernant le code relatif à l'action (poser: 0102 et retirer : 0202)
Lorsqu'on retourne le mir:ror le code correspondant est : 0501
Lorsqu'on le remet le mir:ror à l'endroit le code est 0401
cecoste@april.org
Hors ligne
#21 Le 18/12/2008, à 23:19
- roger78
Re : Comment faire fonctionner son Mir:ror ?
j'ai basé ma méthode sur /dev/hidraw0 et a priori le mirware alpha de violet lui aussi
mon truc est basé sur xpl et j'ai fait comme si cétait la temperature d'une sonde C'est idiot je sais
et genere un message xpl-trig type sensor.basic avec comme valeur bnz.mirror
il envoit un valeur 10 quand on approche le tag et 20 quand il se retire
apres dans misterhourse j'ai defini un XPL Device nommé "boulot" et derriere je peux déclencher un peu tout et n'importe quoi
L'idée est de se passer des 0 qui arrivent quand rien ne se passe et des que l'on a 21 ou 11 de faireqq chose
comme je suis une bille en perl j'ai du mal a concaténer les bits de la valeur du tag
d'autant qu'il n'y a pas de valeur fixe de fin de tag
use strict;
use warnings;
use Getopt::Long;
use Pod::Usage;
use xPL::Client;
use IO::Socket;
use IO::Select;
use POSIX qw(setsid);
$|=1; # autoflush helps debugging
my %args = ( vendor_id => 'bnz', device_id => 'mirror', );
my %opt = ();
my $verbose;
my $interface;
my $help;
my $man;
GetOptions('verbose+' => \$verbose,
'interface=s' => \$interface,
'define=s' => \%opt,
'help|?|h' => \$help,
'man' => \$man,
) or pod2usage(2);
pod2usage(1) if ($help);
pod2usage(-exitstatus => 0, -verbose => 2) if ($man);
$args{'interface'} = $interface if ($interface);
$args{'verbose'} = $verbose if ($verbose);
# Create an xPL Client object
my $xpl = xPL::Client->new(%args, %opt) or die "Failed to create xPL::Client\n";
# Add a callback to receive all incoming xPL messages
$xpl->add_xpl_callback(id => "mirror1",
self_skip => 0, targetted => 0,
callback => \&log);
# Run the main loop
$xpl->main_loop();
# The callback to log the incoming messages
sub log {
my $message_type = "xpl-trig";
my $type=0;
my $HIDRAW="/dev/hidraw0";
# Open HID Device for Input
if( ! open(PDEV, "<$HIDRAW")){
die();
}
#binmode PDEV;
my $nfoo;
my $foo;
$nfoo=0;
$foo=0;
while (1)
{
my ($j,$dat,$foo,$tag) ;
$j = read(PDEV,$dat,1);
#print $dat;
$foo = unpack("H*",$dat);
if ( ( $foo != 0 ) ) {
$tag=$nfoo."".$foo;
#print $foo, "\n";
if (( $nfoo == 02) && ($foo == 01 )) {
print "debut tag entree \n" ;
my $id;
$id="boulot";
send_xpl( $message_type, $id, "temp", 10 );
$tag=0;
}
#print "tag", $tag, "\n" ;
if (( $nfoo == 02) && ($foo == 02 )) {
print "debut tag sortie ",$tag, "\n";
my $id;
$id="boulot";
send_xpl( $message_type, $id, "temp", 20 );
}
$nfoo=$foo ;
}
}
return 1;
};
sub send_xpl {
my $message_type = shift;
my $device = shift;
my $type = shift;
my $current = shift;
my $index = shift;
my %args =
(
message_type => $message_type,
class => 'sensor.basic',
body =>
{
device => (defined $index ? $device.'.'.$index : $device),
type => $type,
current => $current,
},
);
print STDERR "Sending $device.\[$type]=$current\n" if ($verbose);
return $xpl->send(%args);
}
# send a "hbeat.end" message on exit
END { defined $xpl && $xpl->send_hbeat_end(); }
#22 Le 19/12/2008, à 00:35
- CharlyCoste
Re : Comment faire fonctionner son Mir:ror ?
Doit y avoir une meilleure solution que mettre en dur /dev/hidraw0 parce qu'à l'heure où j'écris ces lignes... de mon côté ça correspond au clavier.
Sinon, je vois mieux comment t'as fait... En fait je pense que je peux faire la même chose en php.
Le mieux restant forcément le module noyau mais bon... j'ai commencé à cherché autour de moi si je peux pas trouver quelqu'un qui sache faire ça.
Dernière modification par CharlyCoste (Le 19/12/2008, à 00:45)
cecoste@april.org
Hors ligne
#23 Le 19/12/2008, à 21:36
- roger78
Re : Comment faire fonctionner son Mir:ror ?
Doit y avoir une meilleure solution que mettre en dur /dev/hidraw0 parce qu'à l'heure où j'écris ces lignes... de mon côté ça correspond au clavier.
J'avais prévenu que c'était pas propre
en regardant le code C livré par violet dans leur pack d'installation discover-device.c
si je comprends bien en fait il cherche dans tout ce qui est /dev/hidraw* si vendor == 0x1da8 && product == 0x1301 pour determiner si c'est bien un mirror
mirware lui meme ne sait pas détecter le device - perso je n'ai pas de QT installé et je n'ai pas envie
#24 Le 19/12/2008, à 21:42
- CharlyCoste
Re : Comment faire fonctionner son Mir:ror ?
D'après ce que tu me dis, Violet parcours chaque périphérique /dev/hidraw à la recherche d'un périphérique dont le couple code_constructeur/code_produit correspond à 1DA8/1301 (le "0x" signifiant juste que le nombre est en hexadécimal). Donc finalement il sait détecter le mir:ror...
Sinon, où est-ce que tu as trouvé ce code ?
Dernière modification par CharlyCoste (Le 19/12/2008, à 21:48)
cecoste@april.org
Hors ligne
#25 Le 20/12/2008, à 09:21
- roger78
Re : Comment faire fonctionner son Mir:ror ?
c'est dans le pack d'installation telechargeable sur le site
y'a d'un coté un petit utilitaire avec son source C de recherche du device qui l'écrit dans un fichier
et d'un autre coté un binaire mirware qui semble se servir de ce fichier
d'ailleurs dans le readme il dise bien de lancer cet utilitaire avant de lancer mirware