diff options
-rw-r--r-- | plugins/hal.c | 85 |
1 files changed, 46 insertions, 39 deletions
diff --git a/plugins/hal.c b/plugins/hal.c index bc990a70..cb908e31 100644 --- a/plugins/hal.c +++ b/plugins/hal.c @@ -35,70 +35,77 @@ #include "adapter.h" #include "logging.h" -#if 0 -static uint32_t get_form_factor(LibHalContext *ctx) +static void formfactor_reply(DBusPendingCall *call, void *user_data) { - char *formfactor; + const char *formfactor = NULL; + DBusMessage *reply; uint8_t minor = 0; - formfactor = libhal_device_get_property_string(ctx, - "/org/freedesktop/Hal/devices/computer", - "system.formfactor", NULL); - - if (formfactor == NULL) - return (1 << 8); + reply = dbus_pending_call_steal_reply(call); - if (g_str_equal(formfactor, "laptop") == TRUE) - minor |= (1 << 2) | (1 << 3); - else if (g_str_equal(formfactor, "desktop") == TRUE) - minor |= 1 << 2; - else if (g_str_equal(formfactor, "server") == TRUE) - minor |= 1 << 3; - else if (g_str_equal(formfactor, "handheld") == TRUE) - minor += 1 << 4; + if (dbus_message_get_args(reply, NULL, DBUS_TYPE_STRING, &formfactor, + DBUS_TYPE_INVALID) == FALSE) { + error("Wrong formfactor arguments"); + return; + } - free(formfactor); + debug("Computer is classified as %s", formfactor); + + if (formfactor != NULL) { + if (g_str_equal(formfactor, "laptop") == TRUE) + minor |= (1 << 2) | (1 << 3); + else if (g_str_equal(formfactor, "desktop") == TRUE) + minor |= 1 << 2; + else if (g_str_equal(formfactor, "server") == TRUE) + minor |= 1 << 3; + else if (g_str_equal(formfactor, "handheld") == TRUE) + minor += 1 << 4; + } /* Computer major class */ - return (1 << 8) | minor; + debug("Setting 0x%06x device class", (1 << 8) | minor); } -#endif + +static DBusConnection *connection; static int hal_probe(struct btd_adapter *adapter) { -#if 0 - DBusConnection *conn; - LibHalContext *ctx; + const char *property = "system.formfactor"; + DBusMessage *message; + DBusPendingCall *call; - conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL); - if (conn == NULL) + connection = dbus_bus_get(DBUS_BUS_SYSTEM, NULL); + if (connection == NULL) return -ENOMEM; - ctx = libhal_ctx_new(); - if (libhal_ctx_set_dbus_connection(ctx, conn) == FALSE) { - libhal_ctx_free(ctx); - dbus_connection_unref(conn); - return -EIO; + message = dbus_message_new_method_call("org.freedesktop.Hal", + "/org/freedesktop/Hal/devices/computer", + "org.freedesktop.Hal.Device", + "GetPropertyString"); + if (message == NULL) { + error("Failed to create formfactor request"); + dbus_connection_unref(connection); + return -ENOMEM; } - if (libhal_ctx_init(ctx, NULL) == FALSE) { - error("Unable to init HAL context"); - libhal_ctx_free(ctx); - dbus_connection_unref(conn); + dbus_message_append_args(message, DBUS_TYPE_STRING, &property, + DBUS_TYPE_INVALID); + + if (dbus_connection_send_with_reply(connection, message, + &call, -1) == FALSE) { + error("Failed to send formfactor request"); + dbus_connection_unref(connection); return -EIO; } - debug("Setting 0x%06x device class", get_form_factor(ctx)); - - libhal_ctx_free(ctx); - dbus_connection_unref(conn); -#endif + dbus_pending_call_set_notify(call, formfactor_reply, NULL, NULL); return 0; } static void hal_remove(struct btd_adapter *adapter) { + dbus_connection_unref(connection); } static struct btd_adapter_driver hal_driver = { |