VirtualBox

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

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

Main: support for using VBox from Python on Windows (still certain limitation apply, such as enum visibility)

  • 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 19239 2009-04-28 13:19:14Z 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 Bstr id;
97 hrc = aUSBDevice->COMGETTER(Id)(id.asOutParam());
98 ComAssertComRCRet (hrc, hrc);
99 unconst(mData.id) = Guid(id);
100
101 /* Confirm a successful initialization */
102 autoInitSpan.setSucceeded();
103
104 return S_OK;
105}
106
107/**
108 * Uninitializes the instance and sets the ready flag to FALSE.
109 * Called either from FinalRelease() or by the parent when it gets destroyed.
110 */
111void OUSBDevice::uninit()
112{
113 LogFlowThisFunc (("\n"));
114
115 /* Enclose the state transition Ready->InUninit->NotReady */
116 AutoUninitSpan autoUninitSpan (this);
117 if (autoUninitSpan.uninitDone())
118 return;
119
120 unconst (mData.id).clear();
121
122 unconst (mData.vendorId) = 0;
123 unconst (mData.productId) = 0;
124 unconst (mData.revision) = 0;
125
126 unconst (mData.manufacturer).setNull();
127 unconst (mData.product).setNull();
128 unconst (mData.serialNumber).setNull();
129
130 unconst (mData.address).setNull();
131
132 unconst (mData.port) = 0;
133 unconst (mData.version) = 1;
134 unconst (mData.portVersion) = 1;
135
136 unconst (mData.remote) = FALSE;
137}
138
139// IUSBDevice properties
140/////////////////////////////////////////////////////////////////////////////
141
142/**
143 * Returns the GUID.
144 *
145 * @returns COM status code
146 * @param aId Address of result variable.
147 */
148STDMETHODIMP OUSBDevice::COMGETTER(Id)(BSTR *aId)
149{
150 CheckComArgOutPointerValid(aId);
151
152 AutoCaller autoCaller (this);
153 CheckComRCReturnRC (autoCaller.rc());
154
155 /* this is const, no need to lock */
156 Guid(mData.id).toString().cloneTo (aId);
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 */
168STDMETHODIMP OUSBDevice::COMGETTER(VendorId)(USHORT *aVendorId)
169{
170 CheckComArgOutPointerValid(aVendorId);
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 CheckComArgOutPointerValid(aProductId);
191
192 AutoCaller autoCaller (this);
193 CheckComRCReturnRC (autoCaller.rc());
194
195 /* this is const, no need to lock */
196 *aProductId = mData.productId;
197
198 return S_OK;
199}
200
201
202/**
203 * Returns the revision BCD.
204 *
205 * @returns COM status code
206 * @param aRevision Where to store the revision BCD.
207 */
208STDMETHODIMP OUSBDevice::COMGETTER(Revision)(USHORT *aRevision)
209{
210 CheckComArgOutPointerValid(aRevision);
211
212 AutoCaller autoCaller (this);
213 CheckComRCReturnRC (autoCaller.rc());
214
215 /* this is const, no need to lock */
216 *aRevision = mData.revision;
217
218 return S_OK;
219}
220
221/**
222 * Returns the manufacturer string.
223 *
224 * @returns COM status code
225 * @param aManufacturer Where to put the return string.
226 */
227STDMETHODIMP OUSBDevice::COMGETTER(Manufacturer)(BSTR *aManufacturer)
228{
229 CheckComArgOutPointerValid(aManufacturer);
230
231 AutoCaller autoCaller (this);
232 CheckComRCReturnRC (autoCaller.rc());
233
234 /* this is const, no need to lock */
235 mData.manufacturer.cloneTo (aManufacturer);
236
237 return S_OK;
238}
239
240
241/**
242 * Returns the product string.
243 *
244 * @returns COM status code
245 * @param aProduct Where to put the return string.
246 */
247STDMETHODIMP OUSBDevice::COMGETTER(Product)(BSTR *aProduct)
248{
249 CheckComArgOutPointerValid(aProduct);
250
251 AutoCaller autoCaller (this);
252 CheckComRCReturnRC (autoCaller.rc());
253
254 /* this is const, no need to lock */
255 mData.product.cloneTo (aProduct);
256
257 return S_OK;
258}
259
260
261/**
262 * Returns the serial number string.
263 *
264 * @returns COM status code
265 * @param aSerialNumber Where to put the return string.
266 */
267STDMETHODIMP OUSBDevice::COMGETTER(SerialNumber)(BSTR *aSerialNumber)
268{
269 CheckComArgOutPointerValid(aSerialNumber);
270
271 AutoCaller autoCaller (this);
272 CheckComRCReturnRC (autoCaller.rc());
273
274 /* this is const, no need to lock */
275 mData.serialNumber.cloneTo (aSerialNumber);
276
277 return S_OK;
278}
279
280
281/**
282 * Returns the host specific device address.
283 *
284 * @returns COM status code
285 * @param aAddress Where to put the return string.
286 */
287STDMETHODIMP OUSBDevice::COMGETTER(Address)(BSTR *aAddress)
288{
289 CheckComArgOutPointerValid(aAddress);
290
291 AutoCaller autoCaller (this);
292 CheckComRCReturnRC (autoCaller.rc());
293
294 /* this is const, no need to lock */
295 mData.address.cloneTo (aAddress);
296
297 return S_OK;
298}
299
300STDMETHODIMP OUSBDevice::COMGETTER(Port)(USHORT *aPort)
301{
302 CheckComArgOutPointerValid(aPort);
303
304 AutoCaller autoCaller (this);
305 CheckComRCReturnRC (autoCaller.rc());
306
307 /* this is const, no need to lock */
308 *aPort = mData.port;
309
310 return S_OK;
311}
312
313STDMETHODIMP OUSBDevice::COMGETTER(Version)(USHORT *aVersion)
314{
315 CheckComArgOutPointerValid(aVersion);
316
317 AutoCaller autoCaller (this);
318 CheckComRCReturnRC (autoCaller.rc());
319
320 /* this is const, no need to lock */
321 *aVersion = mData.version;
322
323 return S_OK;
324}
325
326STDMETHODIMP OUSBDevice::COMGETTER(PortVersion)(USHORT *aPortVersion)
327{
328 CheckComArgOutPointerValid(aPortVersion);
329
330 AutoCaller autoCaller (this);
331 CheckComRCReturnRC (autoCaller.rc());
332
333 /* this is const, no need to lock */
334 *aPortVersion = mData.portVersion;
335
336 return S_OK;
337}
338
339STDMETHODIMP OUSBDevice::COMGETTER(Remote)(BOOL *aRemote)
340{
341 CheckComArgOutPointerValid(aRemote);
342
343 AutoCaller autoCaller (this);
344 CheckComRCReturnRC (autoCaller.rc());
345
346 /* this is const, no need to lock */
347 *aRemote = mData.remote;
348
349 return S_OK;
350}
351
352// private methods
353/////////////////////////////////////////////////////////////////////////////
354/* 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