Loading system/btif/co/bta_hh_co.cc +18 −4 Original line number Diff line number Diff line Loading @@ -157,7 +157,12 @@ static int uhid_read_event(btif_hh_device_t* p_dev) { if (p_dev->get_rpt_id_queue) { uint32_t* get_rpt_id = (uint32_t*)osi_malloc(sizeof(uint32_t)); *get_rpt_id = ev.u.feature.id; fixed_queue_enqueue(p_dev->get_rpt_id_queue, (void*)get_rpt_id); auto ok = fixed_queue_try_enqueue(p_dev->get_rpt_id_queue, (void*)get_rpt_id); if (!ok) { LOG_ERROR("get_rpt_id_queue is full, dropping event %d", *get_rpt_id); osi_free(get_rpt_id); return -EFAULT; } } if (ev.u.feature.rtype == UHID_FEATURE_REPORT) btif_hh_getreport(p_dev, BTHH_FEATURE_REPORT, ev.u.feature.rnum, 0); Loading Loading @@ -196,7 +201,12 @@ static int uhid_read_event(btif_hh_device_t* p_dev) { if (sent && p_dev->set_rpt_id_queue) { uint32_t* set_rpt_id = (uint32_t*)osi_malloc(sizeof(uint32_t)); *set_rpt_id = ev.u.set_report.id; fixed_queue_enqueue(p_dev->set_rpt_id_queue, (void*)set_rpt_id); auto ok = fixed_queue_try_enqueue(p_dev->set_rpt_id_queue, (void*)set_rpt_id); if (!ok) { LOG_ERROR("set_rpt_id_queue is full, dropping event %d", *set_rpt_id); osi_free(set_rpt_id); return -EFAULT; } } break; } Loading Loading @@ -604,7 +614,7 @@ void bta_hh_co_set_rpt_rsp(uint8_t dev_handle, uint8_t status) { // Send the HID set report reply to the kernel. if (p_dev->fd >= 0) { uint32_t* set_rpt_id = (uint32_t*)fixed_queue_dequeue(p_dev->set_rpt_id_queue); (uint32_t*)fixed_queue_try_dequeue(p_dev->set_rpt_id_queue); if (set_rpt_id) { struct uhid_event ev = {}; Loading Loading @@ -654,7 +664,11 @@ void bta_hh_co_get_rpt_rsp(uint8_t dev_handle, uint8_t status, uint8_t* p_rpt, // Send the HID report to the kernel. if (p_dev->fd >= 0 && p_dev->get_rpt_snt > 0 && p_dev->get_rpt_snt--) { uint32_t* get_rpt_id = (uint32_t*)fixed_queue_dequeue(p_dev->get_rpt_id_queue); (uint32_t*)fixed_queue_try_dequeue(p_dev->get_rpt_id_queue); if (get_rpt_id == nullptr) { APPL_TRACE_WARNING("%s: Error: UHID_GET_REPORT queue is empty", __func__); return; } memset(&ev, 0, sizeof(ev)); ev.type = UHID_FEATURE_ANSWER; ev.u.feature_answer.id = *get_rpt_id; Loading Loading
system/btif/co/bta_hh_co.cc +18 −4 Original line number Diff line number Diff line Loading @@ -157,7 +157,12 @@ static int uhid_read_event(btif_hh_device_t* p_dev) { if (p_dev->get_rpt_id_queue) { uint32_t* get_rpt_id = (uint32_t*)osi_malloc(sizeof(uint32_t)); *get_rpt_id = ev.u.feature.id; fixed_queue_enqueue(p_dev->get_rpt_id_queue, (void*)get_rpt_id); auto ok = fixed_queue_try_enqueue(p_dev->get_rpt_id_queue, (void*)get_rpt_id); if (!ok) { LOG_ERROR("get_rpt_id_queue is full, dropping event %d", *get_rpt_id); osi_free(get_rpt_id); return -EFAULT; } } if (ev.u.feature.rtype == UHID_FEATURE_REPORT) btif_hh_getreport(p_dev, BTHH_FEATURE_REPORT, ev.u.feature.rnum, 0); Loading Loading @@ -196,7 +201,12 @@ static int uhid_read_event(btif_hh_device_t* p_dev) { if (sent && p_dev->set_rpt_id_queue) { uint32_t* set_rpt_id = (uint32_t*)osi_malloc(sizeof(uint32_t)); *set_rpt_id = ev.u.set_report.id; fixed_queue_enqueue(p_dev->set_rpt_id_queue, (void*)set_rpt_id); auto ok = fixed_queue_try_enqueue(p_dev->set_rpt_id_queue, (void*)set_rpt_id); if (!ok) { LOG_ERROR("set_rpt_id_queue is full, dropping event %d", *set_rpt_id); osi_free(set_rpt_id); return -EFAULT; } } break; } Loading Loading @@ -604,7 +614,7 @@ void bta_hh_co_set_rpt_rsp(uint8_t dev_handle, uint8_t status) { // Send the HID set report reply to the kernel. if (p_dev->fd >= 0) { uint32_t* set_rpt_id = (uint32_t*)fixed_queue_dequeue(p_dev->set_rpt_id_queue); (uint32_t*)fixed_queue_try_dequeue(p_dev->set_rpt_id_queue); if (set_rpt_id) { struct uhid_event ev = {}; Loading Loading @@ -654,7 +664,11 @@ void bta_hh_co_get_rpt_rsp(uint8_t dev_handle, uint8_t status, uint8_t* p_rpt, // Send the HID report to the kernel. if (p_dev->fd >= 0 && p_dev->get_rpt_snt > 0 && p_dev->get_rpt_snt--) { uint32_t* get_rpt_id = (uint32_t*)fixed_queue_dequeue(p_dev->get_rpt_id_queue); (uint32_t*)fixed_queue_try_dequeue(p_dev->get_rpt_id_queue); if (get_rpt_id == nullptr) { APPL_TRACE_WARNING("%s: Error: UHID_GET_REPORT queue is empty", __func__); return; } memset(&ev, 0, sizeof(ev)); ev.type = UHID_FEATURE_ANSWER; ev.u.feature_answer.id = *get_rpt_id; Loading