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

C++ Discussion :

MAC OS, USB et C++


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 56
    Points : 21
    Points
    21
    Par défaut C++, RS232 et MAC
    Bonjour,


    J'ai fait pas mal de recherche mais j'avoue être un peu dépassé.
    Voici ma problématique : je code en C++ sous MAC OS. Bon.

    Et j'ai un périphérique externe, à l'origine avec un port RS232, que (à l'aide d'un adapteur RS232/USB), j'ai branché en USB sur mon Mac (il n'y a pas de port COM sur les macs).
    J'ai installé le driver sur MAC pour que ce soit reconnu.

    Mais comment interagir avec mon application en C++ ? J'ai du mal à entrevoir le truc.... y a des lib qui existe ? faut créer un "driver" ?

    Pour information, il s'agit d'un clavier de "caisse de supermarché" lol... Et il doit "piloter" mon logiciel....
    Je ne sais comment partir.... Avez-vous des infos à me communiquer ?

    J'ai cherché sur ce forum, mais les réponses ne sont pas celles qui m'intéressent.

    Merci de votre aide à tous :-)

    Edit : Quand je vais dans le répertoire "/dev/" du mac, je vois une ligne qui dit un truc genre "SerialPort-1".... Ceci correspondrait-il à une "simulation" par USB d'un port COM ?

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Salut,

    Mais comment interagir avec mon application en C++ ? J'ai du mal à entrevoir le truc.... y a des lib qui existe ? faut créer un "driver" ?
    Tu n'as pas eu de notice fournie avec le convertisseur ?
    Quand je vais dans le répertoire "/dev/" du mac, je vois une ligne qui dit un truc genre "SerialPort-1".... Ceci correspondrait-il à une "simulation" par USB d'un port COM ?
    Là tu peux peut-être trouver ton bonheur :

    Tente d'ouvrir le fichier en lecture et de lire ce qu'il y a dedans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include <iostream>
    #include <fstream>
    using namespace std;
     
    int main () {
      char c;
    // ouverture du port en lecture
      ifstream portSerie("/dev/SerialPort-1");
     
      while (portSerie.good()) {
    // lecture du caractere dispo
        c = portSerie.get();    
        cout << c;
      }
     
      is.close();         
     
      return 0;
    }

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 56
    Points : 21
    Points
    21
    Par défaut
    Salut,


    Merci pour ta réponse.
    J'ai eu une notice (enfin un bout de papier avec le cable) mais je doute qu'il y ait quoi que ce soit d'intéressant dedans...

    Je vais tenter ton bout de code. J'ai un peu perdu mes bases Unix (ça remonte à mes études lol), donc faut que je vois si je dois pas monter le périphérique avant de pouvoir l'utiliser....
    Si cela fonctionne, ça serait super. Mais j'ai quelques doutes que ce soit si simple.... Je te tiens au courant après mes tests ce soir.

    Merci pour ton aide.


    --
    Théo

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 107
    Points : 122
    Points
    122
    Par défaut
    je te déconseille de travailler directement avec le fichier de périphérique, utilise plutôt une librairie dédiée (e.g. http://libusb.wiki.sourceforge.net/ mais attention aux histoires de licence).

    De toutes façon, lib ou pas, il te faut savoir ce qu'attend le périphérique, donc regarder les docs constructeurs.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 56
    Points : 21
    Points
    21
    Par défaut
    Merci pour cette nouvelle réponse.

    Pour commencer, j'avais trouvé cette libusb, mais je crois avoir lu quelque part qu'elle obligeait le programme à être en attente d'une entrée... Or, mon but (à terme) est que mon clavier pilote mon logiciel, mais ne l'empêche pas pour autant de fonctionner à la souris, de faire des actions etc...

    De plus, je n'ai aucune "doc constructeur" sur ce périphérique. C'est rien de moins qu'un clavier en fait. Je ne lui donne aucune information en entrée à mon périphérique : mon programme en reçoit uniquement, comme un vulgaire clavier, sauf que c'est un clavier plus élaboré (en RS232 normalement).

    Je n'ai pas de document particulier. Mon but, pour les tests de faisabilité, c'est de trouver une lib ou un bout de code qui me permette de voir ce que ce clavier transmet comme information.
    J'étudie la faisabilité et ça doit l'être... mais j'ai pas trouvé grand chose de concluant. Je vais tester le code précédent....

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 56
    Points : 21
    Points
    21
    Par défaut
    Bon, j'ai testé le bout de code. Je récupère bien des trucs. Mais bon, j'avoue que je suis vraiment largué sur ce genre d'entrée car je ne sais absolument pas interprété le résultat. Ce n'est pas un caractère qui est envoyé... et je ne sais pas ce que c'est....

    Je ne sais comment le trouver d'ailleurs : si toutefois vous vouliez bien m'aider, la référence du clavier est "COMMANDER M128WX" . On appelle ça une "commande preh".....Je fais appel à vous car je suis vraiment paumé.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 56
    Points : 21
    Points
    21
    Par défaut
    Bon, j'm'en sors pas de ce truc.

    J'ai laissé un message au support (Preh, c la marque). J'ai téléchargé un logiciel pour programmer les touches du clavier. J'ai cru faire un pas en avant, mais hélas, j'ai testé plein d'écriture de paramétrage et ça sort rien, même sous Windows ou pourtant, ça devrait fonctionner....

    Autant sur Mac, j'en sais rien (mais je l'espère vraiment), autant sous Windows, c'est sensé fonctionner. Et rien.

    C'est chiant du coup. Je me retrouve avec un clavier que j'aurai bien utilisé, mais qui ne me sert plus à rien....

  8. #8
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par TheoOrl45 Voir le message
    Bon, j'ai testé le bout de code. Je récupère bien des trucs. Mais bon, j'avoue que je suis vraiment largué sur ce genre d'entrée car je ne sais absolument pas interprété le résultat. Ce n'est pas un caractère qui est envoyé... et je ne sais pas ce que c'est....
    Les trucs sont certainement des trames rs232. Ça peut arriver en continu ou à intervalle régulier (toutes les 100 ms ou à chaque pression sur une touche par exemple). Il y a des chances que la taille des trame soit constante (souvent un multiple de 8). Y a t il régulièrement des zéros dans ceux que tu peux lire ? (il se peut que deux trames soient séparées comme ça)
    Ce que tu peux faire c'est voir si ce que tu reçois dépend des touches pressées sur le clavier...
    Réécrire un driver à partir de rien, n'a rien d'évident mais ce n'est pas impossible.
    Courage
    Dernière modification par Invité(e) ; 06/03/2008 à 09h22. Motif: Oups mon doigt a glissé

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 56
    Points : 21
    Points
    21
    Par défaut
    Après discussion avec le support anglais/allemand de preh, j'ai compris certaines choses sur le clavier...

    J'ai téléchargé des ptits logiciels windows qui m'affiche bien que le clavier envoie des codes. Mais j'avoue être perdu pour la lecture en C++ de ce qu'envoie le clavier.

    Il y a un élément à monter dans MAC OS sous dev/ qui s'appelle cu.usbserial.
    Je le monte avec "mount -t cu.usbserial".
    Ensuite, je fais un "cat cu.usbserial" et là, ça se met en attente. Et miracle, lorsque j'appuie sur une touche du clavier, j'ai bien le code qui est inscrit (j'envoie "A01" sur la touche et ça m'affiche bien ça).

    Je me dis donc que je n'ai qu'à lire le "cu.usbserial" pour connaitre la touche frappée. Petit problème : le code précédent de ce topic ne fonctionne pas et je n'arrive pas à l'adapter pour la lecture.
    Autre soucis, ce fichier "cu.usbserial", qui représente un truc genre "buffer", ajoute tout à la suite les frappes sur mes touches. Donc si j'appuie 3 fois sur ma touche, je n'ai pas 3 apparitions uniques de "A01", mais "A01A01A01"....
    Alors si j'arrive bien à lire la toute première frappe, je vais être emmerder pour la suivante....Après, peut-être que c'est juste un effet lié à la commande "cat" et qu'en fait, le buffer est vidé à chaque fois....

    Comment procéderiez-vous ? J'avance ptit à ptit, mais j'ai vraiment pas mal de difficultés....Votre aide m'est précieuse.

    Merci à vous tous.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 107
    Points : 122
    Points
    122
    Par défaut
    Tu n'as pas compris ce qu'est un flux de données peut être.
    La commande cat ne fait qu'afficher ce qu'est disponible dans le flux d'entrée. Cela fonctionne comme un flux TCP (tu n'imagine pas que le PC distant vide le buffer, non ?!).

    Comment procéderiez-vous
    J'utiliserais la commande cat pour créer une table de correspondance entre code (A01) et touche pressée.
    (il te faut le code de relâchement de touche, sinon tu pourras pas faire grand chose).

    Il y a un élément à monter dans MAC OS sous dev/ qui s'appelle cu.usbserial.
    Je le monte avec "mount -t cu.usbserial".
    Encore une fois je t'enjoins d'utiliser une librairie dédiée. Voici quelques questions que tu peux te poser :
    - peut-on attendre de l'utilisateur qu'il tape la commande ci-dessus ?
    - crois-tu que le fichier de périphérique s'appellera toujours "cu.usbserial" ? (déjà pas sous linux, et sous un même OS la logique de nommage peut changer d'une version à l'autre, d'un correctif à l'autre)
    - si après tu veux être en mode interruptible saurais-tu le faire avec ce fichier de périphérique ? (en utilisant l'appel système select, mais ce serait plus simple avec une lib)
    En utilisant une librairie tu pourras [1] :
    - connaître les différents modes de fonctionnement du périphérique (c'est facile d'accès car dans la doc)
    - sélectionner un mode particulier
    - configurer facilement le périphérique
    - avoir une mailing list spécialisée (donc un endroit où poser des questions à des gens intéressés et compétents)

    [1] cela vient de mon expérience d'utilisation du port parallèle

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 56
    Points : 21
    Points
    21
    Par défaut
    Merci pour ces précisions.

    Seulement, je n'ai pas besoin de document sur ce clavier, ni de refaire une correspondance avec la commande "cat". Je ne peux configurer ce clavier QUE sous windows. ça, ça me pose pas de problème. Et je l'ai chargé pour que l'appui sur une touche envoie la valeur que je désire. Cela fonctionne bien. Je n'aurai jamais rien à lui envoyer en retour.

    Le clavier est paramétré. Ce qui m'embête aujourd'hui, c'est uniquement la lecture de ce qu'il m'envoie. Et ce n'est pas une doc sur le clavier qui va me dire ça....
    Je te rejoins sur le montage du périphérique, et sur son nom qui peut varier.... c'est effectivement enquiquinant. Mac Os utilise un noyau UNIX, mais je ne sais pas dans quelle mesure je peux utiliser les similitudes entre les deux : il est difficile de trouver quoi que ce soit pour ce système. Je veux bien utiliser une lib, ça me pose pas de soucis, mais je n'en ai pas trouvé.
    Il me faudrait une lib RS232....comme la lib usb que j'avais trouvé.....

    Dur dur ce truc... J'crois que je vais vraiment finir par lacher l'affaire.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 107
    Points : 122
    Points
    122
    Par défaut
    RS232 ou USB ?
    Si tu a un convertisseur, alors il vaut mieux que ce soit USB car le RS232 va disparaître petit à petit des PC.

    sinon voici un lien : http://en.wikibooks.org/wiki/Serial_...g:Serial_Linux

    il faut donc (cf le lien) savoir que ce qui passe par le port série peut être simplement contrôlé par l'interface termios présent dans les UNIX et UNIX-like.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 56
    Points : 21
    Points
    21
    Par défaut
    Je ne peux pas prendre une lib USB. En effet, le convertisseur en question "simule" un port Série, aussi bien sous Windows que sous Mac....

    Je tourne en rond depuis plusieurs jours à ce sujet... ça finit par me prendre la tête. Je vais remiser cette partie du développement à plus tard....

    Merci pour votre aide à tous. Je ferai peut-être de nouveau appel à vous lorsque je reviendrais sur ce point.

    A++

Discussions similaires

  1. Réponses: 7
    Dernier message: 16/05/2010, 20h41
  2. Formatage clé usb sur Mac OS X
    Par The-Most-Wanted dans le forum Apple
    Réponses: 3
    Dernier message: 01/04/2010, 05h59
  3. Librairies USB listener sur Mac ?
    Par ttone dans le forum Apple
    Réponses: 3
    Dernier message: 08/08/2009, 10h21
  4. [Lazarus] [Mac OS X] Communication USB
    Par vw_seb dans le forum Lazarus
    Réponses: 0
    Dernier message: 09/04/2009, 10h45
  5. cle usb et mac
    Par djibril dans le forum Apple
    Réponses: 4
    Dernier message: 07/12/2005, 11h55

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