PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Bluetooth (http://pccar.ru/forumdisplay.php?f=191)
-   -   Андройд и BT звонки (http://pccar.ru/showthread.php?t=16703)

Lestat 27.01.2012 08:58

Андройд и BT звонки
 
Полистал соседние темы, возможно пропустил, но насколько я понимаю нормального решения блютусных звонков через андройд нет...

из того что я нагуглил есть реальизция профиля HFP под линукс тут, обсуждают тут, но как это прикрутить без лишнего гемора к андройду не понятно)

Потом есть готовый модуль... например такой:
Цитата:

http://catalog.compel.ru/file/blueto...photo/WT32.png
Версия стандарта Bluetooth: v.2.1+EDR
Интерфейс: UART, PCM, SPDIF, I2S
Встроенная антенна: 1
Напряжение питания: 2.5…4.4 В
Профиль Bluetooth: SPP, DUN, OBEX OPP, HFP v.1.5, A2DP, AVRCP, DID, HID
Тип корпуса: WT32_A_AI
Размер: 23.0x16.0x3.0 мм
Рабочая температура: -40...85 °C

WT32 - Bluetooth-модуль 2-го класса. Особенностью модуля является встроенное ПО iWrap 4 с простым управлением (AT-команды). Голосовые профили A2DP, AVRCP, HFP (v.1.5) позволяют реализовать передачу стереозвука. Встроенный 16-битный стереокодек с аудио-ЦАП -95 дБ. Прямое подключение микрофона и динамика.
на sparkfun.com 89$... у нас вроде как 30$
в терраэлектронике WT32-A-AI4 стоит 937р

Даташит пока не листал, но насколько я понимаю это очень и очень подходящая штука! Ей сможет рулить arduino, который можно подключить к андройду и например давать сигнал что идет звонок чтобы тупо нарисовать номер входящего звонка и имя из контактов если номер такой там есть простейшей программкой...
Такое решение не зависит от самого андройда, даже если он повиснет или вообще сдохнет звонки в машине работать будут... главное чтобы был сигнал вызова и кнопка ответа на руле была подключена к контроллеру, который управляет этим модулем... а также возможно сможет работать a2dp, через который можно гнать музыку с самой мобилы)
При ответе на звонок контроллер может просто переключить линейный вход усилителя машины с наушников андройда на линейный выход этого модуля... хоть простой релюшкой, но лучше бы конечно приглушить андройд... чтобы навигашку было бы слышно)


В качестве планшета я думаю стоит посмотреть на Nook Color ~230$ (на ebay.com с доставкой... топ селлеры ~260$ тоже с доставкой)
Он дороже китайских планшетов, но для него есть кастомная прошивка, которая скорее всего будет поддерживаться, подходящий по размерам экран (почти вписывается в рамку 2DIN), юсб-хост Wi-Fi и вроде как блютус, хотя если WT32 работает так как я думаю блютус в планшете уже не особо и нужен...

Есть еще Amazon Kindle Fire... который тоже очень и очень классный... качественный экран, по размеру чуть меньше размеров 2DIN... прямо под рамку!) Но к сожалению там нет usb-хоста... возможно умельцы когда-нибудь сделают поддержку если чип может работать в режиме хоста, но на данный момент, насколько я знаю, в кастомных прошивках поддержки нет...

Lestat 27.01.2012 10:07

Заказал модуль, нашел доки!)
На сайтике производителя есть раздел с документацией, доступен после регистрации...

помимо даташитов есть примеры и прочие материалы...
на данный момент самые важные Application note:
Hands-Free and Headset profiles
A2DP and AVRCP Profiles
управляется модуль достаточно просто в стиле ATкоманд...

Попробую порулить им через STM32VLDISCOVERY... отладочная плата на основе ARM контроллера STM32 с usb на борту (387р в терраэлектронике)
ARM-микроконтроллеры STM32F. Быстрый старт c STM32-Discovery
STM32F1xx — лечимся от ардуинозависимости вместе

tsynik 27.01.2012 17:01

Устройств с поддержкой HFP/HS профилей достаточно, в том числе и в USB исполнении. Проблема как раз в Андроиде, в котором эти профили работают только в одну сторону. Основной сложностью так же остаётся корректный роутинг и управление аудио звонков в Android на уровне драйверов. Если в планшете уже есть телефон, то там так же есть микрофон и динамик, и проблем нет. Есть готовые устройства с дополнительным аналоговым трактом на выход.

Lestat 27.01.2012 20:03

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

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

Lestat 30.01.2012 01:18

Распишу на всякий случай... чтобы самому потом не забыть)

Простеньким скетчем arduino nano подключил WT32 к виртуальному COM-порту компа... открываем Serial Monitor, ставим порт в 115200 и можно экспериментировать...
Цитата:

int resetpin = 6;

void setup()
{
// не мешаем TX и RX
pinMode(0, INPUT);
pinMode(1, INPUT);

// пин, подключенный к RESET wt32
pinMode(resetpin,OUTPUT);

digitalWrite(resetpin, HIGH);
delay(100);
digitalWrite(resetpin, LOW);
}
void loop()
{
}
Отправил команды в порт...
Цитата:

SET PROFILE HFP ON
SET BT CLASS 200408
SET BT NAME TIIDA_HFP
SET BT AUTH * 1237
RESET
После мобила (тоже, кстати, на андройде) подключилась точно также как к моей тачке!)
При подключении и после модуль спамит всякую инфу:
Цитата:

RING 0 f8:db:7f:0d:51:52 3 HFP
HFP 0 BSRF 103
HFP 0 STATUS "service" 1
HFP 0 STATUS "call" 0
HFP 0 STATUS "callsetup" 0
HFP 0 STATUS "callheld" 0
HFP 0 STATUS "signal" 3
HFP 0 STATUS "roam" 0
HFP 0 STATUS "battchg" 4
HFP 0 READY
HFP 0 NETWORK "Beeline"
HFP 0 STATUS "signal" 4
т.е. при изменении каких-то параметров он отправляет в порт сообщение.

При входящем звонке модуль говорит номер входящий!
HFP 0 CALLERID "+79032...." "" 91
Отправляем ему ANSWER и звонок принимается... REJECT отклоняется
Позвонить на последний номер можно отправив AT+BLDN на произвольный ATD+79032....;

Вобщем штуковиной я очень доволен!
Нужно теперь посмотреть как сделать удобную звонилку в "плншетном андройде"...

Lestat 30.01.2012 16:34

Накидал программку которой можно "позвонить"...
т.е. из стандартной программы с контактами ее можно вызвать как звонилку, как скайп например.
Выдает такую менюшку:
http://img507.imageshack.us/img507/3...1301526121.png
т.е. тут есть телефон, скайп и моя прога третьей строчкой.
При клике на нее появляется окно-пустышка, но в ней есть код который получает вызываемый номер и дальше может передавать его в BT модуль...

насколько я помню нормальное API для USB устройств только в андройде 3.1 (API level 12) и выше, а CyanogenMod 7, которым прошивается Nook Color, вроде бы основан на 2.3.3... но как-то там реализована поддержка юсб устройств, думаю можно что-нибудь придумать)

Lestat 31.01.2012 08:50

Вот, кстати, код для переключалки треков...

Lestat 08.05.2012 14:13

Купил Kindle fire, у него как раз недельку назад допилили поддержку USB Host!
Подключил модуль WT32-A-AI через arduino к планшету, научился с ним общаться!
При подключении к usb появляется /dev/ttyUSB0, через него и ведется общение как с простым файлом... типа такого:
Код:

// в отдельном потоке можно читать все что спамит arduino
BufferedReader reader = new BufferedReader(new FileReader("/dev/ttyUSB0"));
while ((line=reader.readLine()) != null)
    myHandler.post(new Runnable() {
        public void run() { getLine(line); }
    });
======================================
// ну и почти также писать
BufferedWriter writer = new BufferedWriter(new FileWriter(FILE_NAME));
writer.write("INFO");
writer.newLine(); // или руками)
writer.flush();

только права на /dev/ttyUSB0 нужно поставить 666 или выше
Настройка порта через stty
stty -F /dev/ttyUSB0 cs8 115200 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts устанавливает скорость, и прочие параметры при которых WT32-A-AI начинает нормально работать...

Также заказал простенькие модули:
FM-радио 1pcs TEA5767 FM Radio Module
USB <> UART NEW CP2102 USB 2.0 to UART TTL 6PIN Module Serial Converter
IMU с гироскопом, акселерометром 10DOF IMU HMC5883L ITG3205 BMA020 BMP085 sensor module for arduino/MWC
на основе последнего хотелось бы попробовать собрать внешний GPS приемник с dead reckoning (типа того что обсуждали тут на форуме) чтобы получать координаты в тонелях и вообще иметь точные дворовые треки для карт OpenStreetMap

Все девайсы и кнопочки с руля хотелось бы подключить с помощью arduino через USB к планшету, на котором крутится сервис, который управляет ими... на данный момент правда сервис только принимает и отправляет команды WT32-A-AI

Касательно самого андройда и планшета мне кажется там есть все что нужно...
У Kindle Fire всего одна аппаратная кнопка включения/выключения... лучше и не придумать для встраивания! Прошивка с xda андройда 4.0 с USB достаточна стабильна, хотя глюки есть...
Также нашел полезные программки No Lock и Set Orientation

Lestat 16.05.2012 20:56

Пока сам не забыл отмечу один момент...
При исходящем вызове WT32 не спамит в консоль номер вызываемого абонента... узнать его можно отправив на WT32 ат-команду AT+CLCC, в ответ он пишет что-то вроде HFP 0 CLCC 1,0,3,0,0,"8903ххххххх",129
где 8903ххххххх соответственно номер на который мы звоним.

Lestat 17.05.2012 02:00

Когда сажусь в тачку стандартный блютус сразу цепляет мою мобилу...
Мой девайс на андройде не цепляет, а если и цепляет, то только принудительно, когда руками щелкаю на соединение в настройках блютуса... чтобы соединение устанавливалось автоматом нужно отправить девайсу SET CONTROL AUTOCALL 111e 5000 HFP

Все контакты синхронизированы через гугл... т.к. и на телефоне и на планшете что в машине стоит андройд
Но история звонков не синхронизирована, а если и синхронизирована, то может инета и не быть и она разойдется...
Поэтому я долго и старательно листал даташит на этот WT32 чтобы выяснить как загрузить историю звонков через блютус
Для этого есть протокол PBAP, есть даже команда PBAP 04 5 например... получить 5 вызовов из общей истории входящих/исходящих звонков... можно получить отдельно входящие, исходящие, пропущенные и вообще всю книгу...
Но эта команда сделана как-то криво... она при ошибке не выводит сообщение об ошибке, а пишет обычное SYNTAX ERROR
Для того чтобы она заработала нужно сперва выполнить нечто вроде
CALL xx:xx:xx:xx:xx:xx 112f PBAP (где xx:xx:xx:xx:xx:xx BT-адрес вашего телефона, его можно найти в списке подключенных девайсов LIST или в строке "SET BT PAIR ..." в ответе команды SET)
После этого андройд на мобиле запросит подтверждение на доступ к телефонной книге... спрашивает один раз, а не при каждом вызове команды. Ну и если ответ положительный, то команды вида PBAP 04 5 начинают работать и строчат запрошенные контакты в консоль в формате vCard 2.1 по дефолту

Теперь вроде бы все что нужно работает!!! :drink:


Часовой пояс GMT +4, время: 10:25.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot