1/*
2 * Copyright 2008-2009 Haiku Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Pieter Panman
7 */
8
9
10#include "Device.h"
11
12#include <iostream>
13
14#include <Catalog.h>
15
16#undef B_TRANSLATION_CONTEXT
17#define B_TRANSLATION_CONTEXT "Device"
18
19// This list comes from the pciid list, except for the last ones
20const char* kCategoryString[] = {
21	B_TRANSLATE("Unclassified device"), 				// 0x00
22	B_TRANSLATE("Mass storage controller"),				// 0x01
23	B_TRANSLATE("Network controller"),					// 0x02
24	B_TRANSLATE("Display controller"), 					// 0x03
25	B_TRANSLATE("Multimedia controller"), 				// 0x04
26	B_TRANSLATE("Memory controller"),  					// 0x05
27	B_TRANSLATE("Bridge"), 								// 0x06
28	B_TRANSLATE("Communication controller"),  			// 0x07
29	B_TRANSLATE("Generic system peripheral"),  			// 0x08
30	B_TRANSLATE("Input device controller"),  			// 0x09
31	B_TRANSLATE("Docking station"),  					// 0x0a
32	B_TRANSLATE("Processor"),  							// 0x0b
33	B_TRANSLATE("Serial bus controller"),  				// 0x0c
34	B_TRANSLATE("Wireless controller"),  				// 0x0d
35	B_TRANSLATE("Intelligent controller"),  			// 0x0e
36	B_TRANSLATE("Satellite communications controller"), // 0x0f
37	B_TRANSLATE("Encryption controller"),  				// 0x10
38	B_TRANSLATE("Signal processing controller"),		// 0x11
39	B_TRANSLATE("Computer"),							// 0x12 (added later)
40	B_TRANSLATE("ACPI controller")						// 0x13 (added later)
41};
42const int kCategoryStringLength	= sizeof(kCategoryString)/sizeof(char *);
43
44// This list is only used to translate Device properties
45B_TRANSLATE_MARK_VOID("unknown");
46B_TRANSLATE_MARK_VOID("Device");
47B_TRANSLATE_MARK_VOID("Computer");
48B_TRANSLATE_MARK_VOID("ACPI bus");
49B_TRANSLATE_MARK_VOID("PCI bus");
50B_TRANSLATE_MARK_VOID("ISA bus");
51B_TRANSLATE_MARK_VOID("USB bus");
52B_TRANSLATE_MARK_VOID("Unknown device");
53
54
55Device::Device(Device* physicalParent, BusType busType, Category category,
56			const BString& name, const BString& manufacturer,
57			const BString& driverUsed, const BString& devPathsPublished)
58	:
59	BStringItem(name.String()),
60	fBusType(busType),
61	fCategory(category),
62	fPhysicalParent(physicalParent)
63{
64	SetAttribute(B_TRANSLATE("Device name"), B_TRANSLATE(name));
65	SetAttribute(B_TRANSLATE("Manufacturer"), B_TRANSLATE(manufacturer));
66	SetAttribute(B_TRANSLATE("Driver used"), B_TRANSLATE(driverUsed));
67	SetAttribute(B_TRANSLATE("Device paths"), B_TRANSLATE(devPathsPublished));
68}
69
70
71Device::~Device()
72{
73}
74
75
76BString
77Device::GetName()
78{
79	return fAttributeMap[B_TRANSLATE("Device name")];
80}
81
82
83BString
84Device::GetManufacturer()
85{
86	return fAttributeMap[B_TRANSLATE("Manufacturer")];
87}
88
89
90BString
91Device::GetDriverUsed()
92{
93	return fAttributeMap[B_TRANSLATE("Driver used")];
94}
95
96
97BString
98Device::GetDevPathsPublished()
99{
100	return fAttributeMap[B_TRANSLATE("Device paths")];
101}
102
103
104void
105Device::SetAttribute(const BString& name, const BString& value)
106{
107	if (name == B_TRANSLATE("Device name")) {
108		SetText(value.String());
109	}
110	fAttributeMap[name] = value;
111}
112
113
114Attributes
115Device::GetAllAttributes()
116{
117	Attributes attributes;
118	AttributeMapIterator iter;
119	for (iter = fAttributeMap.begin(); iter != fAttributeMap.end(); iter++) {
120		attributes.push_back(Attribute(iter->first, iter->second));
121	}
122	return attributes;
123}
124
125
126BString
127Device::GetAllStrings()
128{
129	BString str;
130	AttributeMapIterator iter;
131	for (iter = fAttributeMap.begin(); iter != fAttributeMap.end(); iter++) {
132		str << iter->first << " : " << iter->second << "\n";
133	}
134	return str;
135}
136