VirtualBox

source: vbox/trunk/src/VBox/Main/USBDeviceImpl.cpp@ 14789

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

Added vim modelines to aid following coding guidelines, like no tabs,
similar to what is already in the xidl file.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 8.5 KB
Line 
1/* $Id: USBDeviceImpl.cpp 14772 2008-11-28 12:41:22Z vboxsync $ */
2
3/** @file
4 *
5 * VirtualBox COM class implementation
6 */
7
8/*
9 * Copyright (C) 2006-2008 Sun Microsystems, Inc.
10 *
11 * This file is part of VirtualBox Open Source Edition (OSE), as
12 * available from http://www.virtualbox.org. This file is free software;
13 * you can redistribute it and/or modify it under the terms of the GNU
14 * General Public License (GPL) as published by the Free Software
15 * Foundation, in version 2 as it comes in the "COPYING" file of the
16 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
17 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
18 *
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
20 * Clara, CA 95054 USA or visit http://www.sun.com if you need
21 * additional information or have any questions.
22 */
23
24#include "USBDeviceImpl.h"
25
26
27// constructor / destructor
28/////////////////////////////////////////////////////////////////////////////
29
30DEFINE_EMPTY_CTOR_DTOR (OUSBDevice)
31
32HRESULT OUSBDevice::FinalConstruct()
33{
34 return S_OK;
35}
36
37void OUSBDevice::FinalRelease()
38{
39 uninit ();
40}
41
42// public initializer/uninitializer for internal purposes only
43/////////////////////////////////////////////////////////////////////////////
44
45/**
46 * Initializes the USB device object.
47 *
48 * @returns COM result indicator
49 * @param aUSBDevice The USB device (interface) to clone.
50 */
51HRESULT OUSBDevice::init(IUSBDevice *aUSBDevice)
52{
53 LogFlowThisFunc (("aUSBDevice=%p\n", aUSBDevice));
54
55 ComAssertRet (aUSBDevice, E_INVALIDARG);
56
57 /* Enclose the state transition NotReady->InInit->Ready */
58 AutoInitSpan autoInitSpan (this);
59 AssertReturn (autoInitSpan.isOk(), E_FAIL);
60
61 HRESULT hrc = aUSBDevice->COMGETTER(VendorId)(&unconst (mData.vendorId));
62 ComAssertComRCRet (hrc, hrc);
63 ComAssertRet (mData.vendorId, E_INVALIDARG);
64
65 hrc = aUSBDevice->COMGETTER(ProductId)(&unconst (mData.productId));
66 ComAssertComRCRet (hrc, hrc);
67 ComAssertRet (mData.productId, E_INVALIDARG);
68
69 hrc = aUSBDevice->COMGETTER(Revision)(&unconst (mData.revision));
70 ComAssertComRCRet (hrc, hrc);
71
72 hrc = aUSBDevice->COMGETTER(Manufacturer)(unconst (mData.manufacturer).asOutParam());
73 ComAssertComRCRet (hrc, hrc);
74
75 hrc = aUSBDevice->COMGETTER(Product)(unconst (mData.product).asOutParam());
76 ComAssertComRCRet (hrc, hrc);
77
78 hrc = aUSBDevice->COMGETTER(SerialNumber)(unconst (mData.serialNumber).asOutParam());
79 ComAssertComRCRet (hrc, hrc);
80
81 hrc = aUSBDevice->COMGETTER(Address)(unconst (mData.address).asOutParam());
82 ComAssertComRCRet (hrc, hrc);
83
84 hrc = aUSBDevice->COMGETTER(Port)(&unconst (mData.port));
85 ComAssertComRCRet (hrc, hrc);
86
87 hrc = aUSBDevice->COMGETTER(Port)(&unconst (mData.version));
88 ComAssertComRCRet (hrc, hrc);
89
90 hrc = aUSBDevice->COMGETTER(Port)(&unconst (mData.portVersion));
91 ComAssertComRCRet (hrc, hrc);
92
93 hrc = aUSBDevice->COMGETTER(Remote)(&unconst (mData.remote));
94 ComAssertComRCRet (hrc, hrc);
95
96 hrc = aUSBDevice->COMGETTER(Id)(unconst (mData.id).asOutParam());
97 ComAssertComRCRet (hrc, hrc);
98
99 /* Confirm a successful initialization */
100 autoInitSpan.setSucceeded();
101
102 return S_OK;
103}
104
105/**
106 * Uninitializes the instance and sets the ready flag to FALSE.
107 * Called either from FinalRelease() or by the parent when it gets destroyed.
108 */
109void OUSBDevice::uninit()
110{
111 LogFlowThisFunc (("\n"));
112
113 /* Enclose the state transition Ready->InUninit->NotReady */
114 AutoUninitSpan autoUninitSpan (this);
115 if (autoUninitSpan.uninitDone())
116 return;
117
118 unconst (mData.id).clear();
119
120 unconst (mData.vendorId) = 0;
121 unconst (mData.productId) = 0;
122 unconst (mData.revision) = 0;
123
124 unconst (mData.manufacturer).setNull();
125 unconst (mData.product).setNull();
126 unconst (mData.serialNumber).setNull();
127
128 unconst (mData.address).setNull();
129
130 unconst (mData.port) = 0;
131 unconst (mData.version) = 1;
132 unconst (mData.portVersion) = 1;
133
134 unconst (mData.remote) = FALSE;
135}
136
137// IUSBDevice properties
138/////////////////////////////////////////////////////////////////////////////
139
140/**
141 * Returns the GUID.
142 *
143 * @returns COM status code
144 * @param aId Address of result variable.
145 */
146STDMETHODIMP OUSBDevice::COMGETTER(Id)(GUIDPARAMOUT aId)
147{
148 if (!aId)
149 return E_POINTER;
150
151 AutoCaller autoCaller (this);
152 CheckComRCReturnRC (autoCaller.rc());
153
154 /* this is const, no need to lock */
155 mData.id.cloneTo (aId);
156
157 return S_OK;
158}
159
160
161/**
162 * Returns the vendor Id.
163 *
164 * @returns COM status code
165 * @param aVendorId Where to store the vendor id.
166 */
167STDMETHODIMP OUSBDevice::COMGETTER(VendorId)(USHORT *aVendorId)
168{
169 if (!aVendorId)
170 return E_POINTER;
171
172 AutoCaller autoCaller (this);
173 CheckComRCReturnRC (autoCaller.rc());
174
175 /* this is const, no need to lock */
176 *aVendorId = mData.vendorId;
177
178 return S_OK;
179}
180
181
182/**
183 * Returns the product Id.
184 *
185 * @returns COM status code
186 * @param aProductId Where to store the product id.
187 */
188STDMETHODIMP OUSBDevice::COMGETTER(ProductId)(USHORT *aProductId)
189{
190 if (!aProductId)
191 return E_POINTER;
192
193 AutoCaller autoCaller (this);
194 CheckComRCReturnRC (autoCaller.rc());
195
196 /* this is const, no need to lock */
197 *aProductId = mData.productId;
198
199 return S_OK;
200}
201
202
203/**
204 * Returns the revision BCD.
205 *
206 * @returns COM status code
207 * @param aRevision Where to store the revision BCD.
208 */
209STDMETHODIMP OUSBDevice::COMGETTER(Revision)(USHORT *aRevision)
210{
211 if (!aRevision)
212 return E_POINTER;
213
214 AutoCaller autoCaller (this);
215 CheckComRCReturnRC (autoCaller.rc());
216
217 /* this is const, no need to lock */
218 *aRevision = mData.revision;
219
220 return S_OK;
221}
222
223/**
224 * Returns the manufacturer string.
225 *
226 * @returns COM status code
227 * @param aManufacturer Where to put the return string.
228 */
229STDMETHODIMP OUSBDevice::COMGETTER(Manufacturer)(BSTR *aManufacturer)
230{
231 if (!aManufacturer)
232 return E_POINTER;
233
234 AutoCaller autoCaller (this);
235 CheckComRCReturnRC (autoCaller.rc());
236
237 /* this is const, no need to lock */
238 mData.manufacturer.cloneTo (aManufacturer);
239
240 return S_OK;
241}
242
243
244/**
245 * Returns the product string.
246 *
247 * @returns COM status code
248 * @param aProduct Where to put the return string.
249 */
250STDMETHODIMP OUSBDevice::COMGETTER(Product)(BSTR *aProduct)
251{
252 if (!aProduct)
253 return E_POINTER;
254
255 AutoCaller autoCaller (this);
256 CheckComRCReturnRC (autoCaller.rc());
257
258 /* this is const, no need to lock */
259 mData.product.cloneTo (aProduct);
260
261 return S_OK;
262}
263
264
265/**
266 * Returns the serial number string.
267 *
268 * @returns COM status code
269 * @param aSerialNumber Where to put the return string.
270 */
271STDMETHODIMP OUSBDevice::COMGETTER(SerialNumber)(BSTR *aSerialNumber)
272{
273 if (!aSerialNumber)
274 return E_POINTER;
275
276 AutoCaller autoCaller (this);
277 CheckComRCReturnRC (autoCaller.rc());
278
279 /* this is const, no need to lock */
280 mData.serialNumber.cloneTo (aSerialNumber);
281
282 return S_OK;
283}
284
285
286/**
287 * Returns the host specific device address.
288 *
289 * @returns COM status code
290 * @param aAddress Where to put the return string.
291 */
292STDMETHODIMP OUSBDevice::COMGETTER(Address)(BSTR *aAddress)
293{
294 if (!aAddress)
295 return E_POINTER;
296
297 AutoCaller autoCaller (this);
298 CheckComRCReturnRC (autoCaller.rc());
299
300 /* this is const, no need to lock */
301 mData.address.cloneTo (aAddress);
302
303 return S_OK;
304}
305
306STDMETHODIMP OUSBDevice::COMGETTER(Port)(USHORT *aPort)
307{
308 if (!aPort)
309 return E_POINTER;
310
311 AutoCaller autoCaller (this);
312 CheckComRCReturnRC (autoCaller.rc());
313
314 /* this is const, no need to lock */
315 *aPort = mData.port;
316
317 return S_OK;
318}
319
320STDMETHODIMP OUSBDevice::COMGETTER(Version)(USHORT *aVersion)
321{
322 if (!aVersion)
323 return E_POINTER;
324
325 AutoCaller autoCaller (this);
326 CheckComRCReturnRC (autoCaller.rc());
327
328 /* this is const, no need to lock */
329 *aVersion = mData.version;
330
331 return S_OK;
332}
333
334STDMETHODIMP OUSBDevice::COMGETTER(PortVersion)(USHORT *aPortVersion)
335{
336 if (!aPortVersion)
337 return E_POINTER;
338
339 AutoCaller autoCaller (this);
340 CheckComRCReturnRC (autoCaller.rc());
341
342 /* this is const, no need to lock */
343 *aPortVersion = mData.portVersion;
344
345 return S_OK;
346}
347
348STDMETHODIMP OUSBDevice::COMGETTER(Remote)(BOOL *aRemote)
349{
350 if (!aRemote)
351 return E_POINTER;
352
353 AutoCaller autoCaller (this);
354 CheckComRCReturnRC (autoCaller.rc());
355
356 /* this is const, no need to lock */
357 *aRemote = mData.remote;
358
359 return S_OK;
360}
361
362// private methods
363/////////////////////////////////////////////////////////////////////////////
364/* 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