Получить ввод управления переключателем через разъем для наушников на iOS - PullRequest
0 голосов
/ 21 декабря 2018

В качестве небольшого праздничного проекта я хочу управлять приложением с помощью переключателя специальных возможностей, который подключен через 3,5-мм разъем для наушников к устройству iOS.

Это переключатель и штекер: enter image description here

Моя проблема в том, что я понятия не имею, какой сигнал запускается при нажатии кнопки - я предположил, что он действует подобно пульту дистанционного управления наушников.

Есть ли способ измерить ввод этого или кто-нибудь знает, как получить ввод кнопки на iOS?

Ответы [ 3 ]

0 голосов
/ 26 декабря 2018

Яблоки проводных наушников 3,5 мм с регулятором громкости имеют 4 проводника.На вашей картинке я вижу только 2 проводника.Таким образом, ваш коммутатор не может отправлять собственные команды пульта наушников от Apple - так как отсутствует кольцо микрофона для отправки данных.Я предполагаю, что ваш переключатель просто устанавливает контакт между двумя проводниками.

Вот что я бы сделал.

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

Теперь найдите (старую) пару наушников Apple 3,5 мм с регулятором громкости.Разберите регулятор громкости наушников и припаяйте переключатель доступа к контактным площадкам.Теперь ваш переключатель доступности имитирует нажатие регулятора громкости.

В качестве альтернативы посмотрите на http://david.carne.ca/shuffle_hax/shuffle_remote.html

Так что используйте микроконтроллер для имитации управления громкостью наушников и используйте переключатель доступности для управления микроконтроллером.Это похоже на веселый проект - наслаждайтесь.

0 голосов
/ 26 декабря 2018

Ваша кнопка - это кнопка «Big Buddy Button Switch», разработанная AbleNet для людей с умеренной или тяжелой верхней конечностью и двигательными нарушениями.Он не предназначен для подключения ни к устройству IOS, ни к любому мобильному планшету или телефону.

Существует интерфейс «Hook + Switch» (на данный момент 185 долларов), предназначенный для перехода между этой кнопкой и IOS.устройство, позволяющее подключить две такие кнопки к разъему молнии.При таком подключении нажатие кнопки может быть обнаружено и сопоставлено с различными типами действий IOS с использованием настроек доступности Apple.Это большие деньги, но, поскольку у новых iPhone нет даже аудиоразъемов, это может стоить того.

Ссылка на вашу кнопку здесь .

Ссылка на интерфейс Hook + Switch здесь .

СсылкаДля Apple информация о переключателях доступа здесь .

Big Buddy Button - пассивный переключатель мгновенного действия.Прикрепленный моно-штекер TS подключен внутри к нормально разомкнутому переключателю кратковременного действия, поэтому нажатие переключателя приведет к короткому замыканию TIP на SLEEVE.

Подключение этого штекера TS к устройству ios, предназначенному для приема штекера TRRS, приведет к короткому замыканию RING1 и RING2 и SLEEVE, даже если кнопка не нажата, что приведет кне сделать ничего полезного.Нажатие кнопки приведет к дальнейшему короткому СОВЕТУ на RING1 и RING2 и SLEEVE.Невозможно прочитать такое нажатие кнопки с внутренних устройств ios, если штекер TS подключен напрямую.

Если вы хотите собрать решение, которое будет работать для многих мобильных устройств (например, android), вы можетесделать это просто, заменив штекер TS на штекер TRRS (или подключив адаптер) следующим образом:

Один из двух проводников большой кнопки должен быть подключен к SLEEVE, который несет питание (для микрофона)и является источником напряжения, которое внутренне воспринимается для изменения громкости и переключения.Другой проводник Big Button должен быть подключен к RING2, который является заземляющей линией как для наушников, так и для микрофона.Ничто не должно быть подключено к TIP или RING1.

Нажатие большой кнопки на короткое время приведет к короткому замыканию на Ring2, что аналогично нажатию переключателя на кабеле наушников.Если вы хотите смоделировать команду увеличения или уменьшения громкости, вы должны подключить резистор последовательно с кнопкой (220 Ом для уменьшения громкости, 600 Ом для увеличения громкости).

Электрические соединения для аудиоразъемате же устройства для iOS, что и для Android, но есть дополнительное препятствие, которое вы должны преодолеть, если хотите подключить кнопки и обнаружить их в iOS.В рамках своей программы MFI («Сделано для iPod / iPhone») Apple использует чириканье распознавания при запуске, когда что-либо подключено к аудиоразъему (или разъему молнии).Ваше устройство должно иметь правильную микросхему внутри (или эмулировать поведение этой микросхемы), иначе интерфейс управления кнопками будет отключен, если вы не ответите на запрос аутентификации.Протокол, похоже, со временем изменился, потому что вторичные продукты, которые работали с одной моделью телефона, не всегда работали с другой.Инсайдеры Apple заявили, что чипы MFI содержат серийный номер, который Apple может прочитать при подключении.Они говорят, что обратная аутентификация работает сегодня, но Apple может помешать ей работать в любое время.

Если вы хотите создать продукт как продукт, вы можете подать заявку на участие в программе MFI здесь .

Если вы просто хотите собрать несколько устройств, вы выигралине сможет быть принятым в программу МФО.В этом случае вам нужно будет купить интерфейс Hook + Switch (или что-то в этом роде), или же вам потребуется добавить небольшой микропроцессор, например Arduino или Teensy, для эмуляции чириканта аутентификации, как это сделал Дэвид Карн здесь .

Если вы просто хотите создать одну рабочую кнопку, самый простой способ - использовать имеющуюся пару наушников, которые содержат необходимый чип, и просто соединить провода кнопок параллельно с SLEEVE и RING2.Если бы я делал это, я бы достал удлинитель TRRS и соединил провода Big Buddy Button с правильными двумя проводами удлинителя.Ваша большая кнопка должна работать до тех пор, пока пара наушников, сертифицированных Apple, подключена к расширению для обеспечения аутентификации.Затем вы можете обнаружить нажатие кнопки как обычно (описано здесь ).

РЕДАКТИРОВАТЬ: Я протестировал подключение дополнительной кнопки к SLEEVE и RING2 TRRSУдлинительный кабель, который подключен к iPhone, и если к удлинительному кабелю подключена работающая гарнитура, дополнительная кнопка работает.Таким образом, вспомогательная кнопка заканчивается параллельно встроенной кнопке, без необходимости разрезать гарнитуру.

Существуют и другие альтернативы, которые вы можете использовать.Например, вы можете создать схему, которая передает тон на уровне микрофона через два проводника при каждом нажатии кнопки.Затем вы вставляете этот сигнал в устройство iOS между SLEEVE и RING2, а затем пишете программу для iOS, которая прослушивает звук и обрабатывает его как нажатие кнопки.Аутентификация MFI не понадобится для этого подхода, и существуют существующие утилиты, которые помогут вам в этом на 90%.Вы можете найти пример здесь .

Также возможно подключиться к iOS через BLE без регистрации в MFI, и, поскольку Apple Accessibility включает возможность использовать устройство Bluetooth для управления определенными функциями iOS, вы можете сделать это без необходимости аутентификации.

Изображение, показывающее схему подключения для разъемов TRRS на большинстве мобильных устройств (включая iPhone), составляет здесь .

Воспроизводится здесь для удобства.

  • Функция / Микрофон == SLEEVE
  • Общий / Gnd == RING2
  • Вправо / R + == RING1
  • Влево / L + ==СОВЕТ

enter image description here

0 голосов
/ 24 декабря 2018

Если это было гнездо для наушников, вы можете использовать его с помощью

 override func remoteControlReceived(with event: UIEvent?) {}

и переключаться внутри него event?.type.subType как-то так.

override func remoteControlReceived(with event: UIEvent?) {
            if let e = event , e.type == .remoteControl {
                if  e.subtype == UIEventSubtype.remoteControlPause {
                // do something
                }else if(e.subtype == .remoteControlPlay){
                //do something else
                }else if(e.subtype == .remoteControlTogglePlayPause){
                // do something else
                }
            }
        }
...