Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
DISCONTINUED:openSUSE:11.1:Update
ModemManager
mm-sierra.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File mm-sierra.patch of Package ModemManager
Index: ModemManager-0.1/plugins/mm-modem-sierra.c =================================================================== --- ModemManager-0.1.orig/plugins/mm-modem-sierra.c +++ ModemManager-0.1/plugins/mm-modem-sierra.c @@ -23,36 +23,89 @@ mm_modem_sierra_new (const char *data_de NULL)); } +/*****************************************************************************/ +/* Modem class override functions */ +/*****************************************************************************/ + static void -parent_enable_done (MMModem *modem, GError *error, gpointer user_data) +pin_check_done (MMModem *modem, GError *error, gpointer user_data) { MMCallbackInfo *info = (MMCallbackInfo *) user_data; if (error) info->error = g_error_copy (error); - else if (GPOINTER_TO_INT (mm_callback_info_get_data (info, "sierra-enable"))) { + mm_callback_info_schedule (info); +} + +static gboolean +sierra_enabled (gpointer data) +{ + MMCallbackInfo *info = (MMCallbackInfo *) data; + + /* Now check the PIN explicitly, sierra doesn't seem to report + that it needs it otherwise */ + mm_generic_gsm_check_pin (MM_GENERIC_GSM (info->modem), pin_check_done, info); + + return FALSE; +} + +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 { /* Sierra returns OK on +CFUN=1 right away but needs some time to finish initialization */ - sleep (10); + g_timeout_add_seconds (10, sierra_enabled, info); } +} - mm_callback_info_schedule (info); +static void +enable_flash_done (MMSerial *serial, gpointer user_data) +{ + mm_serial_queue_command (serial, "Z E0 V1 X4 &C1 +CMEE=1", 3, init_done, user_data); +} + +static void +disable_flash_done (MMSerial *serial, gpointer user_data) +{ + mm_serial_close (serial); + mm_callback_info_schedule ((MMCallbackInfo *) user_data); } static void enable (MMModem *modem, - gboolean enable, + gboolean do_enable, MMModemFn callback, gpointer user_data) { - MMModem *parent_modem_iface; MMCallbackInfo *info; + /* First, reset the previously used CID */ + mm_generic_gsm_set_cid (MM_GENERIC_GSM (modem), 0); + info = mm_callback_info_new (modem, callback, user_data); - mm_callback_info_set_data (info, "sierra-enable", GINT_TO_POINTER (enable), NULL); + mm_callback_info_set_data (info, "sierra-enable", GINT_TO_POINTER (do_enable), NULL); + + if (!do_enable) { + if (mm_serial_is_connected (MM_SERIAL (modem))) + mm_serial_flash (MM_SERIAL (modem), 1000, disable_flash_done, 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); - parent_modem_iface = g_type_interface_peek_parent (MM_MODEM_GET_INTERFACE (modem)); - parent_modem_iface->enable (modem, enable, parent_enable_done, info); + if (info->error) + mm_callback_info_schedule (info); + } } /*****************************************************************************/
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor