modem: Support modem property "AlwaysOnline"

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.
This commit is contained in:
Forest Bond 2013-03-28 17:00:32 -04:00 committed by Denis Kenzior
parent 8ce35499cf
commit 0e0eb227f2
1 changed files with 14 additions and 6 deletions

View 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);