所謂耳機(jī)與喇叭的互斥,是指當(dāng)耳機(jī)插入時(shí),喇叭通道自動(dòng)關(guān)閉,聲音從耳機(jī)中輸出;當(dāng)耳機(jī)拔出時(shí),喇叭通道打開。
Android平臺(tái)標(biāo)準(zhǔn)的實(shí)現(xiàn)「耳機(jī)與喇叭互斥」的方式是:標(biāo)準(zhǔn)耳機(jī)接口硬件(帶的插入檢測(cè)) -> 連接到CPU的GPIO -> 內(nèi)核檢測(cè)到GPIO變化后改變/sys/class/switch/h2w/state中的值 -> Android上層系統(tǒng)讀取該文件以判斷當(dāng)前耳機(jī)狀態(tài) -> 系統(tǒng)將新的耳機(jī)狀態(tài)以廣播方式發(fā)送給APP。
當(dāng)我要在一個(gè)指定的板子上實(shí)現(xiàn)錄音功能時(shí),手上這個(gè)塊板沒有引出外置Mic,只好從耳機(jī)插座入手。我在耳機(jī)插入時(shí),讓系統(tǒng)仍然認(rèn)為是未插入狀態(tài),這樣以保證外置喇叭能正常出聲,即「打破耳機(jī)與喇叭的互斥」。我開始測(cè)試這個(gè)主板「耳機(jī)與喇叭互斥」的實(shí)現(xiàn)方式時(shí)發(fā)現(xiàn)有些許不同: 1. /sys/class/switch/h2w/state中的值并不會(huì)隨著耳機(jī)插拔而變化; 2. Android上層不能收到耳機(jī)插拔的廣播或者消息; 3. 將耳機(jī)接口硬件上的檢測(cè)插拔功能禁用后(用攝子短接兩個(gè)檢測(cè)腳)仍然可以切換通道;

以上三條說明該主板并未按照Android平臺(tái)標(biāo)準(zhǔn)方式實(shí)現(xiàn),介于主板廠家不給提供原理圖,只能從硬件電路一點(diǎn)一點(diǎn)測(cè)試推導(dǎo)。經(jīng)反復(fù)測(cè)試,耳機(jī)插座在插拔耳機(jī)時(shí)另外一個(gè)不同之處是Mic腳與GND腳的壓差會(huì)變化,如下:
| 耳機(jī)狀態(tài) | 壓差 | 備注 | 
|---|---|---|
| 拔出 | 2.5V | … | 
| 插入 | 1.8V | … | 
而從喇叭處倒推出來的差異時(shí),耳機(jī)的插拔會(huì)導(dǎo)致功放IC的使能腳電平被拉低為0。手繪出的電路圖如下:  經(jīng)測(cè)試最接近功放的一個(gè)三極管經(jīng)去掉后,插入耳機(jī)時(shí),使能腳電平不再被拉低了,這樣就實(shí)現(xiàn)了「打破耳機(jī)與喇叭的互斥」的目的了。這里簡(jiǎn)單補(bǔ)充一下純硬件實(shí)現(xiàn)聲道切換的壞處:系統(tǒng)(APP)無法得到耳機(jī)的插拔事件,會(huì)導(dǎo)致對(duì)應(yīng)耳機(jī)插拔的事件無法進(jìn)行處理,比如拔出耳機(jī)時(shí)一般的音樂播放器會(huì)暫停插入音樂等等。
 經(jīng)測(cè)試最接近功放的一個(gè)三極管經(jīng)去掉后,插入耳機(jī)時(shí),使能腳電平不再被拉低了,這樣就實(shí)現(xiàn)了「打破耳機(jī)與喇叭的互斥」的目的了。這里簡(jiǎn)單補(bǔ)充一下純硬件實(shí)現(xiàn)聲道切換的壞處:系統(tǒng)(APP)無法得到耳機(jī)的插拔事件,會(huì)導(dǎo)致對(duì)應(yīng)耳機(jī)插拔的事件無法進(jìn)行處理,比如拔出耳機(jī)時(shí)一般的音樂播放器會(huì)暫停插入音樂等等。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注