root/src/apps/devices/Device.cpp
/*
 * Copyright 2008-2009 Haiku Inc. All rights reserved.
 * Distributed under the terms of the MIT License.
 *
 * Authors:
 *              Pieter Panman
 */


#include "Device.h"

#include <iostream>

#include <Catalog.h>

#undef B_TRANSLATION_CONTEXT
#define B_TRANSLATION_CONTEXT "Device"

// This list comes from the pciid list, except for the last ones
const char* kCategoryString[] = {
        B_TRANSLATE("Unclassified device"),                             // 0x00
        B_TRANSLATE("Mass storage controller"),                         // 0x01
        B_TRANSLATE("Network controller"),                                      // 0x02
        B_TRANSLATE("Display controller"),                                      // 0x03
        B_TRANSLATE("Multimedia controller"),                           // 0x04
        B_TRANSLATE("Memory controller"),                                       // 0x05
        B_TRANSLATE("Bridge"),                                                          // 0x06
        B_TRANSLATE("Communication controller"),                        // 0x07
        B_TRANSLATE("Generic system peripheral"),                       // 0x08
        B_TRANSLATE("Input device controller"),                         // 0x09
        B_TRANSLATE("Docking station"),                                         // 0x0a
        B_TRANSLATE("Processor"),                                                       // 0x0b
        B_TRANSLATE("Serial bus controller"),                           // 0x0c
        B_TRANSLATE("Wireless controller"),                             // 0x0d
        B_TRANSLATE("Intelligent controller"),                          // 0x0e
        B_TRANSLATE("Satellite communications controller"), // 0x0f
        B_TRANSLATE("Encryption controller"),                           // 0x10
        B_TRANSLATE("Signal processing controller"),            // 0x11
        B_TRANSLATE("Computer"),                                                        // 0x12 (added later)
        B_TRANSLATE("ACPI controller")                                          // 0x13 (added later)
};
const int kCategoryStringLength = sizeof(kCategoryString)/sizeof(char *);

// This list is only used to translate Device properties
B_TRANSLATE_MARK_VOID("unknown");
B_TRANSLATE_MARK_VOID("Device");
B_TRANSLATE_MARK_VOID("Computer");
B_TRANSLATE_MARK_VOID("ACPI bus");
B_TRANSLATE_MARK_VOID("PCI bus");
B_TRANSLATE_MARK_VOID("ISA bus");
B_TRANSLATE_MARK_VOID("USB bus");
B_TRANSLATE_MARK_VOID("Unknown device");


Device::Device(Device* physicalParent, BusType busType, Category category,
                        const BString& name, const BString& manufacturer,
                        const BString& driverUsed, const BString& devPathsPublished)
        :
        BStringItem(name.String()),
        fBusType(busType),
        fCategory(category),
        fPhysicalParent(physicalParent)
{
        SetAttribute(B_TRANSLATE("Device name"), B_TRANSLATE(name));
        SetAttribute(B_TRANSLATE("Manufacturer"), B_TRANSLATE(manufacturer));
        SetAttribute(B_TRANSLATE("Driver used"), B_TRANSLATE(driverUsed));
        SetAttribute(B_TRANSLATE("Device paths"), B_TRANSLATE(devPathsPublished));
}


Device::~Device()
{
}


BString
Device::GetName() const
{
        AttributeMapIterator it = fAttributeMap.find(B_TRANSLATE("Device name"));
        if (it != fAttributeMap.end())
                return it->second;
        return BString("unknown");
}


BString
Device::GetManufacturer() const
{
        AttributeMapIterator it = fAttributeMap.find(B_TRANSLATE("Manufacturer"));
        if (it != fAttributeMap.end())
                return it->second;
        return BString("Unknown");
}


BString
Device::GetDriverUsed() const
{
        AttributeMapIterator it = fAttributeMap.find(B_TRANSLATE("Driver used"));
        if (it != fAttributeMap.end())
                return it->second;
        return BString("Unknown");
}


BString
Device::GetDevPathsPublished() const
{
        AttributeMapIterator it = fAttributeMap.find(B_TRANSLATE("Device paths"));
        if (it != fAttributeMap.end())
                return it->second;
        return BString("Unknown");
}


void
Device::SetAttribute(const BString& name, const BString& value)
{
        if (name == B_TRANSLATE("Device name")) {
                SetText(value.String());
        }
        fAttributeMap[name] = value;
}


Attributes
Device::GetAllAttributes() const
{
        Attributes attributes;
        AttributeMapIterator iter;
        for (iter = fAttributeMap.begin(); iter != fAttributeMap.end(); iter++) {
                attributes.push_back(Attribute(iter->first, iter->second));
        }
        return attributes;
}


BString
Device::GetAllStrings() const
{
        BString str;
        AttributeMapIterator iter;
        for (iter = fAttributeMap.begin(); iter != fAttributeMap.end(); iter++) {
                str << iter->first << " : " << iter->second << "\n";
        }
        return str;
}