蓝牙的key event

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

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=<gain>    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              0x41

3.#define VOL_DOWN_OP            0x42

4.#define MUTE_OP                0x43

5.#define PLAY_OP                0x44

6.#define STOP_OP                0x45

7.#define PAUSE_OP                0x46

8.#define RECORD_OP              0x47

9.#define REWIND_OP              0x48

10.#define FAST_FORWARD_OP        0x49

11.#define EJECT_OP                0x4a

12.#define FORWARD_OP              0x4b

13.#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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值