broadband-modem-qmi: implement full power off

The power off command will transition the device to the OFFLINE state. After
this, the modem will not be able to go online again unless it is power-cycled,
either externally (cut power and re-establish power) or through another
transition to QMI_DMES_OPERATING_MODE_RESET (which ModemManager will not
implement for this case).
This commit is contained in:
Aleksander Morgado
2014-02-18 10:47:58 +01:00
parent fe9f3a6553
commit 00a924617c

View File

@@ -2482,7 +2482,7 @@ load_signal_quality (MMIfaceModem *self,
/* Powering up the modem (Modem interface) */ /* Powering up the modem (Modem interface) */
static gboolean static gboolean
modem_power_up_down_finish (MMIfaceModem *self, modem_power_up_down_off_finish (MMIfaceModem *self,
GAsyncResult *res, GAsyncResult *res,
GError **error) GError **error)
{ {
@@ -2502,7 +2502,7 @@ dms_set_operating_mode_ready (QmiClientDms *client,
if (g_error_matches (error, if (g_error_matches (error,
QMI_CORE_ERROR, QMI_CORE_ERROR,
QMI_CORE_ERROR_UNSUPPORTED)) { QMI_CORE_ERROR_UNSUPPORTED)) {
mm_dbg ("Device doesn't support operating mode setting. Ignoring power up/down"); mm_dbg ("Device doesn't support operating mode setting. Ignoring power update.");
g_simple_async_result_set_op_res_gboolean (simple, TRUE); g_simple_async_result_set_op_res_gboolean (simple, TRUE);
g_error_free (error); g_error_free (error);
} else { } else {
@@ -2524,7 +2524,7 @@ dms_set_operating_mode_ready (QmiClientDms *client,
} }
static void static void
common_power_up_down (MMIfaceModem *self, common_power_up_down_off (MMIfaceModem *self,
QmiDmsOperatingMode mode, QmiDmsOperatingMode mode,
GAsyncReadyCallback callback, GAsyncReadyCallback callback,
gpointer user_data) gpointer user_data)
@@ -2542,7 +2542,7 @@ common_power_up_down (MMIfaceModem *self,
result = g_simple_async_result_new (G_OBJECT (self), result = g_simple_async_result_new (G_OBJECT (self),
callback, callback,
user_data, user_data,
common_power_up_down); common_power_up_down_off);
input = qmi_message_dms_set_operating_mode_input_new (); input = qmi_message_dms_set_operating_mode_input_new ();
if (!qmi_message_dms_set_operating_mode_input_set_mode ( if (!qmi_message_dms_set_operating_mode_input_set_mode (
@@ -2566,12 +2566,23 @@ common_power_up_down (MMIfaceModem *self,
qmi_message_dms_set_operating_mode_input_unref (input); qmi_message_dms_set_operating_mode_input_unref (input);
} }
static void
modem_power_off (MMIfaceModem *self,
GAsyncReadyCallback callback,
gpointer user_data)
{
common_power_up_down_off (self,
QMI_DMS_OPERATING_MODE_OFFLINE,
callback,
user_data);
}
static void static void
modem_power_down (MMIfaceModem *self, modem_power_down (MMIfaceModem *self,
GAsyncReadyCallback callback, GAsyncReadyCallback callback,
gpointer user_data) gpointer user_data)
{ {
common_power_up_down (self, common_power_up_down_off (self,
QMI_DMS_OPERATING_MODE_LOW_POWER, QMI_DMS_OPERATING_MODE_LOW_POWER,
callback, callback,
user_data); user_data);
@@ -2582,7 +2593,7 @@ modem_power_up (MMIfaceModem *self,
GAsyncReadyCallback callback, GAsyncReadyCallback callback,
gpointer user_data) gpointer user_data)
{ {
common_power_up_down (self, common_power_up_down_off (self,
QMI_DMS_OPERATING_MODE_ONLINE, QMI_DMS_OPERATING_MODE_ONLINE,
callback, callback,
user_data); user_data);
@@ -10200,11 +10211,13 @@ iface_modem_init (MMIfaceModem *iface)
/* Enabling/disabling */ /* Enabling/disabling */
iface->modem_power_up = modem_power_up; iface->modem_power_up = modem_power_up;
iface->modem_power_up_finish = modem_power_up_down_finish; iface->modem_power_up_finish = modem_power_up_down_off_finish;
iface->modem_after_power_up = NULL; iface->modem_after_power_up = NULL;
iface->modem_after_power_up_finish = NULL; iface->modem_after_power_up_finish = NULL;
iface->modem_power_down = modem_power_down; iface->modem_power_down = modem_power_down;
iface->modem_power_down_finish = modem_power_up_down_finish; iface->modem_power_down_finish = modem_power_up_down_off_finish;
iface->modem_power_off = modem_power_off;
iface->modem_power_off_finish = modem_power_up_down_off_finish;
iface->setup_flow_control = NULL; iface->setup_flow_control = NULL;
iface->setup_flow_control_finish = NULL; iface->setup_flow_control_finish = NULL;
iface->load_supported_charsets = NULL; iface->load_supported_charsets = NULL;