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

MFC Discussion :

Lecture du port USB


Sujet :

MFC

Vue hybride

ArkAng3 Lecture du port USB 10/08/2005, 13h14
Aurelien.Regat-Barrel Faut écrire un driver... 10/08/2005, 17h22
ArkAng3 est ce kon peut utilisé la... 10/08/2005, 17h37
Hokagge => createfile() pour ouvrir... 10/08/2005, 17h46
ArkAng3 merci Hokagge. J'ai deja fait... 10/08/2005, 17h55
Hokagge Pour le createfile(), je ne... 10/08/2005, 18h10
ArkAng3 merci pour cette aide. est ce... 10/08/2005, 18h15
ArkAng3 est ce ke tu pourré mettre... 10/08/2005, 20h13
Aurelien.Regat-Barrel J'avais pas bien compris. Si... 10/08/2005, 23h25
ArkAng3 merci de ton aide. g récupéré... 11/08/2005, 01h05
ArkAng3 Je n'arivve pas a trouvé le... 12/08/2005, 00h02
Aurelien.Regat-Barrel Je me suis embrouillé avec... 12/08/2005, 16h36
ArkAng3 Bon jvien de compilé le prog... 12/08/2005, 17h23
Aurelien.Regat-Barrel En utilisant le code du PDF... 16/08/2005, 10h10
Aurelien.Regat-Barrel Vu que ça fait partie du DDK,... 16/08/2005, 10h12
GillesCGD oulalalala, depuis le temps... 22/03/2007, 10h12
remsbdx Communiquer avec le port usb 28/03/2007, 09h49
evol29 sos 29/03/2007, 15h44
GillesCGD J'ai touvé de schose... 29/03/2007, 22h30
evol29 Merci moi aussi j'arive pas a... 02/04/2007, 09h23
ArkAng3 Slt, j'ai essayais comme tu... 24/08/2005, 10h38
Aurelien.Regat-Barrel Ca marche pas c.a.d ? Tu... 24/08/2005, 12h02
ArkAng3 Le nom du périph c'est : ... 24/08/2005, 16h35
ArkAng3 Ca yé g rectifié ce qui allé... 24/08/2005, 17h06
ArkAng3 Maintenan, j'arrive a lire... 24/08/2005, 17h58
Aurelien.Regat-Barrel buf[Read] = 0; ... 25/08/2005, 10h16
ArkAng3 en faite, j'ai trouvé une... 25/08/2005, 16h49
Aurelien.Regat-Barrel Pense à cliquer sur Résolu... 25/08/2005, 17h08
abignon Salut à tous, moi aussi... 03/09/2005, 00h07
Aurelien.Regat-Barrel Pourquoi veux-tu comprendre... 03/09/2005, 14h17
abignon Certaines valeurs changes,... 03/09/2005, 16h12
Aurelien.Regat-Barrel je voulais dire au prochain... 05/09/2005, 18h51
abignon oki, merci de ton aide ... 05/09/2005, 19h46
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 79
    Par défaut
    Slt, j'ai essayais comme tu as dit,mais je n'arrive toujours pas à faire un programme qui marche jte donne le code pour me dire si il est juste. J'ai rajouter quelque ligne,car javais des erreurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #define INITGUID // <- important !
    #include <windows.h>
     
    GUID USBIODS_GUID = {0x745A17A0,0x74D3, 0x11D0, {0xB6, 0xFE, 0x00, 0xA0, 0xC9, 0x0F, 0x57, 0xDA}};
    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
     
    void CCMDTVDlg::OnButton1()
    {
       // TODO: Add your control notification handler code here
    int i;
    bool t=false;
    CString Devices[10]; // an array of cstrings
    for (i=0; i<50 ; i++)
    {
    t=true;
     
    SP_INTERFACE_DEVICE_DATA Interface_Info;
    Interface_Info.cbSize = sizeof(Interface_Info);
     
    // Enumerate device
    if (!SetupDiEnumInterfaceDevice(hInfo, NULL, (LPGUID)
    &USBIODS_GUID,i, &Interface_Info))
    {
    SetupDiDestroyDeviceInfoList(hInfo);
    //SetDlgItemText(IDC_LABEL,"Pas De device enum");
    t=false;
    }
     
    DWORD needed; // get the required lenght
     
    SetupDiGetInterfaceDeviceDetail(hInfo, &Interface_Info,
    NULL, 0, &needed, NULL);
     
    PSP_INTERFACE_DEVICE_DETAIL_DATA detail =
    (PSP_INTERFACE_DEVICE_DETAIL_DATA) malloc(needed);
     
    if (!detail)
    {
    SetupDiDestroyDeviceInfoList(hInfo);
    //SetDlgItemText(IDC_LABEL,"CCC");
    t=false;
    }
    CString str;   
    // fill the device details
    if(t)
    {
       detail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
       if (!SetupDiGetInterfaceDeviceDetail(hInfo,&Interface_Info,detail, needed,NULL, NULL))
       {
       free((PVOID) detail);
       SetupDiDestroyDeviceInfoList(hInfo);
       SetDlgItemText(IDC_LABEL,"Pas interface");
       }
     
       char name[MAX_PATH];
       strncpy(name, detail->DevicePath, sizeof(name));
     
       free((PVOID) detail);
     
       Devices[i] = name; // keep a copy of each device name
     
    }
    for(int a=0;a<10;a++)
    SetDlgItemText(IDC_LABEL,Devices[a]);
    }
    }
    Voila. Si deja cette partie de programme était juste je pourrais récupéré le nom du périph,mais ca marche pas. Merci de ton aide @+

  2. #2
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Ca marche pas c.a.d ?
    Tu devrais faire une version simple console pour commencer, car y'a de drôle de trucs dans ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(int a=0;a<10;a++) 
    SetDlgItemText(IDC_LABEL,Devices[a]);
    tu changes 10 fois à la suite le texte d'un même label...
    Quel est le nom du périph qui t'intéresse tel que tu le vois dans Winobj ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 79
    Par défaut
    Le nom du périph c'est :

    HID#vid_14fe&Pid_232a&Col01#6&32feb84d&1&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 79
    Par défaut
    Ca yé g rectifié ce qui allé pas voila le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #define INITGUID // <- important !
    #include <windows.h> 
    GUID USBIODS_GUID = {0x4d1e55b2,0xf16f, 0x11cf, {0x88, 0xcb, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30}};
    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
     
    void CCMDTVDlg::OnButton1() 
    {
    	// TODO: Add your control notification handler code here
    int i;
    bool t=false;
    CString Devices[10]; // an array of cstrings
    for (i=2; i<3 ; i++)
    {
    t=true;
     
    SP_INTERFACE_DEVICE_DATA Interface_Info;
    Interface_Info.cbSize = sizeof(Interface_Info);
     
    // Enumerate device
    if (!SetupDiEnumInterfaceDevice(hInfo, NULL, (LPGUID)
    &USBIODS_GUID,i, &Interface_Info))
    {
    SetupDiDestroyDeviceInfoList(hInfo);
    //SetDlgItemText(IDC_LABEL,"Pas De device enum");
    t=false;
    }
     
    DWORD needed; // get the required lenght
     
    SetupDiGetInterfaceDeviceDetail(hInfo, &Interface_Info,
    NULL, 0, &needed, NULL);
     
    PSP_INTERFACE_DEVICE_DETAIL_DATA detail =
    (PSP_INTERFACE_DEVICE_DETAIL_DATA) malloc(needed);
     
    if (!detail)
    {
    SetupDiDestroyDeviceInfoList(hInfo);
    //SetDlgItemText(IDC_LABEL,"CCC");
    t=false;
    }
    CString str;	
    // fill the device details
    if(t)
    {
    	detail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
    	if (!SetupDiGetInterfaceDeviceDetail(hInfo,&Interface_Info,detail, needed,NULL, NULL))
    	{
    	free((PVOID) detail);
    	SetupDiDestroyDeviceInfoList(hInfo);
    	SetDlgItemText(IDC_LABEL,"Pas interface");
    	}
     
    	char name[MAX_PATH];
    	strncpy(name, detail->DevicePath, sizeof(name));
     
    	free((PVOID) detail);
    	str.Format("%s",name);
     
    	hUsbDevice = CreateFile(name, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
    if(hUsbDevice == INVALID_HANDLE_VALUE)
    {
    	SetDlgItemText(IDC_LABEL1,"Erreur lors de l'ouverure du port");
    }else
    {
    	SetDlgItemText(IDC_LABEL1,"Port ouvert");
     
    }
    	Devices[i] = name; // keep a copy of each device name
     
    }
     
    SetDlgItemText(IDC_LABEL,str);
     
    }
    }
    Maintenant j'essai de lire au nivo du périph mais ca a pas l'air de marché
    Je lis comme ca :

    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
     
     
    void CCMDTVDlg::OnButton3() 
    {
    	// TODO: Add your control notification handler code here
     
    char buf[4096],
    chaine[4096];
    CString strb;
    DWORD Read;
     
    ReadFile(hUsbDevice, buf, 2048, &Read, NULL );
     
    buf[Read] = 0;
    //m_Texte = buf;
    strb.Format("%d",buf);
    SetDlgItemText(IDC_LABEL3,strb);
    PurgeComm(hUsbDevice, PURGE_RXCLEAR);
    }
    Est ce ke la lecture est juste?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 79
    Par défaut
    Maintenan, j'arrive a lire sur le port usb, le prob ke g c que la valeur que je récupére je la converti :
    en cstring : ┐€€€€¤
    en hexa: 12e688
    en decimal: 1238664

    Lorsque jappuie sur un autre bouton, la valeur en CString change mais pas celle en hexa et decimal. Donc je cherche un moyen pour réussir a différencier l'appuie des touches en utilisant un CString. Faudrais que je trouve un moyen pour récupéré la valeur en binaire...

  6. #6
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    buf[Read] = 0; 
    //m_Texte = buf; 
    strb.Format("%d",buf); 
    SetDlgItemText(IDC_LABEL3,strb);
    ce code ne fait qu'afficher l'adresse de ton buffer... Pour afficher son contenu, il te faut parcourir chaque octet de ton buffer et concaténéer sa valeur dans ta chaine.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 79
    Par défaut
    en faite, j'ai trouvé une soluce avec les valeurs en CString. Je récupére les différentes valeur suivant lappuie des touches et je les enregistre ds un fichier .ini . Et lors du démarrage de l'appli, je charge les différentes valeurs ds des char*. Et ensuite je compare ces valeurs, avec la valeurs capturé lors de l'appuie d'une touche.

    Merci de ton aide Aurelien.Regat-Barrel. ca ma beaucoup servi.

  8. #8
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Pense à cliquer sur Résolu alors

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 62
    Par défaut
    Citation Envoyé par ArkAng3
    Le nom du périph c'est :

    HID#vid_14fe&Pid_232a&Col01#6&32feb84d&1&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
    Salut à tous,

    moi aussi j'essai d'etablir une communication USB, sa marche mais je ne comprend pas toute la signification de cette chaine :
    VID = OK
    PID = OK
    Col01 ???
    6 ???
    32feb84d ???
    1 ???
    0000 = à piori le n° de port USB du concentrateur
    puis le GUID

    Qulequ'un sais pour ces valeurs ?

    merci

    Arnaud

    PS: pour info pour établir la communication, j'ai compiler l'exemple bulkusb fourni avec le DDK, j'ai installer le driver compilé avec mon périph, créer une appli sous VC++ et sa marche !!!

  10. #10
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Pourquoi veux-tu comprendre ces valeurs ? De ce que je sais, c'est la sauce interne de XP, ça peut changer à tout moment, et ça change d'un Windows à l'autre.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 62
    Par défaut
    Certaines valeurs changes, pas d'autres.

    Si je cherche à comprendre c'est que pour mon travail, sur une ligne de production, il y aura 16 periperiques connectés simultannéments sur des ports USB et que je veut pouvoir communiquer avec tous. Et comme tous les periphériques seront identiques (VID et PID) sa risque de poser problème.

    Sinon, les valeurs ne change pas lorsqu'on reconnecte le meme periphérique sur un meme port USB car c'est inscrit dans la base de registre (mis à part la dernière valeur, qui a priori correspond au n° du port).

    Arnaud

  12. #12
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Aurelien.Regat-Barrel
    ça peut changer à tout moment
    je voulais dire au prochain Windows / Service Pack / patch / un autre Windows.

    A partir du GUID tu récupères tous les périphériques branchés. On a débattu de la procédure dans ce topic. Y'a du code d'exemple. Bref tu as tout ce qui faut pour faire ça proprement.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 62
    Par défaut
    oki, merci de ton aide

    Arnaud

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Lecture de port USB
    Par riete dans le forum Langage
    Réponses: 4
    Dernier message: 09/06/2009, 11h05
  2. Lecture sur Port USB en C/C++
    Par gobelin88 dans le forum C++
    Réponses: 1
    Dernier message: 10/09/2007, 22h08
  3. [PHP-JS] Lecture du Port USB
    Par toons18 dans le forum Langage
    Réponses: 13
    Dernier message: 05/10/2006, 00h15
  4. lecture d'un port usb
    Par bob21 dans le forum C++
    Réponses: 1
    Dernier message: 13/06/2006, 13h18
  5. Réponses: 2
    Dernier message: 27/02/2003, 01h33

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