This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2640R2 hid 示例问题

Guru**** 2589275 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/600438/cc2640r2-hid-example-questions

您好!

我正在进行 BLE hid 远程创建并连接到 Android 手机、目前我想使用 hid_emu_KDB 示例项目来实现我的案例。

但我有几个问题需要搜索答案。 我的遥控器上有10个按钮和1个 LED、供我使用。

例如、board_key.h 文件包含一些关键驱动程序、如下所示。

#define KEY_SELECT 0x0001
#define KEY_UP 0x0002
#define KEY_DOWN 0x0004
#define KEY_LEFT 0x0008
#define KEY_RIGHT 0x0010 

如果我需要定义10个密钥、如何编写代码? 是这样吗?

#define KEY_1 0x0001
#define KEY_2 0x0002
#define KEY_3 0x0004
#define KEY_4 0x0008
#define KEY_5 0x0010
#define KEY_6 0x0020
#define KEY_7 0x0040
#define KEY_8 0x0080
#define KEY_9 0x0100
#define KEY_10 0x0200

但键9和键10无法正常工作。

2.我在 Android 中使用 BLE 扫描仪应用、我可以找到所有服务和特征、但当我触发按钮或希望写入数据以点亮 LED 时、我无法读取/写入 HID 输入或输出报告中的值。

我也无法读取 HID 地图或其他报告、如果我尝试读取它、连接将崩溃并断开。 为什么?

3.例如,它是否真正实现了输出服务? 因为我发现 hidmukbd.c 文件中有一个 receiveReport 函数、但它没有执行任何操作。 程序在哪里点亮了 LED?

4.我在遥控器上有10个按钮,但我知道 HID 描述符只能发送8字节缓冲区,所以最后2个按钮我需要创建另一个函数来发送这些报告?

很抱歉、我不是很熟悉 HID、它有很多可学习的知识、请帮助我解决问题、非常感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    请阅读 Bluetooth.com 上的 HOGP (HID over GATT 配置文件)规格。

    [引用 user="user4661707"]

    2.我在 Android 中使用 BLE 扫描仪应用、我可以找到所有服务和特征、但当我触发按钮或希望写入数据以点亮 LED 时、我无法读取/写入 HID 输入或输出报告中的值。

    我也无法读取 HID 地图或其他报告、如果我尝试读取它、连接将崩溃并断开。 为什么?

    [/报价]

    您是否有监听器捕获? 对于我最初的猜测、您需要确保您实际与器件配对。 HOGP 要求您具有经过身份验证的读取/写入 HID 特征的权限。 我建议您在阅读这些字符之前使用 BTool 建立加密链接。

    [引用 user="user4661707"]3. 例如、它是否真正实现了输出服务? 因为我发现 hidmukbd.c 文件中有一个 receiveReport 函数、但它没有执行任何操作。 程序在哪里点亮 LED?

    你在这个上面死了。 该示例实际上不会打开任何 LED。 代码位于此处、以便您可以根据需要插入自己的 LED 齿形代码。

    [引用 user="user4661707"]4. 我在遥控器上有10个按钮、但我知道 HID 描述符只能发送8字节缓冲区、因此最后2个按钮我需要创建另一个函数来发送这些报告?

    您需要修改报告映射、指出您要增加描述符缓冲区大小。 解释 HID 描述符超出了我可以为您提供的范围支持、您需要参阅  www.usb.org/.../上的 HID 使用表

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Tom。

    感谢您的回复。

    对于第二个答案、我将得到一个来捕获数据。 我确实与我的手机配对、它也可以执行 key_left_arrow 或 key_right_arrow 之类的操作、手机显示有一个键盘设备已连接、 在 BLE 扫描仪应用中、我可以看到显示了所有的服务和特征、也可以从"device_information_service"、"scan_param_service"和"battery_service"读取所有数据、但只有"HID_service"我无法读取此服务中的任何数据、甚至无法写入。 hid 设备是否可能无法使用应用程序写入或读取任何数据、因为这需要您所说的身份验证权限?

    对于答案3、我只需要对该函数进行更改? 那么、从输出报告接收数据的方式已经存在了吗?

    我认为最主要的问题是、我不确定这2个问题、因为我无法读取或写入任何值。 当您的团队正在执行此项目时、您是否发生了此错误?

    再次感谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    该示例有意不返回 HidDev_ReadAttrCB()函数中的数据(当您尝试读取特征时)。 我在另一天发现了这个。 虽然很烦人、但这可能是为了节省闪存。 主机必须始终启用这些特征的通知、这些通知将包含 HID 报告。

    但是、写入输出报告、例如 LED 应该可以正常工作。 如果您插入一个断点、代码将在其中切换 LED、然后写入该 HID 报告、则它应命中该断点。 由于我们忽略了 hid 服务的所有"读取"、因此您无法通过回读特征来验证这一点。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    那么、您的意思是我无法读取/写入数据到输入/输出特征是不正确的? 它甚至可以报告所有 HID 数据、甚至可以报告输入或输出、并且仅报告未返回值?

    我发现、如果我将 HID 协议模式更改为引导协议模式、则可以读取数据、也可以将数据写入其中。 它是不同的吗?

    此外、还必须创建一个应用程序来验证遥控按键操作、因此我 担心报告无法在应用程序中使用。

    此外、我还让机具触发 LED (在引导协议模式下进行了测试)、但我有一个问题。 在 hidmukdb.c -> HidEmuKBD_reportCB 函数中

    if (oper = HID_DEV_OPER_WRITE)
    {
    if (uuid == report_UUID)
    {
    //处理对 LED 输出报告的写入;忽略其他报告
    if (type = HID_REPORT_TYPE_OUTPUT)
    {
    状态= HIDEMUKBD_receiveReport (* PLEN、pData);
    }
    }
    
    if (status == Success)(如果(状态==成功))
    {
    状态= HIDKBD_SetParameter (id、type、uuid、*PLEN、pData);
    }
    } 

    为什么 uuid 等于 report_UUID、而不是 boot_key_output_UUID? receiveReport 函数不应该从键盘输出特征接收数据?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    关于引导协议、请参阅采用的蓝牙 HIDS 和 HOGP 规范@ https://www.bluetooth.com/specifications/adopted-specifications

    [引用 USER="user4661707">您的意思是、我无法读取/写入数据到输入/输出特征中、这是不正确的? 它可以报告所有 HID 数据、甚至是输入或输出、并且只能返回值?

    要使 HID 服务正常工作、中央设备需要启用报告 CCCD 的通知。 这将允许远程通过通知而不是 GATT 读取来发送 HID 输入报告。 虽然这不符合规格、但遥控器将正常工作。 现在、对于您尝试执行的验证工作、这显然会带来问题。 我已经提交了一个 TT (BLESTACH-2146)来更改示例的行为、以便我们可以读取 HID 特性-这符合规格。 对于 HID 输出报告、读回内容会很有用、但同样、由于您尝试读操作、这也属于相同的请求范围。

    您能否在输入报告上启用通知并观察发送到中央设备的数据? 此外、您是否已使用输出(LED)报告尝试过断点方法?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tom。

    非常感谢、如果改变行为、思考将是完美的。


    我可以读取输入报告、如果在引导协议模式下触发按钮并启用通知。 我没有使用输出报告测试断点、目前我使用该特性来传输临时数据。 未执行 HID 输出报告。