void ofono_power_query(struct telephony_service *service, telephony_power_query_cb cb, void *data) { bool powered = false; struct ofono_data *od = telephony_service_get_data(service); struct telephony_error error; if (!od->modem) { error.code = TELEPHONY_ERROR_INTERNAL; cb(&error, false, data); return; } powered = ofono_modem_get_powered(od->modem) && ofono_modem_get_online(od->modem); cb(NULL, powered, data); }
static DBusMessage *thermal_management_set_property(DBusConnection *conn, DBusMessage *msg, void *data) { struct ril_thermal_management *tm = data; DBusMessageIter iter; DBusMessageIter var; const char *name; dbus_bool_t throttling; DBG(""); if (!ofono_modem_get_online(tm->modem)) return __ofono_error_not_available(msg); if (!dbus_message_iter_init(msg, &iter)) return __ofono_error_invalid_args(msg); if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING) return __ofono_error_invalid_args(msg); dbus_message_iter_get_basic(&iter, &name); if (!strcmp(name, "TransmitPowerThrottling")) { dbus_message_iter_next(&iter); if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT) return __ofono_error_invalid_args(msg); dbus_message_iter_recurse(&iter, &var); if (dbus_message_iter_get_arg_type(&var) != DBUS_TYPE_BOOLEAN) return __ofono_error_invalid_args(msg); dbus_message_iter_get_basic(&var, &throttling); if (tm->throttling == throttling) /* Ignore set request if new state == current state */ return dbus_message_new_method_return(msg); return set_rf_power_status(msg, throttling, tm); } return __ofono_error_invalid_args(msg); }
static DBusMessage *cf_get_properties(DBusConnection *conn, DBusMessage *msg, void *data) { struct ofono_call_forwarding *cf = data; struct ofono_modem *modem = __ofono_atom_get_modem(cf->atom); if ((cf->flags & CALL_FORWARDING_FLAG_CACHED) || ofono_modem_get_online(modem) == FALSE) return cf_get_properties_reply(msg, cf); if (cf->driver->query == NULL) return __ofono_error_not_implemented(msg); if (__ofono_call_forwarding_is_busy(cf) || __ofono_ussd_is_busy(cf->ussd)) return __ofono_error_busy(msg); cf->pending = dbus_message_ref(msg); cf->query_next = 0; get_query_next_cf_cond(cf); return NULL; }
static void test_modem_get_online() { ofono_modem_get_online(g_modem); }
static DBusMessage *cf_set_property(DBusConnection *conn, DBusMessage *msg, void *data) { struct ofono_call_forwarding *cf = data; struct ofono_modem *modem = __ofono_atom_get_modem(cf->atom); DBusMessageIter iter; DBusMessageIter var; const char *property; int cls; int type; if (ofono_modem_get_online(modem) == FALSE) return __ofono_error_not_available(msg); if (__ofono_call_forwarding_is_busy(cf) || __ofono_ussd_is_busy(cf->ussd)) return __ofono_error_busy(msg); if (!dbus_message_iter_init(msg, &iter)) return __ofono_error_invalid_args(msg); if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING) return __ofono_error_invalid_args(msg); dbus_message_iter_get_basic(&iter, &property); dbus_message_iter_next(&iter); if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT) return __ofono_error_invalid_args(msg); dbus_message_iter_recurse(&iter, &var); if (cf_condition_timeout_property(property, &cls)) { dbus_uint16_t timeout; GSList *l; struct ofono_call_forwarding_condition *c; type = CALL_FORWARDING_TYPE_NO_REPLY; if (dbus_message_iter_get_arg_type(&var) != DBUS_TYPE_UINT16) return __ofono_error_invalid_args(msg); dbus_message_iter_get_basic(&var, &timeout); if (timeout < 1 || timeout > 30) return __ofono_error_invalid_format(msg); l = g_slist_find_custom(cf->cf_conditions[type], GINT_TO_POINTER(cls), cf_condition_find_with_cls); if (l == NULL) return __ofono_error_failed(msg); c = l->data; return set_property_request(cf, msg, type, cls, &c->phone_number, timeout); } else if (cf_condition_enabled_property(cf, property, &type, &cls)) { struct ofono_phone_number ph; const char *number; int timeout; ph.number[0] = '\0'; ph.type = 129; if (dbus_message_iter_get_arg_type(&var) != DBUS_TYPE_STRING) return __ofono_error_invalid_args(msg); dbus_message_iter_get_basic(&var, &number); if (strlen(number) > 0 && !valid_phone_number_format(number)) return __ofono_error_invalid_format(msg); if (number[0] != '\0') string_to_phone_number(number, &ph); timeout = cf_find_timeout(cf->cf_conditions[type], cls); return set_property_request(cf, msg, type, cls, &ph, timeout); } return __ofono_error_invalid_args(msg); }
static void modem_prop_changed_cb(const gchar *name, void *data) { struct ofono_data *od = data; bool powered = false, online = false; const char *path = ofono_modem_get_path(od->modem); if (g_str_equal(name, "Online")) { online = ofono_modem_get_online(od->modem); telephony_service_power_status_notify(od->service, online); } else if (g_str_equal(name, "Interfaces")) { if (!od->sim && ofono_modem_is_interface_supported(od->modem, OFONO_MODEM_INTERFACE_SIM_MANAGER)) { od->sim = ofono_sim_manager_create(path); ofono_sim_manager_register_prop_changed_handler(od->sim, sim_prop_changed_cb, od); } else if (od->sim && !ofono_modem_is_interface_supported(od->modem, OFONO_MODEM_INTERFACE_SIM_MANAGER)) { ofono_sim_manager_free(od->sim); od->sim = NULL; } if (!od->netreg && ofono_modem_is_interface_supported(od->modem, OFONO_MODEM_INTERFACE_NETWORK_REGISTRATION)) { od->netreg = ofono_network_registration_create(path); ofono_network_registration_register_prop_changed_handler(od->netreg, network_prop_changed_cb, od); } else if (od->netreg && !ofono_modem_is_interface_supported(od->modem, OFONO_MODEM_INTERFACE_NETWORK_REGISTRATION)) { ofono_network_registration_free(od->netreg); od->netreg = NULL; notify_no_network_registration(od->service); } if (!od->rs && ofono_modem_is_interface_supported(od->modem, OFONO_MODEM_INTERFACE_RADIO_SETTINGS)) { od->rs = ofono_radio_settings_create(path); } else if (od->rs && !ofono_modem_is_interface_supported(od->modem, OFONO_MODEM_INTERFACE_RADIO_SETTINGS)) { ofono_radio_settings_free(od->rs); od->rs = NULL; } if (!od->vm && ofono_modem_is_interface_supported(od->modem, OFONO_MODEM_INTERFACE_VOICE_CALL_MANAGER)) { od->vm = ofono_voicecall_manager_create(path); } else if (od->vm && !ofono_modem_is_interface_supported(od->modem, OFONO_MODEM_INTERFACE_VOICE_CALL_MANAGER)) { ofono_voicecall_manager_free(od->vm); od->vm = NULL; } if (!od->mm && ofono_modem_is_interface_supported(od->modem, OFONO_MODEM_INTERFACE_MESSAGE_MANAGER)) { od->mm = ofono_message_manager_create(path); ofono_message_manager_set_incoming_message_callback(od->mm, incoming_message_cb, od); } else if (od->mm && !ofono_modem_is_interface_supported(od->modem, OFONO_MODEM_INTERFACE_MESSAGE_MANAGER)) { ofono_message_manager_free(od->mm); od->mm = NULL; } } else if (g_str_equal(name, "Powered")) { powered = ofono_modem_get_powered(od->modem); /* We need to handle power status changes differently when in initialization phase */ if (od->initializing && powered) { telephony_service_availability_changed_notify(od->service, true); od->initializing = false; } telephony_service_power_status_notify(od->service, powered); } }