1 pièce(s) jointe(s)
[Mac OS X] Communication USB
Bonjour,
je poste un message car je tente de réaliser une application multiplateforme ( MAC OX S, Windows et linux) avec Lazarus pour récupérer des données d'une carte électronique en utilisant l'USB.
Après plusieurs jours de recherche et d'essai j'ai réussi à faire fonctionner un programme en C sur mon MAC (MAC OS X).
J'ai converti mon code C en Pascal sur lazarus mais je n'arrive pas à le faire fonctionner.
J'utilise la librairie LIBUSB (ci-jointe).
Je vous poste aussi mon code en C et en FreePASCAL
Je vous remercie par avance.
Je travaille sur MAC.
Je vous poste mon code en C :
Code:
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
|
#include <stdio.h>
#include <usb.h>
int main(void)
{
struct usb_bus *bus;
struct usb_device *dev;
int i;
i = 0;
usb_init();
usb_find_busses();
usb_find_devices();
printf("Detection de la carte USB : ");
for (bus = usb_busses; bus; bus = bus->next)
{
for (dev = bus->devices; dev; dev = dev->next)
{
usb_dev_handle *udev;
if ((dev->descriptor.idVendor == 0x04D8) && (dev->descriptor.idProduct == 0x0005))
{
i = 1;
printf("La carte a ete trouvee");
udev = usb_open(dev);
if (udev)
{
}
usb_close(udev);
}
}
}
if (i == 0)
{
printf("La carte n a pas ete trouvee. Connectez la carte et reessa");
}
} |
mon code en pascal :
Code:
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
| procedure TForm1.Button1Click(Sender: TObject);
var
foundvendor,foundprodukt:boolean;
bus: pusb_bus;
dev: pusb_device;
hUSB : pointer;
ProdStr,Serial:string;
begin
foundvendor:=false;
usb_init; // Initialize libusb
memo1.Lines.Add(usb_strerror);
if(usb_find_busses<1) then
showmessage(usb_strerror);
if (usb_find_devices<1) then
showmessage(usb_strerror); // Find all devices on all USB devices
bus := usb_get_busses; // Return the list of USB busses found
if bus=nil then
showmessage(usb_strerror);
while Assigned(bus) do begin
l := l + 1;
dev := bus^.devices;
while Assigned(dev) do begin
if (dev^.descriptor.idVendor = $04d8) and (dev^.descriptor.idProduct = $0005) then
begin
foundvendor:=true;
hUSB := usb_open( dev );
usb_close(hUSB);
end;
dev := dev^.next;
end;
bus := bus^.next;
end;
end; |