Про передачу даних через аудіороз'єм

Одним з важливих інтерфейсів для мобільних пристроїв і планшетних комп'ютерах є роз'єм для навушників/мікрофона. Однак не варто думати, що він призначений тільки для колонок-навушників-мікрофона – його можна використовувати в тому числі для передачі даних. Про це сьогодні й поговоримо.



Альтернативні способи використання звукового роз'єми для підключення сторонніх пристроїв постійно оновлюються. Периферійні пристрої, наприклад, глюкометр iHealth Lab (визначає рівень цукру в крові), Irdroid – ІК-пульт для дистанційного керування телевізором, приставками і звуковими компонентами і Flojack – пристрій читання NFC (організуюче радіозв'язок між розташованими поруч мобільними пристроями) – все це стало можливим завдяки наявності звукового роз'єму.

Оскільки ринок мобільних і периферійних пристроїв має велике число потенційних клієнтів, я вважаю, що роз'єм для навушників буде основним портом для передачі інформації незабаром. У цій статті я детальніше розповім про даної функції.

Введення
Інтерфейс звукового роз'єму має два стандарти: OMTP і CTIA. OMTP – це міжнародний стандарт; ATIS – Американський стандарт, який використовується в таких пристроях Apple, iPhone і iPad. Вони відрізняються V-мікрофоном, а також розташуванням заземлення; відмінності показано нижче:

image
OMTP і CTIA

Як передаються дані
Коли ми відправляємо 0x00FF даних, перший крок – це перетворення цифрових даних в аналогові. Тому потрібно модулювати значення даних. Як правило, для цього використовується синусоїдальний носій хвиль для аналогового сигналу.

image
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);
}

Отримання даних
У приймачі необхідно перевести аналоговий сигнал в значення даних, демодулировать сигнал, щоб видалити вхідний сигнал, і декодувати дані у відповідності з протоколом. Протокол може бути в форматі загальнодоступних даних або приватних.

image
Демодуляція сигналу

В системах з ОС 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.

imageimage
Значення температури, отримане з допомогою Quick-Jack; через нього здійснюється управління світлодіодним індикатором

Зведена інформація
Портативні пристрої з можливістю підключення периферії все частіше з'являються на споживчому ринку. Звуковий роз'єм як функція для передачі даних використовується ODM-виробниками все активніше. Можливо, в майбутньому функція передачі даних через цей роз'єм буде підтримуватися мобільними ОС за замовчуванням.

Про автора
Ліанг отримав ступінь магістра в галузі вивчення сигналів і обробки даних в технологічному університеті Changchun. Він прийшов до корпорації Intel в 2013 р. як Android-інженер в китайському підрозділі. Зараз він займається створенням функцій, які б дозволили Android отримати конкурентні переваги (наприклад, відображення декількох вікон додатків одночасно і інше).

Посилання по темі

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.