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