博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
蓝牙的key event
阅读量:4983 次
发布时间:2019-06-12

本文共 4124 字,大约阅读时间需要 13 分钟。

有个关于蓝牙耳机的按键怎么映射到系统里面的问题,刚刚看了一下。

1)如果是HFP按键,

则是耳机是通过AT命令发送到手机侧的。

代码位于BluetoothHandsfree.java

Hang-up 命令:

 

// Hang-up command
parser.register("+CHUP", new AtCommandHandler() {
@Override public AtCommandResult handleActionCommand() {
sendURC("OK"); if (isVirtualCallInProgress()) {
terminateScoUsingVirtualVoiceCall(); } else {
if (mCM.hasActiveFgCall()) {
PhoneUtils.hangupActiveCall(mCM.getActiveFgCall()); } else if (mCM.hasActiveRingingCall()) {
PhoneUtils.hangupRingingCall(mCM.getFirstActiveRingingCall()); } else if (mCM.hasActiveBgCall()) {
PhoneUtils.hangupHoldingCall(mCM.getFirstActiveBgCall()); } } return new AtCommandResult(AtCommandResult.UNSOLICITED); } });

 

volumn - up声音大小

 

// Speaker Gain        parser.register("+VGS", new AtCommandHandler() {
@Override public AtCommandResult handleSetCommand(Object[] args) {
// AT+VGS=
in range [0,15] if (args.length != 1 || !(args[0] instanceof Integer)) {
return new AtCommandResult(AtCommandResult.ERROR); } mScoGain = (Integer) args[0]; int flag = mAudioManager.isBluetoothScoOn() ? AudioManager.FLAG_SHOW_UI:0; mAudioManager.setStreamVolume(AudioManager.STREAM_BLUETOOTH_SCO, mScoGain, flag); return new AtCommandResult(AtCommandResult.OK); } });

 

2)如果是AVRCP按键:

则在,external\bluetooth\bluez\audio\control.c

1./* operands in passthrough commands */2.#define VOL_UP_OP              0x413.#define VOL_DOWN_OP            0x424.#define MUTE_OP                0x435.#define PLAY_OP                0x446.#define STOP_OP                0x457.#define PAUSE_OP                0x468.#define RECORD_OP              0x479.#define REWIND_OP              0x4810.#define FAST_FORWARD_OP        0x4911.#define EJECT_OP                0x4a12.#define FORWARD_OP              0x4b13.#define BACKWARD_OP            0x4c
1.staticstruct{2.       constchar*name;3.        uint8_t avrcp;4.        uint16_t uinput;5.} key_map[]={6.       {
"PLAY", PLAY_OP, KEY_PLAYCD },7. {
"STOP", STOP_OP, KEY_STOPCD },8. {
"PAUSE", PAUSE_OP, KEY_PAUSECD },9. {
"FORWARD", FORWARD_OP, KEY_NEXTSONG },10. {
"BACKWARD", BACKWARD_OP, KEY_PREVIOUSSONG },11. {
"REWIND", REWIND_OP, KEY_REWIND },12. {
"FAST FORWARD", FAST_FORWARD_OP, KEY_FASTFORWARD },13. { NULL}14.};

 

1. for(i=0;  key_map[i].name!=  NULL; i++){2.                uint8_t key_quirks;3. 4.               if((operands[0]&0x7F)!=  key_map[i].avrcp)5.                       continue;6. 7.                DBG("AVRCP: %s %s",  key_map[i].name,  status);8. 9.                key_quirks= control->key_quirks[key_map[i].avrcp];10. 11.               if(key_quirks&  QUIRK_NO_RELEASE){12.                       if(!pressed){13.                                DBG("AVRCP:  Ignoring release");14.                               break;15.                       }16. 17.                        DBG("AVRCP: treating  key press as press + release");18.                        send_key(control->uinput,  key_map[i].uinput,1);19.                        send_key(control->uinput,  key_map[i].uinput,0);20.                       break;21.               }22. 23.                send_key(control->uinput,  key_map[i].uinput,  pressed);24.               break;25.       }

 

1.staticvoid  send_key(int fd,  uint16_t key,int pressed)2.{3.       if(fd<0)4.               return;5. 6.        send_event(fd,  EV_KEY, key, pressed);7.        send_event(fd,  EV_SYN, SYN_REPORT,0);8.}

 

 

 

转载于:https://www.cnblogs.com/MMLoveMeMM/articles/3709907.html

你可能感兴趣的文章
为何要学编程?如何学编程?用什么语言最好?有什么好书?
查看>>
剑指Offer的学习笔记(C#篇)-- 反转链表
查看>>
百度star2012初赛第一场的题目
查看>>
武汉第二十七天
查看>>
最长公共子序列
查看>>
MFC 鼠标去留
查看>>
【原创】关于oracle11G空表无法导出问题的解决方法
查看>>
16进制的简单运算
查看>>
速读《Javascript模式》(一)(简介、var的变量提升以及es6新规范的let)
查看>>
DM8168集成图像算法
查看>>
GDI编程小结
查看>>
nalply/crtmpserver
查看>>
jquery 遍历节点
查看>>
工具选择
查看>>
(转)C#实现RSA非对称加密解密
查看>>
迅为iTOP-4412开发板-Android4.4-固定MAC
查看>>
centos下,安装MySQL以及配置远程连接等
查看>>
获取硬盘和CPU的序列号
查看>>
Python全栈开发 day2 - 数据类型详解
查看>>
葡萄城报表的数据可视化分析
查看>>