找回密码
 立即注册
搜索
热搜: 星闪 最新 活动
查看: 266|回复: 0

基于BS21_T20 BLE加入hid 复合设备的方法

[复制链接]

29

主题

0

回帖

147

积分

注册会员

积分
147
发表于 2024-6-11 18:20:32 | 显示全部楼层 |阅读模式
1、以ble键盘为例:
在hid remap数据组里,为了测试方便,在remap数值里增加了同样的键盘report,但是注意要修改report id,特征描述是需要传入report id;


2、在原有hid中增加特征:参考代码如下:



/* 添加描述符:HID report reference */
static void ble_add_hid_report_descriptor(uint8_t server_id, uint16_t srvc_handle, uint8_t * value, uint16_t len)
{
    gatts_add_desc_info_t descriptor = {
        .permissions = GATT_ATTRIBUTE_PERMISSION_READ,
        .value = value,
        .value_len = len,
    };
    bts_data_to_uuid_len2(BLE_UUID_REPORT_REFERENCE, &descriptor.desc_uuid);
    gatts_add_descriptor(server_id, srvc_handle, &descriptor);
}

static void ble_hid_add_character_custom_report(uint8_t server_id, uint16_t srvc_handle)
{
    uint8_t value[7] = { 0 };
    gatts_add_character_result_t handle_result = { 0 };
    gatts_add_chara_info_t character = {
        .permissions = GATT_ATTRIBUTE_PERMISSION_READ,
        .properties = HID_INPUT_REPORT_PROPERTIES,
        .value_len = sizeof(value),
        .value = value,
    };
    bts_data_to_uuid_len2(BLE_UUID_REPORT, &character.chara_uuid);
    if (gatts_add_characteristic_sync(server_id, srvc_handle, &character, &handle_result) == ERRCODE_SUCC)
    {
        ble_hid_add_descriptor_ccc(server_id, srvc_handle);

        uint8_t report_reference[] = { 2, 1 };
        ble_add_hid_report_descriptor(server_id, srvc_handle, report_reference, sizeof(report_reference));
        g_char_value_handle.nkro_handle = handle_result.value_handle;
    }
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|【淇诺科技】技术论坛 ( 粤ICP备14010465号-1|粤ICP备14010465号-1 )

GMT+8, 2026-4-2 17:21 , Processed in 0.125426 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表