Диоды aka Leds

Материал из Toshiba AC100 wiki
Перейти к навигации Перейти к поиску

Надо искать, в штатном 2.2 или гуглить, как диоды вообще прикручиваются в <range type="comment" id="129830">Андроиде</range id="129830">.

  • Скорее всего нам будет нужен демон или либа которая слушает системные события и по ним дергает диоды
    • Надо искать похожую в которую можно внести нужные изменения
    • Писать свою, нужен программер


P.S В 2.2 диоды прикручиваются через liblights, которая в оригинале через sysfs управляет диодами по разным событиям. Пример, как реализовано, можно посмотреть у HTC HD2 в репе cm7. В этой либе существуют отдельно для батарейки\уведомлений\питания\вайфая и всего-всего события для отлавливания а через /sys/class бла бла бла нельзя?


  • liblights в htc leo дает массу полезной инфы https://github.com/CyanogenMod/android_device_htc_leo/blob/gingerbread/liblights/lights.c
  • Собрать сюда инфу по нашим диодам что где дергать в sysfs и можно будет прикрутить по аналогии
    • работают при записи значений от 1 до 8 включительно в файл /sys/class/nvec-led/brightness, при записи значения 0 выключаются
      • Режимы примерно такие:
1 - одно стандартное моргание с коротким интервалом,
2 - одно стандартное моргание с длинным интервалом,
3 - два стандартных моргания с коротким интервалом,
4 - два стандартных моргания с длинным интервалом,
5 - одно быстрое моргание с коротким интервалом,
6 - одно быстрое моргание с длинным интервалом,
7 - два быстрых моргания с коротким интревалом,
8 - два быстрых моргания с длинным интервалом

' придумать к каким системным событиям привязать какие моргания ( <range type="comment" id="872665">а известно как сказать андроиду что ему надо когда то моргать?</range id="872665"> )

        • ну только теоритически известно что в liblights можно обыгровать события и по ним дергать лампочки, но как чего делать точно нужно разбираться, но общий смысл такой:

завести переменные включения лампочек с прописыванием нужных значений в <range type="comment" id="779141">/sys/class/nvec-led/brightness</range id="779141"> и выключению и функцию нотификации которая по определенному ивенту включает их или выключает.

На заметку: http://www.kandroid.org/online-pdk/guide/lights.html


Попытка завести мигалки на АС-100:


Notification.java

Класс реализации стандартных уведомлений;

  • FLAG_SHOW_LIGHTS - константа, переопределяющая мигалки по-умолчанию;
  • ledARGB - целочисленная переменная для задания цвета. Поскольку у нас цветов нет, использовать не будем;
  • ledOnMS, ledOffMS - переменные управляющие мерцанием, либо работой светодиодов.

Из документации:

  • To turn the LED off, pass 0 in the alpha channel for colorARGB
  • or 0 for both ledOnMS and ledOffMS.
  • To turn the LED on, pass 1 for ledOnMS and 0 for ledOffMS.

Поскольку у нас передача значения включает уже готовые режимы мигания, будем использовать Для включения:

ledOnMS = 1 или ledARGB = любое целое, отличное от нуля; ledOffMS = 0;

Для выключения: ledOnMS = 0; ledOffMS = 0;


lights.h

Хидер библиотеки реализации моргания светодиодов. Очень много полезной инфы для грамотной реализации библиотеки в комментах;

Нужные переменные находятся в struct light_state_t:

  • color == ledARGB; 0 - выключение диодов, иначе - включение;
  • flashMode - хранит режим горение/мерцание внутри библиотеки. У нас "мерцание" не будет использоваться;
  • flashOnMS == ledOnMS;
  • flashOffMS == ledOffMS;

lights.c

  • Реализация. Самое интересное;

Что-то попробовал написать, результат http://pastebin.com/ELeg4NvL Лучше так: http://pastebin.com/bTyaYjCP (в первом варианте не учёл выключение при colorARGB = 0) Не факт, что это вобще компилируется и будет работать, но мне кажется, движусь в правильном направлении :)

    • <range type="comment" id="186522">Не компилируется</range id="186522">
target thumb C: lights.tegra <= device/toshiba/paz00/liblights/lights.c
device/toshiba/paz00/liblights/lights.c:136: error: storage class specified for parameter 'mode'
make: *** [out/target/product/paz00/obj/SHARED_LIBRARIES/lights.tegra_intermediates/lights.o] Ошибка 1
make: *** Ожидание завершения заданий...

Можно проверять вообще компиляцию отдельно от всего андроида, возьми просто нужные инклюды и трави сборку на него.

    • С патчем от stuw'а все собралось, но диоды не загораются при оповещениях.


Тестовое андроид-приложение для проверки мигалок


NotificationsTest.zip

zombah, дальнейшее развитие событий зависит от тебя :)