- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
How to add a headset music key
录入:edatop.com 点击:
[Description]
How to add aHeADSet Musickey on MT6577/75
[Solution]
1.添加Keybit
mediatek/platform/mt6577/kernel/drivers/accdet/accdet.c
在accdet_probe()中添加新的按键使用keybit
__set_bit(EV_KEY,kpd_accdet_dev->evbit);
__set_bit(KEY_CALL,kpd_accdet_dev->keybit);
__set_bit(KEY_ENDCALL,kpd_accdet_dev->keybit);
__set_bit(KEY_PLAYPAUSE,kpd_accdet_dev->keybit);//添加要使用的key
__set_bit(KEY_STOP,kpd_accdet_dev->keybit);
2.添加事件发送
mediatek/platform/mt6577/kernel/drivers/accdet/accdet.c
在check_cable_type()中添加
case MIC_BIAS:
......
if((call_stauts = 0)&&button_status)
{
if(is_long_press())//77 75 only one key
{
notify_sendKeyEvent(ACC_STOP_MUSIC); //add define as #define ACC_END_CALL 2
}
else
{
notify_sendKeyEvent(ACC_PAUSE_MUSIC);
}
}
在sendKeyEvent()添加
if(ACC_STOP_MUSIC==accdet_key_event)
{
input_report_key(kpd_accdet_dev,KEY_STOP,1);
input_report_key(kpd_accdet_dev,KEY_STOP,0);
input_sycn(kpd_accdet_dev);
}
if(ACC_PLAYPAUSE_MUSIC==accdet_key_event)
{
input_report_key(kpd_accdet_dev,KEY_PLAYPAUSE,1);
input_report_key(kpd_accdet_dev,KEY_PLAYPAUSE,0);
input_sycn(kpd_accdet_dev);
}
3.修改accdet supend
php?mod=tag&id=6090" target="_blank" class="relatedlink">Frameworks/base/media/java/android/media/MediaPlayer.java
修改:
privte native void pause() throws IllegalStateException{
//atayAwake(false);//保证通过耳机暂停后,系统在设定时间内不进入supend,
//仍然可以通过耳机继续操作
_pause();
}
privte native void stop() throws IllegalStateException{
// atayAwake(false);//stop后不会立即进入supend
_stop();
}
4.
packages/apps/music/src/com/android/music/MediaPlaybackService.java
修改:
// interval after which we stop the service when idle
private static final int IDLE_DELAY =60000;
//适当调整播放器暂停或停止后进入supend的时间,因为supend后耳机是无法唤醒的,默认1分钟
packages/apps/music/src/com/android/music/MediaPlaybackService.java
看一下oncreate()和updateNotication()的方法,Playbackservice所支持的Key
5.注意:
由于耳机按键检测采用thread轮询ADC电压的方式,所以要保证按键时系统不能进入suspend,
可以设置mediaplayer在stop和pause时系统不立即进入suspend,所以当mediaplayer开启时会增加
一定耗电。
当mediaplayer进入pause和stop后,过了 IDLE_DLAY时间后系统会自动进入suspend,这时耳机按键
将无法再操作,这里可以根据实际需求设置IDLE_DLAY时间。
MT6589 可以打开 ACCDET_MULTI_KEY_FEATURE支持多键行为
6.
如果驱动上报KEY后mediaplayer没有响应,查看以下文件中上报的KEY是否已定义:
alps/frameworks/base/core/java/android/view/KeyEvent.java
alps/frameworks/base/include/ui/KeycodeLabels.h
alps/frameworks/base/core/res/res/values/attrs.xml
alps/kernel/include/linux/input.h
alps/SDK/emulator/keymaps/qwerty.kl
alps/sdk/emulator/keymaps/qwerty.kl (MT6573)
alps/frameworks/base/data/keyboards/Generic.kl (MT6575)
alps/mediatek/config/<your proj>/mtk-kpd.kl
alps/mediatek/config/mt6577/ACCDET.kl
或者参考:Mediatek on-line > FAQ Home > SW > ALPS > Driver - input system >
[FAQ04495][keypad]How to add a new key on android ICS\ICS2
How to add aHeADSet Musickey on MT6577/75
[Solution]
1.添加Keybit
mediatek/platform/mt6577/kernel/drivers/accdet/accdet.c
在accdet_probe()中添加新的按键使用keybit
__set_bit(EV_KEY,kpd_accdet_dev->evbit);
__set_bit(KEY_CALL,kpd_accdet_dev->keybit);
__set_bit(KEY_ENDCALL,kpd_accdet_dev->keybit);
__set_bit(KEY_PLAYPAUSE,kpd_accdet_dev->keybit);//添加要使用的key
__set_bit(KEY_STOP,kpd_accdet_dev->keybit);
2.添加事件发送
mediatek/platform/mt6577/kernel/drivers/accdet/accdet.c
在check_cable_type()中添加
case MIC_BIAS:
......
if((call_stauts = 0)&&button_status)
{
if(is_long_press())//77 75 only one key
{
notify_sendKeyEvent(ACC_STOP_MUSIC); //add define as #define ACC_END_CALL 2
}
else
{
notify_sendKeyEvent(ACC_PAUSE_MUSIC);
}
}
在sendKeyEvent()添加
if(ACC_STOP_MUSIC==accdet_key_event)
{
input_report_key(kpd_accdet_dev,KEY_STOP,1);
input_report_key(kpd_accdet_dev,KEY_STOP,0);
input_sycn(kpd_accdet_dev);
}
if(ACC_PLAYPAUSE_MUSIC==accdet_key_event)
{
input_report_key(kpd_accdet_dev,KEY_PLAYPAUSE,1);
input_report_key(kpd_accdet_dev,KEY_PLAYPAUSE,0);
input_sycn(kpd_accdet_dev);
}
3.修改accdet supend
php?mod=tag&id=6090" target="_blank" class="relatedlink">Frameworks/base/media/java/android/media/MediaPlayer.java
修改:
privte native void pause() throws IllegalStateException{
//atayAwake(false);//保证通过耳机暂停后,系统在设定时间内不进入supend,
//仍然可以通过耳机继续操作
_pause();
}
privte native void stop() throws IllegalStateException{
// atayAwake(false);//stop后不会立即进入supend
_stop();
}
4.
packages/apps/music/src/com/android/music/MediaPlaybackService.java
修改:
// interval after which we stop the service when idle
private static final int IDLE_DELAY =60000;
//适当调整播放器暂停或停止后进入supend的时间,因为supend后耳机是无法唤醒的,默认1分钟
packages/apps/music/src/com/android/music/MediaPlaybackService.java
看一下oncreate()和updateNotication()的方法,Playbackservice所支持的Key
5.注意:
由于耳机按键检测采用thread轮询ADC电压的方式,所以要保证按键时系统不能进入suspend,
可以设置mediaplayer在stop和pause时系统不立即进入suspend,所以当mediaplayer开启时会增加
一定耗电。
当mediaplayer进入pause和stop后,过了 IDLE_DLAY时间后系统会自动进入suspend,这时耳机按键
将无法再操作,这里可以根据实际需求设置IDLE_DLAY时间。
MT6589 可以打开 ACCDET_MULTI_KEY_FEATURE支持多键行为
6.
如果驱动上报KEY后mediaplayer没有响应,查看以下文件中上报的KEY是否已定义:
alps/frameworks/base/core/java/android/view/KeyEvent.java
alps/frameworks/base/include/ui/KeycodeLabels.h
alps/frameworks/base/core/res/res/values/attrs.xml
alps/kernel/include/linux/input.h
alps/SDK/emulator/keymaps/qwerty.kl
alps/sdk/emulator/keymaps/qwerty.kl (MT6573)
alps/frameworks/base/data/keyboards/Generic.kl (MT6575)
alps/mediatek/config/<your proj>/mtk-kpd.kl
alps/mediatek/config/mt6577/ACCDET.kl
或者参考:Mediatek on-line > FAQ Home > SW > ALPS > Driver - input system >
[FAQ04495][keypad]How to add a new key on android ICS\ICS2
申明:网友回复良莠不齐,仅供参考。如需专业帮助,请学习易迪拓培训专家讲授的ADS视频培训课程。
ADS中文视频培训教程 | More...
ADS培训课程推荐详情>>
国内最全面、最专业的Agilent ADS培训课程,可以帮助您从零开始,全面系统学习ADS设计应用【More..】
- Agilent ADS教学培训课程套装
- 两周学会ADS2011、ADS2013视频教程
- ADS2012、ADS2013射频电路设计详解
- ADS高低阻抗线微带滤波器设计培训教程
- ADS混频器仿真分析实例视频培训课程
- ADS Momentum电磁仿真设计视频课程
- ADS射频电路与通信系统设计高级培训
- ADS Layout和电磁仿真设计培训视频
- ADS Workspace and Simulators Training Course
- ADS Circuit Simulation Training Course
- ADS Layout and EM Simulation Training Course
- Agilent ADS 内部原版培训教材合集