qmimodem: Return transaction identifier from service requests

This commit is contained in:
Marcel Holtmann 2012-06-24 22:38:26 -07:00
parent 74d208768a
commit 1631d21e35
2 changed files with 22 additions and 14 deletions

View File

@ -49,7 +49,6 @@ struct qmi_device {
GQueue *req_queue;
GQueue *control_queue;
GQueue *service_queue;
unsigned int next_id;
uint8_t next_control_tid;
uint16_t next_service_tid;
qmi_debug_func_t debug_func;
@ -70,6 +69,7 @@ struct qmi_service {
uint16_t major;
uint16_t minor;
uint8_t client_id;
uint16_t next_notify_id;
GList *notify_list;
};
@ -87,7 +87,6 @@ struct qmi_result {
};
struct qmi_request {
unsigned int id;
uint16_t tid;
void *buf;
size_t len;
@ -511,7 +510,6 @@ static void wakeup_writer(struct qmi_device *device)
static void __request_submit(struct qmi_device *device,
struct qmi_request *req, uint16_t transaction)
{
req->id = device->next_id++;
req->tid = transaction;
g_queue_push_tail(device->req_queue, req);
@ -754,11 +752,6 @@ struct qmi_device *qmi_device_new(int fd)
device->control_queue = g_queue_new();
device->service_queue = g_queue_new();
device->next_id = 1;
device->next_control_tid = 1;
device->next_service_tid = 1;
device->service_list = g_hash_table_new_full(g_direct_hash,
g_direct_equal, NULL, service_destroy);
@ -997,6 +990,9 @@ bool qmi_device_discover(struct qmi_device *device, qmi_discover_func_t func,
return false;
}
if (device->next_control_tid < 1)
device->next_control_tid = 1;
hdr->type = 0x00;
hdr->transaction = device->next_control_tid++;
@ -1024,6 +1020,9 @@ static void release_client(struct qmi_device *device,
return;
}
if (device->next_control_tid < 1)
device->next_control_tid = 1;
hdr->type = 0x00;
hdr->transaction = device->next_control_tid++;
@ -1460,6 +1459,9 @@ static void service_create_discover(uint8_t count,
return;
}
if (device->next_control_tid < 1)
device->next_control_tid = 1;
hdr->type = 0x00;
hdr->transaction = device->next_control_tid++;
@ -1617,7 +1619,7 @@ done:
g_free(data);
}
unsigned int qmi_service_send(struct qmi_service *service,
uint16_t qmi_service_send(struct qmi_service *service,
uint16_t message, struct qmi_param *param,
qmi_result_func_t func,
void *user_data, qmi_destroy_func_t destroy)
@ -1657,15 +1659,18 @@ unsigned int qmi_service_send(struct qmi_service *service,
return 0;
}
if (device->next_service_tid < 256)
device->next_service_tid = 256;
hdr->type = 0x00;
hdr->transaction = device->next_service_tid++;
__request_submit(device, req, hdr->transaction);
return req->id;
return hdr->transaction;
}
unsigned int qmi_service_register(struct qmi_service *service,
uint16_t qmi_service_register(struct qmi_service *service,
uint16_t message, qmi_result_func_t func,
void *user_data, qmi_destroy_func_t destroy)
{
@ -1678,7 +1683,10 @@ unsigned int qmi_service_register(struct qmi_service *service,
if (!notify)
return 0;
notify->id = service->device->next_id++;
if (service->next_notify_id < 1)
service->next_notify_id = 1;
notify->id = service->next_notify_id++;
notify->message = message;
notify->callback = func;
notify->user_data = user_data;

View File

@ -135,11 +135,11 @@ const char *qmi_service_get_identifier(struct qmi_service *service);
bool qmi_service_get_version(struct qmi_service *service,
uint16_t *major, uint16_t *minor);
unsigned int qmi_service_send(struct qmi_service *service,
uint16_t qmi_service_send(struct qmi_service *service,
uint16_t message, struct qmi_param *param,
qmi_result_func_t func,
void *user_data, qmi_destroy_func_t destroy);
unsigned int qmi_service_register(struct qmi_service *service,
uint16_t qmi_service_register(struct qmi_service *service,
uint16_t message, qmi_result_func_t func,
void *user_data, qmi_destroy_func_t destroy);
bool qmi_service_unregister_all(struct qmi_service *service);