broadband-modem-qmi: implement OMA StartClientInitiatedSession()

This commit is contained in:
Aleksander Morgado
2013-09-09 10:19:20 +02:00
parent 72be4f1d57
commit 0c7def2f34
3 changed files with 97 additions and 0 deletions
+73
View File
@@ -8194,6 +8194,77 @@ oma_setup (MMIfaceModemOma *self,
qmi_message_oma_set_feature_setting_input_unref (input);
}
/*****************************************************************************/
/* 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) */
@@ -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;
+23
View File
@@ -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)
{
+1
View File
@@ -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);