mirror of git://git.sysmocom.de/ofono
qmi: assume version_list is up to date
The way things are currently coded, the gobi plugin calls qmi_device_discover and does nothing else until it succeeds. As such, we can safely assume that the version_list is set up when we go to create a service.
This commit is contained in:
parent
81180147cf
commit
76471964e2
|
@ -1989,43 +1989,22 @@ done:
|
||||||
__qmi_device_discovery_complete(data->device, &data->super);
|
__qmi_device_discovery_complete(data->device, &data->super);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void service_create_discover(uint8_t count,
|
|
||||||
const struct qmi_version *list, void *user_data)
|
|
||||||
{
|
|
||||||
struct service_create_data *data = user_data;
|
|
||||||
struct qmi_device *device = data->device;
|
|
||||||
struct qmi_request *req;
|
|
||||||
unsigned char client_req[] = { 0x01, 0x01, 0x00, data->type };
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
__debug_device(device, "service create [type=%d]", data->type);
|
|
||||||
|
|
||||||
for (i = 0; i < count; i++) {
|
|
||||||
if (list[i].type == data->type) {
|
|
||||||
data->major = list[i].major;
|
|
||||||
data->minor = list[i].minor;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
req = __request_alloc(QMI_SERVICE_CONTROL, 0x00,
|
|
||||||
QMI_CTL_GET_CLIENT_ID,
|
|
||||||
client_req, sizeof(client_req),
|
|
||||||
service_create_callback, data);
|
|
||||||
|
|
||||||
__request_submit(device, req);
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool service_create(struct qmi_device *device, bool shared,
|
static bool service_create(struct qmi_device *device, bool shared,
|
||||||
uint8_t type, qmi_create_func_t func,
|
uint8_t type, qmi_create_func_t func,
|
||||||
void *user_data, qmi_destroy_func_t destroy)
|
void *user_data, qmi_destroy_func_t destroy)
|
||||||
{
|
{
|
||||||
struct service_create_data *data;
|
struct service_create_data *data;
|
||||||
|
unsigned char client_req[] = { 0x01, 0x01, 0x00, type };
|
||||||
|
struct qmi_request *req;
|
||||||
|
int i;
|
||||||
|
|
||||||
data = g_try_new0(struct service_create_data, 1);
|
data = g_try_new0(struct service_create_data, 1);
|
||||||
if (!data)
|
if (!data)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (!device->version_list)
|
||||||
|
return false;
|
||||||
|
|
||||||
data->super.destroy = service_create_data_free;
|
data->super.destroy = service_create_data_free;
|
||||||
data->device = device;
|
data->device = device;
|
||||||
data->shared = shared;
|
data->shared = shared;
|
||||||
|
@ -2034,20 +2013,23 @@ static bool service_create(struct qmi_device *device, bool shared,
|
||||||
data->user_data = user_data;
|
data->user_data = user_data;
|
||||||
data->destroy = destroy;
|
data->destroy = destroy;
|
||||||
|
|
||||||
if (device->version_list) {
|
__debug_device(device, "service create [type=%d]", type);
|
||||||
service_create_discover(device->version_count,
|
|
||||||
device->version_list, data);
|
for (i = 0; i < device->version_count; i++) {
|
||||||
goto done;
|
if (device->version_list[i].type == data->type) {
|
||||||
|
data->major = device->version_list[i].major;
|
||||||
|
data->minor = device->version_list[i].minor;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qmi_device_discover(device, service_create_discover, data, NULL))
|
req = __request_alloc(QMI_SERVICE_CONTROL, 0x00,
|
||||||
goto done;
|
QMI_CTL_GET_CLIENT_ID,
|
||||||
|
client_req, sizeof(client_req),
|
||||||
|
service_create_callback, data);
|
||||||
|
|
||||||
g_free(data);
|
__request_submit(device, req);
|
||||||
|
|
||||||
return false;
|
|
||||||
|
|
||||||
done:
|
|
||||||
data->timeout = g_timeout_add_seconds(8, service_create_reply, data);
|
data->timeout = g_timeout_add_seconds(8, service_create_reply, data);
|
||||||
__qmi_device_discovery_started(device, &data->super);
|
__qmi_device_discovery_started(device, &data->super);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue