modem: Support modem property "AlwaysOnline"
authorForest Bond <forest.bond@rapidrollout.com>
Thu, 28 Mar 2013 21:00:32 +0000 (17:00 -0400)
committerDenis Kenzior <denkenz@gmail.com>
Tue, 2 Apr 2013 02:41:58 +0000 (21:41 -0500)
This can be set by the modem driver to indicate that the device is
always in the online state when it is enabled.  This is useful for
modem drivers that handle both CDMA and GSM devices.

src/modem.c

index 95e6093..01b0e35 100644 (file)
@@ -595,6 +595,17 @@ static gboolean modem_has_sim(struct ofono_modem *modem)
        return FALSE;
 }
 
+static gboolean modem_is_always_online(struct ofono_modem *modem)
+{
+       if (modem->driver->set_online == NULL)
+               return TRUE;
+
+       if (ofono_modem_get_boolean(modem, "AlwaysOnline") == TRUE)
+               return TRUE;
+
+       return FALSE;
+}
+
 static void common_online_cb(const struct ofono_error *error, void *data)
 {
        struct ofono_modem *modem = data;
@@ -702,11 +713,8 @@ static void sim_state_watch(enum ofono_sim_state new_state, void *user)
        case OFONO_SIM_STATE_READY:
                modem_change_state(modem, MODEM_STATE_OFFLINE);
 
-               /*
-                * If we don't have the set_online method, also proceed
-                * straight to the online state
-                */
-               if (modem->driver->set_online == NULL)
+               /* Modem is always online, proceed to online state. */
+               if (modem_is_always_online(modem) == TRUE)
                        set_online(modem, TRUE);
 
                if (modem->online == TRUE)
@@ -745,7 +753,7 @@ static DBusMessage *set_property_online(struct ofono_modem *modem,
        if (ofono_modem_get_emergency_mode(modem) == TRUE)
                return __ofono_error_emergency_active(msg);
 
-       if (driver->set_online == NULL)
+       if (modem_is_always_online(modem) == TRUE)
                return __ofono_error_not_implemented(msg);
 
        modem->pending = dbus_message_ref(msg);