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

Mac OS X Discussion :

[USB] Problème d'envoi de données


Sujet :

Mac OS X

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 16
    Points : 5
    Points
    5
    Par défaut [USB] Problème d'envoi de données
    Bonjour à tous!

    Je viens à vous car j'essaie de faire communiquer mon mac avec une carte électronique programmable et j'ai un petit soucis de communication que je n'arrive pas à résoudre. J'ai configuré ma carte en périphérique HID avec en gros 8 octets en entrée et 8 octets en sortie. (si je ne me suis pas trompé quelque part, ce qui n'est certainement pas à écarter )

    J'utilise HIDAPI côté mac pour la comm. Lorsque j'envoie mes 8 octets de ma carte vers le mac tout est ok, je les reçois comme il faut. Par contre, quand c'est l'inverse et que j'envoie des données du mac vers la carte l'écriture plante (code -1 renvoyé par hid_write() )

    Je ne sais pas d'où vient le problème, certainement dans la déclaration de mes différents rapports USB mais je ne vois pas où.

    Je vous met le rapport de USB Prober ainsi que le code qui est exécuté côté mac en espérant que quelqu'un y trouve quelque chose.

    Je débute complètement avec l'USB donc soyez indulgents

    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
    Full Speed device @ 2 (0x1D100000): .............................................   Composite device: "USB HID Testing Device"
        Port Information:   0x001a
               Not Captive
               Attached to Root Hub
               External Device
               Connected
               Enabled
        Device Descriptor   
            Descriptor Version Number:   0x0200
            Device Class:   0   (Composite)
            Device Subclass:   0
            Device Protocol:   0
            Device MaxPacketSize:   64
            Device VendorID/ProductID:   0x0483/0x5710   (STMicroelectronics)
            Device Version Number:   0x0200
            Number of Configurations:   1
            Manufacturer String:   1 "Benel Electronics"
            Product String:   2 "USB HID Testing Device"
            Serial Number String:   3 "8C31645A35"
        Configuration Descriptor   
            Length (and contents):   41
                Raw Descriptor (hex)    0000: 09 02 29 00 01 01 00 E0  32 09 04 00 00 02 03 00  
                Raw Descriptor (hex)    0010: 00 00 09 21 00 01 00 01  22 31 00 07 05 81 03 08  
                Raw Descriptor (hex)    0020: 00 20 07 05 01 03 08 00  20 
            Number of Interfaces:   1
            Configuration Value:   1
            Attributes:   0xE0 (self-powered, remote wakeup)
            MaxPower:   100 ma
            Interface #0 - HID   
                Alternate Setting   0
                Number of Endpoints   2
                Interface Class:   3   (HID)
                Interface Subclass;   0
                Interface Protocol:   0
                HID Descriptor   
                    Descriptor Version Number:   0x0100
                    Country Code:   0
                    Descriptor Count:   1
                    Descriptor 1   
                        Type:   0x22  (Report Descriptor)
                        Length (and contents):   49
                            Raw Descriptor (hex)    0000: 05 FF 09 F0 A1 01 05 FF  09 F1 A1 02 05 FF 09 F2  
                            Raw Descriptor (hex)    0010: 15 00 25 FF 95 08 75 08  81 02 C0 05 FF 09 F2 A1  
                            Raw Descriptor (hex)    0020: 02 05 FF 09 FF 15 00 25  FF 95 08 75 08 B1 02 C0  
                            Raw Descriptor (hex)    0030: C0 
                        Parsed Report Descriptor:   
                              Usage Page    (Vendor Defined) 
                              Usage 240 (0xf0)    
                                  Collection (Application)    
                                    Usage Page    (Vendor Defined) 
                                    Usage 241 (0xf1)    
                                        Collection (Logical)    
                                          Usage Page    (Vendor Defined) 
                                          Usage 242 (0xf2)    
                                          Logical Minimum.........    (0)  
                                          Logical Maximum.........    (-1)  
                                          Report Count............    (8)  
                                          Report Size.............    (8)  
                                          Input...................   (Data, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Bitfield) 
                                        End Collection     
                                    Usage Page    (Vendor Defined) 
                                    Usage 242 (0xf2)    
                                        Collection (Logical)    
                                          Usage Page    (Vendor Defined) 
                                          Usage 255 (0xff)    
                                          Logical Minimum.........    (0)  
                                          Logical Maximum.........    (-1)  
                                          Report Count............    (8)  
                                          Report Size.............    (8)  
                                          Feature.................   (Data, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Nonvolatile, Bitfield) 
                                        End Collection     
                                  End Collection     
                Endpoint 0x81 - Interrupt Input   
                    Address:   0x81  (IN)
                    Attributes:   0x03  (Interrupt no synchronization data endpoint)
                    Max Packet Size:   8
                    Polling Interval:   32 ms
                Endpoint 0x01 - Interrupt Output   
                    Address:   0x01  (OUT)
                    Attributes:   0x03  (Interrupt no synchronization data endpoint)
                    Max Packet Size:   8
                    Polling Interval:   32 ms
    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
    #include <stdio.h>
    #include <wchar.h>
    #include <string.h>
    #include <stdlib.h>
    #include "hidapi.h"
    #include <unistd.h>
    
    
    int main(int argc, char* argv[])
    {
        int res=0,i;
        unsigned char buf[256];
        hid_device *handle;
        
        handle = hid_open(0x0483, 0x5710, NULL);
        if (!handle) {
            printf("unable to open device\n");
             return 1;
        }
    
        hid_set_nonblocking(handle, 1);
    
        while (res == 0) {
            res = hid_read(handle, buf, sizeof(buf));
            if (res == 0)
                printf("waiting...\n");
            if (res < 0)
                printf("Unable to read()\n");
            usleep(500*1000);
        }
    
        printf("Data read : ");
        for (i = 0; i < res; i++)
            printf("%02hhx ", buf[i]);
        printf("\n");
        //ici j'ai bien "Data read: 0a 14 1e 28 32 3c 46 50" ce qui est ce que j'envoie
    
        buf[0] = 0x00;
        buf[1] = 0x80;
        res = hid_write(handle, buf, 2);
        if (res < 0)
            printf("Unable to write()\n");
        
        return 0;
    }

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    hid_error (hid_device *device)
     	Get a string describing the last error which occurred.
    serait peut-être utile de connaître la cause de l'erreur après le write, non ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    effectivement oui, je n'avais pas vu cette fonction, désolé. Elle me renvoie "Segmentation fault". Une piste?

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par blackswords Voir le message
    effectivement oui, je n'avais pas vu cette fonction, désolé. Elle me renvoie "Segmentation fault". Une piste?
    postez tout le code avec l'appel à hid_error :
    on ne sait si vous l'appelez mal ou si c'est le message qui est renvoyé.

  5. #5
    Futur Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    je n'ai pas le code sous la main là mais si je me souviens bien c'est quelque chose du genre (je vérifierai en rentrant chez moi) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    const wchar_t* error;
    
    hid_open() ...
    
    hid_read() ...
    
    hid_write() ...
    
    //rajout au code du premier message
    error = hid_error(handle);
    wprintf(error);
    
    return 0;

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par blackswords Voir le message
    je n'ai pas le code sous la main là mais si je me souviens bien c'est quelque chose du genre (je vérifierai en rentrant chez moi) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    const wchar_t* error;
    
    hid_open() ...
    
    hid_read() ...
    
    hid_write() ...
    
    //rajout au code du premier message
    error = hid_error(handle);
    wprintf(error);
    
    return 0;
    le segmentation fault vient de votre appel à wprintf pas de hid_error :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (error != NULL) {
        wprintf(L"%ls\n", error) ;
    }

  7. #7
    Futur Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    c'est vrai qu'avec le test c'est plus sûr. Bon cette fois ci il ne sort plus rien comme erreur, c'est bizarre étant donné que l'écriture à foiré juste avant...

    je met le code en dans son intégralité et aussi le rapport de USB Prober car j'ai fais quelques modifs

    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
    Full Speed device @ 2 (0x1D100000): .............................................   Composite device: "USB HID Testing Device"
        Port Information:   0x001a
               Not Captive
               Attached to Root Hub
               External Device
               Connected
               Enabled
        Device Descriptor   
            Descriptor Version Number:   0x0200
            Device Class:   0   (Composite)
            Device Subclass:   0
            Device Protocol:   0
            Device MaxPacketSize:   64
            Device VendorID/ProductID:   0x0483/0x5710   (STMicroelectronics)
            Device Version Number:   0x0200
            Number of Configurations:   1
            Manufacturer String:   1 "Benel Electronics"
            Product String:   2 "USB HID Testing Device"
            Serial Number String:   3 "8C31645A35"
        Configuration Descriptor   
            Length (and contents):   41
                Raw Descriptor (hex)    0000: 09 02 29 00 01 01 00 E0  32 09 04 00 00 02 03 00  
                Raw Descriptor (hex)    0010: 00 00 09 21 00 01 00 01  22 1D 00 07 05 81 03 08  
                Raw Descriptor (hex)    0020: 00 20 07 05 01 03 08 00  20 
            Number of Interfaces:   1
            Configuration Value:   1
            Attributes:   0xE0 (self-powered, remote wakeup)
            MaxPower:   100 ma
            Interface #0 - HID   
                Alternate Setting   0
                Number of Endpoints   2
                Interface Class:   3   (HID)
                Interface Subclass;   0
                Interface Protocol:   0
                HID Descriptor   
                    Descriptor Version Number:   0x0100
                    Country Code:   0
                    Descriptor Count:   1
                    Descriptor 1   
                        Type:   0x22  (Report Descriptor)
                        Length (and contents):   29
                            Raw Descriptor (hex)    0000: 06 00 FF 09 01 A1 01 19  01 29 08 15 00 26 FF 00  
                            Raw Descriptor (hex)    0010: 95 08 75 08 81 02 19 01  29 08 91 02 C0 
                        Parsed Report Descriptor:   
                              Usage Page    (65280) 
                              Usage 1 (0x1)    
                                  Collection (Application)    
                                    Usage Minimum...........    (1)  
                                    Usage Maximum...........    (8)  
                                    Logical Minimum.........    (0)  
                                    Logical Maximum.........    (255)  
                                    Report Count............    (8)  
                                    Report Size.............    (8)  
                                    Input...................   (Data, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Bitfield) 
                                    Usage Minimum...........    (1)  
                                    Usage Maximum...........    (8)  
                                    Output..................   (Data, Variable, Absolute, No Wrap, Linear, Preferred State, No Null Position, Nonvolatile, Bitfield) 
                                  End Collection     
                Endpoint 0x81 - Interrupt Input   
                    Address:   0x81  (IN)
                    Attributes:   0x03  (Interrupt no synchronization data endpoint)
                    Max Packet Size:   8
                    Polling Interval:   32 ms
                Endpoint 0x01 - Interrupt Output   
                    Address:   0x01  (OUT)
                    Attributes:   0x03  (Interrupt no synchronization data endpoint)
                    Max Packet Size:   8
                    Polling Interval:   0 ms
    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
    #include <stdio.h>
    #include <wchar.h>
    #include <string.h>
    #include <stdlib.h>
    #include "hidapi.h"
    #include <unistd.h>
    
    
    int main(int argc, char* argv[])
    {
    	int res=0,i;
    	unsigned char buf[256];
    	const wchar_t *error;
    	hid_device *handle;
    	
    	handle = hid_open(0x0483, 0x5710, NULL);
    	if (!handle) {
    		printf("unable to open device\n");
     		return 1;
    	}
    
    	hid_set_nonblocking(handle, 1);
    
    	while (res == 0) {
    		res = hid_read(handle, buf, sizeof(buf));
    		if (res == 0)
    			printf("waiting...\n");
    		if (res < 0)
    			printf("Unable to read()\n");
    		usleep(500*1000);
    	}
    
    	printf("Data read : ");
    	for (i = 0; i < res; i++)
    		printf("%02hhx ", buf[i]);
    	printf("\n");
    	//ici j'ai bien "Data read: 0a 14 1e 28 32 3c 46 50" ce qui est ce que j'envoie
    
    	buf[0] = 0x00;
    	buf[1] = 0x80;
    	res = hid_write(handle, buf, 8);
    	if (res < 0)
    		printf("Unable to write()\n");
    		
            error = hid_error(handle);
    
    	if (error != NULL) {
        	wprintf(L"last error : %ls\n", error) ;
    	}
    	
    	return 0;
    }

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par blackswords Voir le message
    c'est vrai qu'avec le test c'est plus sûr. Bon cette fois ci il ne sort plus rien comme erreur, c'est bizarre étant donné que l'écriture à foiré juste avant...

    je met le code en dans son intégralité et aussi le rapport de USB Prober car j'ai fais quelques modifs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		
    	if (error != NULL) {
        	wprintf(L"last error : %ls\n", error) ;
    	}
    	
    	return 0;
    }

    évidemment : vous n'appelez plus hid_error pour initialiser error…
    et vous avez du bol que error soit initialisé à NULL…

  9. #9
    Futur Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    ah désolé j'ai copié le mauvais code, au début je l'avais oublié et je l'ai rajouté par la suite donc ma constatation est bien avec le bon code. Je modifie le message précédant.

Discussions similaires

  1. [Web/Reseaux] Problème d'envoi de données avec TTcpServer
    Par Gouyon dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/03/2012, 15h35
  2. problème d'envoi de données d'une jointure de table
    Par bedo115 dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 21/12/2011, 12h18
  3. Probléme d'envoie des données d'un formulaire
    Par iMano38 dans le forum Langage
    Réponses: 18
    Dernier message: 25/05/2011, 16h27
  4. Réponses: 2
    Dernier message: 11/09/2007, 17h03
  5. [AJAX]problème d'envoie de données méthode POST
    Par xave dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 07/07/2006, 16h35

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