RemoteUSBDeviceImpl.cpp revision e3371072159136ce0247c9fe32c8f3d2ff2ae723
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync/* $Id$ */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync/** @file
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync *
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * VirtualBox IHostUSBDevice COM interface implementation
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * for remote (VRDP) USB devices
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync/*
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * Copyright (C) 2006-2008 Oracle Corporation
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync *
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 */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#include "RemoteUSBDeviceImpl.h"
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#include "AutoCaller.h"
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#include "Logging.h"
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#include <iprt/cpp/utils.h>
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#include <VBox/err.h>
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#include <VBox/RemoteDesktop/VRDE.h>
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#include <VBox/vrdpusb.h>
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync// constructor / destructor
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync/////////////////////////////////////////////////////////////////////////////
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncDEFINE_EMPTY_CTOR_DTOR (RemoteUSBDevice)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncHRESULT RemoteUSBDevice::FinalConstruct()
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync{
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync return S_OK;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync}
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncvoid RemoteUSBDevice::FinalRelease()
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync{
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync uninit();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync}
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync// public initializer/uninitializer for internal purposes only
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync/////////////////////////////////////////////////////////////////////////////
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync/** @todo (sunlover) REMOTE_USB Device states. */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync/**
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * Initializes the remote USB device object.
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncHRESULT RemoteUSBDevice::init (uint32_t u32ClientId, VRDEUSBDEVICEDESC *pDevDesc)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync{
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync LogFlowThisFunc(("u32ClientId=%d,pDevDesc=%p\n", u32ClientId, pDevDesc));
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* Enclose the state transition NotReady->InInit->Ready */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync AutoInitSpan autoInitSpan(this);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync AssertReturn(autoInitSpan.isOk(), E_FAIL);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.id).create();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.vendorId) = pDevDesc->idVendor;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.productId) = pDevDesc->idProduct;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.revision) = pDevDesc->bcdRev;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
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
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync char id[64];
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync RTStrPrintf(id, sizeof (id), REMOTE_USB_BACKEND_PREFIX_S "0x%08X&0x%08X", pDevDesc->id, u32ClientId);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.address) = id;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.port) = pDevDesc->idPort;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.version) = pDevDesc->bcdUSB >> 8;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.portVersion) = mData.version; /** @todo fix this */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync mData.state = USBDeviceState_Available;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync mData.dirty = false;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.devId) = pDevDesc->id;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.clientId) = u32ClientId;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* Confirm a successful initialization */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync autoInitSpan.setSucceeded();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync return S_OK;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync}
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync/**
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 */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncvoid RemoteUSBDevice::uninit()
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync{
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync LogFlowThisFunc(("\n"));
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* Enclose the state transition Ready->InUninit->NotReady */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync AutoUninitSpan autoUninitSpan(this);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (autoUninitSpan.uninitDone())
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync return;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.id).clear();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.vendorId) = 0;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.productId) = 0;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.revision) = 0;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.manufacturer).setNull();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.product).setNull();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.serialNumber).setNull();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.address).setNull();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.port) = 0;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.version) = 1;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.portVersion) = 1;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.dirty) = FALSE;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.devId) = 0;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync unconst(mData.clientId) = 0;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync}
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync// IUSBDevice properties
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync/////////////////////////////////////////////////////////////////////////////
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSTDMETHODIMP RemoteUSBDevice::COMGETTER(Id) (BSTR *aId)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync{
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync CheckComArgOutPointerValid(aId);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync AutoCaller autoCaller(this);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (FAILED(autoCaller.rc())) return autoCaller.rc();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* this is const, no need to lock */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync mData.id.toUtf16().detachTo(aId);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync return S_OK;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync}
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSTDMETHODIMP RemoteUSBDevice::COMGETTER(VendorId) (USHORT *aVendorId)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync{
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync CheckComArgOutPointerValid(aVendorId);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync AutoCaller autoCaller(this);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (FAILED(autoCaller.rc())) return autoCaller.rc();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* this is const, no need to lock */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync *aVendorId = mData.vendorId;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync return S_OK;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync}
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSTDMETHODIMP RemoteUSBDevice::COMGETTER(ProductId) (USHORT *aProductId)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync{
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync CheckComArgOutPointerValid(aProductId);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync AutoCaller autoCaller(this);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (FAILED(autoCaller.rc())) return autoCaller.rc();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* this is const, no need to lock */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync *aProductId = mData.productId;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync return S_OK;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync}
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSTDMETHODIMP RemoteUSBDevice::COMGETTER(Revision) (USHORT *aRevision)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync{
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync CheckComArgOutPointerValid(aRevision);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync AutoCaller autoCaller(this);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (FAILED(autoCaller.rc())) return autoCaller.rc();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* this is const, no need to lock */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync *aRevision = mData.revision;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync return S_OK;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync}
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSTDMETHODIMP RemoteUSBDevice::COMGETTER(Manufacturer) (BSTR *aManufacturer)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync{
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync CheckComArgOutPointerValid(aManufacturer);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync AutoCaller autoCaller(this);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (FAILED(autoCaller.rc())) return autoCaller.rc();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* this is const, no need to lock */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync mData.manufacturer.cloneTo(aManufacturer);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync return S_OK;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync}
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSTDMETHODIMP RemoteUSBDevice::COMGETTER(Product) (BSTR *aProduct)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync{
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync CheckComArgOutPointerValid(aProduct);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync AutoCaller autoCaller(this);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (FAILED(autoCaller.rc())) return autoCaller.rc();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* this is const, no need to lock */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync mData.product.cloneTo(aProduct);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync return S_OK;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync}
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSTDMETHODIMP RemoteUSBDevice::COMGETTER(SerialNumber) (BSTR *aSerialNumber)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync{
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync CheckComArgOutPointerValid(aSerialNumber);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync AutoCaller autoCaller(this);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (FAILED(autoCaller.rc())) return autoCaller.rc();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* this is const, no need to lock */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync mData.serialNumber.cloneTo(aSerialNumber);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync return S_OK;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync}
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSTDMETHODIMP RemoteUSBDevice::COMGETTER(Address) (BSTR *aAddress)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync{
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync CheckComArgOutPointerValid(aAddress);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync AutoCaller autoCaller(this);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (FAILED(autoCaller.rc())) return autoCaller.rc();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* this is const, no need to lock */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync mData.address.cloneTo(aAddress);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync return S_OK;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync}
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSTDMETHODIMP RemoteUSBDevice::COMGETTER(Port) (USHORT *aPort)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync{
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync CheckComArgOutPointerValid(aPort);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync AutoCaller autoCaller(this);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (FAILED(autoCaller.rc())) return autoCaller.rc();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* this is const, no need to lock */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync *aPort = mData.port;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync return S_OK;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync}
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSTDMETHODIMP RemoteUSBDevice::COMGETTER(Version) (USHORT *aVersion)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync{
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync CheckComArgOutPointerValid(aVersion);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync AutoCaller autoCaller(this);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (FAILED(autoCaller.rc())) return autoCaller.rc();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* this is const, no need to lock */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync *aVersion = mData.version;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync return S_OK;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync}
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSTDMETHODIMP RemoteUSBDevice::COMGETTER(PortVersion) (USHORT *aPortVersion)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync{
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync CheckComArgOutPointerValid(aPortVersion);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync AutoCaller autoCaller(this);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (FAILED(autoCaller.rc())) return autoCaller.rc();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* this is const, no need to lock */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync *aPortVersion = mData.portVersion;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync return S_OK;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync}
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSTDMETHODIMP RemoteUSBDevice::COMGETTER(Remote) (BOOL *aRemote)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync{
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync CheckComArgOutPointerValid(aRemote);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync AutoCaller autoCaller(this);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (FAILED(autoCaller.rc())) return autoCaller.rc();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* RemoteUSBDevice is always remote. */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* this is const, no need to lock */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync *aRemote = TRUE;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync return S_OK;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync}
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync// IHostUSBDevice properties
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync////////////////////////////////////////////////////////////////////////////////
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncSTDMETHODIMP RemoteUSBDevice::COMGETTER(State) (USBDeviceState_T *aState)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync{
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync CheckComArgOutPointerValid(aState);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync AutoCaller autoCaller(this);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (FAILED(autoCaller.rc())) return autoCaller.rc();
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync *aState = mData.state;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync return S_OK;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync}
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync// public methods only for internal purposes
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync////////////////////////////////////////////////////////////////////////////////
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync/* vi: set tabstop=4 shiftwidth=4 expandtab: */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync