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 one
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};
42
43// This list is only used to translate Device properties
44B_TRANSLATE_MARK_VOID("unknown");
45B_TRANSLATE_MARK_VOID("Device");
46B_TRANSLATE_MARK_VOID("Computer");
47B_TRANSLATE_MARK_VOID("ACPI bus");
48B_TRANSLATE_MARK_VOID("PCI bus");
49B_TRANSLATE_MARK_VOID("ISA bus");
50B_TRANSLATE_MARK_VOID("Unknown device");
51
52
53Device::Device(Device* physicalParent, BusType busType, Category category,
54			const BString& name, const BString& manufacturer,
55			const BString& driverUsed, const BString& devPathsPublished)
56	:
57	BStringItem(name.String()),
58	fBusType(busType),
59	fCategory(category),
60	fPhysicalParent(physicalParent)
61{
62	SetAttribute(B_TRANSLATE("Device name"), B_TRANSLATE(name));
63	SetAttribute(B_TRANSLATE("Manufacturer"), B_TRANSLATE(manufacturer));
64	SetAttribute(B_TRANSLATE("Driver used"), B_TRANSLATE(driverUsed));
65	SetAttribute(B_TRANSLATE("Device paths"), B_TRANSLATE(devPathsPublished));
66}
67
68
69Device::~Device()
70{
71}
72
73
74BString
75Device::GetName()
76{
77	return fAttributeMap[B_TRANSLATE("Device name")];
78}
79
80
81BString
82Device::GetManufacturer()
83{
84	return fAttributeMap[B_TRANSLATE("Manufacturer")];
85}
86
87
88BString
89Device::GetDriverUsed()
90{
91	return fAttributeMap[B_TRANSLATE("Driver used")];
92}
93
94
95BString
96Device::GetDevPathsPublished()
97{
98	return fAttributeMap[B_TRANSLATE("Device paths")];
99}
100
101
102void
103Device::SetAttribute(const BString& name, const BString& value)
104{
105	if (name == B_TRANSLATE("Device name")) {
106		SetText(value.String());
107	}
108	fAttributeMap[name] = value;
109}
110
111
112Attributes
113Device::GetBasicAttributes()
114{
115	Attributes attributes;
116	attributes.push_back(Attribute(B_TRANSLATE("Device name:"), GetName()));
117	attributes.push_back(Attribute(B_TRANSLATE("Manufacturer:"),
118		GetManufacturer()));
119	return attributes;
120}
121
122
123Attributes
124Device::GetBusAttributes()
125{
126	Attributes attributes;
127	attributes.push_back(Attribute("None", ""));
128	return attributes;
129}
130
131
132Attributes
133Device::GetAllAttributes()
134{
135	Attributes attributes;
136	AttributeMapIterator iter;
137	for (iter = fAttributeMap.begin(); iter != fAttributeMap.end(); iter++) {
138		attributes.push_back(Attribute(iter->first, iter->second));
139	}
140	return attributes;
141}
142
143
144BString
145Device::GetBasicStrings()
146{
147	BString str(B_TRANSLATE("Device Name\t\t\t\t: %Name%\n"
148							"Manufacturer\t\t\t: %Manufacturer%\n"
149							"Driver used\t\t\t\t: %DriverUsed%\n"
150							"Device paths\t: %DevicePaths%"));
151
152	str.ReplaceFirst("%Name%", GetName());
153	str.ReplaceFirst("%Manufacturer%", GetManufacturer());
154	str.ReplaceFirst("%DriverUsed%", GetDriverUsed());
155	str.ReplaceFirst("%DevicePaths%", GetDevPathsPublished());
156
157	return str;
158}
159
160BString
161Device::GetBusStrings()
162{
163	return B_TRANSLATE("None");
164}
165
166
167BString
168Device::GetBusTabName()
169{
170	return B_TRANSLATE("Bus Information");
171}
172
173
174BString
175Device::GetAllStrings()
176{
177	BString str;
178	AttributeMapIterator iter;
179	for (iter = fAttributeMap.begin(); iter != fAttributeMap.end(); iter++) {
180		str << iter->first << " : " << iter->second << "\n";
181	}
182	return str;
183}
184