VirtualBox

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

Last change on this file since 51476 was 50411, checked in by vboxsync, 11 years ago

USBDeviceImpl: init with correct values

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.9 KB
Line 
1/* $Id: USBDeviceImpl.cpp 50411 2014-02-11 09:39:39Z 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(Remote)(&unconst(mData.remote));
99 ComAssertComRCRet(hrc, hrc);
100
101 Bstr uuid;
102 hrc = aUSBDevice->COMGETTER(Id)(uuid.asOutParam());
103 ComAssertComRCRet(hrc, hrc);
104 unconst(mData.id) = Guid(uuid);
105
106 /* Confirm a successful initialization */
107 autoInitSpan.setSucceeded();
108
109 return S_OK;
110}
111
112/**
113 * Uninitializes the instance and sets the ready flag to FALSE.
114 * Called either from FinalRelease() or by the parent when it gets destroyed.
115 */
116void OUSBDevice::uninit()
117{
118 LogFlowThisFunc(("\n"));
119
120 /* Enclose the state transition Ready->InUninit->NotReady */
121 AutoUninitSpan autoUninitSpan(this);
122 if (autoUninitSpan.uninitDone())
123 return;
124
125 unconst(mData.id).clear();
126
127 unconst(mData.vendorId) = 0;
128 unconst(mData.productId) = 0;
129 unconst(mData.revision) = 0;
130
131 unconst(mData.manufacturer).setNull();
132 unconst(mData.product).setNull();
133 unconst(mData.serialNumber).setNull();
134
135 unconst(mData.address).setNull();
136
137 unconst(mData.port) = 0;
138 unconst(mData.version) = 1;
139 unconst(mData.portVersion) = 1;
140
141 unconst(mData.remote) = FALSE;
142}
143
144// IUSBDevice properties
145/////////////////////////////////////////////////////////////////////////////
146
147/**
148 * Returns the GUID.
149 *
150 * @returns COM status code
151 * @param aId Address of result variable.
152 */
153HRESULT OUSBDevice::getId(com::Guid &aId)
154{
155 /* this is const, no need to lock */
156 aId = mData.id;
157
158 return S_OK;
159}
160
161
162/**
163 * Returns the vendor Id.
164 *
165 * @returns COM status code
166 * @param aVendorId Where to store the vendor id.
167 */
168HRESULT OUSBDevice::getVendorId(USHORT *aVendorId)
169{
170 /* this is const, no need to lock */
171 *aVendorId = mData.vendorId;
172
173 return S_OK;
174}
175
176
177/**
178 * Returns the product Id.
179 *
180 * @returns COM status code
181 * @param aProductId Where to store the product id.
182 */
183HRESULT OUSBDevice::getProductId(USHORT *aProductId)
184{
185 /* this is const, no need to lock */
186 *aProductId = mData.productId;
187
188 return S_OK;
189}
190
191
192/**
193 * Returns the revision BCD.
194 *
195 * @returns COM status code
196 * @param aRevision Where to store the revision BCD.
197 */
198HRESULT OUSBDevice::getRevision(USHORT *aRevision)
199{
200 /* this is const, no need to lock */
201 *aRevision = mData.revision;
202
203 return S_OK;
204}
205
206/**
207 * Returns the manufacturer string.
208 *
209 * @returns COM status code
210 * @param aManufacturer Where to put the return string.
211 */
212HRESULT OUSBDevice::getManufacturer(com::Utf8Str &aManufacturer)
213{
214 /* this is const, no need to lock */
215 aManufacturer = mData.manufacturer;
216
217 return S_OK;
218}
219
220
221/**
222 * Returns the product string.
223 *
224 * @returns COM status code
225 * @param aProduct Where to put the return string.
226 */
227HRESULT OUSBDevice::getProduct(com::Utf8Str &aProduct)
228{
229 /* this is const, no need to lock */
230 aProduct = mData.product;
231
232 return S_OK;
233}
234
235
236/**
237 * Returns the serial number string.
238 *
239 * @returns COM status code
240 * @param aSerialNumber Where to put the return string.
241 */
242HRESULT OUSBDevice::getSerialNumber(com::Utf8Str &aSerialNumber)
243{
244 /* this is const, no need to lock */
245 aSerialNumber = mData.serialNumber;
246
247 return S_OK;
248}
249
250
251/**
252 * Returns the host specific device address.
253 *
254 * @returns COM status code
255 * @param aAddress Where to put the return string.
256 */
257HRESULT OUSBDevice::getAddress(com::Utf8Str &aAddress)
258{
259 /* this is const, no need to lock */
260 aAddress = mData.address;
261
262 return S_OK;
263}
264
265HRESULT OUSBDevice::getPort(USHORT *aPort)
266{
267 /* this is const, no need to lock */
268 *aPort = mData.port;
269
270 return S_OK;
271}
272
273HRESULT OUSBDevice::getVersion(USHORT *aVersion)
274{
275 /* this is const, no need to lock */
276 *aVersion = mData.version;
277
278 return S_OK;
279}
280
281HRESULT OUSBDevice::getPortVersion(USHORT *aPortVersion)
282{
283 /* this is const, no need to lock */
284 *aPortVersion = mData.portVersion;
285
286 return S_OK;
287}
288
289HRESULT OUSBDevice::getRemote(BOOL *aRemote)
290{
291 /* this is const, no need to lock */
292 *aRemote = mData.remote;
293
294 return S_OK;
295}
296
297// private methods
298/////////////////////////////////////////////////////////////////////////////
299/* 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