Управление колонками Microlab SOLO 6C Samsung Galaxy S4

К сожалению, пульт от сего устройства является весьма хрупким, и часто теряемым. Кроме того, лично мне попался глючный пульт, который срабатывает через раз. Купив себе аппарат Samsung Galaxy S4, я тут же решил сделать дубликат пульта от своих колонок,  и таким образом подстраховать себя от полной потери удалённого контроля над колонками.  Я нашёл много разных приложений для управления различными видами аппаратуры, но как на зло, именного моего устройства в списках нигде не было.

Некоторые из приложений, такие как ZaZaRemote (https://play.google.com/store/apps/details?id=com.tiqiaa.remote&hl=en-us) я всё-таки сносить не стал, поскольку там я нашёл готовые пульты управления от очень редкой аппаратуры. Как оказалось, наиболее подходящей программой для создания собственного пульта оказалось приложение «Smart Remote for Samsung Galaxy S4». Однако, по непонятной причине это приложение исчезло из Google Play маркета, в связи с чем выкладываю линк на другой источник (http://4pda.ru/forum/index.php?showtopic=461470). Полистав список девайсов в этом приложении, я обнаружил шаблон контроллера от SOLO 7C, который ПОЧТИ подходил к моим SOLO 6C. Не работала лишь кнопка «reset». Это в принципе не критично, но всё же хотелось поиметь полноценный пульт. :) А самое главное: что делать, если подходящего пульта вообще нет в базе? На этот случай есть способ, который позволяет «слить» коды команд пульта, не имея инфракрасного ресивера в мобильном аппарате (как в случае с galaxy). И так, скачиваем программу WinLIRC (берём последний релиз вот тут http://sourceforge.net/projects/winlirc/files/winlirc/ )

А теперь, собираем очень простое устройство считывания IR сигналов. Для сборки нам понадобятся следующие компоненты:

Инфракрасный фото элемент типа «TSOP1736» 1 штук.

Обыкновенный диод 1 штук.

Штекер типа джек 3,5мм (желательно моно)

Провода. Проще всего разобрать витую пару, и заюзать её цветовое разделение в своих целях. :)

Собираем устройство по следующей схеме:

распайка фото элемента выглядит вот так:

Конец провода +5в засовываем в пятивольтовый пин свободного штекера блока питания нашего компьютера !!! туда, где КРАСНЫЙ провод !!! Не перепутайте  с жёлтым. Один провод массы засовываем в соседний пин (где провод чёрного цвета).

Провод «ir out» бросаем на дальний конец аудио штекера. Второй провод массы, соответственно, на массу аудио штекера. Масса у него находится в «корне». Если перепутать полярность, ничего работать не будет.

Когда устройство собрано, проверяем его работу. При нажатии кнопки пульта, направленного на фото элемент, устройство пускает в аудио порт легко различимый для человеческого уха звук. Слегка писклявый… Короче если вы слышите просто какое то шипение и беспорядочные помехи – устройство попросту не работает.

Теперь открываем WinLIRC и настраиваем его на аудио плагин. Сам плагин настраивать не нужно.

Для облегчения распознавания сигналов, сразу же запихиваем в конфигурацию ЛИРКа шаблон протокола (для большинства устройств подходит протокол NEC)

Создаём в папке с лирком файл nec.cf и вбиваем в него следующее:


#

# generic NEC config file

#

# source: CIrCC datasheet, exiting config files

#

# used by: Canon, Creative, Domland, Orion

begin remote

name  NEC

bits           16

flags SPACE_ENC|CONST_LENGTH

eps            30

aeps          100

header        9000 4500

one           563  1687

zero          563   562

ptrail        563

pre_data_bits 16

# just a guess

gap          108000

frequency    38000

duty_cycle   33

begin codes

end codes

end remote

Это простой шаблон, который помог мне с распознаванием сигналов пульта от SOLO 6C.

Выбираем этот шаблон в окне настойки лирка и нажимаем кнопку «create conffig». Должно появиться консольное окно, где следуя инструкции вы сможете записать каждую клавишу своего пульта в новый конфиг.

После того, как все кнопки будут добавлены, нажимаем «ок», и ищем новый файл, с именем, похожим на «nec.cf.conf», который должен появиться в папке программы winlirc. В принципе уже всё готово, но коды, записанные в этом файле не подходят к приложению на мобильном устройстве, так как там используется формат «pronto hex». Осталось сконвертировать конфиг в нужный нам формат, и для этого далее качаем программку lirc2xml вот отсюда http://www.harctoolbox.org/downloads/lirc2xml-0.1.2-windows.zip (если линк вдруг перестал пахать, ищем виндовую версию вот тут http://www.harctoolbox.org/lirc2xml.html). Распаковываем это в папку с WinLIRC , открываем консоль cmd и юзаем конвертер. Лично мне пришлось использовать абсолютные пути, иначе программа складывает свои данные непонятно где. Потому что это порт с линукса. ;)

У меня получилось вот так:


C:\Users\iBuben>F:\WinLIRC\lirc2xml.exe F:\WinLIRC\nec.cf.conf -o F:\nec.conf.xml

cygwin warning:

MS-DOS style path detected: F:\WinLIRC\nec.cf.conf

Preferred POSIX equivalent is: /WinLIRC/nec.cf.conf

CYGWIN environment variable option "nodosfilewarning" turns off this warning.

Consult the user's guide for more details about POSIX paths:

http://cygwin.com/cygwin-ug-net/using.html#using-pathnames

XML export F:\nec.conf.xml successfully created.

Ну а теперь, открываем созданный файл текстовым редактором, и видим что то вроде такого:


<lircremotes creation-date="Sun Sep 15 18:13:54 2013" creator=",S-1-5-21-4136439841-2983906610-1672194129-1000" lircversion="0.9.0" lirc2xml_version="0.1.2" configfile="F:\WinLIRC\nec.cf.conf" decodeir_version="2.43">

<remote name="F:\WinLIRC\nec.cf.conf">

<lircdata type="SPACE_ENC" bits="16" flags="16400" eps="30" aeps="100" pthree="0" sthree="0" ptwo="0" stwo="0" pone="563" sone="1687" pzero="563" szero="562" plead="0" ptrail="563" pfoot="0" sfoot="0" prepeat="0" srepeat="0" pre_data_bits="16" pre_data="32895" post_data_bits="0" post_data="0" pre_p="0" pre_s="0" post_p="0" post_s="0" gap="108000" gap2="0" repeat_gap="0" toggle_bit="0" toggle_bit_mask="0" min_repeat="0" min_code_repeat="0" freq="38000" duty_cycle="33" toggle_mask="0" rc6_mask="0" baud="0" bits_in_byte="0" parity="0" stop_bits="0" ignore_mask="0"/>

<code name="v+" codeno="0x0000000000008877">

<decoding protocol="NEC" device="1" subdevice="-1" obc="17" hex0="119" hex1="-1" hex2="-1" hex3="-1" misc="no repeat" error=""/>

<ccf>0000 006d 0022 0000 0156 00ab 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0015 0015 0015 0015 0015 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0040 0015 0040 0015 0015 0015 0040 0015 0040 0015 0040 0015 05ee</ccf>

</code>

<code name="v-" codeno="0x00000000000008F7">

<decoding protocol="NEC" device="1" subdevice="-1" obc="16" hex0="247" hex1="-1" hex2="-1" hex3="-1" misc="no repeat" error=""/>

<ccf>0000 006d 0022 0000 0156 00ab 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0015 0015 0015 0015 0015 0015 0040 0015 0040 0015 0040 0015 0040 0015 0015 0015 0040 0015 0040 0015 0040 0015 05ee</ccf>

</code>

<code name="t+" codeno="0x000000000000906F">

<decoding protocol="NEC" device="1" subdevice="-1" obc="9" hex0="111" hex1="-1" hex2="-1" hex3="-1" misc="no repeat" error=""/>

<ccf>0000 006d 0022 0000 0156 00ab 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0015 0015 0015 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0040 0015 0015 0015 0040 0015 0040 0015 0040 0015 0040 0015 05ee</ccf>

</code>

<code name="t-" codeno="0x000000000000B04F">

<decoding protocol="NEC" device="1" subdevice="-1" obc="13" hex0="79" hex1="-1" hex2="-1" hex3="-1" misc="no repeat" error=""/>

<ccf>0000 006d 0022 0000 0156 00ab 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0015 0015 0040 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0015 0015 0015 0015 0040 0015 0040 0015 0040 0015 0040 0015 05ee</ccf>

</code>

<code name="b+" codeno="0x00000000000050AF">

<decoding protocol="NEC" device="1" subdevice="-1" obc="10" hex0="175" hex1="-1" hex2="-1" hex3="-1" misc="no repeat" error=""/>

<ccf>0000 006d 0022 0000 0156 00ab 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0015 0015 0040 0015 0015 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0015 0015 0040 0015 0015 0015 0040 0015 0040 0015 0040 0015 0040 0015 05ee</ccf>

</code>

<code name="b-" codeno="0x000000000000708F">

<decoding protocol="NEC" device="1" subdevice="-1" obc="14" hex0="143" hex1="-1" hex2="-1" hex3="-1" misc="no repeat" error=""/>

<ccf>0000 006d 0022 0000 0156 00ab 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0015 0015 0040 0015 0040 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0015 0015 0015 0015 0015 0015 0040 0015 0040 0015 0040 0015 0040 0015 05ee</ccf>

</code>

<code name="reset" codeno="0x00000000000010EF">

<decoding protocol="NEC" device="1" subdevice="-1" obc="8" hex0="239" hex1="-1" hex2="-1" hex3="-1" misc="no repeat" error=""/>

<ccf>0000 006d 0022 0000 0156 00ab 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0015 0015 0015 0015 0015 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0040 0015 0040 0015 0015 0015 0040 0015 0040 0015 0040 0015 0040 0015 05ee</ccf>

</code>

<code name="input" codeno="0x00000000000020DF">

<decoding protocol="NEC" device="1" subdevice="-1" obc="4" hex0="223" hex1="-1" hex2="-1" hex3="-1" misc="no repeat" error=""/>

<ccf>0000 006d 0022 0000 0156 00ab 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0015 0015 0015 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0040 0015 0015 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 05ee</ccf>

</code>

<code name="mute" codeno="0x00000000000040BF">

<decoding protocol="NEC" device="1" subdevice="-1" obc="2" hex0="191" hex1="-1" hex2="-1" hex3="-1" misc="no repeat" error=""/>

<ccf>0000 006d 0022 0000 0156 00ab 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0015 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0015 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 0040 0015 05ee</ccf>

</code>

</remote>

</lircremotes>

В параметре «ccf» как раз находится hex код каждой из записанных функций. И нет, они не одинаковые. Это только так кажется. ;)

Теперь открываем «Smart Remote for Samsung Galaxy S4», и добавляем наиболее подходящий вариант пульта из того что уже имеется. В моём случае это был пульт от SOLO 7C. Игнорируем нерабочие функции и соглашаемся оставить пульт как есть. Затем, в меню находим пункт редактирования добавленного пульта, и правим каждую клавишу, заменяя в ней hex коды теми, которые мы получили при помощи предыдущей операции.

Щёлкаем и наслаждаемся! Кстати, такой пульт гораздо дальнобойнее, чем стоковый пульт от Microlab! =)

UPD:
Ну а тем, кому лень всё это делать, предлагаем готовое приложение, пульт от Microlab SOLO 6C! Ссылка на маркет: https://play.google.com/store/apps/details?id=net.exunity.microlab.remote

UPD2:
А теперь и для Android 4.4
https://play.google.com/store/apps/details?id=net.exunity.microlab.remote4