Discussion:
USB-Port ein/ausschalten
(zu alt für eine Antwort)
Frank Esselbach
2008-04-10 13:16:11 UTC
Permalink
Hallo,

gibt es unter Windows eine Möglichkeit, einen USB Port stromlos zu
schalten und wieder zu aktivieren? Per API-Call oder über eine DLL?

Danke für Tips, Frank
Arno Welzel
2008-04-10 13:17:24 UTC
Permalink
Post by Frank Esselbach
gibt es unter Windows eine Möglichkeit, einen USB Port stromlos zu
schalten und wieder zu aktivieren? Per API-Call oder über eine DLL?
Nein.
--
http://arnowelzel.de
http://de-rec-fahrrad.de
Uwe Sieber
2008-04-11 07:05:11 UTC
Permalink
Post by Frank Esselbach
Hallo,
gibt es unter Windows eine Möglichkeit, einen USB Port stromlos zu
schalten und wieder zu aktivieren? Per API-Call oder über eine DLL?
Es gibt den DeviceIoControl-Code IOCTL_USB_HUB_CYCLE_PORT,
der genau das bewirken soll, aber ich hab's nicht hinbekommen.


Gruß Uwe
Arno Welzel
2008-04-11 09:48:39 UTC
Permalink
Post by Uwe Sieber
Post by Frank Esselbach
Hallo,
gibt es unter Windows eine Möglichkeit, einen USB Port stromlos zu
schalten und wieder zu aktivieren? Per API-Call oder über eine DLL?
Es gibt den DeviceIoControl-Code IOCTL_USB_HUB_CYCLE_PORT,
der genau das bewirken soll, aber ich hab's nicht hinbekommen.
IOCTL_USB_HUB_CYCLE_PORT ist dazu da, das Aus- und Einstecken eines
USB-Gerätes zu simulieren und hat nichts mit "stromlos machen" zu tun -
zudem dieser Code keinerlei Parameter bekommt, mit denen man "Strom aus"
oder "Strom an" festlegen könnte.
--
http://arnowelzel.de
http://de-rec-fahrrad.de
Uwe Sieber
2008-04-12 09:58:07 UTC
Permalink
Post by Arno Welzel
Post by Uwe Sieber
Post by Frank Esselbach
Hallo,
gibt es unter Windows eine Möglichkeit, einen USB Port stromlos zu
schalten und wieder zu aktivieren? Per API-Call oder über eine DLL?
Es gibt den DeviceIoControl-Code IOCTL_USB_HUB_CYCLE_PORT,
der genau das bewirken soll, aber ich hab's nicht hinbekommen.
IOCTL_USB_HUB_CYCLE_PORT ist dazu da, das Aus- und Einstecken eines
USB-Gerätes zu simulieren und hat nichts mit "stromlos machen" zu tun -
zudem dieser Code keinerlei Parameter bekommt, mit denen man "Strom aus"
oder "Strom an" festlegen könnte.
http://msdn2.microsoft.com/en-us/library/aa476227.aspx
"The IOCTL_USB_HUB_CYCLE_PORT I/O control request power cycles the port
that is associated with the PDO that receives the request."


Ich übersetze "power cycles the port" mit "Storm aus + Strom an".


Gruß Uwe
Arno Welzel
2008-04-14 07:52:20 UTC
Permalink
Post by Uwe Sieber
Post by Arno Welzel
Post by Uwe Sieber
Post by Frank Esselbach
Hallo,
gibt es unter Windows eine Möglichkeit, einen USB Port stromlos zu
schalten und wieder zu aktivieren? Per API-Call oder über eine DLL?
Es gibt den DeviceIoControl-Code IOCTL_USB_HUB_CYCLE_PORT,
der genau das bewirken soll, aber ich hab's nicht hinbekommen.
IOCTL_USB_HUB_CYCLE_PORT ist dazu da, das Aus- und Einstecken eines
USB-Gerätes zu simulieren und hat nichts mit "stromlos machen" zu tun
- zudem dieser Code keinerlei Parameter bekommt, mit denen man "Strom
aus" oder "Strom an" festlegen könnte.
http://msdn2.microsoft.com/en-us/library/aa476227.aspx
"The IOCTL_USB_HUB_CYCLE_PORT I/O control request power cycles the port
that is associated with the PDO that receives the request."
Ich übersetze "power cycles the port" mit "Storm aus + Strom an".
Das ist richtig. Nur bleibt der Strom eben nicht aus, d.h. man kann
nicht gezielt einen Port dauerhaft abschalten. Das Ziel dieses IOCTL ist
eben nicht, ein Gerät dauerhaft auszuschalten, sondern viel mehr eine
Art "Reset" durch kurzes Strom aus/an. Ich vermute OP wollte aber eher
generell Ports abschalten _und_ auch abgeschaltet lassen können.
--
http://arnowelzel.de
http://de-rec-fahrrad.de
Dirk Thierbach
2008-04-14 08:59:30 UTC
Permalink
Post by Arno Welzel
Post by Uwe Sieber
http://msdn2.microsoft.com/en-us/library/aa476227.aspx
"The IOCTL_USB_HUB_CYCLE_PORT I/O control request power cycles the port
that is associated with the PDO that receives the request."
Ich übersetze "power cycles the port" mit "Storm aus + Strom an".
Das ist richtig. Nur bleibt der Strom eben nicht aus, d.h. man kann
nicht gezielt einen Port dauerhaft abschalten. Das Ziel dieses IOCTL ist
eben nicht, ein Gerät dauerhaft auszuschalten, sondern viel mehr eine
Art "Reset" durch kurzes Strom aus/an. Ich vermute OP wollte aber eher
generell Ports abschalten _und_ auch abgeschaltet lassen können.
Der OP hatte doch schon vor drei Tagen geschrieben, wozu er es braucht:

Frank Esselbach <***@ghostlink.de> in
<1if8yge.ft4i8cx48f64N%***@ghostlink.de>

: Hm ... Danke. Der Grund für dieses Bedürfnis ist, dass ein entfernt
: aufgestelltes Notebook Messwerte aufnimmt und per USB-UMTS-Modem
: verschickt. Dummerweise stürzt das Ding in unregelmäßigen Abständen
: (manchmal Tage, manchmal Minuten) ab ... jedenfalls kann es dann keine
: Verbindung mehr aufnehmen. Zieht man es ab und steckt es wieder an,
: gehts wieder. Im Bekanntenkreis kam die Idee auf, das mittels eines
: Mikrocontrollers und einem Relais zu erledigen - es gibt sogar einen
: Steckbrettaufbau, der zeigt, dass dies funktioniert.
:
: Ich dachte aber, mit ein wenig Software wäre das eleganter zu lösen.
: Leider stecke ich nicht so tief in der Materie und es ist fraglich, ob
: der Aufwand lohnt.

Mit anderen Worten, er braucht genau den "Strom aus + Strom an" Effekt.
Nur kriegt er's nicht hin.

- Dirk
Frank Esselbach
2008-04-17 20:43:05 UTC
Permalink
Post by Dirk Thierbach
Mit anderen Worten, er braucht genau den "Strom aus + Strom an" Effekt.
Nur kriegt er's nicht hin.
Richtig erkannt - Danke :-)

Gibt es irgend einen einfachen API-Aufruf, z.B. per "declare" um in VB
oder Realbasic genau dieses auszulösen?

Frank

Markus Schaaf
2008-04-11 10:50:14 UTC
Permalink
Post by Frank Esselbach
gibt es unter Windows eine Möglichkeit, einen USB Port stromlos zu
schalten und wieder zu aktivieren? Per API-Call oder über eine DLL?
Die Antwort hast Du schon, nur noch etwas Kontext: Das eigentliche
An- und Ausschalten muss das Gerät selbst anfordern. Es ist nicht
vorgesehen, dass der HUB ihm einfach "den Saft abdreht". Die Befehle
zum Ändern des Powerstate sendet der Power-Manager an die
Gerätetreiber. Im Prinzip wäre es kein Problem, einzelne Geräte
willkürlich an- und auszuschalten, aber es gibt kein API dafür. (Es
wäre möglich, private IOCTL zu benutzen, wenn man einen
kooperierenden Gerätetreiber hat.) Jedoch gibt es einen Mechanismus,
der "gut genug" sein sollte. Vielleicht sind Dir die Reiter
"Energieverwaltung" im Gerätemanager aufgefallen. Wenn vom USB-Gerät
bis zum zugehörigen Root-HUB alle "Computer kann Gerät ausschalten,
um Energie zu sparen" aktiviert haben und der Treiber des Geräts
etwas taugt, wird das Gerät ausgeschaltet, wenn es nicht benutzt
wird (lies: keine Handles zum Gerät geöffnet sind). Und letztlich
ist es ja genau das, was man will.

MfG
Frank Esselbach
2008-04-11 17:14:49 UTC
Permalink
Post by Markus Schaaf
Post by Frank Esselbach
gibt es unter Windows eine Möglichkeit, einen USB Port stromlos zu
schalten und wieder zu aktivieren? Per API-Call oder über eine DLL?
Die Antwort hast Du schon, nur noch etwas Kontext: Das eigentliche
An- und Ausschalten muss das Gerät selbst anfordern.
Hm ... Danke. Der Grund für dieses Bedürfnis ist, dass ein entfernt
aufgestelltes Notebook Messwerte aufnimmt und per USB-UMTS-Modem
verschickt. Dummerweise stürzt das Ding in unregelmäßigen Abständen
(manchmal Tage, manchmal Minuten) ab ... jedenfalls kann es dann keine
Verbindung mehr aufnehmen. Zieht man es ab und steckt es wieder an,
gehts wieder. Im Bekanntenkreis kam die Idee auf, das mittels eines
Mikrocontrollers und einem Relais zu erledigen - es gibt sogar einen
Steckbrettaufbau, der zeigt, dass dies funktioniert.

Ich dachte aber, mit ein wenig Software wäre das eleganter zu lösen.
Leider stecke ich nicht so tief in der Materie und es ist fraglich, ob
der Aufwand lohnt.

Frank
Uwe Sieber
2008-04-12 09:59:49 UTC
Permalink
Post by Frank Esselbach
Post by Markus Schaaf
Post by Frank Esselbach
gibt es unter Windows eine Möglichkeit, einen USB Port stromlos zu
schalten und wieder zu aktivieren? Per API-Call oder über eine DLL?
Die Antwort hast Du schon, nur noch etwas Kontext: Das eigentliche
An- und Ausschalten muss das Gerät selbst anfordern.
Hm ... Danke. Der Grund für dieses Bedürfnis ist, dass ein entfernt
aufgestelltes Notebook Messwerte aufnimmt und per USB-UMTS-Modem
verschickt. Dummerweise stürzt das Ding in unregelmäßigen Abständen
(manchmal Tage, manchmal Minuten) ab ... jedenfalls kann es dann keine
Verbindung mehr aufnehmen. Zieht man es ab und steckt es wieder an,
gehts wieder. Im Bekanntenkreis kam die Idee auf, das mittels eines
Mikrocontrollers und einem Relais zu erledigen - es gibt sogar einen
Steckbrettaufbau, der zeigt, dass dies funktioniert.
Ich dachte aber, mit ein wenig Software wäre das eleganter zu lösen.
Leider stecke ich nicht so tief in der Materie und es ist fraglich, ob
der Aufwand lohnt.
Schalte einen USB-Hub dazwischen - den kannst Du problemlos mit DEVCON
deaktivieren und wieder aktivieren - das könnte reichen.


Gruß Uwe
Loading...