static int avctp_send_req(struct avctp *session, uint8_t code, uint8_t subunit, uint8_t opcode, uint8_t *operands, size_t operand_count, avctp_rsp_cb func, void *user_data) { struct avctp_channel *control = session->control; struct avctp_pending_req *p; struct avctp_control_req *req; if (control == NULL) return -ENOTCONN; req = g_new0(struct avctp_control_req, 1); req->code = code; req->subunit = subunit; req->op = opcode; req->func = func; req->operands = g_memdup(operands, operand_count); req->operand_count = operand_count; req->user_data = user_data; p = pending_create(control, process_control, req, control_req_destroy); req->p = p; g_queue_push_tail(control->queue, p); if (control->process_id == 0) control->process_id = g_idle_add(process_queue, control); return 0; }
int avctp_send_browsing_req(struct avctp *session, uint8_t *operands, size_t operand_count, avctp_browsing_rsp_cb func, void *user_data) { struct avctp_channel *browsing = session->browsing; struct avctp_pending_req *p; struct avctp_browsing_req *req; if (browsing == NULL) return -ENOTCONN; req = g_new0(struct avctp_browsing_req, 1); req->func = func; req->operands = g_memdup(operands, operand_count); req->operand_count = operand_count; req->user_data = user_data; p = pending_create(browsing, process_browsing, req, browsing_req_destroy); req->p = p; g_queue_push_tail(browsing->queue, p); /* Connection did not complete, delay process of the request */ if (browsing->watch == 0) return 0; if (browsing->process_id == 0) browsing->process_id = g_idle_add(process_queue, browsing); return 0; }
static int avctp_send_req(struct avctp *session, uint8_t code, uint8_t subunit, uint8_t opcode, uint8_t *operands, size_t operand_count, avctp_rsp_cb func, void *user_data) { struct avctp_channel *control = session->control; struct avctp_queue *queue; struct avctp_pending_req *p; struct avctp_control_req *req; if (control == NULL) return -ENOTCONN; /* If the request set a callback send it directly */ if (!func) return avctp_send(session->control, -1, AVCTP_COMMAND, code, subunit, opcode, operands, operand_count); req = g_new0(struct avctp_control_req, 1); req->code = code; req->subunit = subunit; req->op = opcode; req->func = func; req->operands = g_memdup(operands, operand_count); req->operand_count = operand_count; req->user_data = user_data; if (opcode == AVC_OP_PASSTHROUGH) { queue = g_slist_nth_data(control->queues, PASSTHROUGH_QUEUE); p = pending_create(queue, process_passthrough, req, control_req_destroy); } else { queue = g_slist_nth_data(control->queues, CONTROL_QUEUE); p = pending_create(queue, process_control, req, control_req_destroy); } req->p = p; g_queue_push_tail(queue->queue, p); if (queue->process_id == 0) queue->process_id = g_idle_add(process_queue, queue); return 0; }