VirtualBox

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

Last change on this file since 4920 was 4071, checked in by vboxsync, 17 years ago

Biggest check-in ever. New source code headers for all (C) innotek files.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.2 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
73 mState = USBDeviceState_USBDeviceAvailable;
74
75 mDirty = false;
76 mDevId = pDevDesc->id;
77
78 mClientId = u32ClientId;
79
80 setReady (true);
81 return S_OK;
82}
83
84
85/**
86 * Uninitializes the instance and sets the ready flag to FALSE.
87 * Called either from FinalRelease() or by the parent when it gets destroyed.
88 */
89void RemoteUSBDevice::uninit()
90{
91 LogFlowMember (("RemoteUSBDevice::uninit()\n"));
92
93 AutoLock alock (this);
94 AssertReturn (isReady(), (void) 0);
95
96 setReady (false);
97}
98
99// IUSBDevice properties
100/////////////////////////////////////////////////////////////////////////////
101
102STDMETHODIMP RemoteUSBDevice::COMGETTER(Id) (GUIDPARAMOUT aId)
103{
104 if (!aId)
105 return E_INVALIDARG;
106
107 AutoLock alock (this);
108 CHECK_READY();
109
110 mId.cloneTo (aId);
111 return S_OK;
112}
113
114STDMETHODIMP RemoteUSBDevice::COMGETTER(VendorId) (USHORT *aVendorId)
115{
116 if (!aVendorId)
117 return E_INVALIDARG;
118
119 AutoLock alock (this);
120 CHECK_READY();
121
122 *aVendorId = mVendorId;
123 return S_OK;
124}
125
126STDMETHODIMP RemoteUSBDevice::COMGETTER(ProductId) (USHORT *aProductId)
127{
128 if (!aProductId)
129 return E_INVALIDARG;
130
131 AutoLock alock (this);
132 CHECK_READY();
133
134 *aProductId = mProductId;
135 return S_OK;
136}
137
138STDMETHODIMP RemoteUSBDevice::COMGETTER(Revision) (USHORT *aRevision)
139{
140 if (!aRevision)
141 return E_INVALIDARG;
142
143 AutoLock alock (this);
144 CHECK_READY();
145
146 *aRevision = mRevision;
147 return S_OK;
148}
149
150STDMETHODIMP RemoteUSBDevice::COMGETTER(Manufacturer) (BSTR *aManufacturer)
151{
152 if (!aManufacturer)
153 return E_INVALIDARG;
154
155 AutoLock alock (this);
156 CHECK_READY();
157
158 mManufacturer.cloneTo (aManufacturer);
159 return S_OK;
160}
161
162STDMETHODIMP RemoteUSBDevice::COMGETTER(Product) (BSTR *aProduct)
163{
164 if (!aProduct)
165 return E_INVALIDARG;
166
167 AutoLock alock (this);
168 CHECK_READY();
169
170 mProduct.cloneTo (aProduct);
171 return S_OK;
172}
173
174STDMETHODIMP RemoteUSBDevice::COMGETTER(SerialNumber) (BSTR *aSerialNumber)
175{
176 if (!aSerialNumber)
177 return E_INVALIDARG;
178
179 AutoLock alock (this);
180 CHECK_READY();
181
182 mSerialNumber.cloneTo (aSerialNumber);
183 return S_OK;
184}
185
186STDMETHODIMP RemoteUSBDevice::COMGETTER(Address) (BSTR *aAddress)
187{
188 if (!aAddress)
189 return E_INVALIDARG;
190
191 AutoLock alock (this);
192 CHECK_READY();
193
194 mAddress.cloneTo (aAddress);
195 return S_OK;
196}
197
198STDMETHODIMP RemoteUSBDevice::COMGETTER(Port) (USHORT *aPort)
199{
200 if (!aPort)
201 return E_INVALIDARG;
202
203 AutoLock alock (this);
204 CHECK_READY();
205
206 *aPort = mPort;
207 return S_OK;
208}
209
210STDMETHODIMP RemoteUSBDevice::COMGETTER(Remote) (BOOL *aRemote)
211{
212 if (!aRemote)
213 return E_INVALIDARG;
214
215 AutoLock alock (this);
216 CHECK_READY();
217
218 /* RemoteUSBDevice is always remote. */
219 *aRemote = TRUE;
220 return S_OK;
221}
222
223// IHostUSBDevice properties
224/////////////////////////////////////////////////////////////////////////////
225
226STDMETHODIMP RemoteUSBDevice::COMGETTER(State) (USBDeviceState_T *aState)
227{
228 if (!aState)
229 return E_POINTER;
230
231 AutoLock lock (this);
232 CHECK_READY();
233
234 *aState = mState;
235 return S_OK;
236}
237
238// public methods only for internal purposes
239////////////////////////////////////////////////////////////////////////////////
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