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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Ger B. (gerba)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.