PDA

Просмотр полной версии : ВАЗ 21093 + SmartQ K7 (android)


ifynk
19.06.2013, 12:43
Всем привет. Идея насталяции компьютера в машин у меня в голове витала еще со времен, когда все строили их на базе windows. Даже начал писать фронтенд (iShell может кто помнит :smile2:) Но после появления android я сразу понял, что скоро буду делать проект именно на нем. Первым, корявым проектом была установка планшета Ramos W10 с резистивным тачем. Он держался на переделанном креплении для телефонов и прожил в авто так довольно долго. Потом ему на смену пришел ainol novo 7 advanced 2. Он уже был повеселее, но прикрутить к нему внешний BT так и не получилось. После этого я твердо решил, что следующий планшет будет с полным набором - встроенный GPS, BT, 1 Гб оперативы и минимум 2-х яйцевый проц. После долгих поисков решил взять SmartQ K7 и не пожалел. Отличная сборка, хорший экран и все при себе. Раз планшет уже хороший, то решил и крепление для него делать хорошее, без торчащих проводов. Был выбран вариант безкровной установки крепления с возможностью снятия планшета. Сам процесс изготовления я не фоткал, так как он почти стандартный, но немного опишу его.

Делал все из стеклоткани, эпоксидки, монтажной пены, шпатлевки и краски. Долго собирался силами, так как до этого ни разу не работал со стеклотканью. Сначала обмотал планшет пишевой пленкой (оказался не самый лучшый вариант, так как поверхность не очень ровная в итоге получилась), намазал эпоксидкой и наложил первый слой стеклоткани. Всего слоев было 2. Кстати планшет положил на кусок стекла, на которое был уложен один слой пищевой пленки, чтоб планшет не приклеился к стеклу. Было стремно :blink2: После засыхания клея принялся внимать планшет, но это небыло легким процессом и я боялся что-то сломать - тач например. Но все обошлось, хотя планшет и глюканул полосами по экрану. После перезагрузки все вернулось на свои места. Потом у американцев подсмотрел, как они встаривают Ipad mini в машины - обматывают планшет каким-то синим скотчем, похожий на наш малярный. Но я что-то не уверен в таком варианте, так как нужен скотч, который не пропитается эпоксидкой.

В общем первая и основная часть готова. Потом из той же стеклоткани делал само крепление. Идея была делать съемный вариант при котором крепление крепилось в штатном месте для бортового компьютера. В машине все обклеил скотчем "Момент" и снова мазал эпоксидку и накладывал слои ткани. Соеденил потом две части вместе, полости задул монтажной пеной, которую потом срезал и проклеил стекловолокном.

Так как планшет разбирать и курочить не хотелось, то нужно было рещать вопрос с кнопкой Power, без которой ну никак не обойтись. Решил встроить самодельную механическую кнопку, которая бы нажимала на кнопку планшета. Механизм очень простой - в месте, где находится кнопка планшета, просверлил отверстие. Над ним приклеил пластиковую трубочку в которую вставляется болтик. Этот болтик и есть передающим элементом на основную кнопку, а назад его отбрасывает пружинка от шариковой ручки. Верхню часть кнопки взял от старого планшета и приклеил над болтиком.

Для того, чтоб планшет не выпадал, сделал ниши под кусочки из китайского наноковрика-липучки. А с другой стороны примастырен (из все той же стеклоткани) выступ. Но на данный момент планшет и так сидит как влитой, даже слишком. Для возможности извлечь планшет была пропилено окошко, через которое планшет выталкивался из свого места.

Ну и все это добро несколько раз шпаклевалось, потом покраска. Есть конечно недочеты, но на первый раз сойдет :whistle:

Провода прячутся в нише самого крепления.

Звук заводится на AUX магнитолы. Питание организовано через NSD10-12S5, который включается при включении магнитолы. Но от этого стабилизатора работает еще и видеорегистратор и инода заряжается 3G-WiFi модем. В результате планшет не заряжается с включенным экраном, но и не разряжается. Хочу для него купить отдельный блок.

Для управления планшетом планирую использовать нарульный китайский ИК пульт. Сигнал будет принимать платка IOIO. Для обработки будет написан сервис, который в зависимости от текущего приложения, будет выполнят определенные действия. Например переключение треков.

Регулировку громкости будет осуществлять сама магнитола. Если бы на моей магнитоле был бы заводской ИК пульт, то нарульный пульт можно обучить от оригинального на управление громкостью и было бы очень удобно.

Фух. Что-то меня понесло :smile2:

http://i.piccy.info/i7/c07949495e8247501a768b736c237d75/4-61-447/6549141/100_1677_240.jpg (http://piccy.info/view3/4738167/c92aaad3079e72c6fb906709b0b6eaa5/)http://i.piccy.info/a3/2013-06-19-07-39/i7-4738167/240x160-r/i.gif (http://i.piccy.info/a3c/2013-06-19-07-39/i7-4738167/240x160-r)http://i.piccy.info/i7/db2aea99968889dba2772cb4d88c6e46/4-61-447/9961817/100_1678_240.jpg (http://piccy.info/view3/4738176/b7b1401650beeaa6a425d8eb29543221/)http://i.piccy.info/a3/2013-06-19-07-40/i7-4738176/240x160-r/i.gif (http://i.piccy.info/a3c/2013-06-19-07-40/i7-4738176/240x160-r)http://i.piccy.info/i7/2ad884d843a348f2b59ec7e197012b84/4-61-447/10947711/100_1680_240.jpg (http://piccy.info/view3/4738178/d2662acaa5c2d94db4461c6658e0582b/)http://i.piccy.info/a3/2013-06-19-07-41/i7-4738178/240x160-r/i.gif (http://i.piccy.info/a3c/2013-06-19-07-41/i7-4738178/240x160-r)http://i.piccy.info/i7/973b24570d75ee4c0924b6fe02a1b3ef/4-61-447/12913061/100_1681_240.jpg (http://piccy.info/view3/4738180/52bcf49bb27ba5b03c2e02ed04a03cbb/)http://i.piccy.info/a3/2013-06-19-07-42/i7-4738180/240x160-r/i.gif (http://i.piccy.info/a3c/2013-06-19-07-42/i7-4738180/240x160-r)http://i.piccy.info/i7/1a5e925b621214c524dee8607354a81c/4-61-447/18636940/100_1682_240.jpg (http://piccy.info/view3/4738189/f88ef00ee2e4fc17dfa67b6ec112f6a0/)http://i.piccy.info/a3/2013-06-19-07-43/i7-4738189/240x160-r/i.gif (http://i.piccy.info/a3c/2013-06-19-07-43/i7-4738189/240x160-r)http://i.piccy.info/i7/e721118d61178b0cd92015c5c6d8f125/4-61-447/53385501/100_1683_240.jpg (http://piccy.info/view3/4738255/34cd8e01bea7a71d03a0b47e91ba6925/)http://i.piccy.info/a3/2013-06-19-07-56/i7-4738255/240x160-r/i.gif (http://i.piccy.info/a3c/2013-06-19-07-56/i7-4738255/240x160-r)http://i.piccy.info/i7/195147579d0d3f21edbd3b4d113ac30e/4-61-447/59608021/100_1685_240.jpg (http://piccy.info/view3/4738262/1827d13c63f42483715dacc6a982b511/)http://i.piccy.info/a3/2013-06-19-07-57/i7-4738262/240x160-r/i.gif (http://i.piccy.info/a3c/2013-06-19-07-57/i7-4738262/240x160-r)


Update 11.01.2014
В результате долгих мучений от IOIO отказался в пользу Teensy 3. К Teensy подключен BT модуль HC05, который передает данные на планшет. Для взаимодействия Teensy и планшета написано приложение, которое представляет собой простой вкладочный интерфейс и сервис, который постоянно висит в памяти и принимает команды с teensy. От tasker тоже отказался в пользу своего сервиса.

На данный момент с помощью пульта можно переключатся между двумя источниками - Аудио плеер (на базе PowerAmp) и StreamRadio (играет онлайн радио по зарание прописанным станциям). Также, в зависимости от источника, можно управлять станциями/треками.

Дальше планирую добавить чтение OBD через мастеркитовский модуль.

Регулировка громкости сейчас происходит посредством android, но переделаю на связку teensy + pioneer, так как в моей магнитоле есть вход для проводного пульта.

Также нужно решить проблему автоматического включения 3G-WiFi модема. (Update: решено)

Исходники моего приложения (https://ifynk@bitbucket.org/ifynk/ishell-android.git)

ifynk
19.06.2013, 12:48
Диагностику планирую сделать на модуле от МастерКит (http://www.masterkit.ru/main/set.php?code_id=215984). Но проблема в том, что он USB. Подключить к планшету его не проблема, в прошивке есть все модули, но я не нашел программу для диагностики, которая бы работала с USB. Все работают по BT. На данный момент есть идеая примастырить с этому модулю платку BT (RS-232 TTL), которая тоже есть у меня.

macau
19.06.2013, 12:55
торк про прекрасно работает с usb

ifynk
19.06.2013, 13:07
торк про прекрасно работает с usb

Хм, что-то я не нашел в нем такой опции. Спасибо, посмотрю внимательней.

macau
19.06.2013, 14:55
торк про. в бесплатном нет такой опции

ifynk
20.06.2013, 00:51
Попробовал торк про. С девайсом конектится без проблем, но с ЭБУ не хочет обмениваться. Лампочки на адаптере моргают при передаче и приеме сигнала. Получается, что проблема с софтом ((( Хоть бери и пиши свое с нуля.

macau
20.06.2013, 10:26
просто поставить торк недостаточно. нужно ему еще подсунуть один файлик и проверить пермишены. ну и за скоростью порта проследить. у меня адаптер на pl2303, скорость авто(9600)

ifynk
20.06.2013, 11:10
у меня адаптер на ft...(цифры не помню). а что за файлик нужен? пермишины вроди в порядке, но хотелось бы узнать подробнее. а скорость разную ставил, но ничего не помогало. протоколы тоже указывал вручную и строку инициализации менял. все без результата (

macau
20.06.2013, 12:13
/system/etc/carit_version2:finland_rds_rus с правами 666
в /system/etc/permissions есть файлы для usb?
ну и в торке скорость выставить авто

ifynk
20.06.2013, 12:21
А где этот файлик взять то?
В permissions все есть. Торк показывает удачное соединение с адаптером, но не может получить ответ от ЭБУ.

macau
20.06.2013, 14:04
самому создать

ifynk
20.06.2013, 16:43
Эх. Ничего не помогает. И файлик создавал и скорости менял. Видать не совместимо с моим ЭБУ.

ifynk
25.06.2013, 12:21
Оказалось, что у меня слишком тонкие провода, которые идут от NSD10-12S5 до планшета (на основе USB кабеля). Припаял более толстые провода и плашет начал заряжатся с включенным экраном, но все равно не полностью. Доходит до 60-70% и дальше ни в какую. Думаю выходом будет повесить питание планшета на отдельных блок NSD15-12S5.

ifynk
10.11.2013, 18:33
Всем привет. Летом небыло времени доделывать проект. Сейчас потихоньку начинаю к нему возвращаться. Всплылы неприятные моменты с IOIO - оказалось, что он не умеет работать с IR из коробки. Теперь думаю переходить на arduino nano v3. Смогу ли я подключить его напрямую к планшету или нужно только arduino mega adk?

lti1
10.11.2013, 22:30
Тогда может лучше Pro Micro (Leonardo) на ATmega32U4, он клавиатурой может прикинутся.

ifynk
22.12.2013, 00:17
Заказал себе Teensy 3. Уже получил. Намного удобнее, чем IOIO. Еще был у меня bluetooth модуль HC-05. Соединил эти два модуля за 15 минут без проблем. Все работает - команды с пульта принимаются и передаются по bluetooth на планшет. Доволен, как слон :laugh2:. Осталось написать софт для планшета, который будует обрабатывать все команды с teensy. Уже есть наработки.

s.m.
22.12.2013, 01:43
Заказал себе Teensy 3. Уже получил. Намного удобнее, чем IOIO. Еще был у меня bluetooth модуль HC-05. Соединил эти два модуля за 15 минут без проблем. Все работает - команды с пульта принимаются и передаются по bluetooth на планшет. Доволен, как слон :laugh2:. Осталось написать софт для планшета, который будует обрабатывать все команды с teensy. Уже есть наработки.
Уже проходил это 2 года назад. Лучше всего подключаться через usb-com на pl2303 или ft232
С одной стороны будет Ардуина или что-то там ардуиноподобное, а с другой - обычный ком-порт, но в отличие от блютуза 100 процентно надёжный. Никаких спаривания и прочей фигни. Просто указал номер порта и скорость один раз в настройках и все.
Со стороны кода в андроиде блютуз и ком-порт выглядят идентично, если использовать амарино.

ifynk
22.12.2013, 13:12
Я тоже так думал, но у меня на планшете какой-то глючный USB. Он просто отваливается (не реагирует ни на флешки, ни на другие устройства. Питание не подается.) непонятно по каким причинам и нужно передергивать OTG шнурок.

ifynk
25.12.2013, 18:07
На данный момент добился стабильной связи между планшетом и teensy. IR опробован в рабочих условиях и показал хорошую работу. Дальше буду расширять софт. На данный момент хочу сделать регулировку громкости на магнитоле через IR, но проблема в том, что магнитола не поддерживает IR пульты, но есть вход w/r для подключения проводного пульта. Сам пульт очень простой и при нажатии на кнопку просто устанавливает определенное сопротивление между двумя проводами. Вот схема http://www.jvde.net/pioneer_wired_remote/pioneer_wired_remote.htm.

Мне нужно, чтоб teensy прикидывалась этим пультом. Подскажите, как такое реализовать с помощью arduino/teensy?

s.m.
25.12.2013, 21:17
На данный момент добился стабильной связи между планшетом и teensy. IR опробован в рабочих условиях и показал хорошую работу. Дальше буду расширять софт. На данный момент хочу сделать регулировку громкости на магнитоле через IR, но проблема в том, что магнитола не поддерживает IR пульты, но есть вход w/r для подключения проводного пульта. Сам пульт очень простой и при нажатии на кнопку просто устанавливает определенное сопротивление между двумя проводами. Вот схема http://www.jvde.net/pioneer_wired_remote/pioneer_wired_remote.htm.

Мне нужно, чтоб teensy прикидывалась этим пультом. Подскажите, как такое реализовать с помощью arduino/teensy?

Легко. Вам нужно просто получить одно из напряжений, соответствующее нужной кнопке.

Есть 2 подхода - тупой и посложнее.
тупой - соорудить цап из любых выходов цифровых + матрица резисторов как в пульте. меняя 0-1 на выходе - нажатие-отпускание кнопки. Второй способ тоже цап, но с помощью шим. берется любая нога с шим, ставится интегратор (rc-цепочка), на выходе постоянка, меняя заполнение шим (либа есть в ардуине) можно добится напряжения, которое соответствует нужной кнопке. Эти напряжения нужно или вымерять, если пульт есть, или просто методом перебора заполнения методом тыка подобрать.

awtoap
25.12.2013, 21:44
Можно попробовать цифровой потенциометр типа MCP41010

ifynk
25.12.2013, 21:54
Легко. Вам нужно просто получить одно из напряжений, соответствующее нужной кнопке.

Есть 2 подхода - тупой и посложнее.
тупой - соорудить цап из любых выходов цифровых + матрица резисторов как в пульте. меняя 0-1 на выходе - нажатие-отпускание кнопки. Второй способ тоже цап, но с помощью шим. берется любая нога с шим, ставится интегратор (rc-цепочка), на выходе постоянка, меняя заполнение шим (либа есть в ардуине) можно добится напряжения, которое соответствует нужной кнопке. Эти напряжения нужно или вымерять, если пульт есть, или просто методом перебора заполнения методом тыка подобрать.

Я думал проще будет ) А где можно посмотреть реализацию обоих способов? Или не могли бы вы набросать схемку?

ifynk
25.12.2013, 21:57
Можно попробовать цифровой потенциометр типа MCP41010

Тоже вариант. Спасибо.

lti1
25.12.2013, 22:02
Если нужно только громкость регулировать, и есть два свободных цифровых выхода, можно использовать два оптрона и резистора.

ifynk
25.12.2013, 22:08
Если нужно только громкость регулировать, и есть два свободных цифровых выхода, можно использовать два оптрона и резистора.

Цифровых пока много. Можно схемку?

s.m.
25.12.2013, 22:09
Я думал проще будет ) А где можно посмотреть реализацию обоих способов? Или не могли бы вы набросать схемку?

куда уж проще

раз (http://robocraft.ru/blog/2911.html)

два (http://arduino-info.wikispaces.com/Analog-Output)

lti1
25.12.2013, 22:20
Цифровых пока много. Можно схемку?
У меня вот так. Можно R4 заменить перемычкой, тогда R5 - 20 кОм, а R6 - 15 кОм

ifynk
25.12.2013, 22:44
У меня вот так. Можно R4 заменить перемычкой, тогда R5 - 20 кОм, а R6 - 15 кОм

Спасибо. Буду разбираться.

ifynk
25.12.2013, 23:45
Второй способ тоже цап, но с помощью шим. берется любая нога с шим, ставится интегратор (rc-цепочка), на выходе постоянка, меняя заполнение шим (либа есть в ардуине) можно добится напряжения, которое соответствует нужной кнопке..

это, случайно, не writeAnalog в арудинке?

ifynk
26.12.2013, 17:07
Второй способ тоже цап, но с помощью шим. берется любая нога с шим, ставится интегратор (rc-цепочка), на выходе постоянка, меняя заполнение шим (либа есть в ардуине) можно добится напряжения, которое соответствует нужной кнопке.

Мне вот второй способ больше понравился. Как я понял, то мне нужно взять любую ногу с PWM. Пустить ее через RC цепочку и на выходе получу напряжение от 0 до 3,3в (teensy3), в зависимости от того, какое значение я пошлю через writeAnalog. Или я не правильно разобрался? Если правильно, то что мне делать теперь с этим напряжением :dntknw: ? Как сделать нужное сопротивление?

ЗЫ: сильно не пинайте, я не электрик )

s.m.
27.12.2013, 01:28
Мне вот второй способ больше понравился. Как я понял, то мне нужно взять любую ногу с PWM. Пустить ее через RC цепочку и на выходе получу напряжение от 0 до 3,3в (teensy3), в зависимости от того, какое значение я пошлю через writeAnalog. Или я не правильно разобрался? Если правильно, то что мне делать теперь с этим напряжением :dntknw: ? Как сделать нужное сопротивление?

ЗЫ: сильно не пинайте, я не электрик )

arduino.cc/en/Tutorial/PWM


У вас в магнитоле вход под кнопки - это как переменный резистор. Его верхний вывод подключен где-то к питанию магнитолы. Движок -это ваш вход, нижний вывод подключен к земле.
Когда нажимаете резистивные кнопки то как бы дергаете этот резистор туда-сюда
. поэтому перед тем как подключать туда выход ардуины неплохо поменять напряжение на этом входе, когда туда ничего не подключено, чтобы ненароком не сжечь ардуину обратным током. Если там не более напряжения питания ардуины, то можно безопасно подключить выход pwm через резистор и конденсатор между входом кнопок и землёй. Если там больше, чем питание, нужно городить дополнительный транзистор аналогично схеме радио или любой из схем по управлению оборотами комповых кулеров от микропроцессора.
Потом, подавая на pwm выход с помощью analogwrite от 0 до 255 можно найти цифру соответствующую нужной кнопке.

ifynk
27.12.2013, 12:42
Если там не более напряжения питания ардуины, то можно безопасно подключить выход pwm через резистор и конденсатор между входом кнопок и землёй. Если там больше, чем питание, нужно городить дополнительный транзистор аналогично схеме радио или любой из схем по управлению оборотами комповых кулеров от микропроцессора.


Вот в том и прикол, что по схеме, приведенной выше, написано +5в, а у меня teensy3 (3.3в). Но я на выходных еще померяю точно напряжение. Спасибо за подсказки.

lti1
27.12.2013, 23:34
Вроде как по схеме Pioneer на входе Wired remote не больше 3.3 вольта.
Схема (https://www.dropbox.com/s/645jztejuo9nqru/pioneer_avh-p3100dvd_p3150dvd_sm.pdf) 128 страница.
Можно попробовать по калькулятору делителя напряжения посчитать напряжение
15 кОм (http://cxem.net/calc/divider_calc.php?u1=3.3&r1=10000&r2=16000&type=1) volume up +
http://cxem.net/calc_img/divcalc/612c3d50f9d70bda38488064651fefa1.png
20 кОм (http://cxem.net/calc/divider_calc.php?u1=3.3&r1=10000&r2=21000&type=1) volume down +
http://cxem.net/calc_img/divcalc/4bda6543b74a9a493e0a5a8d8dca9662.png

ifynk
28.12.2013, 20:55
Замерял напряжение на свободных концах входа для подключения проводного пульта - показало 5.20V. При подключении резистора на 1кОм, падало до 5.10V. Я так понял, что 3.3V от моей teensy будет недостаточно для имитации некоторых кнопок. Или нет? Никак не могу сложить всю схему.

ifynk
03.01.2014, 21:06
Всех с прошедшим НГ. В общем решил использовать цифровой потенциометр для имитации пульта. Теперь еще есть вопросы. У меня есть 3G-WiFi модем MiFi 2200. Он питается от батареи 3.7V. Так как у меня питание зависит от магнитолы (при включении магнитолы влючается NSD и включается teensy и планшет), то я хочу, чтоб еще и модем включался/выключался при включении/выключении магнитолы. Подскажите как это сделать? На батарее 4 контакта. Достаточно ли будет просто подать ~4.0V на контакты? Плюс нужно как-то заставить его автоматически включатся. Где можно почитать? Спасибо.

lti1
04.01.2014, 00:47
В общем решил использовать цифровой потенциометр для имитации пульта.
А можно поподробнее?
Может вместо цифрового потенциометра использовать mosfet (http://people.overclockers.ru/Alexx/1781/Mikro-likbez_po_elektronike._Chast_2.) и ШИМ.

ifynk
05.01.2014, 00:04
А можно поподробнее?
Может вместо цифрового потенциометра использовать mosfet (http://people.overclockers.ru/Alexx/1781/Mikro-likbez_po_elektronike._Chast_2.) и ШИМ.

Да я и сам пока толком не знаю. Страницей выше предлагали использовать его как вариант (http://pccar.ru/showpost.php?p=281673&postcount=21). Я хотел сначала использовать ШИМ, но моих познаний маловато, чтобы самому реализвать. За информацию по mosfet спасибо, буду разбираться дальше.

opium5
05.01.2014, 05:02
Интересно все получается.

ifynk
08.01.2014, 13:50
Все-таки сделаю на оптронах, как посоветовал lti1. Выбор поменялся из-за того, что у меня в городе не нашлось цифрового потенциометра, а так как мне нужно только громкость регулировать, то два пина занять не накладно.

На данный момент тестирую свой софт в рабочем режиме. Софт представляет собой приложение с 4 вкладками:
1 - Основное (здесь пока ничего нет)
2 - Audio Player. Здесь просто отображается название текущего трека. Немного позже добавлю кнопки play/pause и prev/next.
3 - Stream Radio. Здесь выводится список выбранных радиостанций из di.fm (можно добавлять любые ссылки в принципе). Также есть кнопка play/stop
4 - OBD. Пока пусто.

Сам интерфейс особо не важен, так как все работает в фоне через сервис. Сервис отвечает за принятие команд с teensy (пока-что это в основном команды с IR пульта) по BT и в зависимости от выбранного источника (Audio Player/Stream Radio), выполняет нужное действие. По умолчанию активирован источник AP и при нажатии кнопок на пульте, я могу управлять воспроизведением музыки из PowerAmp через его api. При нажатии на пульте кнопки Source, источник меняется на SR и включается воспроизведение либо первой станции по списку, либо последней выбранной. При принятии команд с пульта уже идет управление станциями. Если снова нажать Source, то активируется AP и запустится музыка. При смене источника, если приложение открыто, активируется соответсвующая вкладка.

Дальше хочу избавиться от tasker, и задачи, которые он сейчас выполняет, перенести в свой сервис.

s.m.
08.01.2014, 17:16
Все-таки сделаю на оптронах, как посоветовал lti1. Выбор поменялся из-за того, что у меня в городе не нашлось цифрового потенциометра, а так как мне нужно только громкость регулировать, то два пина занять не накладно.

На данный момент тестирую свой софт в рабочем режиме. Софт представляет собой приложение с 4 вкладками:
1 - Основное (здесь пока ничего нет)
2 - Audio Player. Здесь просто отображается название текущего трека. Немного позже добавлю кнопки play/pause и prev/next.
3 - Stream Radio. Здесь выводится список выбранных радиостанций из di.fm (можно добавлять любые ссылки в принципе). Также есть кнопка play/stop
4 - OBD. Пока пусто.

Сам интерфейс особо не важен, так как все работает в фоне через сервис. Сервис отвечает за принятие команд с teensy (пока-что это в основном команды с IR пульта) по BT и в зависимости от выбранного источника (Audio Player/Stream Radio), выполняет нужное действие. По умолчанию активирован источник AP и при нажатии кнопок на пульте, я могу управлять воспроизведением музыки из PowerAmp через его api. При нажатии на пульте кнопки Source, источник меняется на SR и включается воспроизведение либо первой станции по списку, либо последней выбранной. При принятии команд с пульта уже идет управление станциями. Если снова нажать Source, то активируется AP и запустится музыка. При смене источника, если приложение открыто, активируется соответсвующая вкладка.

Дальше хочу избавиться от tasker, и задачи, которые он сейчас выполняет, перенести в свой сервис.

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

А что делает такого таскер?
Если будет постоянно висящий сервис (а с оболочкой именно так и есть), то нафиг таскер не нужен, все можно замутить в самом сервисе.
А чем не нравится висящая панелька, как у меня? Много места не занимает, висит себе поверх любой проги, выводить туда можно что угодно.

ifynk
08.01.2014, 17:24
А что делает такого таскер?
Если будет постоянно висящий сервис (а с оболочкой именно так и есть), то нафиг таскер не нужен, все можно замутить в самом сервисе.


Таскер только отслеживает появление/пропадание зарядки. Раньше PowerAmp запускался и останавливался по питанию и все. А сейчас он просто по времени подсветку ставит. Все это я могу и сам реализовать.

ifynk
08.01.2014, 17:27
А чем не нравится висящая панелька, как у меня? Много места не занимает, висит себе поверх любой проги, выводить туда можно что угодно.

Ну основное то, что я хочу подучить пограммирование под android. Потом у меня свой протокол обмена данными между приложением и teensy. Да и все это через BT, а не через порт работает. Также мне сам интерфейс и не нужен в основном, проще с пульта управлять часто используемыми операциями. Все остальное android и так предоставляет.

ifynk
08.01.2014, 17:30
интересно, сам думал добавить интернет-радио себе в оболочку, руки не дошли пока...
В основном душит жаба платить за интернет, а также сомнения, как добавить нужный поток в удобном виде (и где взять его так, чтобы не спалили через ределю), фиксированную привязку к чужому сервису не хочу (у них семь пятниц на неделе). Много гемора в итоге... С обычным радио намного проще - включил и работает.


Тут мне проще. Я эфирное радио вообще не слушаю. Забил фиксированный список самых любимых станций в приложение и все. Интернет по $0.13 в день не особо по карману бъет.

s.m.
08.01.2014, 18:38
Забил фиксированный список самых любимых станций в приложение и все.

вот с этого места поподробнее плз...
как получить ссылку на радиостанцию, чем ее потом играть и т.д.
Там я знаю идет поток потом MP3 или AAC, но как прямую ссылку на поток получить, чтобы сервис вещания не обиделся потом?

ifynk
08.01.2014, 18:49
Ну я на сайте di.fm выбрал нужную станцию. Для нее указал нужный мне формат - mp3 и тип плеера winamp. В результате я получил плейлист в котором указаны ссылки на нужный мне канал (например http://pub1.di.fm:80/di_darkdnb). Выбрал любую ссылку и прописал ее в коде. Вот и все. А играю поток стандартным mediaplayer. Если честно, то я не совсем понял суть вашей проблемы.

ifynk
08.01.2014, 18:52
Там я знаю идет поток потом MP3 или AAC, но как прямую ссылку на поток получить, чтобы сервис вещания не обиделся потом?

Не понял смысл фразы "чтобы сервис вещания не обиделся потом" :dntknw:

s.m.
08.01.2014, 18:58
Не понял смысл фразы "чтобы сервис вещания не обиделся потом" :dntknw:

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

ifynk
08.01.2014, 19:01
имелось в виду всякие защиты от использования потока, если они есть.
и еще клево иметь метаинфу, что играет в данный момент.

Все равно не пойму. Откуда возьмется защита? Или вам нужен канал, который только платный, а хочеться просто так?

Метаданные добавлю тоже. Уже пытался их получить, но сразу не завелось. Поищу в инете еще решения, но пока забил на это.

kristal0211
08.01.2014, 21:56
ifynk, вот какое-то решение, но не пробовал работу.
http://anton.logvinenko.name/ru/blog/kak-poluchit-nazvanie-pesni-iz-audio-potoka-c-pomoschyu-python.html
#!/usr/bin/env python
import urllib2
stream_url = 'http://pub1.di.fm/di_classictrance'
request = urllib2.Request(stream_url)
try:
request.add_header('Icy-MetaData', 1)
response = urllib2.urlopen(request)
icy_metaint_header = response.headers.get('icy-metaint')
if icy_metaint_header is not None:
metaint = int(icy_metaint_header)
read_buffer = metaint+255
content = response.read(read_buffer)
title = content[metaint:].split("'")[1]
print title
except:
print 'Error'

s.m.
08.01.2014, 23:51
ifynk, вот какое-то решение, но не пробовал работу.
http://anton.logvinenko.name/ru/blog/kak-poluchit-nazvanie-pesni-iz-audio-potoka-c-pomoschyu-python.html
#!/usr/bin/env python
import urllib2
stream_url = 'http://pub1.di.fm/di_classictrance'
request = urllib2.Request(stream_url)
try:
request.add_header('Icy-MetaData', 1)
response = urllib2.urlopen(request)
icy_metaint_header = response.headers.get('icy-metaint')
if icy_metaint_header is not None:
metaint = int(icy_metaint_header)
read_buffer = metaint+255
content = response.read(read_buffer)
title = content[metaint:].split("'")[1]


print title
except:
print 'Error'

Нафига челу питон, если он на жаве пишет. Там тоже ничего сложного - аж 2способа гугл предлагает для сетевых запросов. Но это оффтоп здесь

kristal0211
10.01.2014, 09:11
Долго искал чем же стримить DI.fm станции. И понял что лучше всех с этим справляется Xiialive pro. Интерфейс хорош, прост в использовании да и процесс добавления станций легок. Тупо вводишь URL и все. Он сам подтягивает название станции, жанр и самое главное во время воспроизведения выводятся автоматом данные о текущем исполнителе. И это без каких-либо шаманств.

ifynk
10.01.2014, 13:21
Долго искал чем же стримить DI.fm станции. И понял что лучше всех с этим справляется Xiialive pro. Интерфейс хорош, прост в использовании да и процесс добавления станций легок. Тупо вводишь URL и все. Он сам подтягивает название станции, жанр и самое главное во время воспроизведения выводятся автоматом данные о текущем исполнителе. И это без каких-либо шаманств.

Проблемы в выборе софта и небыло никогда. Меня полностью устраивало родное приложение для di.fm. Проблема была в том, что сторонними приложениями я не могу управлять через свой сервис.

s.m.
10.01.2014, 13:27
Проблема была в том, что сторонними приложениями я не могу управлять через свой сервис.

Даже через посылку интентов? У меня та же проблема - сторонние проги не имеют нормального апи для управления. Вот и думаю, не замутить ли просто импорт плейлиста в радио, тогда радио будет пофиг, что играть, хардварное или онлайн-радио, только непонятки с мета-инфой, как ее получение унифицировать.
Зы, может замутить отдельную ветку про прослушивание онлайн-радио под Андроидом: кто что чем слушает? Влом как-то лопатить интернет для этого.

kristal0211
10.01.2014, 13:59
Даже через посылку интентов? У меня та же проблема - сторонние проги не имеют нормального апи для управления. Вот и думаю, не замутить ли просто импорт плейлиста в радио, тогда радио будет пофиг, что играть, хардварное или онлайн-радио, только непонятки с мета-инфой, как ее получение унифицировать.
Зы, может замутить отдельную ветку про прослушивание онлайн-радио под Андроидом: кто что чем слушает? Влом как-то лопатить интернет для этого.

хорошая идея.

ifynk
10.01.2014, 14:43
Даже через посылку интентов? У меня та же проблема - сторонние проги не имеют нормального апи для управления.

Даже через интенты не работает. Там прикол в том, что если приложение не предполагает прием интентов от сторонних приложений, то добраться к ним не получится из-за политики безопасности android. В poweramp есть возможность принимать интенты от сторонних приложений, а вот для приложения di.fm такое не проканало, хотя у меня был исходный код этого приложения и я знал, через какие интенты активити общается с сервисом.

ifynk
10.01.2014, 14:54
только непонятки с мета-инфой, как ее получение унифицировать.

Насколько я разобрался, то есть два вида медиа метаданных - IceCast и ShotCast. Вроди как android должен понимать icecast, но через стандартный metadataretriiver у меня не получлось что либо получить. Есть в инете уже готовая библиотека, которая умеет работать с этими типами метаданных, но для меня она показалась сильно громоздкой. Скорее всего напишу свою простую библиотеку, которая будет парсить данные из icecast.

kristal0211
10.01.2014, 14:58
Может я немного не понял, а чего вы добивайтесь? чем управлять? В чем проблема выбрать список избранных станций, ввести в тот-же Xiialive pro. Из под него читается вся инфа о текущей станции. А если хочется управления через тот же рабочий стол с выводом той же инфы. То наверное можно данные с помощью catloga какого-нибудь слизать и реализовать с помощью таскера.
Вот это по подробней можно расшифровать.
Проблема была в том, что сторонними приложениями я не могу управлять через свой сервис.

ifynk
10.01.2014, 16:23
Может я немного не понял, а чего вы добивайтесь? чем управлять? В чем проблема выбрать список избранных станций, ввести в тот-же Xiialive pro. Из под него читается вся инфа о текущей станции. А если хочется управления через тот же рабочий стол с выводом той же инфы. То наверное можно данные с помощью catloga какого-нибудь слизать и реализовать с помощью таскера.
Вот это по подробней можно расшифровать.

Нужно внимательней посты читать. Мне нужна возможность управлять аудио и радио через IR пульт. А вообще я хочу сделать так, чтобы все работало именно так, как я хочу, а этого можно добиться только используя свой софт. Написать свой софт для меня не проблема, так почему бы и нет?

Кстати Xiialive тоже имеет свой API и должна быть возможность управлять им через интенты (это вдруг кому нужно будет).

s.m.
10.01.2014, 18:43
Насколько я разобрался, то есть два вида медиа метаданных - IceCast и ShotCast. Вроди как android должен понимать icecast, но через стандартный metadataretriiver у меня не получлось что либо получить. Есть в инете уже готовая библиотека, которая умеет работать с этими типами метаданных, но для меня она показалась сильно громоздкой. Скорее всего напишу свою простую библиотеку, которая будет парсить данные из icecast.

можно в личку пару ссылок, как это сделать...

ifynk
11.01.2014, 19:08
Добавил в радио функционал по получению мета данных. Оказалось все не сложно. В первый пост выложил ссылку на исходники оболочки, может кому поможет чем-то.

lti1
11.01.2014, 20:04
ifynk, по поводу регулировки громкости pioneer'ом, у Вас рулевой пульт универсальный (у меня такой же) в него можно прописать коды кнопок громкости от пульта pioneer и не заморачиваться с Wired remote, если конечно Ваша магнитола работает с ик пультом.


Если магнитола не работает с ик пультом, то её наверняка можно доработать, ссылка 1 (http://www.drive2.ru/cars/volvo/940/940/alex-bt/journal/1460086/), ссылка 2 (http://magnitola.org/pioneer/176940-pioneer-mvh-150ub-obsuzhdenie-3.html).

s.m.
11.01.2014, 20:18
Добавил в радио функционал по получению мета данных. Оказалось все не сложно. В первый пост выложил ссылку на исходники оболочки, может кому поможет чем-то.
спс за исходники, но структура папок доставляет...
Картинки внутри папки src это нечто. Ну если Android studio так делает...
Это не в упрек, просто диковато выглядит после эклипса.

Как раз задумался о добавлении интернет-радио к себе в оболочку, это сильно ускорит процесс, хотя я уже и так все придумал. У меня радио будет универсальным, то бишь в кучу фм и сетевые станции, хочешь такие слушай, хочешь такие. По-моему, это удобно с точки зрения листания станций кнопками туда-сюда. Хоть в сети есть и локальные фм-станции, но в отсуствии тырнета можно будет послушать фм.

А вот и МТС у нас подоспел со своими недорогими расценками на интернет для радио и клонированием симок... Сорри за оффтоп.


Посмотрел немного код, позволю себе некоторые мелкие советы:

1. Избегайте, плз, "magic numbers", то есть аццких констант в коде типа 1784778242, такие вещи надо выносить.
2. Ну и удобно использовать шаблоны типа фабрика, чтобы не было кода, как здесь

if (st == AM_SOURCE_AUDIOPLAYER) {
mPowerAmp.stop();
}
else {
mStreamRadio.stop();
}

То есть делаете 2 класса с одинаковым интерфейсом.
А потом при инициализации обьекта просто выбираете нужный класс и дергаете методы унифицированно.
Это будет офигенно просто потом добавить 3,4,5 источник или еще один плеер (ну мало ли), не надо будет переколбашивать кучу написанного кода и, что самое геморное, регрессно тестить ВЕСЬ предыдущий код.

3. Все строковые константы в Андроиде принято держать в strings.xml, тогда локализация приложения будет заключаться только в добавлении файла с новым языком.

ifynk
11.01.2014, 20:50
Спасибо за советы. Вы все правильно говорите, но это код на быструю руку и сейчас стоит цель сделать, чтоб работало.

1. Не совсем понял по замечанию, куда и что выносить? В константы?
2. Сам стараюсь так делать, но пока рановато все выносить в абстрактные классы, так как еще не весь функционал утвержден. Еще на старом проекте iShell под Windows на Delphi так организовывал Music/Video Player.
3. Тоже перенесу все со временем.

Кстати структура папок таки проделки Android Studio.

s.m.
11.01.2014, 21:03
Не совсем понял по замечанию, куда и что выносить? В константы?
да, в константы, так код более читаем и поддерживаем.

3. Тоже перенесу все со временем.
лучше сразу делать, войдет в привычку, будет легче.

ifynk
13.01.2014, 12:28
ifynk, по поводу регулировки громкости pioneer'ом, у Вас рулевой пульт универсальный (у меня такой же) в него можно прописать коды кнопок громкости от пульта pioneer и не заморачиваться с Wired remote, если конечно Ваша магнитола работает с ик пультом.


Если магнитола не работает с ик пультом, то её наверняка можно доработать, ссылка 1 (http://www.drive2.ru/cars/volvo/940/940/alex-bt/journal/1460086/), ссылка 2 (http://magnitola.org/pioneer/176940-pioneer-mvh-150ub-obsuzhdenie-3.html).

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

lti1
13.01.2014, 20:19
Просто прикол в том, что магнитола находится высоко от пульта и вариант через проводной пульта мне кажется более производительным, так как свой ИК приемник я могу расположить как угодно.
Пульт все равно работает на отражение от водителя, и по моим ощущениям такой как у Вас гораздо мощнее чем родной pioneer'овский.
ИМХО просто через Teensy и Wired remote как то сложно получается, зачем городить что-то дополнительно если магнитола сама умеет обрабатывать ИК.

ifynk
19.01.2014, 18:34
Всем привет. Обращаюсь за помощью к знатокам. Расковырял свой 3G-WiFi модем. В батарее 4 контакта. На каждом разное напряжение. Причем плюсовой только 1, а 3 остальные минусовые. Подал питание на крайние контакты - модуль запустился, WIFI ловит, но к инету не подключается. Возможно сам 3G модуль питается отдельно от WiFi модуля. Эксперементировать дальше не стал, так как не хочется спалить модем. Как поступить в таком случае? Можно ли тупо замкнуть все минусовые контакты между собой?

AndyWasHere
20.01.2014, 08:31
Там термодатчик на каких-то контактах висит. Контроль температуры при зарядке

ifynk
20.01.2014, 12:20
А как выявить на каком контакте висит датчик?

ifynk
28.01.2014, 12:23
Победил я батарею для 3G модема. Здесь на форуме посоветовали раскурочить батарею и использовать родной контроллер. Просто подать питание вместо литиевого элемента не получилось, точнее получилось, но после того, как пропадает питание, контроллер повторно не запускался. Подал питание на крайние контакты, при этом контроллер оставил припаянным ко всем 4 контактам. Также закоротил кнопку включения. Теперь при подачи питания модем запускается и раздает инет по WiFi. То, что мне и было нужно.

s.m.
28.01.2014, 13:12
Подал питание на крайние контакты, при этом контроллер оставил припаянным ко всем 4 контактам.

Надеюсь, не более 4.2В? Или батарейку все же скинули?
Но, ИМХО, вариант подключения конечно же неправильный, но если ничего при этом не сдохло - почему бы и нет.

ifynk
28.01.2014, 13:22
Надеюсь, не более 4.2В? Или батарейку все же скинули?
Но, ИМХО, вариант подключения конечно же неправильный, но если ничего при этом не сдохло - почему бы и нет.

Батарейку выкинул совсем. Питание подаю 4.7В, если меньше, то показывает, что батарея разряжена. Два дня катаюсь, пока полет нормальный. Если сдохнет, то куплю просто USB 3G-WIFI и все проблемы отпадут сами собой )

ifynk
28.01.2014, 13:25
Но, ИМХО, вариант подключения конечно же неправильный, но если ничего при этом не сдохло - почему бы и нет.

Кстати, а как правильно? Я думаю, что контроллер, после того, как на нем резко пропало питание, думал, что ушла батарейка и больше не хотел включаться. Даже когда вернул батарейку обратно. Запустить удалось только подачей питания на крайние контакты. Если после этого снова подключить питание вместо литиевого элемента (тут я 4.3В подавал), то он снова запускался до первого отключения.

ifynk
28.01.2014, 13:58
Может кто сталкивался? При запуске своего приложения, если включено питание, я программно перевожу планшет в Carmode. При этом пропадают иконки с трея - иконка отладки, приложения, иконка carmode. Если же запускать приложение и не делать переход в carmode, то тогда все нормально работает. Ошибок никаких не выдает.

ifynk
13.04.2014, 00:10
Всем привет. Немного переделал свою оболочку. Ушел от использования PowerAmp в пользу библиотеки basslib. На вкладке плеера теперь есть огромный слайдер, в который легко попадать для перемотки трека.

В планах:
1. Перевести Stream Radio на basslib.
2. Более грамотно реализовать базу треков. Сейчас просто берутся файлы из папки.
3. Добавить запоминание текущего трека и позиции.
4. Перевести AudioManager на интерфейсы )

s.m.
13.04.2014, 01:16
Перевести Stream Radio на basslib.
А в чем смысл, у меня прекрасно работает на стандартном медиаплеере из SDK?
А для MP3 не вижу смысла в каких супер мега плеерах.
Другое дело, что МТС у нас работает отвратительно и пришлось сделать автоматический реконнект при потере потока более 30 секунд.

Более грамотно реализовать базу треков. Сейчас просто берутся файлы из папки.


Плейлисты?

Добавить запоминание текущего трека и позиции.

Для этого нужно иметь где-то в базе текущий плейлист

Перевести AudioManager на интерфейсы
Что это значит?

ifynk
13.04.2014, 12:05
Радио у меня тоже работает отлично на стандартном mp. Тут для меня скорее смысл в том, чтоб все превести на одну платформу. Плюс практика.

Скорее не плейлисты, а определенной структуры список, который будет один раз формироваться по указанному каталогу, а потом все данные из него будут читаться. Я не храню много музыки постоянно на планшете и там просто одна папка с mp3'шками.

Для запоминания трека не обязтаельно плейлист, я думаю. Это будет зависеть от реализации самой библиотеки.

Интерфейсы. Ну это же то, что вы мне посоветовали сделать для плеера и радио в плане кода - фабрика классов )

ifynk
07.05.2014, 18:42
Доделал таки управление громкостью магнитолы. Сделал самым простым способом - с помощью оптронов. На планшете установил максимальный уровень громкости. Правда пришлось пересобрать framework-res.apk из-за того, что постоянно выскакивало предупреждение о большом уровне громкости и если не нажмешь OK, то дальше громкость не поднималась.

Оболочку переделал немного.