summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2013-08-16 11:53:50 +0200
committerAleksander Morgado <aleksander@lanedo.com>2013-09-09 10:19:20 +0200
commit0c7def2f345c329364ae7d5af680ca8688315aee (patch)
treea050ced70dc9b0a9be59d457a91e4175be0c3648
parent72be4f1d570c5a748963f6a831e765e620a4073d (diff)
downloadModemManager-0c7def2f345c329364ae7d5af680ca8688315aee.tar.gz
broadband-modem-qmi: implement OMA StartClientInitiatedSession()
-rw-r--r--src/mm-broadband-modem-qmi.c73
-rw-r--r--src/mm-modem-helpers-qmi.c23
-rw-r--r--src/mm-modem-helpers-qmi.h1
3 files changed, 97 insertions, 0 deletions
diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c
index bbebf2372..b5c96dfc6 100644
--- a/src/mm-broadband-modem-qmi.c
+++ b/src/mm-broadband-modem-qmi.c
@@ -8195,6 +8195,77 @@ oma_setup (MMIfaceModemOma *self,
}
/*****************************************************************************/
+/* Start client initiated session (OMA interface) */
+
+static gboolean
+oma_start_client_initiated_session_finish (MMIfaceModemOma *self,
+ GAsyncResult *res,
+ GError **error)
+{
+ return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error);
+}
+
+static void
+oma_start_session_ready (QmiClientOma *client,
+ GAsyncResult *res,
+ GSimpleAsyncResult *simple)
+{
+ QmiMessageOmaStartSessionOutput *output;
+ GError *error = NULL;
+
+ output = qmi_client_oma_start_session_finish (client, res, &error);
+ if (!output || !qmi_message_oma_start_session_output_get_result (output, &error))
+ g_simple_async_result_take_error (simple, error);
+ else
+ g_simple_async_result_set_op_res_gboolean (simple, TRUE);
+
+ if (output)
+ qmi_message_oma_start_session_output_unref (output);
+
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+static void
+oma_start_client_initiated_session (MMIfaceModemOma *self,
+ MMOmaSessionType session_type,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ QmiClient *client = NULL;
+ QmiMessageOmaStartSessionInput *input;
+
+ if (!ensure_qmi_client (MM_BROADBAND_MODEM_QMI (self),
+ QMI_SERVICE_OMA, &client,
+ callback, user_data))
+ return;
+
+ /* It's already checked in mm-iface-modem-oma; so just assert if this is not ok */
+ g_assert (session_type == MM_OMA_SESSION_TYPE_CLIENT_INITIATED_DEVICE_CONFIGURE ||
+ session_type == MM_OMA_SESSION_TYPE_CLIENT_INITIATED_PRL_UPDATE ||
+ session_type == MM_OMA_SESSION_TYPE_CLIENT_INITIATED_HANDS_FREE_ACTIVATION);
+
+ input = qmi_message_oma_start_session_input_new ();
+ qmi_message_oma_start_session_input_set_session_type (
+ input,
+ mm_oma_session_type_to_qmi_oma_session_type (session_type),
+ NULL);
+
+ qmi_client_oma_start_session (
+ QMI_CLIENT_OMA (client),
+ input,
+ 5,
+ NULL,
+ (GAsyncReadyCallback)oma_start_session_ready,
+ g_simple_async_result_new (G_OBJECT (self),
+ callback,
+ user_data,
+ oma_start_client_initiated_session));
+
+ qmi_message_oma_start_session_input_unref (input);
+}
+
+/*****************************************************************************/
/* Setup/Cleanup unsolicited event handlers (OMA interface) */
static void
@@ -10073,6 +10144,8 @@ iface_modem_oma_init (MMIfaceModemOma *iface)
iface->load_features_finish = oma_load_features_finish;
iface->setup = oma_setup;
iface->setup_finish = oma_setup_finish;
+ iface->start_client_initiated_session = oma_start_client_initiated_session;
+ iface->start_client_initiated_session_finish = oma_start_client_initiated_session_finish;
iface->setup_unsolicited_events = oma_setup_unsolicited_events;
iface->setup_unsolicited_events_finish = common_oma_setup_cleanup_unsolicited_events_finish;
iface->cleanup_unsolicited_events = oma_cleanup_unsolicited_events;
diff --git a/src/mm-modem-helpers-qmi.c b/src/mm-modem-helpers-qmi.c
index ece937efc..4a818ecb2 100644
--- a/src/mm-modem-helpers-qmi.c
+++ b/src/mm-modem-helpers-qmi.c
@@ -1297,6 +1297,29 @@ mm_oma_session_type_from_qmi_oma_session_type (QmiOmaSessionType qmi_session_typ
}
}
+QmiOmaSessionType
+mm_oma_session_type_to_qmi_oma_session_type (MMOmaSessionType mm_session_type)
+{
+ switch (mm_session_type) {
+ case MM_OMA_SESSION_TYPE_CLIENT_INITIATED_DEVICE_CONFIGURE:
+ return QMI_OMA_SESSION_TYPE_CLIENT_INITIATED_DEVICE_CONFIGURE;
+ case MM_OMA_SESSION_TYPE_CLIENT_INITIATED_PRL_UPDATE:
+ return QMI_OMA_SESSION_TYPE_CLIENT_INITIATED_PRL_UPDATE;
+ case MM_OMA_SESSION_TYPE_CLIENT_INITIATED_HANDS_FREE_ACTIVATION:
+ return QMI_OMA_SESSION_TYPE_CLIENT_INITIATED_HANDS_FREE_ACTIVATION;
+ case MM_OMA_SESSION_TYPE_DEVICE_INITIATED_HANDS_FREE_ACTIVATION:
+ return QMI_OMA_SESSION_TYPE_DEVICE_INITIATED_HANDS_FREE_ACTIVATION;
+ case MM_OMA_SESSION_TYPE_NETWORK_INITIATED_PRL_UPDATE:
+ return QMI_OMA_SESSION_TYPE_NETWORK_INITIATED_PRL_UPDATE;
+ case MM_OMA_SESSION_TYPE_NETWORK_INITIATED_DEVICE_CONFIGURE:
+ return QMI_OMA_SESSION_TYPE_NETWORK_INITIATED_DEVICE_CONFIGURE;
+ case MM_OMA_SESSION_TYPE_DEVICE_INITIATED_PRL_UPDATE:
+ return QMI_OMA_SESSION_TYPE_DEVICE_INITIATED_PRL_UPDATE;
+ default:
+ g_assert_not_reached ();
+ }
+}
+
MMOmaSessionState
mm_oma_session_state_from_qmi_oma_session_state (QmiOmaSessionState qmi_session_state)
{
diff --git a/src/mm-modem-helpers-qmi.h b/src/mm-modem-helpers-qmi.h
index ff2196cd2..fb3ef8d27 100644
--- a/src/mm-modem-helpers-qmi.h
+++ b/src/mm-modem-helpers-qmi.h
@@ -98,6 +98,7 @@ QmiWdsAuthentication mm_bearer_allowed_auth_to_qmi_authentication (MMBearerAllow
/* QMI/OMA to MM translations */
MMOmaSessionType mm_oma_session_type_from_qmi_oma_session_type (QmiOmaSessionType qmi_session_type);
+QmiOmaSessionType mm_oma_session_type_to_qmi_oma_session_type (MMOmaSessionType mm_session_type);
MMOmaSessionState mm_oma_session_state_from_qmi_oma_session_state (QmiOmaSessionState qmi_session_state);