通过iOS上的耳机插孔获取开关控制的输入

时间:2018-12-21 00:35:20

标签: ios swift audio avaudioplayer

作为一个小型度假项目,我想通过可访问性开关控制一个应用程序,该可访问性开关通过3,5毫米耳机插孔连接到iOS设备。

这是开关和插头:enter image description here

我的问题是我不知道按下按钮时会发出哪种信号-我以为它的作用类似于耳机的遥控器。

有没有一种方法可以测量此输入,或者有人知道如何在iOS上获取按钮的输入?

3 个答案:

答案 0 :(得分:7)

您的按钮是AbleNet设计的“大伙伴按钮开关”,适用于中至重度上肢和运动障碍人士。它并非旨在插入IOS设备或任何移动平板电脑或电话中。

有一个“ Hook + Switch”界面(目前为185美元),设计用于在此按钮和IOS设备之间切换,允许将两个这样的按钮连接到闪电连接器。当以这种方式连接时,可以使用苹果辅助功能设置来检测按钮按下并将其映射到许多不同类型的IOS操作。这是很多钱,但是由于新的iPhone甚至没有音频插孔,因此最终值得。

按钮的链接为here

到Hook +交换接口的链接是here

在辅助功能开关上指向Apple信息的链接为here

大伙伴按钮是一个被动的瞬时动作开关。附带的mono TS插头在内部连接至瞬时动作常开开关,因此,按下该开关会将TIP短路至SLEEVE。

将此TS插头插入旨在接收TRRS插头的ios设备中,即使未按下按钮,也会将RING1 RING2 SLEEVE短路,这不会完成任何有用的事情。按下该按钮将使TIP进一步短到RING1 RING2 SLEEVE。如果直接插入TS插头,则无法从ios内部读取此类按钮按下情况。

如果您想找到一种适用于许多移动设备(例如android)的解决方案,只需按以下方法将TS插头替换为TRRS插头(或连接适配器)即可:

两个大按钮导体中的一个应连接到SLEEVE,该SLEEVE承载功率(用于麦克风),并且是内部感测到的电压源,以进行音量变化和切换。大按钮的另一根导线应连接到RING2,这是耳塞通道和麦克风的接地线。请勿将任何东西连接到TIP或RING1。

按下大按钮将使Sleeve短暂地短路到Ring2,这与按下耳塞电缆上的开关相同。如果要模拟调高或调低音量的命令,可以在按钮上串联一个电阻(调低音量为220欧姆,调高音量为600欧姆)。

用于iOS设备的音频插孔的电气连接与用于Android的设备相同,但是如果要连接按钮并在iOS中检测到它们,则还必须克服一个额外的障碍。作为 MFI (适用于iPod / iPhone)程序的一部分,当将任何东西插入音频插孔(或防雷连接器)时,Apple会使用启动识别recognition声序列。您的设备中必须装有正确的芯片(或模拟该芯片的行为),否则当您无法响应身份验证请求时,按钮控件界面将被禁用。该协议似乎随着时间的推移而发生了变化,因为使用一种手机型号的售后市场产品并不总是与另一种手机型号兼容。苹果内部人士表示,MFI芯片包含一个序列号,苹果可以在连接时读取该序列号。他们说,逆向工程认证在今天可以使用,但是Apple可以随时阻止它运行。

如果要将其设计为产品,则可以申请MFI程序here

如果您只想构建少量设备,则将无法被MFI程序接受。在这种情况下,您需要购买Hook + Switch接口(或类似的接口),否则就需要添加一个小型的微处理器(例如Arduino或Teensy)来模仿身份验证chi,就像David Carne所做的{{3 }}。

如果您只想构建一个工作按钮,最简单的方法是使用现有的包含必要芯片的耳机,只需将您的按钮线与SLEEVE和RING2并联即可。如果这样做,我会得到一条TRRS延长线,然后将“大伙伴按钮”的电线连接到延长线的正确两根电线上。只要将一副苹果认证的耳机插入扩展中以提供身份验证,您的Big Button就应该起作用。然后,您将像往常一样检测按钮的按下情况(描述为here)。

  

编辑:我测试了将附件按钮连接到插入iPhone的TRRS延长线的SLEEVE和RING2,只要耳机正常工作   插入延长线后,附件按钮即可工作。这样   附件按钮最终与内置按钮平行,没有   必须拆开耳机。

您可以追求其他选择。例如,您可以构建一个电路,每当按下按钮时,该电路就会在两个导体之间传递麦克风电平的声音。然后,您可以将该信号插入SLEEVE和RING2之间的iOS设备中,然后编写一个iOS程序来收听声音并将其视为按钮按下。这种方法不需要MFI身份验证,并且现有的实用程序可以为您提供90%的解决方案。您可以找到示例here

还可以通过BLE连接到iOS,而无需注册MFI,并且由于Apple Accessibility包括使用蓝牙设备控制某些iOS功能的功能,因此您无需验证即可进行此操作。

显示大多数移动设备(包括iPhone)上TRRS连接器的连接示意图的图像为here

为方便起见,在此处复制。

  • 功能/麦克风==套筒
  • 通用/绑定== RING2
  • 右/ R + == RING1
  • 左/ L + ==提示

here

答案 1 :(得分:6)

如果它是耳机插孔,则可以使用

 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
                }
            }
        }

答案 2 :(得分:4)

带音量控制的苹果有线3.5毫米耳机有4条导体。在您的图片中,我仅看到2条导体。因此,您的交换机无法发送Apple自己的耳机远程命令-因为缺少用于发送数据的麦克风环。 我猜你的开关只是在两个导体之间接触。

这就是我要做的。

用万用表验证开关在打开和关闭位置的电阻。 我希望收盘时阻力很低或接近零。

现在找到一副(旧的)带音量控制的Apple 3.5毫米耳机。拆卸耳机的音量控制器,然后将辅助功能开关焊接到音量控制垫上。现在,您的辅助功能开关可以模拟推动音量控制。

或者看http://david.carne.ca/shuffle_hax/shuffle_remote.html

因此,请使用微控制器来模拟耳机的音量控制,并使用辅助功能开关来控制微控制器。看起来像是一个有趣的项目-尽情享受。