Программируем LED на телефоне


    Хотя Android API не позволяет напрямую включать-выключать светодиодный индикатор или вспышку фотокамеры, на некоторых телефонах такая возможность имеется.

    Как программно помигать разноцветными огоньками, как написать свой «Фонарик» или какими еще светодиодами устройства можно управлять — об этом Вы узнаете ниже.

    Началось все с того, что я, исследуя файловую систему своего HTC Desire с помощью ES Проводника, случайно наткнулся на любопытные каталоги: /sys/class/leds/blue, /sys/class/leds/flashlight и т.п.
    Какой еще blue?! Я видел только оранжевый и зеленый индикатор. Но самое интересное — внутри этих каталогов оказался файл brightness с правом на запись! Чем я сразу и воспользовался.

    На самом деле, это не простой файл, а интерфейс работы с драйвером светодиода. Так, записав в файл /sys/class/leds/blue/brightness положительное число, мы включим синий индикатор на корпусе телефона, записав 0 — выключим. Аналогично с индикаторами amber и green. Включив два светодиода вместе, получим новые цвета: amber + blue = purple; green + blue = aqua.
    Подкаталог в /sys/class/leds За что отвечает
    lcd-backlight Яркость подсветки дисплея. В файл brightness записывается число от 0 до 255: больше — ярче.
    flashlight Яркость светодиода-вспышки. Возможные значения: 0, 127, 128, 255.
    button-backlight Подсветка кнопок (вкл/выкл).
    amber
    green
    blue
    Оранжевый, зеленый и синий индикаторы (вкл/выкл),
    а также пурпурный (amber+blue) и голубой (green+blue) индикаторы.

    А теперь, как это все программируется

    public void ledControl(String name, int brightness) {<br>
        try {<br>
            FileWriter fw = new FileWriter("/sys/class/leds/" + name + "/brightness");<br>
            fw.write(Integer.toString(brightness));<br>
            fw.close();<br>
        } catch (Exception e) {<br>
            // Управление LED недоступно<br>
        }<br>
    }<br>
    <br>
    // Включим пурпурный индикатор<br>
    ledControl("amber", 255);<br>
    ledControl("blue",  255);<br>
    <br>
    // Сделаем дисплей темнее<br>
    ledControl("lcd-backlight", 30);<br>
    <br>
    // Выключим подсветку кнопок<br>
    ledControl("button-backlight", 0);<br>
    <br>
    // Организуем фонарик средней яркости<br>
    ledControl("flashlight", 128);<br>

    Приложение-пример с исходными кодами можно скачать тут.


    Заключение

    Все! Теперь телефон светится, как новогодняя елка. Код проверялся только на HTC Desire под управлением Android 2.2, но, вероятно, может работать и на других устройствах. Напишите мне, получится или не получится фокус на Вашем телефоне.

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 62

      +13
      Можете видео с результатом записать? Не у всех есть Desire, а посмотреть интересно.
        +3
        Вспомнился Motorola Funlight, который мог мигать всем чем только можно под частоты окружающей музыки
          +2
          Motorola E398?
            0
            L5.7 и RAZR :)
              0
              Про эти девайсы незнаю, на 398-ой отверстия стерео динамиков подсвечивались разными цветами под такт мызыки. Было клёво
              0
              Это было на многих моторолах, правда такого количества светодиодов, как на E398 вроде нигде не было. На многих эта функция была заблокирована в SEEM, но умельцы нашли нужный бит ;) У меня эта фича работала на C380.
                0
                На linux-Moto простой правкой симов не ограничивалось, а Funlight'a хотелось…
                Motorola Zn5:
                www.youtube.com/watch?v=Wy-UKdI8ZMw
                0
                И у меня. А потом на сливере.
            0
            Дык это не только к телефону применимо, *nix позволяет добраться до LED и на ноутбуках, к примеру :)
              +2
              Именно так! Просто это едва ли не единственное в системе телефона, что оказалось напрямую доступно для записи без прав root.
                +1
                на моей legend прав на запись нету, странно как-то
                  0
                  Все подобные включалки светодиода, что я нашел на маркете, на легенде не работают. А жаль.
              +4
              www.youtube.com/watch?v=ShRx-MSRLdY — видео



              Хочу отметить, что светодиод не перестаёт гореть после выхода из приложения.
                +1
                Так ведь вполне логично, файл общий, нужно предусмотреть обнуление и ситуацию использования индикатора другими приложениями. Хотя в обычном случае с индикацией, когда она реализована в мерцающем характере и выключается ее после того, как событие больше не требует внимания — сообщение прочитали, действие заапрувили,… — очистка уже предусмотрено: либо событие требует внимания и файл периодично правится, либо больше нет и он обнуляется; а коллизия индикации нескольких приложений смотрелась бы даже хорошо — зеленым мигает индикация нового письма, пурпурным — новое сообщения, главное чтобы сдвиг фаз был равномерным, и светодиод не дергался )
                  0
                  ага. Приходится подлавливать момент, когда он перестает гореть в приложении, и в этот момент нажимать «Quit»
                  0
                  А зачем это нужно вообще?
                    0
                    Оповещения пользователя в приложениях, к примеру.
                      –12
                      да, конечно же

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

                      у меня кстати Дезир есличо
                        +5
                        сомнительно, что «света-диод» (лол) так уж сильно сажает батарею

                        А если телефон будет лежать на столе и мигать разными цветами на события мессенджера/почты/напоминания/смс/звонка — это прекрасно
                          –12
                          Нет, не сомнительно, это доказано и проверено, на 4пда и Хда написано.
                            +1
                            Обычно такие оповещения идут «как опция». Есть желание — включили, нет и не мигает.
                              0
                              Вы скорее всего путаете светодиод, установленный в качестве вспышки и фронтальный светодиод для оповещений.
                                –6
                                Нет, мы не путаем.
                              0
                              согласен, особенно в безвучном режиме
                              +3
                              Например, когда стоит «без звука», не надо будет тыкать верхнюю кнопку и постоянно проверять, не пришло ли. Тут замигал — значит пришло.
                                +1
                                А еще бывают люди, которые не слышат, то есть совсем не слышат и для них было бы очень удобно.
                                P.S. Только не спрашивайте зачем им телефон. SMS, видеозвонки и интернет — еще никто не отменял.
                                  0
                                  Совершенно верно, задумано было изначально для беззвучного режима и при движении в автомобиле с включенной музыкой.
                            +1
                            Была в свое время программка под BlackBerry Perl, которая моргала шариком на разные event'ы разными цветами и стала хитом продаж в on-line магазинах мобильного софта. А вы говорите…
                              0
                              То есть это все, что она делала :))
                            +3
                            На HTC Wildfire (Android 2.1) работает.
                              +1
                              HTC Hero (Android 2.1 официальная) — работает :)
                              • UFO just landed and posted this here
                                –2
                                Каждый производитель делает столько и те индикаторы которые нужны (чаще всего) для дизайна. К примеру на моем Acer Liquid индикаторы на торце, и оповещают о разрядке, не прочтенной СМСке, пропущенном вызове и возможно(не сталкивался) о чем-то еще. Больше нет ни индикации ни фонарика/вспышки…
                                Зачем все это(о чем пост), кроме как изменения яркости экрана? Это же не универсальная фича. У кого-то весело мигает, у кого-то нет. Практического применения практически(извените за тавтологию) нет.
                                  +1
                                  Ну я думаю разработчик всегда сможет придумать. Например для GPS-приложения: красный — ушёл от нужного поинта на карте, зелёненький пришёл, варьировать радиус можно.
                                  Тем более целых 5 цветов.
                                    0
                                    Цвета можно варьировать очень широко — яркость каждого цвета можно менять. Можно получить от чего-то типа белого, до всех градаций синего, зеленого и желтого. Соответствующие программы есть на Маркете.
                                    0
                                    Жаль, что у Acer Liquid нет «фонарика». Правда. Но ведь это не повод владельцам HTC отказываться от такой функции, раз уж она поддерживается их телефонами. Я и сам очень надеялся, что Android минует судьба Java ME, где разработчики вынуждены были путем всяких хаков определять модель телефона и использовать те или иные особенности платформы, на которой их приложение запущено. Но, видимо, до тех пор, пока существуют функциональные различия устройств, будут и обходные пути для эксплуатации специфических фич.
                                    0
                                    > Оранжевый, зеленый и синий индикаторы (вкл/выкл),
                                    а также пурпурный (amber+blue) и голубой (green+blue) индикаторы.

                                    А amber+green?
                                      0
                                      Будет просто оранжевый :) Не знаю, почему, но green при включенном amber игнорируется.
                                      0
                                      Если я ничего не путаю, это используется еще со времен 1.5 версии. Программка которой чуть ли не год пользуюсь, позволяет настраивать цвет и период мигания в зависимости от разных событий — пришла СМСка, пропущенный звонок, пропущенный звонок от конкретного человека, событие в календаре — практически все, что может понадобится.
                                        0
                                        а что за прога?
                                          +1
                                          Missed Call

                                          Еще Handcent SMS позволяет настраивать цвет и мигание
                                        +1
                                        У Вас Desire рутованый? Ибо на моем Нексусе эти файлы закрыты для записи :(
                                          0
                                          На Нексусе цветовой спектр гораздо шире. Возможно получить практический любой цвет подсветки трекбола.
                                          Для примера подойдет опенсоурсний почтовый клиент K9. Кстати возможность выбора любого цвета очень полезная функция.
                                            0
                                            Не-не, писал выше — habrahabr.ru/blogs/android/104627/#comment_3279106.
                                            Возможно, HTC специально оставили бэкдор на своих телефонах для своих программ.
                                            0
                                            спасибо побаловался, но у меня дизайр и так моргал на новые смски
                                              +1
                                              у меня на nexus one не пашет
                                              FileNotFoundException (permission denied)
                                                0
                                                Это то что я писал выше — файлы закрыты для записи на нехусе.
                                                  0
                                                  но както это работает на nimbuzz
                                                +1
                                                Кстати, на Герое 2.1 фокус с яркостью кажись не прокатывает — у меня получилось только состояние «вкл-выкл» :(
                                                  0
                                                  На Samsung Spica есть только lcd-backlight но файл brightness RO, но идея интересная, надо поискать файлы с правом записи.
                                                    +1
                                                    Legend 2.1 не рутованный. Не работает.
                                                      –1
                                                      Поставил на своего героя. Начал светится один верхний диод. После выхода не выключился, после удаления программы тоже не выключился. Пришлось перезагружать.

                                                      Плохо. Очень плохо. Придете на пересдачу.
                                                        0
                                                        То, что не выключается — это фича :) Было задумано, что цвета по кругу меняются, потом на время выключаются и снова все повторяется, однако не на всех телефонах это выглядит именно так. Пожалуй, да — сделаю, что по Quit выключается — не сложно.
                                                        0
                                                        Пишем «моргалки» для Hero :)
                                                        Пример скрипта-моргалки:
                                                        gr="/sys/class/leds/green/brightness"
                                                        br="/sys/class/leds/green/brightness"
                                                        us=100000
                                                        while :;
                                                        do
                                                        echo 1 > $br
                                                        usleep $us
                                                        echo 0 > $br
                                                        echo 1 > $gr
                                                        usleep $us
                                                        echo 0 > $gr
                                                        done

                                                        Включаем шарик:
                                                        cd /sys/class/leds/jog*
                                                        echo 255 > brightness

                                                        Теперь чтобы включить шарик на «постоянно», нужно
                                                        echo 0 > blink
                                                        Чтобы моргал быстро быстро (значения 1-4 моргания)
                                                        echo 1 > blink
                                                        Чтобы просто был как напоминание (значения 6-10)
                                                        echo 6 > blink
                                                        Значение 5очень интересное, сначала быстро моргает, потом как напоминание
                                                        echo 5 > blink
                                                        Чтобы выключить
                                                        echo 255 > blink

                                                      • UFO just landed and posted this here
                                                          0
                                                          Да, но семантика этого API несколько другая — смысл его в том, чтобы телефон подал уведомление тем способом, которым умеет, а задействование LED при этом вторично. В частности, HTC Desire игнорирует параметры ledARGB, ledOnMS, ledOffMS, и всегда мигает зеленым огоньком со стандартным интервалом, точно так, как при пропущенном звонке или SMS.
                                                          • UFO just landed and posted this here
                                                          0
                                                          Сорри за запоздалый коммент :) HTC Desire 2.2 без рута, все работает!
                                                            0
                                                            Интерфейс "/sys/class/leds/.../brightness" не является стандартным. Его наличие и работоспособность зависит не только от модели телефона, но и от конкретной сборки ядра. Поэтому, дабы избежать негатива на маркете, не стоит использовать подобные хаки.

                                                            Но если использовать это для себя, то через подобные интерфейсы можно корректно выключать и регулировать питание на внутренних модулях (компас, акселометр, вафля). Вследствие чего, если повезет, можно увеличить время автономной работы до 50%.

                                                            Only users with full accounts can post comments. Log in, please.