broadband-modem-qmi: port signal_load_values to use GTask
This commit is contained in:

committed by
Aleksander Morgado

parent
8047f54083
commit
7d8f0600e6
@@ -10521,9 +10521,7 @@ typedef struct {
|
|||||||
} SignalLoadValuesResult;
|
} SignalLoadValuesResult;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
MMBroadbandModemQmi *self;
|
|
||||||
QmiClientNas *client;
|
QmiClientNas *client;
|
||||||
GSimpleAsyncResult *result;
|
|
||||||
SignalLoadValuesStep step;
|
SignalLoadValuesStep step;
|
||||||
SignalLoadValuesResult *values_result;
|
SignalLoadValuesResult *values_result;
|
||||||
} SignalLoadValuesContext;
|
} SignalLoadValuesContext;
|
||||||
@@ -10545,13 +10543,10 @@ signal_load_values_result_free (SignalLoadValuesResult *result)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
signal_load_values_context_complete_and_free (SignalLoadValuesContext *ctx)
|
signal_load_values_context_free (SignalLoadValuesContext *ctx)
|
||||||
{
|
{
|
||||||
g_simple_async_result_complete (ctx->result);
|
|
||||||
if (ctx->values_result)
|
if (ctx->values_result)
|
||||||
signal_load_values_result_free (ctx->values_result);
|
signal_load_values_result_free (ctx->values_result);
|
||||||
g_object_unref (ctx->result);
|
|
||||||
g_object_unref (ctx->self);
|
|
||||||
g_slice_free (SignalLoadValuesContext, ctx);
|
g_slice_free (SignalLoadValuesContext, ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10586,26 +10581,27 @@ signal_load_values_finish (MMIfaceModemSignal *self,
|
|||||||
{
|
{
|
||||||
SignalLoadValuesResult *values_result;
|
SignalLoadValuesResult *values_result;
|
||||||
|
|
||||||
if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error))
|
values_result = g_task_propagate_pointer (G_TASK (res), error);
|
||||||
|
if (!values_result)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
values_result = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res));
|
|
||||||
*cdma = values_result->cdma ? g_object_ref (values_result->cdma) : NULL;
|
*cdma = values_result->cdma ? g_object_ref (values_result->cdma) : NULL;
|
||||||
*evdo = values_result->evdo ? g_object_ref (values_result->evdo) : NULL;
|
*evdo = values_result->evdo ? g_object_ref (values_result->evdo) : NULL;
|
||||||
*gsm = values_result->gsm ? g_object_ref (values_result->gsm) : NULL;
|
*gsm = values_result->gsm ? g_object_ref (values_result->gsm) : NULL;
|
||||||
*umts = values_result->umts ? g_object_ref (values_result->umts) : NULL;
|
*umts = values_result->umts ? g_object_ref (values_result->umts) : NULL;
|
||||||
*lte = values_result->lte ? g_object_ref (values_result->lte) : NULL;
|
*lte = values_result->lte ? g_object_ref (values_result->lte) : NULL;
|
||||||
|
signal_load_values_result_free (values_result);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void signal_load_values_context_step (SignalLoadValuesContext *ctx);
|
static void signal_load_values_context_step (GTask *task);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
signal_load_values_get_signal_strength_ready (QmiClientNas *client,
|
signal_load_values_get_signal_strength_ready (QmiClientNas *client,
|
||||||
GAsyncResult *res,
|
GAsyncResult *res,
|
||||||
SignalLoadValuesContext *ctx)
|
GTask *task)
|
||||||
{
|
{
|
||||||
|
SignalLoadValuesContext *ctx;
|
||||||
QmiMessageNasGetSignalStrengthOutput *output;
|
QmiMessageNasGetSignalStrengthOutput *output;
|
||||||
GArray *array;
|
GArray *array;
|
||||||
gint32 aux_int32;
|
gint32 aux_int32;
|
||||||
@@ -10614,11 +10610,12 @@ signal_load_values_get_signal_strength_ready (QmiClientNas *client,
|
|||||||
QmiNasRadioInterface radio_interface;
|
QmiNasRadioInterface radio_interface;
|
||||||
QmiNasEvdoSinrLevel sinr;
|
QmiNasEvdoSinrLevel sinr;
|
||||||
|
|
||||||
|
ctx = g_task_get_task_data (task);
|
||||||
output = qmi_client_nas_get_signal_strength_finish (client, res, NULL);
|
output = qmi_client_nas_get_signal_strength_finish (client, res, NULL);
|
||||||
if (!output || !qmi_message_nas_get_signal_strength_output_get_result (output, NULL)) {
|
if (!output || !qmi_message_nas_get_signal_strength_output_get_result (output, NULL)) {
|
||||||
/* No hard errors, go on to next step */
|
/* No hard errors, go on to next step */
|
||||||
ctx->step++;
|
ctx->step++;
|
||||||
signal_load_values_context_step (ctx);
|
signal_load_values_context_step (task);
|
||||||
if (output)
|
if (output)
|
||||||
qmi_message_nas_get_signal_strength_output_unref (output);
|
qmi_message_nas_get_signal_strength_output_unref (output);
|
||||||
return;
|
return;
|
||||||
@@ -10738,14 +10735,15 @@ signal_load_values_get_signal_strength_ready (QmiClientNas *client,
|
|||||||
|
|
||||||
/* Go on */
|
/* Go on */
|
||||||
ctx->step++;
|
ctx->step++;
|
||||||
signal_load_values_context_step (ctx);
|
signal_load_values_context_step (task);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
signal_load_values_get_signal_info_ready (QmiClientNas *client,
|
signal_load_values_get_signal_info_ready (QmiClientNas *client,
|
||||||
GAsyncResult *res,
|
GAsyncResult *res,
|
||||||
SignalLoadValuesContext *ctx)
|
GTask *task)
|
||||||
{
|
{
|
||||||
|
SignalLoadValuesContext *ctx;
|
||||||
QmiMessageNasGetSignalInfoOutput *output;
|
QmiMessageNasGetSignalInfoOutput *output;
|
||||||
gint8 rssi;
|
gint8 rssi;
|
||||||
gint16 ecio;
|
gint16 ecio;
|
||||||
@@ -10755,11 +10753,12 @@ signal_load_values_get_signal_info_ready (QmiClientNas *client,
|
|||||||
gint16 rsrp;
|
gint16 rsrp;
|
||||||
gint16 snr;
|
gint16 snr;
|
||||||
|
|
||||||
|
ctx = g_task_get_task_data (task);
|
||||||
output = qmi_client_nas_get_signal_info_finish (client, res, NULL);
|
output = qmi_client_nas_get_signal_info_finish (client, res, NULL);
|
||||||
if (!output || !qmi_message_nas_get_signal_info_output_get_result (output, NULL)) {
|
if (!output || !qmi_message_nas_get_signal_info_output_get_result (output, NULL)) {
|
||||||
/* No hard errors, go on to next step */
|
/* No hard errors, go on to next step */
|
||||||
ctx->step++;
|
ctx->step++;
|
||||||
signal_load_values_context_step (ctx);
|
signal_load_values_context_step (task);
|
||||||
if (output)
|
if (output)
|
||||||
qmi_message_nas_get_signal_info_output_unref (output);
|
qmi_message_nas_get_signal_info_output_unref (output);
|
||||||
return;
|
return;
|
||||||
@@ -10828,12 +10827,13 @@ signal_load_values_get_signal_info_ready (QmiClientNas *client,
|
|||||||
|
|
||||||
/* Keep on */
|
/* Keep on */
|
||||||
ctx->step++;
|
ctx->step++;
|
||||||
signal_load_values_context_step (ctx);
|
signal_load_values_context_step (task);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
signal_load_values_context_step (SignalLoadValuesContext *ctx)
|
signal_load_values_context_step (GTask *task)
|
||||||
{
|
{
|
||||||
|
SignalLoadValuesContext *ctx;
|
||||||
|
|
||||||
#define VALUES_RESULT_LOADED(ctx) \
|
#define VALUES_RESULT_LOADED(ctx) \
|
||||||
(ctx->values_result && \
|
(ctx->values_result && \
|
||||||
@@ -10843,6 +10843,8 @@ signal_load_values_context_step (SignalLoadValuesContext *ctx)
|
|||||||
ctx->values_result->umts || \
|
ctx->values_result->umts || \
|
||||||
ctx->values_result->lte))
|
ctx->values_result->lte))
|
||||||
|
|
||||||
|
ctx = g_task_get_task_data (task);
|
||||||
|
|
||||||
switch (ctx->step) {
|
switch (ctx->step) {
|
||||||
case SIGNAL_LOAD_VALUES_STEP_SIGNAL_FIRST:
|
case SIGNAL_LOAD_VALUES_STEP_SIGNAL_FIRST:
|
||||||
ctx->step++;
|
ctx->step++;
|
||||||
@@ -10855,7 +10857,7 @@ signal_load_values_context_step (SignalLoadValuesContext *ctx)
|
|||||||
5,
|
5,
|
||||||
NULL,
|
NULL,
|
||||||
(GAsyncReadyCallback)signal_load_values_get_signal_info_ready,
|
(GAsyncReadyCallback)signal_load_values_get_signal_info_ready,
|
||||||
ctx);
|
task);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ctx->step++;
|
ctx->step++;
|
||||||
@@ -10882,7 +10884,7 @@ signal_load_values_context_step (SignalLoadValuesContext *ctx)
|
|||||||
5,
|
5,
|
||||||
NULL,
|
NULL,
|
||||||
(GAsyncReadyCallback)signal_load_values_get_signal_strength_ready,
|
(GAsyncReadyCallback)signal_load_values_get_signal_strength_ready,
|
||||||
ctx);
|
task);
|
||||||
qmi_message_nas_get_signal_strength_input_unref (input);
|
qmi_message_nas_get_signal_strength_input_unref (input);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -10892,17 +10894,16 @@ signal_load_values_context_step (SignalLoadValuesContext *ctx)
|
|||||||
case SIGNAL_LOAD_VALUES_STEP_SIGNAL_LAST:
|
case SIGNAL_LOAD_VALUES_STEP_SIGNAL_LAST:
|
||||||
/* If any result is set, succeed */
|
/* If any result is set, succeed */
|
||||||
if (VALUES_RESULT_LOADED (ctx)) {
|
if (VALUES_RESULT_LOADED (ctx)) {
|
||||||
g_simple_async_result_set_op_res_gpointer (ctx->result,
|
g_task_return_pointer (task,
|
||||||
ctx->values_result,
|
g_memdup (&ctx->values_result, sizeof (ctx->values_result)),
|
||||||
(GDestroyNotify)signal_load_values_result_free);
|
(GDestroyNotify)signal_load_values_result_free);
|
||||||
ctx->values_result = NULL;
|
ctx->values_result = NULL;
|
||||||
} else {
|
} else {
|
||||||
g_simple_async_result_set_error (ctx->result,
|
g_task_return_new_error (task,
|
||||||
MM_CORE_ERROR,
|
MM_CORE_ERROR,
|
||||||
MM_CORE_ERROR_FAILED,
|
MM_CORE_ERROR_FAILED,
|
||||||
"No way to load extended signal information");
|
"No way to load extended signal information");
|
||||||
}
|
}
|
||||||
signal_load_values_context_complete_and_free (ctx);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10918,25 +10919,26 @@ signal_load_values (MMIfaceModemSignal *self,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
SignalLoadValuesContext *ctx;
|
SignalLoadValuesContext *ctx;
|
||||||
|
GTask *task;
|
||||||
QmiClient *client = NULL;
|
QmiClient *client = NULL;
|
||||||
|
|
||||||
mm_dbg ("loading extended signal information...");
|
mm_dbg ("loading extended signal information...");
|
||||||
|
|
||||||
if (!ensure_qmi_client (MM_BROADBAND_MODEM_QMI (self),
|
if (!assure_qmi_client (MM_BROADBAND_MODEM_QMI (self),
|
||||||
QMI_SERVICE_NAS, &client,
|
QMI_SERVICE_NAS, &client,
|
||||||
callback, user_data))
|
callback, user_data))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ctx = g_slice_new0 (SignalLoadValuesContext);
|
ctx = g_slice_new0 (SignalLoadValuesContext);
|
||||||
ctx->self = g_object_ref (self);
|
|
||||||
ctx->client = g_object_ref (client);
|
ctx->client = g_object_ref (client);
|
||||||
ctx->result = g_simple_async_result_new (G_OBJECT (self),
|
|
||||||
callback,
|
|
||||||
user_data,
|
|
||||||
signal_load_values);
|
|
||||||
ctx->step = SIGNAL_LOAD_VALUES_STEP_SIGNAL_FIRST;
|
ctx->step = SIGNAL_LOAD_VALUES_STEP_SIGNAL_FIRST;
|
||||||
|
|
||||||
signal_load_values_context_step (ctx);
|
task = g_task_new (self, cancellable, callback, user_data);
|
||||||
|
g_task_set_task_data (task,
|
||||||
|
ctx,
|
||||||
|
(GDestroyNotify)signal_load_values_context_free);
|
||||||
|
|
||||||
|
signal_load_values_context_step (task);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
Reference in New Issue
Block a user