const struct attm_desc hids_att_db[HOGPD_IDX_NB] ={
// HID服务声明
[HOGPD_IDX_SVC] = {ATT_DECL_PRIMARY_SERVICE,
烫(RD,启用),
sizeof (hid_svc), sizeof (hid_svc),
(uint8_t *) &hid_svc},
// HID服务声明
[HOGPD_IDX_INCL_SVC] = {ATT_DECL_INCLUDE,
烫(RD,启用),
sizeof (struct att_incl_desc) 0
零},
// HID信息特性声明
[HOGPD_IDX_HID_INFO_CHAR] = {ATT_DECL_CHARACTERISTIC,
烫(RD,启用),
sizeof (hids_hid_info_char), sizeof (hids_hid_info_char),
(uint8_t *) &hids_hid_info_char},
// HID信息特征值
[HOGPD_IDX_HID_INFO_VAL] = {ATT_CHAR_HID_INFO,
烫(RD,启用),
sizeof (struct hids_hid_info) 0
零},
// HID控制点特性声明
[HOGPD_IDX_HID_CTNL_PT_CHAR] = {ATT_DECL_CHARACTERISTIC,
烫(RD,启用),
sizeof (hids_hid_ctnl_pt_char), sizeof (hids_hid_ctnl_pt_char),
(uint8_t *) &hids_hid_ctnl_pt_char},
// HID控制点特征值
[HOGPD_IDX_HID_CTNL_PT_VAL] = {ATT_CHAR_HID_CTNL_PT,
烫(WR,启用),
sizeof (uint8_t), 0,
零},
//报告映射特性声明
[HOGPD_IDX_REPORT_MAP_CHAR] = {ATT_DECL_CHARACTERISTIC,
烫(RD,启用),
sizeof (hids_report_map_char), sizeof (hids_report_map_char),
(uint8_t *) &hids_report_map_char},
//报表映射特征值
[HOGPD_IDX_REPORT_MAP_VAL] = {ATT_CHAR_REPORT_MAP,
烫(RD,启用),
HOGPD_REPORT_MAP_MAX_LEN * sizeof (uint8_t), 0,
零},
//报表映射特征-外部报表引用描述符
[HOGPD_IDX_REPORT_MAP_EXT_REP_REF] = {ATT_DESC_EXT_REPORT_REF,
烫(RD,启用),
sizeof (uint16_t), 0,
零},
...
}
“HID信息特征值”和其他特征值的设置有几种方法。
我刚刚发现“hogpd_set_report_map_req_handler”,这是一个设置“报告映射特征值”的函数。
我尝试创建一个类似于“hogpd_set_report_map_req_handler”的函数。函数运行了,但没有工作。
Static int hopd_set_hid_info_val_req_handler (ke_msg_id_t const msgid,
Struct hogpd_set_report_map_req const *param,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)
{
/ /状态
uint8_t status = PRF_ERR_INVALID_PARAM;
//检查报告映射值的长度
如果(param->report_map_len <= sizeof(struct hids_hid_info))
{
//检查HIDS实例—报表映射特性是必选且已添加。
如果(param->hids_nb < hogpd_env.hids_nb)
{
//设置报表映射字符。价值
的ifndef USE_ONE_HIDS_INSTANCE
= attmdb_att_set_value (hogpd_env地位。shdl [param - > hids_nb] + hogpd_env。att_tbl [param - > hids_nb] [HOGPD_HID_INFO_CHAR] + 1,
param - > report_map_len,
(uint8_t *)参数- > report_map [0]);
其他#
= attmdb_att_set_value (hogpd_env地位。shdl [0] + hogpd_env。att_tbl [0] [HOGPD_HID_INFO_CHAR] + 1,
param - > report_map_len,
(uint8_t *)参数- > report_map [0]);
# endif
}
其他的
{
//报告映射字符。请求不被允许
状态= PRF_ERR_REQ_DISALLOWED;
}
}
if (status != PRF_ERR_OK)
{
//连接不存在,请求不允许
prf_server_error_ind_send (prf_env_struct *) &hogpd_env,地位,
HOGPD_ERROR_IND HOGPD_SET_CHAR_VAL_REQ);
}
返回(KE_MSG_CONSUMED);
}
嗨awesley,
从示例函数中我能看到的唯一变化是,您已经用32字节的结构的大小替换了HOGPD_REPORT_MAP_MAX_LEN(512),这个大小对您的报告映射足够吗?我猜,如果功能没有返回错误,但设备没有工作,也许你应该检查你的报告地图。
由于MT_dialog