[Перевод] О передаче данных через аудиоразъём
Одним из важных интерфейсов на мобильных устройствах и планшетных компьютерах является разъём для наушников/микрофона. Однако не стоит думать, что он предназначен только для колонок-наушников-микрофона — его можно использовать в том числе для передачи данных. Об этом сегодня и поговорим.Альтернативные способы использования звукового разъёма для подключения сторонних устройств постоянно обновляются. Периферийные устройства, например, глюкометр iHealth Lab (определяющий уровень сахара в крови), Irdroid — ИК-пульт для дистанционного управления телевизором, приставками и звуковыми компонентами и Flojack — устройство чтения NFC (организующее радиосвязь между находящимися рядом мобильными устройствами) — всё это стало возможным благодаря наличию звукового разъёма.
Поскольку рынок мобильных и периферийных устройств имеет большое число потенциальных клиентов, я считаю, что разъём для наушников будет основным портом для передачи информации в скором времени. В этой статье я подробнее расскажу о данной функции.
ВведениеИнтерфейс звукового разъёма имеет два стандарта: OMTP и CTIA. OMTP — это международный стандарт; ATIS — Американский стандарт, используемый в таких устройствах как Apple iPhone и iPad. Они отличаются V-микрофоном, а также расположением заземления; отличия показаны ниже: OMTP и CTIA
Как передаются данные Когда мы отправляем 0×00FF данных, первый шаг — это преобразование цифровых данных в аналоговые. Поэтому нужно модулировать значение данных. Как правило, для этого используется синусоидальный носитель волн для аналогового сигнала.FSK-модуляция сигнала
Второй шаг в устройствах Android — обращение к audioTrack API — функции, используемой для проигрывания. Следующий код отправляет данные в буфер, используя для этого функцию audioTrack.
public void send (byte[] bytes_pkg) { int bufsize = AudioTrack.getMinBufferSize (8000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT); AudioTrack trackplayer = new AudioTrack (AudioManager.STREAM_MUSIC, 8000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, bufsize, AudioTrack.MODE_STREAM); trackplayer.play (); trackplayer.write (bytes_pkg, 0, bytes_pkg.length); } Получение данных В приёмнике необходимо перевести аналоговый сигнал в значение данных, демодулировать сигнал, чтобы удалить входящий сигнал, и декодировать данные в соответствии с протоколом. Протокол может быть в формате общедоступных данных или частных.Демодуляция сигнала
В системах с ОС Android мы используем функцию audioRecord API записи звука:
public void receive (){ int minBufferSize = AudioRecord.getMinBufferSize (AUDIO_SAMPLE_FREQ, 2, AudioFormat.ENCODING_PCM_16BIT); AudioRecord ar = new AudioRecord (MediaRecorder.AudioSource.MIC, AUDIO_SAMPLE_FREQ, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, minBufferSize); ar.startRecording (); } Как извлечь энергию звуковых сигналов Очевидно, что для накопления на цепи питания для периферийных устройств требуется определённая мощность. Например, L-канал передаёт данные. R-канал отправляет устойчивый квадрат или синус сигнала. Эти сигналы могут быть преобразованы MCU (блок контроллеров Micro) и несколькими датчиками.История успеха: ИК периферийные устройства Androlirc — это проект на базе Github. Его функции можно использовать для отправки в приложение инфракрасного интерфейса звукового разъёма. Можно изучить этот проект для понимания процесса обмена данными через звуковой разъём. Androlirc использует LIRC-библиотеку для создания записи в буфере данных. Данная библиотека является ИК-библиотекой под Linux, которая поддерживает несколько типов интерфейсов, например USB, звуковой разъём и т.д. Androlirc позволяет использовать библиотеку LIRC для накопления данных. На рынке вы можете найти множество инфракрасных кодирующих типов, таких как протоколы RC-5 и RC-6. В приведённом примере мы используем протокол RC-5 для управления телевизором. Во-первых, мы должны модулировать значение данных с использованием 38k синусоидальныого сигнала, чтобы генерировать данные буфера. Затем мы используем Android audio API для воспроизведения звука из буфера данных. В то же время мы используем один из двух каналов для воспроизведения синуса или квадратного сигнала питания на оборудовании периферийных устройств.История успеха: звуковой разъём для разработчиков Новое решение от NXP Semiconductors, Quick-Jack — устройство на базе прототипа под названием Hijack. Hijack — это проект студентов университета Мичиган. Платформа Hijack позволяет создавать новый класс компактных, дешёвых, ориентированных на телефон датчиков периферийных устройств с поддержкой операций plug-and-play. Можно использовать платы NXP Quick-Jack для создания прототипа.Ниже показан смартфон, отображающий температуру внутри помещения с помощью температурного датчика на базе аудиоразъёма. Через него же осуществляется управление светодиодным индикатором периферийных устройств с помощью приложения на базе ОС Android.
Значение температуры, полученное с помощью Quick-Jack; через него же осуществляется управление светодиодным индикатором
Сводная информация Носимые устройства с возможностью подключения периферии всё чаще появляются на потребительском рынке. Звуковой разъём как функция для передачи данных используется ODM-производителями всё активнее. Возможно, в будущем функция передачи данных через этот разъём будет поддерживаться мобильными ОС по умолчанию.Об авторе Лианг Ли получил степень магистра в области изучения сигналов и обработки данных в технологическом университете Changchun. Он пришел в корпорацию Intel в 2013 г. как Android-инженер в китайском подразделении. Сейчас он занимается созданием функций, которые бы позволили Android получить конкурентные преимущества (например, отображение нескольких окон приложений одновременно и прочее).Ссылки по теме