微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 2640蓝牙键盘例程中的 音量控制键问题

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)

屏蔽掉即可。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top