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
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
Bloc de code:
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
Bloc de code:
#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;
}