service_cls= [
	"positioning",
	"networking",
	"rendering",
	"capturing",
	"object transfer",
	"audio",
	"telephony",
	"information"
]

major_cls = [
	"miscellaneous",
	"computer",
	"phone",
	"access point",
	"audio/video",
	"peripheral",
	"imaging",
	"wearable",
	"toy",
	"uncategorized"
]

computer_minor_cls = [
	"uncategorized",
	"desktop",
	"server",
	"laptop",
	"handheld",
	"palm",
	"wearable"
]
computer_minor_cls_i18n = [
	#translators: device class
	_("uncategorized"),
	#translators: device class
	_("desktop"),
	#translators: device class
	_("server"),
	#translators: device class
	_("laptop"),
	#translators: device class
	_("handheld"),
	#translators: device class
	_("palm"),
	"wearable"
]


phone_minor_cls = [
	"uncategorized",
	"cellular",
	"cordless",
	"smart phone",
	"modem",
	"isdn"
]
phone_minor_cls_i18n = [
	#translators: device class
	_("uncategorized"),
	#translators: device class
	_("cellular"),
	#translators: device class
	_("cordless"),
	#translators: device class
	_("smart phone"),
	#translators: device class
	_("modem"),
	#translators: device class
	_("isdn")
]
access_point_minor_cls = [
	"fully",
	"1-17 percent",
	"17-33 percent",
	"33-50 percent",
	"50-67 percent",
	"67-83 percent",
	"83-99 percent",
	"not available"
]

audio_video_minor_cls = [
	"uncategorized",
	"headset",
	"handsfree",
	"unknown",
	"microphone",
	"loudspeaker",
	"headphones",
	"portable audio",
	"car audio",
	"set-top box",
	"hifi audio",
	"vcr",
	"video camera",
	"camcorder",
	"video monitor",
	"video display and loudspeaker",
	"video conferencing",
	"unknown",
	"gaming/toy"
]
audio_video_minor_cls_i18n = [
	"uncategorized",
	#translators: device class
	_("headset"),
	#translators: device class
	_("handsfree"),
	#translators: device class
	_("unknown"),
	#translators: device class
	_("microphone"),
	"loudspeaker",
	"headphones",
	"portable audio",
	"car audio",
	"set-top box",
	"hifi audio",
	"vcr",
	"video camera",
	"camcorder",
	"video monitor",
	"video display and loudspeaker",
	"video conferencing",
	"unknown",
	"gaming/toy"
]
peripheral_minor_cls = [
	"uncategorized",
	"keyboard",
	"pointing",
	"combo"
]
peripheral_minor_cls_i18n = [
	"uncategorized",
	#translators: device class
	_("keyboard"),
	#translators: device class
	_("pointing"),
	"combo"
]

imaging_minor_cls = [
	"display",
	"camera",
	"scanner",
	"printer"
]

wearable_minor_cls = [
	"wrist watch",
	"pager",
	"jacket",
	"helmet",
	"glasses"
]

toy_minor_cls = [
	"robot",
	"vehicle",
	"doll",
	"controller",
	"game"
]

def get_major_class(klass):
	index = (klass >> 8) & 0x1F
	
	if index > 8:
		return major_cls[9]
	
	return major_cls[index]


def get_minor_class(klass, i18n=False):
	if klass == "unknown":
		if i18n:
			return _("unknown")
		else:
			return "unknown"
		
	i = (klass >> 8) & 0x1F
	
	

	if i == 1: 
		minor_index = (klass >> 2) & 0x3F;
		if minor_index < len(computer_minor_cls):
			if i18n:
				return computer_minor_cls_i18n[minor_index]
			else:
				return computer_minor_cls[minor_index]
		else:
			return ""
	elif i == 2:
		minor_index = (klass >> 2) & 0x3F;
		if (minor_index < len(phone_minor_cls)):
			if i18n:
				return phone_minor_cls_i18n[minor_index]
			else:
				return phone_minor_cls[minor_index]
		return "";
	elif i == 3:
		minor_index = (klass >> 5) & 0x07;
		if (minor_index < len(access_point_minor_cls)):
			return access_point_minor_cls[minor_index]
		else:
			return "";
	elif i == 4: 
		minor_index = (klass >> 2) & 0x3F;
		if (minor_index < len(audio_video_minor_cls)):
			if i18n:
				return audio_video_minor_cls_i18n[minor_index];
			else:
				return audio_video_minor_cls[minor_index];
		else:
			return "";
	elif i == 5:
		minor_index = (klass >> 6) & 0x03;
		if (minor_index < len(peripheral_minor_cls)):
			if i18n:
				return peripheral_minor_cls_i18n[minor_index];
			else:
				return peripheral_minor_cls[minor_index];
		else:
			return "";
	elif i == 6:
		return "imaging"
		
	elif i == 7:
		minor_index = (klass >> 2) & 0x3F;
		if (minor_index < len(wearable_minor_cls)):
			return wearable_minor_cls[minor_index];
		else:
			return "";
	elif i == 8:
		minor_index = (klass >> 2) & 0x3F;
		if (minor_index < len(toy_minor_cls)):
			return toy_minor_cls[minor_index];
		else:
			return "";

	if i18n:
		return _("unknown")
	else:
		return "unknown"

