diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2013-08-16 11:53:50 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2013-09-09 10:19:20 +0200 |
commit | 0c7def2f345c329364ae7d5af680ca8688315aee (patch) | |
tree | a050ced70dc9b0a9be59d457a91e4175be0c3648 | |
parent | 72be4f1d570c5a748963f6a831e765e620a4073d (diff) | |
download | ModemManager-0c7def2f345c329364ae7d5af680ca8688315aee.tar.gz |
broadband-modem-qmi: implement OMA StartClientInitiatedSession()
-rw-r--r-- | src/mm-broadband-modem-qmi.c | 73 | ||||
-rw-r--r-- | src/mm-modem-helpers-qmi.c | 23 | ||||
-rw-r--r-- | src/mm-modem-helpers-qmi.h | 1 |
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); |