android 耳機介面裝置無法識別問題
問題概述
在android上除錯audio的時候經常會發現很多耳機裝置不識別的情況,例如,aux轉接線,外接音箱球,**杆,以及部分耳機
問題原因
android源生對耳機的識別是有一定範圍的,會根據裝置的電阻值,通過對電壓和電流的分析來判斷屬於哪種裝置,然後來決定支援的方式。
android對耳機的分類
android對耳機的**,在dirver中有如下的定義:
95enum wcd9***_mbhc_plug_type ;
104
簡單來說,4段耳機分為歐標和美標,線序分別為l-r-g-m和l-r-m-g,而3段耳機是沒有m的(所以3段耳機只能聽,不能說話)
目前市面上的中高階手機基本都是相容歐/美標耳機,需要在硬體上做相容,僅靠軟體方面的話,目前不知道有辦法解決(我個人而言)
而aux外接線,音箱球,以及個別耳機(比如iphone的耳機就是高阻抗耳機)會增大電阻,導致電壓和電流超出閥值,造成誤判,所以在考慮市場的情況下,我們會對這些大眾產品做出相容。
ps:也有遇到過極個別偽劣耳機的電阻很大,基本超過幾倍,考慮到無限制的去相容所有耳機不可取也不現實,這類低使用者使用的極端情況不予相容。
舉個栗子,以aux和正常耳機的對比:
上圖對比,aux外接線裝置被判斷為了type4,而正常支援耳機是type1,兩者的差距在於電阻差距太大,在audio的driver中有linein_th threshold對電阻的範圍作出閥值,預設是5000,可以適當調高該值
100 * android l spec
101 * need to report linein
102 * if r/l channel impedance is larger than 5k ohm
103 */
104static struct wcd_mbhc_config mbhc_cfg = {
105 .read_fw_bin = false,
106 .calibration = null,
107 .detect_extn_cable = true,
108 .mono_stero_detection = false,
109 .swap_gnd_mic = null,
110 .hs_ext_micbias = false,
111 .key_code[0] = key_media,
112 .key_code[1] = key_voicecommand,
113 .key_code[2] = key_volumeup,
114 .key_code[3] = key_volumedown,
115 .key_code[4] = 0,
116 .key_code[5] = 0,
117 .key_code[6] = 0,
118 .key_code[7] = 0,
120 .linein_th = 30000,
同理,該類問題,可以根據插入裝置之後,log中上報的裝置和type來確定android將裝置如果判斷,再根據判斷原因,尋找判斷條件來做除錯。
3 5mm耳機介面制式
3.5公釐手機的四級耳機介面其實還分為兩種,一種是美標版,也有人稱之為 蘋果標準 顧名思義,就是蘋果產品iphone手機用的耳機介面,同時,小公尺手機 三星手機 htc的一部分手機也是使用的這款耳機標準 另外的一種是國標版,是國際上通用制定的標準,現在大多數摩托羅拉和絕大多數的國產手機都是使用的國標...
美標 國標耳機介面區別
早期的3.5mm耳機只有gnd 左 右聲道3個pin,這種耳機介面簡單,使用範圍廣,常見在電腦等大型裝置音訊介面上,這種介面有個顯而易見的缺點,即 沒有mic,不能錄音打 在電腦上可以單獨增加mic介面,但是在手機這種整合度高的移動裝置上,單獨增加mic介面顯然不是個高價效比的方案,因此出現了增加m...
日常所用的耳機介面定義
耳機插座在我們日常生活中是比較常見的一種電子元件,其耳機插座的型別規格也區分有四段式耳機插座 三段式耳機插座等。三段式和四段式耳機的引腳定義如下 四段式耳機插座接線的方法,其只是比一般三段式的耳機插座增加多了乙個麥克風,一般三段式的耳機插座接線順序為 左聲道 右聲道 地線。而對於四段式耳機插座來說,...