一种奇葩耳机与喇叭互斥的实现方式

news/2024/5/19 1:57:19 标签: android, 硬件

一种奇葩耳机与喇叭互斥的实现方式

所谓耳机与喇叭的互斥,是指当耳机插入时,喇叭通道自动关闭,声音从耳机中输出;当耳机拔出时,喇叭通道打开。

Android平台标准的实现「耳机与喇叭互斥」的方式是:标准耳机接口硬件(带的插入检测) -> 连接到CPU的GPIO -> 内核检测到GPIO变化后改变/sys/class/switch/h2w/state中的值 -> Android上层系统读取该文件以判断当前耳机状态 -> 系统将新的耳机状态以广播方式发送给APP。

当我要在一个指定的板子上实现录音功能时,手上这个块板没有引出外置Mic,只好从耳机插座入手。我在耳机插入时,让系统仍然认为是未插入状态,这样以保证外置喇叭能正常出声,即「打破耳机与喇叭的互斥」。我开始测试这个主板「耳机与喇叭互斥」的实现方式时发现有些许不同:
1. /sys/class/switch/h2w/state中的值并不会随着耳机插拔而变化;
2. Android上层不能收到耳机插拔的广播或者消息;
3. 将耳机接口硬件上的检测插拔功能禁用后(用摄子短接两个检测脚)仍然可以切换通道;

这里写图片描述

以上三条说明该主板并未按照Android平台标准方式实现,介于主板厂家不给提供原理图,只能从硬件电路一点一点测试推导。经反复测试,耳机插座在插拔耳机时另外一个不同之处是Mic脚与GND脚的压差会变化,如下:

耳机状态压差备注
拔出2.5V
插入1.8V

而从喇叭处倒推出来的差异时,耳机的插拔会导致功放IC的使能脚电平被拉低为0。手绘出的电路图如下:
这里写图片描述
经测试最接近功放的一个三极管经去掉后,插入耳机时,使能脚电平不再被拉低了,这样就实现了「打破耳机与喇叭的互斥」的目的了。这里简单补充一下纯硬件实现声道切换的坏处:系统(APP)无法得到耳机的插拔事件,会导致对应耳机插拔的事件无法进行处理,比如拔出耳机时一般的音乐播放器会暂停插入音乐等等。


http://www.niftyadmin.cn/n/620915.html

相关文章

ViewPagerFragment组合由于单例模式导致java.lang.NullPointerException异常

当时为了防止Fragment被重复初始化,就选择使用单例模式,但是当使用ViewPager时会出现错误,将单例模式禁用掉后一切正常了。这里简单记录一下。 /*** 单例模式: http://coolshell.cn/articles/265.html*/ private volatile static SingletonF…

ZTE U880 使能Adb for Linux

ZTE U880 使能Adb for Linux 手上有一个朋友给的不用的老Android手机 ZTE U880,今天需要调试一下,把使用ADB的过程记录一下。 Android设备在Linux下能够正常识别的做法是SUBSYSTEM"usb", ENV{DEVTYPE}"usb_device", MODE"066…

关于引起更新源索引时Hash Sum mismatch问题的真正原因及解决方案

关于Hash Sum mismatch问题的原因 4月29日安装了新发布的ubuntu 1304,没想道刚要更新源,安装ubuntu-restricts-extras,就遇到问题。 W:Failed to fetch gzip:/var/lib/apt/lists/partial/us.archive.ubuntu.com_ubuntu_dists_natty_main_so…

Android人脸检测方案汇总

因为要用到Android本地相机人脸检测,检测到人脸再做进一步处理。这里只记录从相机中实时检测人脸功能。本文只是一个简单的汇总。 1. Android原生FaceDetectionListener 部分平台不可用,所以最终没有采用。只适用于camera1不适用于camera2,…

Android APP开发警告大全

Android APP开发警告大全 同理,本文遇到再收集,不为了收集而收集。 最后更新时期:20150319 XML篇 Not targeting the latest versions of Android; compatibility modes apply. Consider testing and updating this version. Consult th…

编译最新版本gutenprint

编译最新版本gutenprint gutenprint团队会定期整理源码版本进行发布,可以从sourceforge上进行下载。但是如果你像测试最新的还没有被打包的源码,那么需要使用cvs进行下载最新源码并进行编译。 sudo apt-get install autoconf automake libtool gettext…

Ubuntu 14.04 配置tftp服务器

每次配置都得搜索,很恼火。这里记录一下。Ubuntu下配置tftp服务器主要有两个tftpd和tftpd-hpa,后者较新。前者较老。建议安装后者。方法如下: 1.安装TFTP软件 sudo apt-get install tftp-hpa tftpd-hpa tftp-hpa是客户端,tftpd-hpa是服务器…