aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mm-broadband-modem.c80
1 files changed, 38 insertions, 42 deletions
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c
index 482b153a..56c1dc79 100644
--- a/src/mm-broadband-modem.c
+++ b/src/mm-broadband-modem.c
@@ -6971,20 +6971,11 @@ typedef struct {
guint8 almp_state;
} HdrStateResults;
-typedef struct {
- MMBroadbandModem *self;
- GSimpleAsyncResult *result;
- MMPortSerialQcdm *qcdm;
-} HdrStateContext;
-
static void
-hdr_state_context_complete_and_free (HdrStateContext *ctx)
+hdr_state_cleanup_port (MMPortSerial *port)
{
- g_simple_async_result_complete (ctx->result);
- g_object_unref (ctx->qcdm);
- g_object_unref (ctx->result);
- g_object_unref (ctx->self);
- g_free (ctx);
+ mm_port_serial_close (port);
+ g_object_unref (port);
}
static gboolean
@@ -6997,20 +6988,22 @@ modem_cdma_get_hdr_state_finish (MMIfaceModemCdma *self,
{
HdrStateResults *results;
- if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error))
+ results = g_task_propagate_pointer (G_TASK (res), error);
+ if (!results)
return FALSE;
- results = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res));
*hybrid_mode = results->hybrid_mode;
*session_state = results->session_state;
*almp_state = results->almp_state;
+ g_free (results);
+
return TRUE;
}
static void
hdr_subsys_state_info_ready (MMPortSerialQcdm *port,
GAsyncResult *res,
- HdrStateContext *ctx)
+ GTask *task)
{
QcdmResult *result;
HdrStateResults *results;
@@ -7020,8 +7013,8 @@ hdr_subsys_state_info_ready (MMPortSerialQcdm *port,
response = mm_port_serial_qcdm_command_finish (port, res, &error);
if (error) {
- g_simple_async_result_set_from_error (ctx->result, error);
- hdr_state_context_complete_and_free (ctx);
+ g_task_return_error (task, error);
+ g_object_unref (task);
return;
}
@@ -7031,12 +7024,12 @@ hdr_subsys_state_info_ready (MMPortSerialQcdm *port,
&err);
g_byte_array_unref (response);
if (!result) {
- g_simple_async_result_set_error (ctx->result,
- MM_CORE_ERROR,
- MM_CORE_ERROR_FAILED,
- "Failed to parse HDR subsys state info command result: %d",
- err);
- hdr_state_context_complete_and_free (ctx);
+ g_task_return_new_error (task,
+ MM_CORE_ERROR,
+ MM_CORE_ERROR_FAILED,
+ "Failed to parse HDR subsys state info command result: %d",
+ err);
+ g_object_unref (task);
return;
}
@@ -7049,8 +7042,8 @@ hdr_subsys_state_info_ready (MMPortSerialQcdm *port,
qcdm_result_get_u8 (result, QCDM_CMD_HDR_SUBSYS_STATE_INFO_ITEM_ALMP_STATE, &results->almp_state);
qcdm_result_unref (result);
- g_simple_async_result_set_op_res_gpointer (ctx->result, results, g_free);
- hdr_state_context_complete_and_free (ctx);
+ g_task_return_pointer (task, results, g_free);
+ g_object_unref (task);
}
static void
@@ -7059,40 +7052,43 @@ modem_cdma_get_hdr_state (MMIfaceModemCdma *self,
gpointer user_data)
{
MMPortSerialQcdm *qcdm;
- HdrStateContext *ctx;
+ GTask *task;
GByteArray *hdrstate;
+ GError *error = NULL;
+
+ task = g_task_new (self, NULL, callback, user_data);
qcdm = mm_base_modem_peek_port_qcdm (MM_BASE_MODEM (self));
if (!qcdm) {
- g_simple_async_report_error_in_idle (G_OBJECT (self),
- callback,
- user_data,
- MM_CORE_ERROR,
- MM_CORE_ERROR_UNSUPPORTED,
- "Cannot get HDR state without a QCDM port");
+ g_task_return_new_error (task,
+ MM_CORE_ERROR,
+ MM_CORE_ERROR_UNSUPPORTED,
+ "Cannot get HDR state without a QCDM port");
+ g_object_unref (task);
return;
}
- /* Setup context */
- ctx = g_new0 (HdrStateContext, 1);
- ctx->self = g_object_ref (self);
- ctx->result = g_simple_async_result_new (G_OBJECT (self),
- callback,
- user_data,
- modem_cdma_get_hdr_state);
- ctx->qcdm = g_object_ref (qcdm);
+ if (!mm_port_serial_open (MM_PORT_SERIAL (qcdm), &error)) {
+ g_task_return_error (task, error);
+ g_object_unref (task);
+ return;
+ }
+
+ g_task_set_task_data (task,
+ g_object_ref (qcdm),
+ (GDestroyNotify) hdr_state_cleanup_port);
/* Setup command */
hdrstate = g_byte_array_sized_new (25);
hdrstate->len = qcdm_cmd_hdr_subsys_state_info_new ((gchar *) hdrstate->data, 25);
g_assert (hdrstate->len);
- mm_port_serial_qcdm_command (ctx->qcdm,
+ mm_port_serial_qcdm_command (qcdm,
hdrstate,
3,
NULL,
(GAsyncReadyCallback)hdr_subsys_state_info_ready,
- ctx);
+ task);
g_byte_array_unref (hdrstate);
}