USB-Port Deaktivieren



  • hallo,
    ich möchte gerne den USB-Port deaktivieren bzw anschließend wieder aktivieren. der Sinn dahinter ist folgender. cih habe eine Kamera, mit der ich Bilder aufnehmen möchte. JEdoch kann ich nur bilder aufnehmen, wenn die KAmera nciht mit dem USB Port verbunden ist. Aber das Kabel muss zwischen PC und Kamera VErbunden bleiben. Nun bleiben 2 möglcihkeiten offen:
    1. HArwaretechnische Lösung: Trennung der Massenleitung des USB - Kabels durch ein über den USB-Port gesteuertes Reed-Relais. Würde das funktionieren?
    2. Softwarelösung: KA ^^ am besten wäre eine Funktion in dll form, da ich die Software in einer anderen Sprache schreibe, aber dll'S einbinden kann.

    Um den Rahmen zu schließen: Es ist ein recht größes PRojekt: Die entwicklung eines 3D-Scanners. UNd ide KAmera muss ungefähr bei einem PRogrammdurchlauf 50-400 mal getrennt und verbunden werden.

    Zum System: Ich benutze Windows XP und MVC++. Sollten weitere Angaben nötig sein bitte bescheidgeben.

    Danke!



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum MFC (Visual C++) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Mir stellen sich zwei Fragen:

    1. Wie willst du den Aufnahme-Befehl auslösen, wenn keine Verbindung zwischen Kamera und PC besteht?
    2. Bist du sicher, dass das Kabel getrennt sein muss? Bei meiner Digitalkamera gab es sogar bei der mitgelieferten Software die Möglichkeit den Auslöser über den PC zu betätigen (-> Kamera muss am PC angeschloßen sein). Zugegeben, es war keine High-End-Kamera, würde mich aber wundern, wenn es bei einer teuren anders sein sollte.


  • Wobei eine Lösung zu seiner Fragestellung nicht uninteressant wäre.
    Sorry kann nicht helfen.



  • hi,
    sowit es mir bekannt ist geht es mit meienmr KAmera leider nicht. Deshalb habe ich folgendes gemacht:
    Kamera aufgeschraubt und die Kontake für den Auslöser und Scharfstellbutton herausgeführt. Ncoh eine elektronische schaltung entwickelt die filkgendes macht: Wenn signal kommt: schließt relais 1 -> Kamera stellt scharf. Warte bis KOndensator geladen ist schließe Relais 2-> MAche Bild.
    Das funktioniert auch schon einbahnfrei!
    Nur kann ich da lediglich machen, wenn die Cam nciht am USB Port hängt 😕
    Also muss ich das Kabel irgendwie "abbekommen" bzw die Verbindung trennen.

    THX



  • Zieh doch das Kabel raus?



  • blink-182 schrieb:

    und die Kamera muss bei einem Programmdurchlauf ungefähr 50-400 mal getrennt und verbunden werden.

    keine gute Idee 😉



  • Ich würde empfehlen: Kauf Dir eine andere Kamera...



  • OK, da ich so nicht weiterkomme eine grundsätzliche Frage:
    Ist es möglich den USB-Port per Software zu deaktivieren, sodass ein angeschlossenes Gerät "denkt" es sei nicht angeschlossen?
    Im anderen Fall würde ich das ganze mit einer Schaltung Durchführen. Reicht es aus, wenn die MAsseleitung des USB-Kabels getrennt wird?

    Danke

    @Jochen: Danke für die beiden produktiven Beiträge...zumindest wurde das Thema dadurch etwas "gepusht" 🙄





  • Jochen Kalmbach schrieb:

    Du kannst mal SetupDiDeleteDeviceInfo versuchen
    http://msdn.microsoft.com/library/en-us/devio/base/setupdideletedeviceinfo.asp

    Oder man postet einfach gar nicht, wenn man keine Ahnung hat. 🙂
    Und auch wenn diese Methode zum Deaktivieren des Geräts funktionieren würde, dürfte es wohl klar sein, dass ein ständiges Beenden und Starten des Gerätetreibers nicht praxistauglich wäre. Dieser Vorgang kann unter Umständen schonmal 10 Sekunden dauern und wenn er das 400 mal machen will, würde das einen Einscanvorgang erheblich in die Länge ziehen.

    @blink-182

    Also wie verhält sich die Sache mit dem Kabel nun genau? Du betätigst den Auslöser mit deiner Bastelschaltung und das funktioniert nur, wenn das Übertragungskabel nicht eingesteckt ist. Nachdem du ein Bild gemacht hast, willst du die Kamera wieder verbinden und das in der Kamera zwischengespeicherte Bild übertragen!? Kann deine Kamera nicht mehr als 1 Bild zwischenspeichern?
    Wie findet die Datenübertragung mit der Kamera statt? Wird sie vom System als Wechseldatenträger erkannt oder nutzt sie ein herstellereigenes Protokoll? Besteht wirklich nur die Möglichkeit, die gespeicherten Bilder herunterzuladen aber nicht, die Kamera fernzusteuern?
    Wenn du schon basteltechnisch in der Kamera zu Gange bist, gibt es dann keine Möglichkeit, diesen Blockiermechanismus zu deaktivieren, sofern er nicht zu kompliziert umgesetzt ist oder die Firmware/Elektronik die Datenübertragung und Aufnahme einfach nicht gleichzeitig regeln kann?



  • Hallo,
    leider kenne ich mcih in C bzw. C++ noch nicht sehr gut aus. Ich vermute mal...nein ich bin mir sogar sicher, dass ihrm ich jetzt lünchen werdet, aber ich programmiere die Software für meinen Scanner in Blitz3D. Das ist ein Basic-Dialekt, der eigentlcih auf Spieleprogrammierung ausgerichtet ist.
    Ich bemühe mich derzeitig sehr stark mich in C++ einzuarbeiten, was auch schon einigermaßen gelungen ist.
    Der Scanvorgang ist folgender:
    Laser_an(senkrechterlaserstrich) -> Signal an Kameraelektronik (scharfstellen->Bild machen) -> Laser_aus -> Signal an Kameraelektronik(scharfstellen->Bild machen)-> Berechnung des Verlaufs der Laserlinie und daraus den Abstand der Punkte auf der Linie zum MIttelpunkt des Scantellers(schon fertigprogrammiert) -> Drehteller um einen bestimmten Wert drehen --- Dieser Vorgang wird widerhohlt bis 360° und dann wird das oBjekt zusammengesetzt.
    Auf der KAmera werden immer 8 dieser Schritte gleichzeitig gespeichert. Dan nsoll sie mit dem PC Verbunden Werden... also insgesamt jeweils nach acht Bilderpaaren (mit und ohne LAser)
    ICh denke ich werde schon mal eine schaltung zur Trennung der MAssenleitung bauen, und falls ich noch eine bessere Lösung finde werde ich das ganze abändern.

    Danke für den diesmal wirklich produktiven Post! 👍

    Ciao



  • Naja, du müsstest aber bedenken, dass das Trennen der Masseleitung natürlich einem normalen Herausziehen des Stecker gleicht und das System den Gerätetreiber beendet und entlädt. Nach Wiederverbinden der Masseleitung dauert es eben diese gewisse Zeit in der das Betriebssystem schaut, welches Gerät angesteckt wurde, wo der Gerätetreiber ist und aktiviert ihn wieder. Also ich würde alles, was auf diesem Ansatz aufsetzt als unsauber betrachten. Du bräuchtest dann auch eine Möglichkeit um festzustellen, ob der Gerätetreiber inzwischen wieder geladen wurde.

    Aber nochmal die Frage zur Kommunikation mit dem PC. Wie wird die Kamera im System erkannt und wie/womit liest du die Bilder aus? Hast du das Auslesen auch schon in deinem eigenen Programm implementiert?



  • hi,
    ich habe jetzt die schaltung gebaut, die auf Kommando die MAssenleitung trennt bzw. verbindet. Aber komischer weise wird die die Kamera selbst mit getrennter Massenleitung als irgendwas angeschlossenes erkant, jedoch konnte natürlci hder Treiber nicht geladen werden. Auch die Kamera selbst wechselt in den "USB-Modus" sodass keine Bilder mehr gemacht werden können.
    Welches Kabel muss ich noch durchtrennen?

    Achja: Ich habe mir noch eine zusätzliche Speicherkarte zugelegt, sodass ich das Kabel pro Scanvorgang lediglich einmal an bzw. abschließen muss.

    THX



  • Hast du die Masseverbindung denn hochohmig getrennt?



  • Hallo blink-182,

    in "USB 2.0" aus dem Franzis-Verlag steht unter "Connect- und Disconnect-Erkennung":

    "Die beiden Datenleitungen D+ und D- sind an den DownstremPorts der Hubs mit jeweils 15kOhm an Masse gelegt. Im Gegensatz hierzu ist beim USB-Gerät auf der Upstream-Seite eine Leitung über einen 1,5kOhm Pull-Up-Widerstand mit 3,3V verbunden. Bei Full-Speed-Geräten ist dies die D+, bei Low-Speed-Geräten dagegen die D- -Leitung. Der Hub überwacht an jedem Downstream-Port beide Datenleitungen, ohne sie mit einem Pegel zu treiben. Ist kein Gerät angeschlossen, ziehen die 15kOhm Pull-DownWiderstände beide Leitungen auf Low-Pegel. Wird ein Full-Speed-Gerät an diesen Downstream-Port angeschlossen, bewirkt der Pull-Up-Widerstand von 1,5kOhm an D+ einen High-Pegel auf dieser Leitung. Der Hub erkennt diese Pegeländerung und signalisiert nach 2,5us stabilem High-Pegel auf D+ ein Connect-Ereignis. Da der Hub unterscheidet, ob durch das neu angesteckte Gerät die D+ - oder die D- -Leitung auf High-Pegel liegt, besitzt er gleichzeitig die Information über die Geschwindigkeitsklasse des Gerätes.

    Analog zur Connect-Erkennung wird auch ein Disconnect erkannt. Treibt der Hub kein Signal auf sein Downstream-Port, so befindet sich eine Leitung auf Low und die andere auf High entsprechend der unterstützten Geschwindigkeit des angesteckten Gerätes. Gehen beide Leitungen auf Low und verbleiben dort länger als 2,5us, wird dies als ein Disconnect erkannt. Auch in diesem Falle wird der Hub den Host benachrichtigen, der daraufhin das abgezogene Gerät aus seiner Konfiguration entfernt."

    Ich hoffe, das hilft und es war OK, aus dem Buch zu zitieren.



  • ich habe die Massenverbindung nicht nur hochohmig, sondern eigentlcih unendlich-ohmig getrennt, da ich mit einem kleinem Reed-Relais arbeite, dass die MAssebverbindung trennt bzw. brückt. Deshalb verstehe ich auch nciht 100%tig, weshalb der pc überhaupt merkt, dass ein gerät angeschlossen ist. Woran kann das liegen und woll ich einfach mit 4 dieser Relais Arbeiten und alle Leitungen Trennen/Verbinden?

    Ps.: Schöne Weihnachten :xmas1:

    ciao


Anmelden zum Antworten