2640蓝牙键盘例程中的 音量控制键问题
时间:10-02
整理:3721RD
点击:
在HIDEmuKbd例程的基础上加入音量大小调节按键和静音按键
在按键处理函数:
static void HidEmuKbd_handleKeys(uint8_t shift, uint8_t keys)
中加入:
if(keys & KEY_MUTE) { HidEmuKbd_sendReport(HID_CONSUMER_MUTE); HidEmuKbd_sendReport(KEY_NONE); } if(keys & KEY_VOLUME_UP) { HidEmuKbd_sendReport(HID_CONSUMER_VOLUME_UP); HidEmuKbd_sendReport(KEY_NONE); } if(keys & KEY_VOLUME_DOWN) { HidEmuKbd_sendReport(HID_CONSUMER_VOLUME_DOWN); HidEmuKbd_sendReport(KEY_NONE); }
无法实现,在hiddev.h中查看关于音量控制的健值有两个:
HID_KEYBOARD_VOLUME_UP和HID_CONSUMER_VOLUME_UP,但是都不行。
请问如何加入音量调节功能,谢谢
安卓使用的拍照按键是enter键,数字值为88。
那,安卓使用的mute键和vol up/down 的健值分别是多少呢?
不会要一个一个试把?
参考link
http://blog.csdn.net/pig10086/article/details/72402066
我把
// Key arrays (6 bytes) 0x95, 0x06, // Report Count (6) 0x75, 0x08, // Report Size (8) 0x15, 0x00, // Log Min (0) 0x25, 0xF4, // Log Max (101) 0x05, 0x07, // Usage Pg (Key Codes) 0x19, 0x00, // Usage Min (0) 0x29, 0xF4, // Usage Max (101) 0x81, 0x00, // Input: (Data, Array) // 0xC0, // End Collection
usage Max和Log Max都改成244依然不能发送,请问是什么原因啊?
移植成功,现在分享下移植的过程:
1.首先用2541的hidReportMap[]覆盖掉2640中发送服务函数的hidReportMap:
2.在2640的发送服务函数中添加consumer control发送服务,可以直接把2541中的相应代码复制过来,可参考如何添加自定义服务
3.添加服务函数:HidKbd_AddService()中新增客户初始化函数:
GATTServApp_InitCharCfg(INVALID_CONNHANDLE, hidReportCCInClientCharCfg );
4.在hidkbdservice.h头文件中修改HID报告ID
#define HID_RPT_ID_KEY_IN 2 // Keyboard input report ID #define HID_RPT_ID_MOUSE_IN 1 // Mouse input report ID #define HID_RPT_ID_CC_IN 3 // Consumer Control input report ID #define HID_RPT_ID_LED_OUT 0 // LED output report ID #define HID_RPT_ID_FEATURE 0 // Feature report ID
5.在hidemukbd.c文件中添加CC的发送函数:(可以直接把2541中的函数拿过来用)
static void hidCCBuildReport( uint8 *pBuf, uint8 cmd ); static void hidCCSendReport( uint8 cmd, bool keyPressed, uint8 keyRepeated );
6.最后,在按键处理函数
static void HidEmuKbd_handleKeys(uint8_t shift, uint8_t keys)
中添加相应的健值处理函数即可,例如:
if(keys & KEY_MUTE) { hidCCSendReport(HID_CONSUMER_MUTE, TRUE, 0); uint8_t buf[2] = {0,0}; HidDev_Report( HID_RPT_ID_CC_IN, HID_REPORT_TYPE_INPUT, HID_CC_IN_RPT_LEN, buf ); }
发送完mute健值后,发送1个空健值,否则上位机响应不正常。
最后提一下,和主机第二次连接后 CC健值不能有效发送需要重新配对的问题的解决方法:
在hiddev.c文件中:
static void HidDev_sendReport(uint8_t id, uint8_t type, uint8_t len, uint8_t *pData)
函数的判断语句:
if (value & GATT_CLIENT_CFG_NOTIFY)
屏蔽掉即可。