1/*
2 * Copyright 2007 Oliver Ruiz Dorantes, oliver.ruiz.dorantes_at_gmail.com
3 * All rights reserved. Distributed under the terms of the MIT License.
4 */
5#ifndef _DEVICE_CLASS_H
6#define _DEVICE_CLASS_H
7
8#include <String.h>
9#include <View.h>
10
11namespace Bluetooth {
12
13#define UNKNOWN_CLASS_OF_DEVICE 0x000000
14
15class DeviceClass {
16
17public:
18
19	static const uint8 PixelsForIcon = 32;
20	static const uint8 IconInsets = 5;
21
22	DeviceClass(uint8 record[3])
23	{
24		SetRecord(record);
25	}
26
27
28	DeviceClass(uint8 major, uint8 minor, uint16 service)
29	{
30		SetRecord(major, minor, service);
31	}
32
33
34	DeviceClass(void)
35	{
36		fRecord = UNKNOWN_CLASS_OF_DEVICE;
37	}
38
39	void SetRecord(uint8 record[3])
40	{
41		fRecord = record[0]|record[1]<<8|record[2]<<16;
42	}
43
44	void SetRecord(uint8 major, uint8 minor, uint16 service)
45	{
46		fRecord = (minor & 0x3F) << 2;
47		fRecord |= (major & 0x1F) << 8;
48		fRecord |= (service & 0x7FF) << 13;
49	}
50
51
52	uint16 ServiceClass()
53	{
54		return (fRecord & 0x00FFE000) >> 13;
55	}
56
57	uint8 MajorDeviceClass()
58	{
59		return (fRecord & 0x00001F00) >> 8;
60	}
61
62	uint8 MinorDeviceClass()
63	{
64		return (fRecord & 0x000000FF) >> 2;
65	}
66
67	uint32 Record()
68	{
69		return fRecord;
70	}
71
72	bool IsUnknownDeviceClass()
73	{
74		return (fRecord == UNKNOWN_CLASS_OF_DEVICE);
75	}
76
77	void GetServiceClass(BString&);
78	void GetMajorDeviceClass(BString&);
79	void GetMinorDeviceClass(BString&);
80
81	void DumpDeviceClass(BString&);
82
83	void Draw(BView* view, const BPoint& point);
84
85private:
86	uint32 fRecord;
87
88};
89
90}
91
92#ifndef _BT_USE_EXPLICIT_NAMESPACE
93using Bluetooth::DeviceClass;
94#endif
95
96#endif // _DEVICE_CLASS_H
97