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

Windows Discussion :

petit soucis pour lire sur un port usb le createfile n'accep


Sujet :

Windows

  1. #1
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 83
    Points : 71
    Points
    71
    Par défaut petit soucis pour lire sur un port usb le createfile n'accep
    salut a tous donc jexplique mon probleme le createfile fonctionne juste quand jutile le GUID d'un USB_HUB si kelkun aurait une petite idée se serait vraiment gentil merci

    tchao

    voila mon code :


    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    GUID hidGUID = {0x53f56307, 0xb6bf, 0x11d0, {0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b}};
    //GUID hidGUID = {0xa5dcbf10, 0x6530, 0x11d2, {0x90, 0x1f, 0x00, 0xc0, 0x4f, 0xb9, 0x51, 0xed}};
    	HDEVINFO hardwareDeviceInfoSet;
        SP_DEVICE_INTERFACE_DATA deviceInterfaceData;
        PSP_INTERFACE_DEVICE_DETAIL_DATA deviceDetail;
        ULONG requiredSize;
        HANDLE deviceHandle = INVALID_HANDLE_VALUE;
        DWORD result;
    
        //Get the HID GUID value - used as mask to get list of devices
    //    HidD_GetHidGuid (&hidGUID);
    
        //Get a list of devices matching the criteria (hid interface, present)
        hardwareDeviceInfoSet = SetupDiGetClassDevs (&hidGUID,
                                                     NULL, // Define no enumerator (global)
                                                     NULL, // Define no
                                                     (DIGCF_PRESENT | // Only Devices present
                                                     DIGCF_DEVICEINTERFACE)); // Function class devices.
    
        deviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
    
        //Go through the list and get the interface data
        result = SetupDiEnumDeviceInterfaces (hardwareDeviceInfoSet,
                                              NULL, //infoData,
                                              &hidGUID, //interfaceClassGuid,
                                              0, //changement
                                              &deviceInterfaceData);
    
        /* Failed to get a device - possibly the index is larger than the number of devices */
        if (result == FALSE)
        {
            SetupDiDestroyDeviceInfoList (hardwareDeviceInfoSet);
    //        return INVALID_HANDLE_VALUE;
        }
    
        //Get the details with null values to get the required size of the buffer
        SetupDiGetDeviceInterfaceDetail (hardwareDeviceInfoSet,
                                         &deviceInterfaceData,
                                         NULL, //interfaceDetail,
                                         0, //interfaceDetailSize,
                                         &requiredSize,
                                         0); //infoData))
    
        //Allocate the buffer
        deviceDetail = (PSP_INTERFACE_DEVICE_DETAIL_DATA)malloc(requiredSize);
        deviceDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
    
        //Fill the buffer with the device details
        if (!SetupDiGetDeviceInterfaceDetail (hardwareDeviceInfoSet,
                                              &deviceInterfaceData,
                                              deviceDetail,
                                              requiredSize,
                                              &requiredSize,
                                              NULL)) 
        {
            SetupDiDestroyDeviceInfoList (hardwareDeviceInfoSet);
            free (deviceDetail);
    //        return INVALID_HANDLE_VALUE;
        }
    
        //Open file on the device
        deviceHandle = CreateFile (deviceDetail->DevicePath,
                                   GENERIC_READ,
                                   FILE_SHARE_READ | FILE_SHARE_WRITE,
                                   NULL,        // no SECURITY_ATTRIBUTES structure
                                   OPEN_EXISTING, // No special create flags
                                   0, 
                                   NULL);       // No template file
    
    	if(deviceHandle==INVALID_HANDLE_VALUE)
    			printf("erreur\n");
    		else
    			printf("ca marche\n");
    
    printf("device : %s\n",deviceDetail->DevicePath);
    /*
    char* buffer;
    DWORD nb_caractere;
    printf("lecture\n");
    
    COMMTIMEOUTS Timeout;
    Timeout.ReadTotalTimeoutConstant=10000;
    Timeout.WriteTotalTimeoutConstant=0;
    Timeout.WriteTotalTimeoutMultiplier=0;
    SetCommTimeouts(deviceHandle,&Timeout);
    
    int testread;
    testread=ReadFile(deviceHandle,buffer,2048,&nb_caractere,NULL);
    
    if(testread==0)
    printf("erreur read %d\n",testread);
    else
    printf("contenu : %s\n",buffer);
    
    if(GetLastError()==ERROR_HANDLE_EOF)
    printf("ERROR_HANDLE_EOF");
    if(GetLastError()==ERROR_IO_PENDING)
    printf("ERROR_IO_PENDING");
    */
    DWORD z;
    if(WriteFile(deviceHandle,"coucou",6,&z,NULL)==0)
    printf("erreur");
    
    
    SetupDiDestroyDeviceInfoList (hardwareDeviceInfoSet);
    free (deviceDetail);

  2. #2
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 83
    Points : 71
    Points
    71
    Par défaut re
    je vais reexpliquer plus clairement le probleme quand jutilse le GUID d'un USB_HUB le createfile fonctionne mais pas le readfile ni le writefile.
    et lorsque je prend le GUID d'un port usb tout simple alors la meme le CreateFile ne fonctionne pas donc je suis bloqué la dessus, et au bord du suicide si kelkun pouvait maider japrecirait enormement tchao++

  3. #3
    Expert éminent sénior

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

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Ton code sert à récupérer le path vers un device. Si tu donnes l'identifiant d'un device qui n'existe pas sur ton ordi, ça va pas marcher.
    Ensuite, ce path, en l'ouvrant, tu t'adresses au driver associé. C'est lui qui va gérer tes requêtes read / write. Donc c'est au cas par cas, ça dépend du bon vouloir du driver associé au périphérique.

  4. #4
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 83
    Points : 71
    Points
    71
    Par défaut re
    et bien c un lecteur de code barres qui est connécté au port usb, et ce lecteur emule le clavier moi ce que je veux c'est enregistrer les donnée du lecteur dans un buffer, suis-je bien sur la bonne route ?

  5. #5
    Expert éminent sénior

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

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Difficile à dire, c'est spécifique à ton matériel. A priori oui, si tu as le bon GUID, et si le driver accepte de fonctionner ainsi... Normalement tu as un SDK fournit avec ta douchette qui te simplifie tout cela.

  6. #6
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 83
    Points : 71
    Points
    71
    Par défaut re
    ok jpense avoir compris le probleme etant donné que mon lecteur emule le clavier le pilote doit deja etre utilisé et c'est pour ca que je n'arrive pas à recuperer un handle, enfin je pense...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lire et écrire sur un port USB
    Par codesnicolas dans le forum Entrée/Sortie
    Réponses: 0
    Dernier message: 18/07/2009, 14h17
  2. [TP] Code pascal pour lire sur un port série (int 14h)
    Par ebedinade dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 13/12/2005, 00h39
  3. Petit soucis pour se connecter à l'adsl
    Par Blowih dans le forum Réseau
    Réponses: 4
    Dernier message: 28/07/2004, 00h16
  4. Quel langage choisir pour lire sur le port série ?
    Par Nico76 dans le forum Windows
    Réponses: 7
    Dernier message: 28/04/2004, 10h42
  5. webcam : lire sur un port usb en c/c++ ou java. sous win. ?
    Par flo007 dans le forum Choisir un environnement de développement
    Réponses: 2
    Dernier message: 24/05/2002, 23h24

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