Each device has:- Name (long/short)- Manufacturer (long/short)- Category (one master list, each bus type maps its device types onto the master list)- Driver used- Device paths- Its bus type- Its connection parent, if applicableEach source has: (currently the RescanDevices method does this)- Init function- Scan method that returns the devices.- DevManSource, USBSource, FWSource, ...DeviceManager Specification===========================DeviceManager : BApplication-------------DeviceManagerView : BView-----------------Device : public BStringItem------BString GetName() const;BString GetManufacturer() const;Category GetCategory() const;BString DriverUsed() const;BString DevPathsPublished() const;BView Getprivate:BString _name;BString _manufacturer;Category _category;BString _driverUsed;BString devPathsPublished;map<BString, BString> _attributes;Bus : public BStringItem---virtual bool IsPresent() const = 0;virtual Scan() = 0;virtual vector<Device *> Devices() = 0;PCIBus : public Bus------PCIDevice: public Device---------ISABus : public Bus-----ISADevice : public Device---------USBBus : public Bus------USBDevice : public Device---------SCSIBus : public Bus-------SCSIDevice : public Device----------