Prohození stavu dvířek CD mechaniky

Zkoušel jsem nespočet způsobů jak softwarově prohodit stav dvířek CD mechaniky, ale pokaždé se našla nějaká moucha a třebaže to pár hodin šlo, nakonec se hodnota stavu dvířek otočila vůči skutečnému stavu a tím pádem už s nimi nešlo hýbat. A dneska konečně nápad.

#!/bin/sh
# Skript na prohození stavu dvířek mechaniky
device=/dev/cdrom
delay=0.7 # Do kolika sec se dvířka určitě nevysunou
statfile=/tmp/cdrom_stat # Soubor nesoucí stav dvířek
echo 'c' >$statfile # Dvířka nejprve považujeme za zavřená
# Vysunout a ihned zapsat stav (nutné provést na pozadí)
eject $device && echo 'o' >$statfile &
# Počkat chvilku, než by skončil eject při *otevřených* dvířkách
sleep $delay
# Pokud je už teď mechanika otevřená,
# byla pravděpodobně otevřená i předtím --> zavřít ji.
[ "`cat $statfile`" = "o" ] && eject $device -t

Prodleva jako řešení

Pokud spustíme program eject, skončí až ve chvíli, kdy jsou dvířka skutečně otevřená. Pokud tedy už otevřená jsou, program skončí téměř okamžitě, v opačném případě mu to však většinou trvá přes sekundu, než dvířka celá vyjedou. Jako prodlevu delay je proto třeba zvolit čas, do nějž se zavřená dvířka určitě nestihnou otevřít, ale pokud otevřená jsou, tak do této doby program eject spolehlivě skončí. Mně fungovaly hodnoty v intervalu <0.1; 1.1>, jiné nefungovaly vždycky. Levá mez je závislá na vytížení systému, které kolísá podstatně víc než rychlost otevření dvířek, na níž závisí mez vpravo. Je proto spolehlivější volit trochu vyšší prodlevu než je průměr nejkratší a nejdelší funkční prodlevy. Pokud má vaše mechanika dvířka rychlejší, prodlevu bude možná třeba malinko snížit. Zní to všechno trochu složitě, ale prostě tam mrskněte nějakou hodnotu a buď zabere nebo ji změníte.


Komentáře

[1] donny – 2008-02-15, 0.10

Skvělé, přesně tímhle jsem si lámal hlavu něco přes hodinu a ne a ne na to kápnout. Dík. Využití mám následovné (v KDE v adresari Autostart jako .desktop soubor):

ksystraycmd --hidden --startonshow --keeprunning --tooltip "Otevre nebo zavre dvirka DVD mechaniky." --icon /opt/kde/share/icons/KDEmod-Icons-Tango/22x22/devices/dvd_unmount.png /home/donny/skripty/open_close_cd.sh&>/dev/null

[2] anonmy :P – 2008-09-10, 11.27

heh jako wubec tmu nerzumim ze :D

[3] anonmy :P – 2008-09-10, 11.28

heh jakooo wubéc tomuhle nrozumim :D:D :p nechapu ty kdo se zajima o pocal :)

[4] aqdgblpydgt [web] – 2011-05-28, 17.54

Přidat komentář

Identifikace autora

(zobrazí se v antispam podobě)

Komentář

Nepoužívej HTML značky a piš pokud možno s diakritikou. Na ostatní komentáře se odkazuj např. [1]

Díky za tvůj názor!

Navigace

Hledání