Skip to main content
  1. Posts/
  2. blog.dsinf.net/

Zegar w Kindle: ulepszenia part 1

·347 words·2 mins
blog.dsinf.net kindle linux
Daniel Skowroński
Author
Daniel Skowroński

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:

ZEGAR 0.2 - w trybie książki
ZEGAR 0.2 - w trybie książki

ZEGAR 0.2 - w reszcie UI
ZEGAR 0.2 - w reszcie UI

#!/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