1.MTK平台耳机检测原理简介

1.1EINT+AuxADC

【检测原理】 
(1) 耳机检测方式为EINT+AuxADC。
(2) EINT HISR为AUX_EINT_HISR,在aux_task_main中注册中断。插入耳机,若是高电平触发中断,需要保证AUX_EINT_STATE为1,否则为0。
(3) hook key的检测采用ADC。当耳机plug in,trigger AUX_EINT_HISR,此时turn on micbias, double check plug in state后,再发送msg AUX_ID_EARPHONE给UEM。  
然后turn off micbias。当aux收到来电消息,也会turn on micbias,检测SENDKEY ADC,直到挂断电话,才turn off micbias。
【软件配置】ACCDET_SUPPORT=FALSE
【典型平台】MT6236,MT6252 

1.2.ACCDET

【检测原理】  
(1) 耳机检测方式为ACCDET only。
(2) HISR为ACCDET_HISR,在ACCDET_INIT注册。
(3) hook key的检测采用ACCDET。
(4) 耳机状态与accdet处的电压对应关系如下表: 
表(一)
| Earphone state | Accdet voltage | Comparator AB state |
|-----------------|---------------|---------------------|
|Plug out|1.9V|A=1,B=1|
|Plug in|0.4V~1.7V|A=0,B=1|
|Hook key pressed|0V|A=0,B=0| 
【软件配置】ACCDET_SUPPORT=TRUE
【典型平台】MT6276,MT6250D/MT6250

1.3.EINT_ACCDET

【检测原理】
(1) 耳机检测方式为EINT+ACCDET。
(2) EINT HISR为AUX_EINT2_HISR,在ACCDET_INIT注册。插入耳机,若是高电平触发中断,需要将AUX_EINT_STATE置为1,否则置为0。
(3) hook key的检测采用accdet。
(4) 耳机状态与accdet处的电压对应关系同表(一)。
(5) 耳机插入,触发eint之后,enable ACCDET,耳机拔出之后会disable ACCDET。
【软件配置】ACCDET_SUPPORT=EINT_ACCDET
【典型平台】MT6255,MT6250/MT6250D

耳机按键

单键耳机实现播放,暂停

alps\mediatek\platform\mt6572\kernel\drivers\accdet下accdet.c 函数check_cable_type中case MIC_BIAS:下添加如下代码:

if(call_status == 0) 

if(is_long_press()) 

ACCDET_DEBUG("[Accdet]send long press remote button event %d \n",ACC_END_CALL); 
notify_sendKeyEvent(ACC_END_CALL); 
} else { 
ACCDET_DEBUG("[Accdet]send short press remote button event %d\n",ACC_MEDIA_PLAYPAUSE); 
notify_sendKeyEvent(ACC_MEDIA_PLAYPAUSE); 


if(call_status != 0) 

if(is_long_press()) 

ACCDET_DEBUG("[Accdet]send long press remote button event %d \n",ACC_MEDIA_PREVIOUS); 
notify_sendKeyEvent(ACC_MEDIA_PREVIOUS); 
} else { 
ACCDET_DEBUG("[Accdet]send short press remote button event %d\n",ACC_MEDIA_PLAYPAUSE); 
notify_sendKeyEvent(ACC_MEDIA_PLAYPAUSE); 

}

备注:KEY_****相关宏都定义在input.h文件中

KEY_PREVIOUSSONG:上一曲

实现下一曲(在框架层)

有些耳机只有一个按键, 需要通过一个按键来实现播放,暂停,下一首,上一首的功能 
功能定义: 
单击: 播放/暂停 
双击: 下一首 
三击: 上一首

[SOLUTION]

完整方案如下,只需要修改 phoneWindowManager.java 
1: 加入定义:

<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">long</span> preLastHeadsethookDownTime=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>,preLastHeadsethookUpTime=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, lastHeadsethookDownTime = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, lastHeadsethookUpTime = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">long</span> thisHeadsethookDownTime = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, thisHeadsethookUpTime = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> clickCount = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

2:加入方法:

<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">sendHeadsetBroadcast</span>(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> clickCount){Log.d(TAG,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"clickCount="</span>+clickCount);KeyEvent <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">event</span>;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">switch</span>(clickCount){ <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">event</span> = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> KeyEvent(thisHeadsethookUpTime,thisHeadsethookDownTime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PREVIOUS, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">break</span>;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">event</span> = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> KeyEvent(thisHeadsethookUpTime,thisHeadsethookDownTime,KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_NEXT,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">break</span>;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">case</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">default</span>:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">event</span> = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> KeyEvent(thisHeadsethookUpTime,thisHeadsethookDownTime,KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_HEADSETHOOK,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">break</span>;}Log.d(TAG,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"keycode = "</span>+<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">event</span>.getKeyCode());Intent intent = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Intent();intent.setAction(Intent.ACTION_MEDIA_BUTTON);intent.putExtra(Intent.EXTRA_KEY_EVENT,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">event</span>);mContext.sendBroadcast(intent);intent = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Intent();<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">event</span> = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">event</span>.changeAction(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">event</span>,KeyEvent.ACTION_UP);intent.setAction(Intent.ACTION_MEDIA_BUTTON);intent.putExtra(Intent.EXTRA_KEY_EVENT,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">event</span>);mContext.sendBroadcast(intent); }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li></ul>

3: interceptKeyBeforeQueueing 方法内 
在参考行 
int result; 
之后加入如下语句:

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(keyCode <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">==</span> KeyEvent<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>KEYCODE_HEADSETHOOK <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*KeyEvent.KEYCODE_VOLUME_DOWN*/</span>){ <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(down){<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//this is headsethook down             </span>preLastHeadsethookDownTime <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> lastHeadsethookDownTime;lastHeadsethookDownTime <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> thisHeadsethookDownTime;thisHeadsethookDownTime <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> event<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getEventTime();}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>{preLastHeadsethookUpTime <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> lastHeadsethookUpTime;lastHeadsethookUpTime <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> thisHeadsethookUpTime;thisHeadsethookUpTime <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> event<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>getEventTime();<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Log</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>d(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">TAG</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"thisHeadsethookUpTime="</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">+</span>thisHeadsethookUpTime<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">+</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">",thisHeadsethookDownTime="</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">+</span>thisHeadsethookDownTime);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Log</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>d(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">TAG</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"lastHeadsethookUpTime="</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">+</span>lastHeadsethookUpTime<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">+</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">",lastHeadsethookDownTime="</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">+</span>lastHeadsethookDownTime);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Log</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>d(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">TAG</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"preLastHeadsethookUpTime="</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">+</span>preLastHeadsethookUpTime<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">+</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">",preLastHeadsethookDownTime="</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">+</span>preLastHeadsethookDownTime);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>((thisHeadsethookUpTime <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-</span> thisHeadsethookDownTime) <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;"><</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">500</span>){<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>((thisHeadsethookDownTime<span class="hljs-attribute" style="box-sizing: border-box;">-lastHeadsethookDownTime</span>)<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">></span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">500</span>){<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Log</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>d(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">TAG</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"new click serial detected"</span>);clickCount <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>;mHandler<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>postDelayed(<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">new</span> Runnable(){<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">void</span> run() {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Log</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>d(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">TAG</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"call sendHeadsetBroadcast clickCount="</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">+</span>clickCount);sendHeadsetBroadcast(clickCount);}}, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1000</span>);}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>{<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Log</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>d(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">TAG</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"click serial runing"</span>);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>((thisHeadsethookUpTime <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-</span> preLastHeadsethookUpTime)<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">></span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1000</span>){<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Log</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>d(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">TAG</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"double click detect"</span>);clickCount <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>;}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>{<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Log</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>d(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">TAG</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"triple click detect"</span>);clickCount <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>;}}}}result <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;result <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">&=</span> ~ACTION_PASS_TO_USER;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> result;}</code>

MT6572 耳机驱动笔记相关推荐

  1. mtk+android+之mt6577驱动笔记,MTK6577+Android之音频(audio)移植

    MTK6577+Android之音频(audio)移植 备注:audio PA音频功放(power amplifier) 先借用<Y1MT6577 design notice V0.1>关 ...

  2. 嵌入式Linux驱动笔记(十八)------浅析V4L2框架之ioctl【转】

    转自:https://blog.csdn.net/Guet_Kite/article/details/78574781 权声明:本文为 风筝 博主原创文章,未经博主允许不得转载!!!!!!谢谢合作 h ...

  3. 嵌入式Linux驱动笔记--转自风筝丶

    为了阅读学习方便,将系列博客的网址进行粘贴,感谢原博客的分享. 嵌入式Linux驱动笔记(一)------第一个LED驱动程序 嵌入式Linux驱动笔记(二)------定时器 嵌入式Linux驱动笔 ...

  4. charging hw bq25601充电驱动笔记

    charging hw bq25601充电驱动笔记 #include "../bq25601.h"/* ====================================== ...

  5. ALSA子系统(十七)------支持Type-C耳机驱动

    你好!这里是风筝的博客, 欢迎和我一起交流. 之前讲解了耳机驱动: ALSA子系统(十六)------虚拟耳机驱动 Android音频子系统(四)------耳机拔插流程 那么必然少不了现在市场上较多 ...

  6. 耳机驱动调试(插拔检测与按键检测)

    耳机驱动调试(插拔检测与按键检测) 小白一枚,欢各位大佬指出错误 耳机类型判断 三段和四段.欧标和美标 现在许多设备的耳机接口都采用3.5mm的耳机接口,其中终端就是,终端可以兼容三段和四段耳机:三段 ...

  7. Android 耳机驱动知识

    https://yunzhi.github.io/headset_knowledge 工作以后接手的第一个驱动就是android平台下耳机的插拔检测和按键检测.这部分涉及的硬件知识比较简单,但是软件上 ...

  8. 嵌入式Linux驱动笔记(十六)------设备驱动模型(kobject、kset、ktype)

    ###你好!这里是风筝的博客, ###欢迎和我一起交流. 前几天去面试,被问到Linux设备驱动模型这个问题,没答好,回来后恶补知识,找了些资料,希望下次能答出个满意答案. Linux早期时候,一个驱 ...

  9. 嵌入式Linux驱动笔记(五)------学习platform设备驱动

    你好!这里是风筝的博客, 欢迎和我一起交流. 设备是设备,驱动是驱动. 如果把两个糅合写一起,当设备发生变化时,势必要改写整个文件,这是非常愚蠢的做法.如果把他们分开来,当设备发生变化时,只要改写设备 ...

  10. Linux-USB驱动笔记(五)--主机控制器驱动框架

    Linux-USB驱动笔记(五)--主机控制器驱动框架 1.前言 2.主机控制器框架 3.重要结构体 3.1.usb_hcd -- 主机控制器驱动 3.2.hc_driver -- 控制器操作函数 3 ...

最新文章

  1. 关于正则表达式 \1 \2之类的问题
  2. 2021深度学习的研究方向推荐!Transformer、Self-Supervised、Zero-Shot和多模态
  3. 如何用php向wsdl服务器发请求,知道服务器端Wsdl,不写服务端代码,仅写客户端代码能调用服务端的方法吗?...
  4. 倒计时321控制器设置
  5. boost::log::attributes相关用法的测试程序
  6. 反射获取空参数成员方法并运行
  7. 752. Open the Lock
  8. 6. Nginx + PHP + FastGCI安装
  9. mysql移动文件后打不开_Windows端MySQL data目录迁移(貌似会启动不了)
  10. 我用系统的思想来编程
  11. 论文阅读:Non-local Neural Networks
  12. Java基础提高学习笔记1
  13. 拓端tecdat|R语言中不同类型的聚类方法比较
  14. 人工智能中蕴含的情商
  15. 学北邮计算机未来四十岁,双非学渣如何上岸北邮计算机学院
  16. 各大组织大马默认密码
  17. Cesium地图不加载或者加载有问题怎么办
  18. Keil4 新建工程 和 烧录程序
  19. lisp 获取横断面数据_AutoCADLISP二次开发辅助道路横断面测量成果检查
  20. 重读“发展Linux,中日两国之比较”有感

热门文章

  1. ubuntu 20.04 安装 微信最新方式
  2. 生产制造追溯系统-再说条码打印
  3. 如何获取TouchSlop和源码浅析
  4. 固态硬盘是什么接口_了解移动固态硬盘接口知识,告诉你PSSD到底能多快
  5. OpenGL绘制三维彩色立方体并实现自动旋转
  6. 内存错误分析工具----asan(AddressSanitizer)的介绍和使用
  7. 服务器抓不到mrcp协议,MRCP协议学习笔记-MRCP背景知识介绍
  8. 聚类算法K-Means
  9. Bootstrap框架——栅格系统
  10. html ul默认的项目符号是什么形状,列表项ol、ul前项目符号