static DBusMessage *set_link_loss_alert(DBusConnection *conn, DBusMessage *msg, const char *level, void *data) { struct monitor *monitor = data; struct btd_device *device = monitor->device; bdaddr_t sba, dba; if (!level_is_valid(level)) return btd_error_invalid_args(msg); if (g_strcmp0(monitor->linklosslevel, level) == 0) return dbus_message_new_method_return(msg); g_free(monitor->linklosslevel); monitor->linklosslevel = g_strdup(level); adapter_get_address(device_get_adapter(device), &sba); device_get_address(device, &dba); write_proximity_config(&sba, &dba, "LinkLossAlertLevel", level); if (monitor->attrib) write_alert_level(monitor); return dbus_message_new_method_return(msg); }
static void attio_connected_cb(GAttrib *attrib, gpointer user_data) { struct monitor *monitor = user_data; monitor->attrib = g_attrib_ref(attrib); if (monitor->enabled.linkloss) write_alert_level(monitor); if (monitor->enabled.pathloss) read_tx_power(monitor); if (monitor->immediatehandle == 0) { if(monitor->enabled.pathloss || monitor->enabled.findme) discover_immediate_handle(monitor); } else if (monitor->fallbacklevel) write_immediate_alert(monitor); }
static void property_set_link_loss_level(const GDBusPropertyTable *property, DBusMessageIter *iter, GDBusPendingPropertySet id, void *data) { struct monitor *monitor = data; const char *level; if (dbus_message_iter_get_arg_type(iter) != DBUS_TYPE_STRING) { g_dbus_pending_property_error(id, ERROR_INTERFACE ".InvalidArguments", "Invalid arguments in method call"); return; } dbus_message_iter_get_basic(iter, &level); if (!level_is_valid(level)) { g_dbus_pending_property_error(id, ERROR_INTERFACE ".InvalidArguments", "Invalid arguments in method call"); return; } if (g_strcmp0(monitor->linklosslevel, level) == 0) goto done; g_free(monitor->linklosslevel); monitor->linklosslevel = g_strdup(level); write_proximity_config(monitor->device, "LinkLossAlertLevel", level); if (monitor->attrib) write_alert_level(monitor); done: g_dbus_pending_property_success(id); }