Forum: PC-Programmierung Hat jemand schon mit mpusbapi.dll mehrere USB-Devices angesprochen?


von Ger B. (gerba)


Lesenswert?

Hallo allerseits,

ich versuche gerade zwei gleiche USB-Devices (PIC18F2550) über die 
mpusbapi.dll unter Windows zu steuern. Dazu habe ich die 
Seriennummer-Funktion aktiviert und den Geräten unterschiedliche 
Seriennummern gegeben. Die werden im Gerätemanager auch korrekt 
angezeigt.

Als ich nur einen PIC benutzt habe war alles unproblematisch, aber jetzt 
mit zwei PICs muß ich einen PIC auswählen können.

Leider habe ich trotz ausgiebiger Suche keine Möglichkeit gefunden einen 
bestimmten PIC auszuwählen und zu steuern.

Übersehe ich da irgendetwas?

Gruß Gerhard

von Clemens L. (c_l)


Lesenswert?

Keine Ahnung, aber in einer vier Jahre alten Version auf GitHub finde 
ich diesen Kommentar:
1
//  MPUSBOpen : Returns the handle to the endpoint pipe with matching VID & PID
2
...
3
//  instance - An instance number of the device to open.
4
//             Typical usage is to call MPUSBGetDeviceCount first to find out
5
//             how many instances there are.
6
//             It is important to understand that the driver is shared among
7
//             different devices. The number of devices returned by
8
//             MPUSBGetDeviceCount could be equal to or less than the number
9
//             of all the devices that are currently connected & using the
10
//             generic driver.
11
//
12
//             Example:
13
//             if there are 3 device with the following PID&VID connected:
14
//             Device Instance 0, VID 0x04d8, PID 0x0001
15
//             Device Instance 1, VID 0x04d8, PID 0x0002
16
//             Device Instance 2, VID 0x04d8, PID 0x0001
17
//
18
//             If the device of interest has VID = 0x04d8 and PID = 0x0002
19
//             Then MPUSBGetDeviceCount will only return '1'.
20
//             The calling function should have a mechanism that attempts
21
//             to call MPUSBOpen up to the absolute maximum of MAX_NUM_MPUSB_DEV
22
//             (MAX_NUM_MPUSB_DEV is defined in _mpusbapi.h).
23
//             It should also keep track of the number of successful calls
24
//             to MPUSBOpen(). Once the number of successes equals the
25
//             number returned by MPUSBGetDeviceCount, the attempts should
26
//             be aborted because there will no more devices with
27
//             a matching vid&pid left.

von Christian M. (Gast)


Lesenswert?

Beim Aufruf:

myOutPipe:= _MPUSBOpen(selection,vid_pid,out_pipe,MP_WRITE,0);

ist selection = 0 das erste Gerät, Selection = 1 das Zweite usw..
So funktioniert's bei mir jedenfalls. Verwende USB4ALL von Sprut.

Gruss Chregu

von Ger B. (gerba)


Lesenswert?

Sowas in der Art hatte ich befürchtet.
Wenn man "instance" mit "Exemplar" übersetzt, dann wird es klar.

Das funktioniert bei mir jetzt auch.

Die Seriennummer werde ich wieder raus machen, denn die muss ich dann 
aus der Registry lesen und dem korrekten PIC über die Reihenfolge der 
Geräte im Gerätemanager zuordnen. In der DLL habe ich zumindestens keine 
entsprechende Funktion gefunden.
Da spendiere ich eine Funktion in der Firmware, die ich aufrufen kann 
und die mir die Seriennummer zurück liefert.

Danke für Eure Unterstützung.

Gruß Gerhard

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.