Zegar w Kindle: ulepszenia part 1
Jakiś czas temu zirytowany brakiem zegarka w moim Kindle 3 napisałem własny. Pełna historia w tym wpisie. Przyszedł jednak czas na ulepszenia. Poza wybranym z czasem opóźnieniem w dopisywaniu się do ekranu pojawił się zupełnie nowy tryb - mniejszy zegar w czasie czytania książki. Natywny dla interfejsu rozmiar czcionki nie rozprasza i nie przykrywa paska postępu.
Pierwszym wyzwaniem było sprawdzenie czy aktualnie otwarta jest książka, czy też nie. Wykorzystałem zasoby procfs z katalogu fd wskazujące otwarte pliki. Długi czas się głowiłem dlaczego cały czas mam informacje o otwartej książce, aż połapałem się że launcher KUAL jest otwarty na stałe - stąd wystarczy wykluczyć pliki azw2 zawierające natywne binarki Kindle. Zrealizowane taką oto funkcją:
isBookOpened(){
ls -al /proc/`cat /var/run/cvm.pid`/fd |
grep documents |
grep -v azw2 | # invert search of kindle apps (e.g. KUAL)
wc -l
}
Następnym krokiem było użycie mniejszego fontu. Problem polega na tym, że eips na Kindle 3 niezbyt dobrze radzi sobie z wstawianiem obrazków (a już miałem robić 10+1 bitmap kilka na kilka pikseli). Rysowanie prostokątów na mojej wersji urządzenia też zawodzi. Odnalazłem jednak binarkę fbprint (dostępną na mobileread.com), która pisze po ekranie w natywny dla interfejsu sposób.
Trochę kalibracji i efekty są takie:
#!/bin/sh
read cvmPid < /var/run/cvm.pid
if [ -z "$cvmPid" ]; then
eips 0 38 " ZEGAR ERROR: "
eips 0 39 " cvm is dead :( reboot needed"
exit 2
fi
isBookOpened(){
ls -al /proc/`cat /var/run/cvm.pid`/fd |
grep documents |
grep -v azw2 | # invert search of kindle apps (e.g. KUAL)
wc -l
}
showTimeBook(){
/mnt/us/zegar/fbprint 525 767 `date +"%H:%M"`
# little nice-fonted kindle-ui-like clock
# on right side of the progress bar (opposite to book percentage)
# to be shown when reading book
}
showTimeGeneral(){
eips 45 39 `date +"%H:%M"`
# huge rough TTY-like clock
# in bottom right corner to be shown in UI
}
while :; do
waitforkey &&
usleep 100000 &&
x=$(isBookOpened)
if [ "$x" == "0" ]; then
showTimeGeneral
else
showTimeBook
fi
done
Całość ładnie upakowaną można pobrać tutaj: zegar_0.2