Forum: Mikrocontroller und Digitale Elektronik PyUSB : Flush-Buffer + Zadig


von M. L. (ado)


Lesenswert?

Ich verwende hier in einer Testumgebung PyUSB um die Funktionen einer 
neuen USB-Hardware zu testen, die ich entwickele. Dabei handelt es sich 
um eine Neuimplementierung vorhandener Hardware auf eine neue 
Microcontroller-Familie (STM32F0).

Oft befinden sich während Software-Tests noch Daten-Reste in den 
USB-Buffern des Betriebssystems (Windows7).
Gibt es eine Möglichkeit die USB-Buffer im Windows7-Betriebssystem am 
Anfang des Python-Scripts zu löschen (flush) ?

PyUSB verwendet libusb, unsere Standardanwendung die 
Windows-Standard-Hid-Treiber.
Mit Zadig kann ich die Treiberzuordnung von Windows-Std nach libusb 
umstellen.
Leider nur in die Richtung nach libUsb und nicht zurück.
Zum Zurücksetzen lösche ich die Zuordnung in "UsbDeview".
Danach lösche ich die Inf-Datei, z.B. C:\Windows\inf\oem89.inf
Nach dem Reconnect holt sich das Device wieder den 
Standard-Windowstreiber.

Gibt es da vielleicht eine einfachere Möglichkeite zwischen 2 
Treiberzuordnungen hin und herwechseln zu können ?

von Jim M. (turboj)


Lesenswert?

M. L. schrieb:
> Gibt es da vielleicht eine einfachere Möglichkeite zwischen 2
> Treiberzuordnungen hin und herwechseln zu können ?

Ja: Flashe den STM32F0 mit einer Firmware die eine andere VID:PID 
Kombination zum Testen mit LibUSB hat.

M. L. schrieb:
> Oft befinden sich während Software-Tests noch Daten-Reste in den
> USB-Buffern des Betriebssystems (Windows7).

Kann ich so nicht nachvollziehen. Eventuell auf LibUSB-Win32 Treiber 
umsteigen, da bekommt das Gerät beim Anstecken einen neuen Namen (falls 
der alte noch existiert). Müsste mit PyUSB eigentlich tun - YMMV.

von M. L. (ado)


Lesenswert?

Danke für die gute Idee zwei PIDs zu nehmen.
Ich habe jetzt 2 weitere Debug-Konfigurationen in EmBitz mit einem 
#define Schalter erstellt, und ich kann jetzt in der GUI der IDE die 
gewünschte Version auswählen und kompilieren.
Vielleicht baue ich noch einen Taster an der Hardware mit dem man beim 
Bestromen die zweite Variante mit Tastendruck auswählen kann.

Den LibUSB-Win32 Treiber verwende ich bereits, ich hatte den 
Treibernamen nur nicht komplett ausgeschrieben.
Beim Neu-Einstecken des USB-Devices werden die USB-BetriebssystemBuffer 
gelöscht. Über den einen Endpoint werden zur Zeit verschiedene 
Datenarten übertragen und bei meinen kleinen Python-Testscripts mache 
ich keine DeepPacketInspections zu Sortierung der verschiedenen 
Paketarten sondern stelle die Pakete auf der Console nur da.
Ich dachte es gibt da vielleicht einen Befehl mit dem man die Buffer 
löschen kann ohne das Gerät neu einzustecken.

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.