Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 ?

CharlyCoste a écrit :

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 big_smile

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 tongue

Hors ligne

#10 Le 05/12/2008, à 15:35

nostalgeek

Re : Comment faire fonctionner son Mir:ror ?

Tryum a écrit :

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 wink

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 tongue

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 big_smile
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. lol

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 ?

CharlyCoste a écrit :

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. lol

J'avais prévenu que c'était pas propre smile
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