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
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. |
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.