RemoteUSBDeviceImpl.cpp revision e3371072159136ce0247c9fe32c8f3d2ff2ae723
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * VirtualBox IHostUSBDevice COM interface implementation
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * for remote (VRDP) USB devices
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * Copyright (C) 2006-2008 Oracle Corporation
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * available from http://www.virtualbox.org. This file is free software;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * you can redistribute it and/or modify it under the terms of the GNU
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * General Public License (GPL) as published by the Free Software
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync// constructor / destructor
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync/////////////////////////////////////////////////////////////////////////////
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync// public initializer/uninitializer for internal purposes only
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync/////////////////////////////////////////////////////////////////////////////
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync/** @todo (sunlover) REMOTE_USB Device states. */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * Initializes the remote USB device object.
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncHRESULT RemoteUSBDevice::init (uint32_t u32ClientId, VRDEUSBDEVICEDESC *pDevDesc)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync LogFlowThisFunc(("u32ClientId=%d,pDevDesc=%p\n", u32ClientId, pDevDesc));
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* Enclose the state transition NotReady->InInit->Ready */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.manufacturer) = pDevDesc->oManufacturer? (char *)pDevDesc + pDevDesc->oManufacturer: "";
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.product) = pDevDesc->oProduct? (char *)pDevDesc + pDevDesc->oProduct: "";
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.serialNumber) = pDevDesc->oSerialNumber? (char *)pDevDesc + pDevDesc->oSerialNumber: "";
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync RTStrPrintf(id, sizeof (id), REMOTE_USB_BACKEND_PREFIX_S "0x%08X&0x%08X", pDevDesc->id, u32ClientId);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.portVersion) = mData.version; /** @todo fix this */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* Confirm a successful initialization */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * Uninitializes the instance and sets the ready flag to FALSE.
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * Called either from FinalRelease() or by the parent when it gets destroyed.
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* Enclose the state transition Ready->InUninit->NotReady */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync// IUSBDevice properties
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync/////////////////////////////////////////////////////////////////////////////
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSTDMETHODIMP RemoteUSBDevice::COMGETTER(Id) (BSTR *aId)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (FAILED(autoCaller.rc())) return autoCaller.rc();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* this is const, no need to lock */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSTDMETHODIMP RemoteUSBDevice::COMGETTER(VendorId) (USHORT *aVendorId)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (FAILED(autoCaller.rc())) return autoCaller.rc();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* this is const, no need to lock */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSTDMETHODIMP RemoteUSBDevice::COMGETTER(ProductId) (USHORT *aProductId)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (FAILED(autoCaller.rc())) return autoCaller.rc();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* this is const, no need to lock */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSTDMETHODIMP RemoteUSBDevice::COMGETTER(Revision) (USHORT *aRevision)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (FAILED(autoCaller.rc())) return autoCaller.rc();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* this is const, no need to lock */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSTDMETHODIMP RemoteUSBDevice::COMGETTER(Manufacturer) (BSTR *aManufacturer)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (FAILED(autoCaller.rc())) return autoCaller.rc();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* this is const, no need to lock */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSTDMETHODIMP RemoteUSBDevice::COMGETTER(Product) (BSTR *aProduct)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (FAILED(autoCaller.rc())) return autoCaller.rc();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* this is const, no need to lock */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSTDMETHODIMP RemoteUSBDevice::COMGETTER(SerialNumber) (BSTR *aSerialNumber)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (FAILED(autoCaller.rc())) return autoCaller.rc();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* this is const, no need to lock */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSTDMETHODIMP RemoteUSBDevice::COMGETTER(Address) (BSTR *aAddress)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (FAILED(autoCaller.rc())) return autoCaller.rc();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* this is const, no need to lock */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSTDMETHODIMP RemoteUSBDevice::COMGETTER(Port) (USHORT *aPort)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (FAILED(autoCaller.rc())) return autoCaller.rc();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* this is const, no need to lock */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSTDMETHODIMP RemoteUSBDevice::COMGETTER(Version) (USHORT *aVersion)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (FAILED(autoCaller.rc())) return autoCaller.rc();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* this is const, no need to lock */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSTDMETHODIMP RemoteUSBDevice::COMGETTER(PortVersion) (USHORT *aPortVersion)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (FAILED(autoCaller.rc())) return autoCaller.rc();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* this is const, no need to lock */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSTDMETHODIMP RemoteUSBDevice::COMGETTER(Remote) (BOOL *aRemote)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (FAILED(autoCaller.rc())) return autoCaller.rc();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* RemoteUSBDevice is always remote. */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* this is const, no need to lock */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync// IHostUSBDevice properties
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync////////////////////////////////////////////////////////////////////////////////
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSTDMETHODIMP RemoteUSBDevice::COMGETTER(State) (USBDeviceState_T *aState)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (FAILED(autoCaller.rc())) return autoCaller.rc();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync// public methods only for internal purposes
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync////////////////////////////////////////////////////////////////////////////////
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync/* vi: set tabstop=4 shiftwidth=4 expandtab: */