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 C : 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 #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 : 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 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;
Partager