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 :

Comment communiquer avec un périphérique USB ?


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    alternant
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : alternant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Comment communiquer avec un périphérique USB ?
    Bonjour à tous,

    Depuis peu, j'ai été mis sur un projet consistant à communiquer avec un palpeur( une machine qui prend les cotes sur les montures de lunettes afin de savoir la formes des verres), le problème est que je recherche le moyen de réceptionner le flux de cette machine sur un port USB, tout en ne sachant pas à l'avance sur quel port elle sera branché. Je me suis renseigné, mais à part libusb, qui pourrait peut être résoudre mes soucis, si seulement je pouvais l'installer, mais je ne peux pas.

    Je cherche donc une solution sans librairies, des idées ?

    Merci par avance de vos réponses.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    C'est quoi l'excuse (totalement bidon) pour ne pas "installer" libusb ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    alternant
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : alternant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    et bien de ce que j'ai lu de la doc d'installation de libusb, il faut utilisé des commande shell pour l'installer proprement, or, shell est bloqué sur mon pc, donc pas de libusb, après, si tu as une solution pour passer outre, je ne suis pas contre.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    shell est bloqué sur mon pc
    C'est quoi ton "PC", une GBA ?
    C'est quel OS ? que tu ne maitrises pas.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    alternant
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : alternant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    un Windows 7 verrouillé d'un peu partout, en mode utilisateur (genre je peux pas même pas affiché les fichiers caché, et clique droit = copier, coller, nouveau.) donc je suis coincé.

  6. #6
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Et bien, contacte ton administrateur système, en lui expliquant que tu as besoin de plus de choses.
    Ou demande l'installation d'une machine virtuelle.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  7. #7
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    Bonjour, sur le site de libusb,(http://libusb.info ) tu peux télécharger les binaires pour windows directement et ils te mettent les librairies pour les compilateurs mingw,mingw64, et visual studio.il te faut juste le decompacteur 7z sur ta machine pas besoin de ligne de commande.
    sinon tu peux aussi telecharger les sources pour recompiler toi meme donc là cela depend si tu utilises le compilateur visual studio ou alors mingw/mingw64.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    alternant
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : alternant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Merci de ta réponse !

    ça avance, j'ai dl la librairie, include libusb.h, link le libusb.a, j'ai copié un code basique pour tester le tout, et ça me met l'erreur "undefined reference to `libusb_init@4'|" et ça pour chaque appel a libusb, j'ai cru comprendre qu'il fallait rajouter '-lusb-1.0" quelque par mais je ne sais pas ou. (au passage mon admin sys m'as fais passer sur une session admin afin de ne plus avoir de soucis, j'ai accès à powershell et au cmd) voici mon code :


    main.cpp
    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
     
    #include <iostream>
    #include <libusb.h>
    #include <UsbConnect.h>
     
    using namespace std;
     
     
     
    int main()
    {
       UsbConnect usb(8);
       int r =  usb.init();
       return 1;
     
     
    }
    UsbConnect.cpp
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    #include <UsbConnect.h>
    #include <libusb.h>
    #include <iostream>
     
    using namespace std;
     
    UsbConnect::UsbConnect(int i)
    {
        //ctor
    }
    int UsbConnect::init()
    {
    	int r; //for return values
    	r = libusb_init(&ctx); //initialize a library session
    	if(r < 0)
        {
    		cout<<"Init Error "<<r<<endl; //there was an error
    				return 1;
    	}
    	libusb_set_debug(ctx, 3); //set verbosity level to 3, as suggested in the documentation
    	cnt = libusb_get_device_list(ctx, &devs); //get the list of devices
    	if(cnt < 0)
        {
    		cout<<"Get Device Error"<<endl; //there was an error
    	}
    	cout<<cnt<<" Devices in list."<<endl; //print total number of usb devices
    		size_t i; //for iterating through the list
    	for(i = 0; i < cnt; i++)
            {
    				printdev(devs[i]); //print specs of this device
    		}
    		libusb_free_device_list(devs, 1); //free the list, unref the devices in it
    		libusb_exit(ctx); //close the session
    		return 0;
        return 0;
    }
    void UsbConnect::printdev(libusb_device *dev)
    {
    	libusb_device_descriptor desc;
     
    	int r = libusb_get_device_descriptor(dev, &desc);    //_get_device_descriptor(dev, &desc);
    	if (r < 0)
        {
    		cout<<"failed to get device descriptor"<<endl;
    		return;
    	}
    	cout<<"Number of possible configurations: "<<(int)desc.bNumConfigurations<<"  ";
    	cout<<"Device Class: "<<(int)desc.bDeviceClass<<"  ";
    	cout<<"VendorID: "<<desc.idVendor<<"  ";
    	cout<<"ProductID: "<<desc.idProduct<<endl;
    	libusb_config_descriptor *config;
    	libusb_get_config_descriptor(dev, 0, &config);
    	cout<<"Interfaces: "<<(int)config->bNumInterfaces<<" ||| ";
    	const libusb_interface *inter;
    	const libusb_interface_descriptor *interdesc;
    	const libusb_endpoint_descriptor *epdesc;
    	for(int i=0; i<(int)config->bNumInterfaces; i++)
    	{
    		inter = &config->interface[i];
    		cout<<"Number of alternate settings: "<<inter->num_altsetting<<" | ";
    		for(int j=0; j<inter->num_altsetting; j++)
    		{
    			interdesc = &inter->altsetting[j];
    			cout<<"Interface Number: "<<(int)interdesc->bInterfaceNumber<<" | ";
    			cout<<"Number of endpoints: "<<(int)interdesc->bNumEndpoints<<" | ";
    			for(int k=0; k<(int)interdesc->bNumEndpoints; k++)
    			{
    				epdesc = &interdesc->endpoint[k];
    				cout<<"Descriptor Type: "<<(int)epdesc->bDescriptorType<<" | ";
    				cout<<"EP Address: "<<(int)epdesc->bEndpointAddress<<" | ";
    			}
    		}
    	}
    	cout<<endl<<endl<<endl;
    	libusb_free_config_descriptor(config);
    }
    UsbConnect.h
    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
    20
     
    #ifndef USBCONNECT_H
    #define USBCONNECT_H
    #include <libusb.h>
     
    class UsbConnect
    {
        public:
            UsbConnect(int i);
            int init();
     
        protected:
        private:
            libusb_device **devs; //pointer to pointer of device, used to retrieve a list of devices
            libusb_context *ctx = NULL; //a libusb session
            size_t cnt; //holding number of devices in list
            void printdev(libusb_device *dev);
    };
     
    #endif // USBCONNECT_H

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Si tu as une erreur de link c'est que tu n'as pas lié la librairie (le .a), ou en tous cas que le linker ne l'a pas trouvé dans les dossiers où tu lui as indiqué devoir chercher.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    alternant
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : alternant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Nom : link.PNG
Affichages : 365
Taille : 41,1 Ko

    C'est bien ça le link non ? (c'est pas du tout aggréssif, je veux juste être bien sur ^^)

    j'ai fait ça aussi, est ce bon ?

    Nom : directories 1.PNG
Affichages : 349
Taille : 43,7 Ko

    lib, c'est la ou j'ai rangé le fichier .a, j'ai également mit l'emplacement du .h dans l'onglet linker, est-ce bon ?

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 629
    Points : 10 554
    Points
    10 554
    Par défaut
    Citation Envoyé par darinoké Voir le message
    j'ai fait ça aussi, est ce bon ?
    oui et non

    Si le chemin de ton dossier est valide, tu peux le faire.
    Maintenant, dans un dossier "lib" on s'attend à trouver des fichiers .a, .lib, .dll, ... tout un tas de fichiers que le compilateur n'en a rien à braire.

  12. #12
    Futur Membre du Club
    Homme Profil pro
    alternant
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : alternant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    j'ai interverti les dossier lib et include, pour mettre le.a dans le linker et le .h dans le compilateur, mais j'ai toujours le meme bug, "undifined reference to....."

  13. #13
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    Supprimez "lib\" du nom de la librairie.

  14. #14
    Futur Membre du Club
    Homme Profil pro
    alternant
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : alternant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    J'ai supprimer lib\, les erreurs sont toujours présentes.

  15. #15
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    Supprimez le suffixe ".a" du nom de la librairie.

  16. #16
    Futur Membre du Club
    Homme Profil pro
    alternant
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : alternant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    " lib\libusb-1.0||No such file or directory|" avec le lib\ et sans le .a

    "D:\Code\TestLibUsb\main.cpp|30|undefined reference to `libusb_init@4'|" et ça sans le lib\ ni le .a

  17. #17
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    Bon, il est bizarre votre IDE.
    Laissez le ".a" alors.

    Normalement, il doit logguer la ligne de commande au linker, donnez-nous cette ligne de commande.

  18. #18
    Futur Membre du Club
    Homme Profil pro
    alternant
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : alternant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    g++.exe -Linclude -o bin\Debug\TestLibUsb.exe obj\Debug\main.o obj\Debug\src\UsbConnect.o lib\libusb-1.0.a

    Voila la ligne, perso je vois pas trop de prolème, mais pour le coup, le compilateur j'suis pas fort du tout, je connais les grandes lignes quoi.

  19. #19
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Ce n'est pas le compilateur qui rencontre un obstacle ici mais l'éditeur de lien (même si tu invoques GCC, ce n'est pas lui qui construit l'exécutable directement).

    Le fichier en question, libusb-1.0.a doit exister sur ton système, dans un répertoire nommé lib. Vérifie déjà que c'est le cas (si ça se trouve le suffixe -1.0 est absent du nom de fichier). Tu peux au choix passer par une recherche Windows ou utiliser quelque chose comme $ find / -type f -name libusb* .

    Si le fichier existe bien, l'éditeur de liens doit être informé qu'il faut également rechercher les cibles dans le parent du répertoire lib.

  20. #20
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par darinoké Voir le message
    g++.exe -Linclude -o bin\Debug\TestLibUsb.exe obj\Debug\main.o obj\Debug\src\UsbConnect.o lib\libusb-1.0.a
    Il est où le lien vers la libusb là ? Tout ce que je vois c'est que tu essayes de l'inclure dans l'exe.
    Mais lier une lib ça s'est toujours fait avec la syntaxe -llibusb-1.0
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 10
    Dernier message: 15/04/2015, 20h36
  2. [AC-2003] Comment communiquer avec le port USB depuis access ?
    Par Expensive dans le forum IHM
    Réponses: 6
    Dernier message: 25/01/2013, 06h38
  3. [Système] Communiquer avec un périphérique USB
    Par Blackshade dans le forum Langage
    Réponses: 5
    Dernier message: 20/09/2007, 18h28
  4. Comment communiquer avec un périphérique ?
    Par Etudiant80 dans le forum LabVIEW
    Réponses: 6
    Dernier message: 08/04/2007, 11h32
  5. [Système] Comment communiquer avec un port serie ou usb en php?
    Par thenightmare1985 dans le forum Langage
    Réponses: 3
    Dernier message: 05/12/2006, 13h12

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