Как стать автором
Обновить

Аудиосистема на CubieBoard a10, или пытаемся подружить кубик и пульт

Всем привет! В данном проекте я расскажу, как на кубиборде управлять медиаплеером MOCP (консольным) с помощью пульта ДУ.

Подготовка

Итак, варите кофе, поехали.

У нас имеется:
1 cubieboard a10 (далее кубик);
2 Пульт от ТВ;
3 Крепкий кофе.

Кубик заранее прошит Cubian БЕЗ графического интерфейса. Изначально на кубике не запущен модуль, отвечающий за IR. Для инициализации при загрузке дописываем в файл /etc/modules строчку sunxi_ir.

Перезагружаемся.

Чтобы проверить работоспособность, набираем:

cat /dev/input/event1 | hexdump


Тыкаем кнопочки на пульте. Если появляются символы навроде



… то всё работает успешно. Выходим. Не забываем про кофе.

Далее ставим сам плеер.

apt-get install mocp


Пока программа устанавливается, я расскажу, почему выбрал именно её. Во-первых, mocp запускается как демон, и можно закрыть интерфейс, не останавливая музыку. Во-вторых, есть управление с помощью аргументов (подробнее: man mocp). В-третьих, управление горячими клавишами почти интуитивное.

Установка должна пройти без проблем. Запуск для проверки работоспособности:

mocp


Должно вылезти такое чудо:



Пока всё гут.

Сам код

Сейчас создаём файл ir и копируем туда код:

#!/usr/bin/php5
<?php
$dev="/dev/input/event1";
$f=fopen($dev, 'rb');
if($f){
    while (!feof($f)){
        $b=fread($f,32);  //каждая кнопка формирует данные по 64 бита, 32-нажата кнопка, еще 32 - отпустили
        $d=bin2hex($b); //получили hex строку
        $d=substr($d,18,8); //код кнопки пульта и её статус
        $button=substr($d,0,4); //кнопка
        $key=substr($d,4);   //0001 или 0000
        
        switch($button){
            case "0007": 
            if ($key=="0001"){shell_exec("mocp --next");} //следующий трек
            shell_exec("echo " .($key=="0001"?"255":"0"). " > /sys/class/leds/blue\:ph21\:led2/brightness"); //зажигаем синий светодиод
            break;
            case "0004": 
            if ($key=="0001"){shell_exec("mocp -r");} // предидущий трек
            shell_exec("echo " .($key=="0001"?"255":"0"). " > /sys/class/leds/blue\:ph21\:led2/brightness");//зажигаем синий светодиод
            break;
            case "00ff": 
            if ($key=="0001"){shell_exec("mocp -G");} // пауза / проигрывание
            shell_exec("echo " .($key=="0001"?"255":"0"). " > /sys/class/leds/blue\:ph21\:led2/brightness");//зажигаем синий светодиод
            break;
            case "0002": 
            if ($key=="0001"){shell_exec("mocp -v+5");} // громкость+
            shell_exec("echo " .($key=="0001"?"255":"0"). " > /sys/class/leds/blue\:ph21\:led2/brightness");//зажигаем синий светодиод
            break;
            case "0006":
            if ($key=="0001"){shell_exec("mocp -v-5");} // громкость-
            shell_exec("echo " .($key=="0001"?"255":"0"). " > /sys/class/leds/blue\:ph21\:led2/brightness");
            break;
        }
       
    }
}
?>


Думаю, комментарии говорят сами за себя. Один момент. В скобках после case вписывайте 7 блок из команды cat /dev/input/event1 | hexdump. Это номер клавиши на пульте. Сохраняем. Даём права на исполнение:

chmod +x /home/cubie/ir


Запускаем плеер, выбираем папку с музыкой. Далее запускаем нашу программу как демон:

./ir &


Получаем примерно такую картину:



Если ошибок нет, то можно уже пользоваться.

P.S. 2 месяц теста — полёт нормальный.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.