VirtualBox

source: vbox/trunk/src/VBox/Main/RemoteUSBDeviceImpl.cpp@ 5935

Last change on this file since 5935 was 5528, checked in by vboxsync, 17 years ago

Added PortVersion and Version attributes for obtaining the major USB version of the port and the device respectively.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.8 KB
Line 
1/** @file
2 *
3 * VirtualBox IHostUSBDevice COM interface implementation
4 * for remote (VRDP) USB devices
5 */
6
7/*
8 * Copyright (C) 2006-2007 innotek GmbH
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 as published by the Free Software Foundation,
14 * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
15 * distribution. VirtualBox OSE is distributed in the hope that it will
16 * be useful, but WITHOUT ANY WARRANTY of any kind.
17 */
18
19#include "RemoteUSBDeviceImpl.h"
20#include "Logging.h"
21
22#include <VBox/err.h>
23
24#include <VBox/vrdpusb.h>
25
26// constructor / destructor
27/////////////////////////////////////////////////////////////////////////////
28
29DEFINE_EMPTY_CTOR_DTOR (RemoteUSBDevice)
30
31HRESULT RemoteUSBDevice::FinalConstruct()
32{
33 return S_OK;
34}
35
36void RemoteUSBDevice::FinalRelease()
37{
38 if (isReady())
39 uninit();
40}
41
42// public initializer/uninitializer for internal purposes only
43/////////////////////////////////////////////////////////////////////////////
44
45/** @todo (sunlover) REMOTE_USB Device states. */
46
47/**
48 * Initializes the remote USB device object.
49 */
50HRESULT RemoteUSBDevice::init (uint32_t u32ClientId, VRDPUSBDEVICEDESC *pDevDesc)
51{
52 LogFlowMember (("RemoteUSBDevice::init()\n"));
53
54 AutoLock alock (this);
55 ComAssertRet (!isReady(), E_UNEXPECTED);
56
57 mId.create();
58
59 mVendorId = pDevDesc->idVendor;
60 mProductId = pDevDesc->idProduct;
61 mRevision = pDevDesc->bcdRev;
62
63 mManufacturer = pDevDesc->oManufacturer? (char *)pDevDesc + pDevDesc->oManufacturer: "";
64 mProduct = pDevDesc->oProduct? (char *)pDevDesc + pDevDesc->oProduct: "";
65 mSerialNumber = pDevDesc->oSerialNumber? (char *)pDevDesc + pDevDesc->oSerialNumber: "";
66
67 char id[64];
68 RTStrPrintf(id, sizeof (id), REMOTE_USB_BACKEND_PREFIX_S "0x%08X&0x%08X", pDevDesc->id, u32ClientId);
69 mAddress = id;
70
71 mPort = pDevDesc->idPort;
72 mVersion = pDevDesc->bcdUSB >> 8;
73 mPortVersion = mVersion; /** @todo fix this */
74
75 mState = USBDeviceState_USBDeviceAvailable;
76
77 mDirty = false;
78 mDevId = pDevDesc->id;
79
80 mClientId = u32ClientId;
81
82 setReady (true);
83 return S_OK;
84}
85
86
87/**
88 * Uninitializes the instance and sets the ready flag to FALSE.
89 * Called either from FinalRelease() or by the parent when it gets destroyed.
90 */
91void RemoteUSBDevice::uninit()
92{
93 LogFlowMember (("RemoteUSBDevice::uninit()\n"));
94
95 AutoLock alock (this);
96 AssertReturn (isReady(), (void) 0);
97
98 setReady (false);
99}
100
101// IUSBDevice properties
102/////////////////////////////////////////////////////////////////////////////
103
104STDMETHODIMP RemoteUSBDevice::COMGETTER(Id) (GUIDPARAMOUT aId)
105{
106 if (!aId)
107 return E_INVALIDARG;
108
109 AutoLock alock (this);
110 CHECK_READY();
111
112 mId.cloneTo (aId);
113 return S_OK;
114}
115
116STDMETHODIMP RemoteUSBDevice::COMGETTER(VendorId) (USHORT *aVendorId)
117{
118 if (!aVendorId)
119 return E_INVALIDARG;
120
121 AutoLock alock (this);
122 CHECK_READY();
123
124 *aVendorId = mVendorId;
125 return S_OK;
126}
127
128STDMETHODIMP RemoteUSBDevice::COMGETTER(ProductId) (USHORT *aProductId)
129{
130 if (!aProductId)
131 return E_INVALIDARG;
132
133 AutoLock alock (this);
134 CHECK_READY();
135
136 *aProductId = mProductId;
137 return S_OK;
138}
139
140STDMETHODIMP RemoteUSBDevice::COMGETTER(Revision) (USHORT *aRevision)
141{
142 if (!aRevision)
143 return E_INVALIDARG;
144
145 AutoLock alock (this);
146 CHECK_READY();
147
148 *aRevision = mRevision;
149 return S_OK;
150}
151
152STDMETHODIMP RemoteUSBDevice::COMGETTER(Manufacturer) (BSTR *aManufacturer)
153{
154 if (!aManufacturer)
155 return E_INVALIDARG;
156
157 AutoLock alock (this);
158 CHECK_READY();
159
160 mManufacturer.cloneTo (aManufacturer);
161 return S_OK;
162}
163
164STDMETHODIMP RemoteUSBDevice::COMGETTER(Product) (BSTR *aProduct)
165{
166 if (!aProduct)
167 return E_INVALIDARG;
168
169 AutoLock alock (this);
170 CHECK_READY();
171
172 mProduct.cloneTo (aProduct);
173 return S_OK;
174}
175
176STDMETHODIMP RemoteUSBDevice::COMGETTER(SerialNumber) (BSTR *aSerialNumber)
177{
178 if (!aSerialNumber)
179 return E_INVALIDARG;
180
181 AutoLock alock (this);
182 CHECK_READY();
183
184 mSerialNumber.cloneTo (aSerialNumber);
185 return S_OK;
186}
187
188STDMETHODIMP RemoteUSBDevice::COMGETTER(Address) (BSTR *aAddress)
189{
190 if (!aAddress)
191 return E_INVALIDARG;
192
193 AutoLock alock (this);
194 CHECK_READY();
195
196 mAddress.cloneTo (aAddress);
197 return S_OK;
198}
199
200STDMETHODIMP RemoteUSBDevice::COMGETTER(Port) (USHORT *aPort)
201{
202 if (!aPort)
203 return E_INVALIDARG;
204
205 AutoLock alock (this);
206 CHECK_READY();
207
208 *aPort = mPort;
209 return S_OK;
210}
211
212STDMETHODIMP RemoteUSBDevice::COMGETTER(Version) (USHORT *aVersion)
213{
214 if (!aVersion)
215 return E_INVALIDARG;
216
217 AutoLock alock (this);
218 CHECK_READY();
219
220 *aVersion = mVersion;
221 return S_OK;
222}
223
224STDMETHODIMP RemoteUSBDevice::COMGETTER(PortVersion) (USHORT *aPortVersion)
225{
226 if (!aPortVersion)
227 return E_INVALIDARG;
228
229 AutoLock alock (this);
230 CHECK_READY();
231
232 *aPortVersion = mPortVersion;
233 return S_OK;
234}
235
236STDMETHODIMP RemoteUSBDevice::COMGETTER(Remote) (BOOL *aRemote)
237{
238 if (!aRemote)
239 return E_INVALIDARG;
240
241 AutoLock alock (this);
242 CHECK_READY();
243
244 /* RemoteUSBDevice is always remote. */
245 *aRemote = TRUE;
246 return S_OK;
247}
248
249// IHostUSBDevice properties
250/////////////////////////////////////////////////////////////////////////////
251
252STDMETHODIMP RemoteUSBDevice::COMGETTER(State) (USBDeviceState_T *aState)
253{
254 if (!aState)
255 return E_POINTER;
256
257 AutoLock lock (this);
258 CHECK_READY();
259
260 *aState = mState;
261 return S_OK;
262}
263
264// public methods only for internal purposes
265////////////////////////////////////////////////////////////////////////////////
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