Pull to refresh

Аудиосистема на 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 месяц теста — полёт нормальный.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.