VirtualBox

source: vbox/trunk/src/VBox/Main/include/USBDeviceImpl.h@ 5528

Last change on this file since 5528 was 5528, checked in by vboxsync, 17 years ago

Added PortVersion and Version attributes for obtaining the major USB version of the port and the device respectively.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.9 KB
Line 
1/** @file
2 *
3 * VirtualBox COM class implementation
4 */
5
6/*
7 * Copyright (C) 2006-2007 innotek GmbH
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License as published by the Free Software Foundation,
13 * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
14 * distribution. VirtualBox OSE is distributed in the hope that it will
15 * be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18#ifndef ____H_USBDEVICEIMPL
19#define ____H_USBDEVICEIMPL
20
21#include "VirtualBoxBase.h"
22#include "Collection.h"
23
24
25/**
26 * Object class used for maintaining devices attached to a USB controller.
27 * Generally this contains much less information.
28 */
29class ATL_NO_VTABLE OUSBDevice :
30 public VirtualBoxSupportErrorInfoImpl<OUSBDevice, IUSBDevice>,
31 public VirtualBoxSupportTranslation<OUSBDevice>,
32 public VirtualBoxBase,
33 public IUSBDevice
34{
35public:
36
37 OUSBDevice();
38 virtual ~OUSBDevice();
39
40 DECLARE_NOT_AGGREGATABLE(OUSBDevice)
41
42 DECLARE_PROTECT_FINAL_CONSTRUCT()
43
44 BEGIN_COM_MAP(OUSBDevice)
45 COM_INTERFACE_ENTRY(ISupportErrorInfo)
46 COM_INTERFACE_ENTRY(IUSBDevice)
47 END_COM_MAP()
48
49 NS_DECL_ISUPPORTS
50
51 // public initializer/uninitializer for internal purposes only
52 HRESULT init(IUSBDevice *a_pUSBDevice);
53
54 // IUSBDevice properties
55 STDMETHOD(COMGETTER(Id))(GUIDPARAMOUT aId);
56 STDMETHOD(COMGETTER(VendorId))(USHORT *aVendorId);
57 STDMETHOD(COMGETTER(ProductId))(USHORT *aProductId);
58 STDMETHOD(COMGETTER(Revision))(USHORT *aRevision);
59 STDMETHOD(COMGETTER(Manufacturer))(BSTR *aManufacturer);
60 STDMETHOD(COMGETTER(Product))(BSTR *aProduct);
61 STDMETHOD(COMGETTER(SerialNumber))(BSTR *aSerialNumber);
62 STDMETHOD(COMGETTER(Address))(BSTR *aAddress);
63 STDMETHOD(COMGETTER(Port))(USHORT *aPort);
64 STDMETHOD(COMGETTER(Version))(USHORT *aVersion);
65 STDMETHOD(COMGETTER(PortVersion))(USHORT *aPortVersion);
66 STDMETHOD(COMGETTER(Remote))(BOOL *aRemote);
67
68 // public methods only for internal purposes
69 const Guid &id() { return mId; }
70
71 // for VirtualBoxSupportErrorInfoImpl
72 static const wchar_t *getComponentName() { return L"USBDevice"; }
73
74private:
75 /** The UUID of this device. */
76 Guid mId;
77
78 /** The vendor id of this USB device. */
79 USHORT mVendorId;
80 /** The product id of this USB device. */
81 USHORT mProductId;
82 /** The product revision number of this USB device.
83 * (high byte = integer; low byte = decimal) */
84 USHORT mRevision;
85 /** The Manufacturer string. (Quite possibly NULL.) */
86 Bstr mManufacturer;
87 /** The Product string. (Quite possibly NULL.) */
88 Bstr mProduct;
89 /** The SerialNumber string. (Quite possibly NULL.) */
90 Bstr mSerialNumber;
91 /** The host specific address of the device. */
92 Bstr mAddress;
93 /** The host port number. */
94 USHORT mPort;
95 /** The major USB version number of the device. */
96 USHORT mVersion;
97 /** The major USB version number of the port the device is attached to. */
98 USHORT mPortVersion;
99 /** Remote (VRDP) or local device. */
100 BOOL mRemote;
101};
102
103COM_DECL_READONLY_ENUM_AND_COLLECTION_EX_BEGIN (ComObjPtr <OUSBDevice>, IUSBDevice, OUSBDevice)
104
105 STDMETHOD(FindById) (INPTR GUIDPARAM aId, IUSBDevice **aDevice)
106 {
107 Guid idToFind = aId;
108 if (idToFind.isEmpty())
109 return E_INVALIDARG;
110 if (!aDevice)
111 return E_POINTER;
112
113 *aDevice = NULL;
114 Vector::value_type found;
115 Vector::iterator it = vec.begin();
116 while (!found && it != vec.end())
117 {
118 Guid id;
119 (*it)->COMGETTER(Id) (id.asOutParam());
120 if (id == idToFind)
121 found = *it;
122 ++ it;
123 }
124
125 if (!found)
126 return setError (E_INVALIDARG, OUSBDeviceCollection::tr (
127 "Could not find a USB device with UUID {%s}"),
128 idToFind.toString().raw());
129
130 return found.queryInterfaceTo (aDevice);
131 }
132
133 STDMETHOD(FindByAddress) (INPTR BSTR aAddress, IUSBDevice **aDevice)
134 {
135 if (!aAddress)
136 return E_INVALIDARG;
137 if (!aDevice)
138 return E_POINTER;
139
140 *aDevice = NULL;
141 Vector::value_type found;
142 Vector::iterator it = vec.begin();
143 while (!found && it != vec.end())
144 {
145 Bstr address;
146 (*it)->COMGETTER(Address) (address.asOutParam());
147 if (address == aAddress)
148 found = *it;
149 ++ it;
150 }
151
152 if (!found)
153 return setError (E_INVALIDARG, OUSBDeviceCollection::tr (
154 "Could not find a USB device with address '%ls'"),
155 aAddress);
156
157 return found.queryInterfaceTo (aDevice);
158 }
159
160COM_DECL_READONLY_ENUM_AND_COLLECTION_EX_END (ComObjPtr <OUSBDevice>, IUSBDevice, OUSBDevice)
161
162#endif // ____H_USBDEVICEIMPL
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette