summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/hal.c28
1 files changed, 25 insertions, 3 deletions
diff --git a/plugins/hal.c b/plugins/hal.c
index 6d8db67b..3b914f2d 100644
--- a/plugins/hal.c
+++ b/plugins/hal.c
@@ -28,15 +28,22 @@
#include <errno.h>
#include <dbus/dbus.h>
+#include <bluetooth/bluetooth.h>
+#include <bluetooth/hci.h>
+#include <bluetooth/hci_lib.h>
+
#include "plugin.h"
#include "adapter.h"
#include "logging.h"
+#include "dbus-hci.h"
static void formfactor_reply(DBusPendingCall *call, void *user_data)
{
+ struct btd_adapter *adapter = user_data;
const char *formfactor = NULL;
DBusMessage *reply;
- uint8_t minor = 0;
+ uint8_t cls[3], minor = 0;
+ int dd;
reply = dbus_pending_call_steal_reply(call);
@@ -59,8 +66,23 @@ static void formfactor_reply(DBusPendingCall *call, void *user_data)
minor += 1 << 4;
}
+ if (adapter_get_class(adapter, cls) < 0)
+ return;
+
+ debug("Current device class is 0x%02x%02x%02x\n",
+ cls[2], cls[1], cls[0]);
+
+ dd = hci_open_dev(adapter_get_dev_id(adapter));
+ if (dd < 0)
+ return;
+
/* Computer major class */
- debug("Setting 0x%06x device class", (1 << 8) | minor);
+ debug("Setting 0x%06x for major/minor device class", (1 << 8) | minor);
+
+ set_major_class(dd, cls, (1 << 8));
+ set_minor_class(dd, cls, minor);
+
+ hci_close_dev(dd);
}
static DBusConnection *connection;
@@ -95,7 +117,7 @@ static int hal_probe(struct btd_adapter *adapter)
return -EIO;
}
- dbus_pending_call_set_notify(call, formfactor_reply, NULL, NULL);
+ dbus_pending_call_set_notify(call, formfactor_reply, adapter, NULL);
return 0;
}