From 447bca91b00fb6be9bf572d7adaf2adc87036bfa Mon Sep 17 00:00:00 2001 From: Tambet Ingo Date: Thu, 18 Sep 2008 12:33:25 +0300 Subject: [PATCH] Reduce the amount of power used to minimum when modem is disabled. --- src/mm-generic-gsm.c | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/src/mm-generic-gsm.c b/src/mm-generic-gsm.c index f12a5fdc..f7d87ef9 100644 --- a/src/mm-generic-gsm.c +++ b/src/mm-generic-gsm.c @@ -87,10 +87,10 @@ mm_generic_gsm_set_operator (MMGenericGsm *modem, /*****************************************************************************/ static void -init_done (MMSerial *serial, - GString *response, - GError *error, - gpointer user_data) +enable_done (MMSerial *serial, + GString *response, + GError *error, + gpointer user_data) { MMCallbackInfo *info = (MMCallbackInfo *) user_data; @@ -100,6 +100,21 @@ init_done (MMSerial *serial, mm_callback_info_schedule (info); } +static void +init_done (MMSerial *serial, + GString *response, + GError *error, + gpointer user_data) +{ + MMCallbackInfo *info = (MMCallbackInfo *) user_data; + + if (error) { + info->error = g_error_copy (error); + mm_callback_info_schedule (info); + } else + mm_serial_queue_command (serial, "+CFUN=1", 5, enable_done, user_data); +} + static void enable_flash_done (MMSerial *serial, gpointer user_data) { @@ -107,12 +122,21 @@ enable_flash_done (MMSerial *serial, gpointer user_data) } static void -disable_flash_done (MMSerial *serial, gpointer user_data) +disable_done (MMSerial *serial, + GString *response, + GError *error, + gpointer user_data) { mm_serial_close (serial); mm_callback_info_schedule ((MMCallbackInfo *) user_data); } +static void +disable_flash_done (MMSerial *serial, gpointer user_data) +{ + mm_serial_queue_command (serial, "+CFUN=0", 5, disable_done, user_data); +} + static void enable (MMModem *modem, gboolean enable, @@ -126,10 +150,8 @@ enable (MMModem *modem, if (!enable) { if (mm_serial_is_connected (MM_SERIAL (modem))) mm_serial_flash (MM_SERIAL (modem), 1000, disable_flash_done, info); - else { - mm_serial_close (MM_SERIAL (modem)); - mm_callback_info_schedule (info); - } + else + disable_flash_done (MM_SERIAL (modem), info); } else { if (mm_serial_open (MM_SERIAL (modem), &info->error)) mm_serial_flash (MM_SERIAL (modem), 100, enable_flash_done, info);