VirtualBox

source: vbox/trunk/src/VBox/Main/src-client/USBDeviceImpl.cpp@ 53297

Last change on this file since 53297 was 53297, checked in by vboxsync, 10 years ago

Main: Added API to report actual USB device speed.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 7.1 KB
Line 
1/* $Id: USBDeviceImpl.cpp 53297 2014-11-10 21:57:22Z vboxsync $ */
2/** @file
3 * VirtualBox COM class implementation
4 */
5
6/*
7 * Copyright (C) 2006-2011 Oracle Corporation
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 (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18#include "USBDeviceImpl.h"
19
20#include "AutoCaller.h"
21#include "Logging.h"
22
23#include <iprt/cpp/utils.h>
24
25// constructor / destructor
26/////////////////////////////////////////////////////////////////////////////
27
28DEFINE_EMPTY_CTOR_DTOR (OUSBDevice)
29
30HRESULT OUSBDevice::FinalConstruct()
31{
32 return BaseFinalConstruct();
33}
34
35void OUSBDevice::FinalRelease()
36{
37 uninit ();
38 BaseFinalRelease();
39}
40
41// public initializer/uninitializer for internal purposes only
42/////////////////////////////////////////////////////////////////////////////
43
44/**
45 * Initializes the USB device object.
46 *
47 * @returns COM result indicator
48 * @param aUSBDevice The USB device (interface) to clone.
49 */
50HRESULT OUSBDevice::init(IUSBDevice *aUSBDevice)
51{
52 LogFlowThisFunc(("aUSBDevice=%p\n", aUSBDevice));
53
54 ComAssertRet(aUSBDevice, E_INVALIDARG);
55
56 /* Enclose the state transition NotReady->InInit->Ready */
57 AutoInitSpan autoInitSpan(this);
58 AssertReturn(autoInitSpan.isOk(), E_FAIL);
59
60 HRESULT hrc = aUSBDevice->COMGETTER(VendorId)(&unconst(mData.vendorId));
61 ComAssertComRCRet(hrc, hrc);
62 ComAssertRet(mData.vendorId, E_INVALIDARG);
63
64 hrc = aUSBDevice->COMGETTER(ProductId)(&unconst(mData.productId));
65 ComAssertComRCRet(hrc, hrc);
66
67 hrc = aUSBDevice->COMGETTER(Revision)(&unconst(mData.revision));
68 ComAssertComRCRet(hrc, hrc);
69
70 BSTR tmp;
71 BSTR *bptr = &tmp;
72
73 hrc = aUSBDevice->COMGETTER(Manufacturer)(bptr);
74 ComAssertComRCRet(hrc, hrc);
75 unconst(mData.manufacturer) = Utf8Str(tmp);
76
77 hrc = aUSBDevice->COMGETTER(Product)(bptr);
78 ComAssertComRCRet(hrc, hrc);
79 unconst(mData.product) = Utf8Str(tmp);
80
81 hrc = aUSBDevice->COMGETTER(SerialNumber)(bptr);
82 ComAssertComRCRet(hrc, hrc);
83 unconst(mData.serialNumber) = Utf8Str(tmp);
84
85 hrc = aUSBDevice->COMGETTER(Address)(bptr);
86 ComAssertComRCRet(hrc, hrc);
87 unconst(mData.address) = Utf8Str(tmp);
88
89 hrc = aUSBDevice->COMGETTER(Port)(&unconst(mData.port));
90 ComAssertComRCRet(hrc, hrc);
91
92 hrc = aUSBDevice->COMGETTER(Version)(&unconst(mData.version));
93 ComAssertComRCRet(hrc, hrc);
94
95 hrc = aUSBDevice->COMGETTER(PortVersion)(&unconst(mData.portVersion));
96 ComAssertComRCRet(hrc, hrc);
97
98 hrc = aUSBDevice->COMGETTER(Speed)(&unconst(mData.speed));
99 ComAssertComRCRet(hrc, hrc);
100
101 hrc = aUSBDevice->COMGETTER(Remote)(&unconst(mData.remote));
102 ComAssertComRCRet(hrc, hrc);
103
104 Bstr uuid;
105 hrc = aUSBDevice->COMGETTER(Id)(uuid.asOutParam());
106 ComAssertComRCRet(hrc, hrc);
107 unconst(mData.id) = Guid(uuid);
108
109 /* Confirm a successful initialization */
110 autoInitSpan.setSucceeded();
111
112 return S_OK;
113}
114
115/**
116 * Uninitializes the instance and sets the ready flag to FALSE.
117 * Called either from FinalRelease() or by the parent when it gets destroyed.
118 */
119void OUSBDevice::uninit()
120{
121 LogFlowThisFunc(("\n"));
122
123 /* Enclose the state transition Ready->InUninit->NotReady */
124 AutoUninitSpan autoUninitSpan(this);
125 if (autoUninitSpan.uninitDone())
126 return;
127
128 unconst(mData.id).clear();
129
130 unconst(mData.vendorId) = 0;
131 unconst(mData.productId) = 0;
132 unconst(mData.revision) = 0;
133
134 unconst(mData.manufacturer).setNull();
135 unconst(mData.product).setNull();
136 unconst(mData.serialNumber).setNull();
137
138 unconst(mData.address).setNull();
139
140 unconst(mData.port) = 0;
141 unconst(mData.version) = 1;
142 unconst(mData.portVersion) = 1;
143
144 unconst(mData.remote) = FALSE;
145}
146
147// IUSBDevice properties
148/////////////////////////////////////////////////////////////////////////////
149
150/**
151 * Returns the GUID.
152 *
153 * @returns COM status code
154 * @param aId Address of result variable.
155 */
156HRESULT OUSBDevice::getId(com::Guid &aId)
157{
158 /* this is const, no need to lock */
159 aId = mData.id;
160
161 return S_OK;
162}
163
164
165/**
166 * Returns the vendor Id.
167 *
168 * @returns COM status code
169 * @param aVendorId Where to store the vendor id.
170 */
171HRESULT OUSBDevice::getVendorId(USHORT *aVendorId)
172{
173 /* this is const, no need to lock */
174 *aVendorId = mData.vendorId;
175
176 return S_OK;
177}
178
179
180/**
181 * Returns the product Id.
182 *
183 * @returns COM status code
184 * @param aProductId Where to store the product id.
185 */
186HRESULT OUSBDevice::getProductId(USHORT *aProductId)
187{
188 /* this is const, no need to lock */
189 *aProductId = mData.productId;
190
191 return S_OK;
192}
193
194
195/**
196 * Returns the revision BCD.
197 *
198 * @returns COM status code
199 * @param aRevision Where to store the revision BCD.
200 */
201HRESULT OUSBDevice::getRevision(USHORT *aRevision)
202{
203 /* this is const, no need to lock */
204 *aRevision = mData.revision;
205
206 return S_OK;
207}
208
209/**
210 * Returns the manufacturer string.
211 *
212 * @returns COM status code
213 * @param aManufacturer Where to put the return string.
214 */
215HRESULT OUSBDevice::getManufacturer(com::Utf8Str &aManufacturer)
216{
217 /* this is const, no need to lock */
218 aManufacturer = mData.manufacturer;
219
220 return S_OK;
221}
222
223
224/**
225 * Returns the product string.
226 *
227 * @returns COM status code
228 * @param aProduct Where to put the return string.
229 */
230HRESULT OUSBDevice::getProduct(com::Utf8Str &aProduct)
231{
232 /* this is const, no need to lock */
233 aProduct = mData.product;
234
235 return S_OK;
236}
237
238
239/**
240 * Returns the serial number string.
241 *
242 * @returns COM status code
243 * @param aSerialNumber Where to put the return string.
244 */
245HRESULT OUSBDevice::getSerialNumber(com::Utf8Str &aSerialNumber)
246{
247 /* this is const, no need to lock */
248 aSerialNumber = mData.serialNumber;
249
250 return S_OK;
251}
252
253
254/**
255 * Returns the host specific device address.
256 *
257 * @returns COM status code
258 * @param aAddress Where to put the return string.
259 */
260HRESULT OUSBDevice::getAddress(com::Utf8Str &aAddress)
261{
262 /* this is const, no need to lock */
263 aAddress = mData.address;
264
265 return S_OK;
266}
267
268HRESULT OUSBDevice::getPort(USHORT *aPort)
269{
270 /* this is const, no need to lock */
271 *aPort = mData.port;
272
273 return S_OK;
274}
275
276HRESULT OUSBDevice::getVersion(USHORT *aVersion)
277{
278 /* this is const, no need to lock */
279 *aVersion = mData.version;
280
281 return S_OK;
282}
283
284HRESULT OUSBDevice::getPortVersion(USHORT *aPortVersion)
285{
286 /* this is const, no need to lock */
287 *aPortVersion = mData.portVersion;
288
289 return S_OK;
290}
291
292HRESULT OUSBDevice::getSpeed(USBConnectionSpeed_T *aSpeed)
293{
294 /* this is const, no need to lock */
295 *aSpeed = mData.speed;
296
297 return S_OK;
298}
299
300HRESULT OUSBDevice::getRemote(BOOL *aRemote)
301{
302 /* this is const, no need to lock */
303 *aRemote = mData.remote;
304
305 return S_OK;
306}
307
308// private methods
309/////////////////////////////////////////////////////////////////////////////
310/* vi: set tabstop=4 shiftwidth=4 expandtab: */
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