[Headset] How to add a headset music key

[Headset] How to add a headset music key

[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
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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值