diff options
| -rw-r--r-- | hcid/dbus-adapter.c | 19 | 
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]; | 
