DVD auswerfen / externes Laufwerk

    • funktioniert das?

      eject && sleep 1 && eject

      mit dem sleep wert (1 = 1 Sekunde) kanst du experimentieren, auch mit nicht ganzen Sekunden, vielleicht kannst du das so optimieren

      eject && sleep 1.4 && eject

      dann könnte man das auch in ein Plugin einbauen - also opitmiert für das Laufwerk ...

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Fred Bogus Trumper ()

    • OK

      Ich hatte die Dreambox zwischenzeitlich neu gestartet und der Eject Befehl per Telnet brachte folgende Fehlermeldung.

      eject: /dev/cdrom: imput/output error

      Ich habe dann wieder Dein Eject verwendet und das läuft. Aber ob ich jetzt 1 Sek., 1.4 oder 2 Sek. verwende immer das gleiche. Schublade schliesst gleich wieder. Ich denke es geht einfach um die vorgebebende Zeit länger bis der Promt wieder in der Konsole erscheint.
    • nein, mit dem prompt hat das nichts zu tun, dier 2. eject Befehl wird einfach zeitverzögert gesendet, dann kommt das prompt auch verzögert, je nachdem wie hoch der sleep wert ist. Man kann das auch im Hintergrund starten, dann ist das prompt sofort wieder da

      Hast du das Laufwerk auch schon mal am USB2.0 Anschluss getestet?

      Ansonsten bin ich mit dem Latein am Ende, auch weil ich das mangels Hardware nicht testen kann

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Fred Bogus Trumper ()

    • Ich habe jetzt nochmals mit dem Sleep herumexperimentiert. Bei 1 Sekunde geht die Schublade ein zweites mal AUF/ZU. Kleinerer Wert geht nicht. sleep: invalid number: 0.5
      Die Fehlermeldung kommt aber auch bei 1.4 oder 2.5. Das ist mir vorhin entgangen.
    • Ich würde schon noch Tests mitmachen, muss aber nicht sein. Wenn ich sehe das die Schublade wieder schliesst, drücke ich den Knopf nochmals. Und falls das Laufwerk die CD nicht auswirft, kann ich auf Gutemine DVD Controller Plugin zurückgreifen. Für mich passt das so.
    • Ich glaub eh nicht, dass sich damit was ändert, wenn man mit 10tel Sekunden herumexperimentiert. Häte nur vielleicht den Vorteil gehabt, dass man nicht ein zweites Mal den Auswurfknopf drücken muss ...

      Das Plugin mach im Prinzip nichts anderes wie das eject busybox tool bzw. das binary - nur mit dem Unterschied, dass das Plugin ohne das binary auskommt.
    • wenn du durch schnelles drücken die lade offen halten kannst solltest du ausprobieren ob du durch 2x schnell hintereinander den eject befehl zu senden die Lade offen halten kannst. DANN könnte man das als workaround proggen (wäre ja nur die ioctl Zeile in der plugin.py vom DVD Controller Plugin ein zweites mal kopieren oder eine aukommentieren)

      Im Prinzip geht es um diese Zeilen:

      Quellcode

      1. cd = open(dvdcontroller_device)
      2. # Stop the cdrom drive
      3. ioctl_flag=int(0x5307)
      4. ioctl(cd.fileno(), ioctl_flag)
      5. # hard-reset the drive
      6. # ioctl_flag=int(0x5312)
      7. # ioctl(cd.fileno(), ioctl_flag)
      8. # lock or unlock door
      9. ioctl_flag=int(0x5329)
      10. ioctl(cd.fileno(), ioctl_flag)
      11. # Ejects the cdrom media
      12. ioctl_flag=int(0x5309)
      13. ioctl(cd.fileno(), ioctl_flag)
      14. cd.close()
      Alles anzeigen


      Bei dir wird wahrscheinlich die Firmware bereits beim unlock die lade öffnen und nachdem das toggle befehle sind macht der zweite Befehl dann halt wieder zu. Also entweder das letzet ioctl 2x oder auskommentieren probieren 8)

      Das C binary macht auch nichts anderes als der python code von oben nur kannst du hier eben leichter ausprobieren was dein device benötigt.

      Wenn du es dan nweist kann ich dir gerne eine Plugin Einstellung machen damit du den code nicht mehr editieren musst, aber rausfinden musst d es shcon selber ....

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Lost in Space ()

    • Es ist nicht unbedingt ein 2x schnelles Drücken sondern genau den Zeitpunkt erwischen wo die Lade ganz offen ist. Dann bleibt sie offen. Wenn man ein wenig zu spät das zweite mal drückt dann fährt sie wieder auf und bleibt dann aber auch offen.
    • das liegt ziemlich sicher nicht am Zeitpunkt sondern an den Befehlen, und wenn du es in der plugin.py anpasst musst du nur enigma2 restarten, im C code ist das viel mühsamer zum testen und die ioctl Befehle sind genau die gleichen, woraus glaubst du wohl ist der python code entstanden ?

      Theoretisch brauchst du nicht mal das plugin daszu ein kleines eject.py shellscript mit den obigen Befehlen tut es genauso, ich habe das ja auch so entwickelt bevor ein Plugin draus wurde.

      Und wenn du < 1 sec sleepen willst musst du usleep verwenden, aber wie schon gesagt das ist ziemlich sicher der Falsche weg, da gehört einfach ein ioctl dazu oder weg.
    • z.B. sleep 0.5 klappt im debian wie im OE2.0 mit dem busybox sleep - das ginge also auch ohne usleep

      die Idee dahinter war ja eigentlich, wenn es mit zweimal den Button drücken, könnte es u.U. auch mit 2x eject klappen ...

      Aber das mit dem python script ist ne gute Idee - weil nach jeder Änderung die GUI neu starten wäre in dem Fall etwas nervig
    • Im OE 2.2 ist es aber ein integer so wie es richtig gehört.

      Aber wie schon gesagt die doeject routine war mal ein python shellscript als sie entwickelt wurde das muss man nur rausschneiden und eun #!/usr/bin/python als erste Zeile ins script machen oder es mit python eject.py aufrufen.

      Na dann testet mal schön .... weil ich kann da wenig beitragen, meine DVD Laufwerke sind alle brav.
    • Ich habe jetzt mal folgendes versucht. Aus dem Pfad usr/lib/enigma2/Python/Plugins/Extensions/DVDConroller habe ich das plugin.py editiert.

      1.

      Quellcode

      1. cd = open(dvdcontroller_device)
      2. # Stop the cdrom drive
      3. ioctl_flag=int(0x5307)
      4. ioctl(cd.fileno(), ioctl_flag)
      5. # hard-reset the drive
      6. # ioctl_flag=int(0x5312)
      7. # ioctl(cd.fileno(), ioctl_flag)
      8. # lock or unlock door
      9. ioctl_flag=int(0x5329)
      10. ioctl(cd.fileno(), ioctl_flag)


      „Ejects the cdrom media“ komplett entfernt. Attribute auf 755. Lade öffnet nicht

      2.

      Quellcode

      1. # Stop the cdrom drive
      2. ioctl_flag=int(0x5307)
      3. ioctl(cd.fileno(), ioctl_flag)
      4. # hard-reset the drive
      5. # ioctl_flag=int(0x5312)
      6. # ioctl(cd.fileno(), ioctl_flag)
      7. # lock or unlock door
      8. ioctl_flag=int(0x5329)
      9. ioctl(cd.fileno(), ioctl_flag)
      10. # Ejects the cdrom media
      11. ioctl_flag=int(0x5309)
      12. ioctl(cd.fileno(), ioctl_flag)
      13. cd.close()
      14. # Ejects the cdrom media
      15. ioctl_flag=int(0x5309)
      16. ioctl(cd.fileno(), ioctl_flag)
      17. cd.close()
      Alles anzeigen


      kompletter Eintrag „Ejects the cdrom media“ ein zweites mal angehängt. Attribute auf 755. Lade öffnet, bleibt offen. Aber es kommt ein Greenscreen. Die Box stürzt nicht komplett ab.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von zaratusta ()

    • Brainfuck-Quellcode

      1. EXCEPTION IN PYTHON STARTUP CODE:
      2. ------------------------------------------------------------
      3. Traceback (most recent call last):
      4. File "/usr/lib/enigma2/python/mytest.py", line 786, in <module>
      5. runScreenTest()
      6. File "/usr/lib/enigma2/python/mytest.py", line 635, in runScreenTest
      7. runReactor()
      8. File "/usr/lib/enigma2/python/mytest.py", line 177, in runReactor
      9. reactor.run(installSignalHandlers=False)
      10. File "/usr/lib/python2.7/site-packages/twisted/internet/base.py", line 1192, in run
      11. Qt has caught an exception thrown from an event handler. Throwing
      12. exceptions from an event handler is not supported in Qt. You must
      13. reimplement QApplication::notify() and catch all exceptions there.
      14. self.mainLoop()
      15. File "/usr/lib/enigma2/python/e2reactor.py", line 209, in mainLoop
      16. runMainloop()
      17. File "/usr/lib/enigma2/python/enigma.py", line 5792, in __call__
      18. return ret(*args, **kwargs)
      19. File "/usr/lib/enigma2/python/mytest.py", line 293, in processDelay
      20. callback(*retval)
      21. File "/usr/lib/enigma2/python/Plugins/Extensions/DVDController/plugin.py", line 148, in doeject
      22. ioctl(cd.fileno(), ioctl_flag)
      23. ValueError: I/O operation on closed file
      24. ------------------------------------------------------------
      25. (exit code 5)
      Alles anzeigen