VirtualBox

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

Last change on this file since 14949 was 14949, checked in by vboxsync, 16 years ago

Appended vim modeline to set tabstop and expand tabs (in the way
suggested by our coding guidelines).

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

© 2023 Oracle
ContactPrivacy policyTerms of Use