summaryrefslogtreecommitdiffstats
path: root/hcid
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2006-08-09 20:19:22 +0000
committerMarcel Holtmann <marcel@holtmann.org>2006-08-09 20:19:22 +0000
commitc8983c82f71664b0177c4ba9454b3353c381ffb2 (patch)
treea0072aab7a17b20c17407788f18a25f32e18431c /hcid
parentec41b23f528dc5b65ea405f1edda3bffd802f372 (diff)
Fix remote minor class values
Diffstat (limited to 'hcid')
-rw-r--r--hcid/dbus-adapter.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/hcid/dbus-adapter.c b/hcid/dbus-adapter.c
index 382eaa5a..bec28be2 100644
--- a/hcid/dbus-adapter.c
+++ b/hcid/dbus-adapter.c
@@ -1218,19 +1218,19 @@ static DBusHandlerResult handle_dev_get_remote_major_class_req(DBusConnection *c
static DBusHandlerResult handle_dev_get_remote_minor_class_req(DBusConnection *conn, DBusMessage *msg, void *data)
{
DBusMessage *reply;
- const char *major_class;
+ const char *minor_class;
uint32_t class;
if (get_remote_class(conn, msg, data, &class) < 0)
return DBUS_HANDLER_RESULT_HANDLED;
- major_class = minor_class_str(class);
+ minor_class = minor_class_str(class);
reply = dbus_message_new_method_return(msg);
if (!reply)
return DBUS_HANDLER_RESULT_NEED_MEMORY;
- dbus_message_append_args(reply, DBUS_TYPE_STRING, &major_class,
+ dbus_message_append_args(reply, DBUS_TYPE_STRING, &minor_class,
DBUS_TYPE_INVALID);
return send_reply_and_unref(conn, reply);
@@ -2287,8 +2287,17 @@ const char *minor_class_str(uint32_t class)
minor_index = (class >> 6) & 0x03;
return peripheral_minor_cls[minor_index];
case 6: /* imaging */
- minor_index = (class >> 4) & 0x0F;
- return imaging_minor_cls[minor_index];
+ {
+ uint8_t shift_minor = 0;
+
+ minor_index = (class >> 4) & 0x0F;
+ while (shift_minor < (sizeof(imaging_minor_cls) / sizeof(*imaging_minor_cls))) {
+ if (((minor_index >> shift_minor) & 0x01) == 0x01)
+ return imaging_minor_cls[shift_minor];
+ shift_minor++;
+ }
+ }
+ break;
case 7: /* wearable */
minor_index = (class >> 2) & 0x3F;
return wearable_minor_cls[minor_index];