broadband-bearer: fully reopen data port before flashing

When disconnecting the data port, first fully close and reopen the port before
flashing. This helps with some modems where the flashing mechanism doesn't
fully work, like this ZTE modem:

    Before:
    [1360325270.357678] [mm-bearer.c:690] mm_bearer_disconnect(): Disconnecting bearer '/org/freedesktop/ModemManager1/Bearer/0'
    [1360325270.357796] [mm-iface-modem.c:1198] mm_iface_modem_update_state(): Modem /org/freedesktop/ModemManager1/Modem/1: state changed (connected -> disconnecting)
    [1360325270.358503] [mm-broadband-bearer.c:1539] disconnect_3gpp(): Sending PDP context deactivation in secondary port...
    [1360325270.358549] [mm-serial-port.c:927] mm_serial_port_open(): (ttyUSB4) device open count is 2 (open)
    [1360325270.358633] [mm-at-serial-port.c:392] debug_log(): (ttyUSB4): --> 'AT+CGACT=0,2<CR>'
    [1360325270.375131] [mm-at-serial-port.c:392] debug_log(): (ttyUSB4): <-- '<CR><LF>OK<CR><LF>'
    [1360325270.375251] [mm-serial-port.c:967] mm_serial_port_close(): (ttyUSB7) device open count is 1 (close)
    [1360325270.375282] [mm-serial-port.c:927] mm_serial_port_open(): (ttyUSB7) device open count is 2 (open)
    [1360325270.375300] [mm-broadband-bearer.c:1497] cgact_secondary_ready(): Flash primary port...
    [1360325270.375833] [mm-serial-port.c:967] mm_serial_port_close(): (ttyUSB4) device open count is 1 (close)
    [1360325271.377539] [mm-broadband-bearer.c:1455] primary_flash_3gpp_ready(): PDP disconnection already sent in secondary port
    [1360325271.377634] [mm-serial-port.c:967] mm_serial_port_close(): (ttyUSB7) device open count is 1 (close)
    [1360325271.377680] [mm-port.c:149] mm_port_set_connected(): (ttyUSB7): port now disconnected
    [1360325271.377721] [mm-bearer.c:623] disconnect_ready(): Disconnected bearer '/org/freedesktop/ModemManager1/Bearer/0'
    [1360325286.415396] [mm-serial-port.c:927] mm_serial_port_open(): (ttyUSB7) device open count is 2 (open)
    [1360325286.415510] [mm-at-serial-port.c:392] debug_log(): (ttyUSB7): --> 'AT+ZPAS?<CR>'
    [1360325287.400589] [mm-broadband-modem.c:1717] modem_load_signal_quality(): loading signal quality...
    [1360325287.400679] [mm-serial-port.c:927] mm_serial_port_open(): (ttyUSB7) device open count is 3 (open)
    [1360325289.401873] [mm-iface-modem.c:762] access_technologies_check_ready(): Couldn't refresh access technologies: 'Serial command timed out'
    [1360325289.401940] [mm-serial-port.c:967] mm_serial_port_close(): (ttyUSB7) device open count is 2 (close)
    [1360325289.401998] [mm-at-serial-port.c:392] debug_log(): (ttyUSB7): --> 'AT+CIND?<CR>'
    [1360325292.403162] [mm-serial-port.c:927] mm_serial_port_open(): (ttyUSB7) device open count is 3 (open)
    [1360325292.403247] [mm-serial-port.c:967] mm_serial_port_close(): (ttyUSB7) device open count is 2 (close
    ...

    After:
    [1360326617.604527] [mm-bearer.c:690] mm_bearer_disconnect(): Disconnecting bearer '/org/freedesktop/ModemManager1/Bearer/0'
    [1360326617.604622] [mm-iface-modem.c:1198] mm_iface_modem_update_state(): Modem /org/freedesktop/ModemManager1/Modem/0: state changed (connected -> disconnecting)
    [1360326617.605006] [mm-broadband-bearer.c:1535] disconnect_3gpp(): Sending PDP context deactivation in secondary port...
    [1360326617.605034] [mm-serial-port.c:929] mm_serial_port_open(): (ttyUSB4) device open count is 2 (open)
    [1360326617.605088] [mm-at-serial-port.c:392] debug_log(): (ttyUSB4): --> 'AT+CGACT=0,2<CR>'
    [1360326617.620075] [mm-at-serial-port.c:392] debug_log(): (ttyUSB4): <-- '<CR><LF>OK<CR><LF>'
    [1360326617.620206] [mm-broadband-bearer.c:1493] cgact_secondary_ready(): Flash primary port...
    [1360326617.620241] [mm-serial-port.c:1334] mm_serial_port_flash(): (ttyUSB7) reopening before flash (2)
    [1360326617.620265] [mm-serial-port.c:969] mm_serial_port_close(): (ttyUSB7) device open count is 1 (close)
    [1360326617.620286] [mm-serial-port.c:969] mm_serial_port_close(): (ttyUSB7) device open count is 0 (close)
    [1360326617.620320] [mm-serial-port.c:985] mm_serial_port_close(): (ttyUSB7) closing serial port...
    [1360326617.620356] [mm-port.c:149] mm_port_set_connected(): (ttyUSB7): port now disconnected
    [1360326617.621355] [mm-serial-port.c:1017] mm_serial_port_close(): (ttyUSB7) serial port closed
    [1360326617.621403] [mm-serial-port.c:860] mm_serial_port_open(): (ttyUSB7) opening serial port...
    [1360326617.622836] [mm-serial-port.c:417] real_config_fd(): (ttyUSB7): port attributes not fully set
This commit is contained in:
Aleksander Morgado
2013-02-18 15:41:26 +01:00
parent 553bebe825
commit 7a58647af7
+17
View File
@@ -1304,6 +1304,7 @@ disconnect_cdma (MMBroadbandBearer *self,
gpointer user_data)
{
DetailedDisconnectContext *ctx;
GError *error = NULL;
g_assert (primary != NULL);
@@ -1318,6 +1319,13 @@ disconnect_cdma (MMBroadbandBearer *self,
callback,
user_data);
/* Fully reopen the port before flashing */
mm_dbg ("Reopening primary port...");
if (!mm_serial_port_reopen (MM_SERIAL_PORT (ctx->primary), &error)) {
mm_warn ("Disconnecting CDMA: %s", error->message);
g_error_free (error);
}
/* Just flash the data port */
mm_serial_port_flash (MM_SERIAL_PORT (ctx->data),
1000,
@@ -1404,6 +1412,15 @@ data_flash_3gpp_ready (MMSerialPort *data,
static void
data_flash_3gpp (DetailedDisconnectContext *ctx)
{
GError *error = NULL;
/* Fully reopen the port before flashing */
mm_dbg ("Reopening data port...");
if (!mm_serial_port_reopen (MM_SERIAL_PORT (ctx->data), &error)) {
mm_warn ("Disconnecting 3GPP: %s", error->message);
g_error_free (error);
}
mm_dbg ("Flash data port...");
mm_serial_port_flash (MM_SERIAL_PORT (ctx->data),
1000,