EmulatedUSBImpl.cpp revision 101e307bb33304d9dda53a7652510880e8228b13
101e307bb33304d9dda53a7652510880e8228b13vboxsync * Emulated USB manager implementation.
101e307bb33304d9dda53a7652510880e8228b13vboxsync * Copyright (C) 2013 Oracle Corporation
101e307bb33304d9dda53a7652510880e8228b13vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
101e307bb33304d9dda53a7652510880e8228b13vboxsync * available from http://www.virtualbox.org. This file is free software;
101e307bb33304d9dda53a7652510880e8228b13vboxsync * you can redistribute it and/or modify it under the terms of the GNU
101e307bb33304d9dda53a7652510880e8228b13vboxsync * General Public License (GPL) as published by the Free Software
101e307bb33304d9dda53a7652510880e8228b13vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
101e307bb33304d9dda53a7652510880e8228b13vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
101e307bb33304d9dda53a7652510880e8228b13vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
101e307bb33304d9dda53a7652510880e8228b13vboxsync * Emulated USB webcam device instance.
101e307bb33304d9dda53a7652510880e8228b13vboxsynctypedef std::map <Utf8Str, Utf8Str> EUSBSettingsMap;
101e307bb33304d9dda53a7652510880e8228b13vboxsync static DECLCALLBACK(int) emulatedWebcamAttach(PUVM pUVM, EUSBWEBCAM *pThis);
101e307bb33304d9dda53a7652510880e8228b13vboxsync static DECLCALLBACK(int) emulatedWebcamDetach(PUVM pUVM, EUSBWEBCAM *pThis);
101e307bb33304d9dda53a7652510880e8228b13vboxsync if (c == 0)
101e307bb33304d9dda53a7652510880e8228b13vboxsync delete this;
101e307bb33304d9dda53a7652510880e8228b13vboxsync/* static */ DECLCALLBACK(int) EUSBWEBCAM::emulatedWebcamAttach(PUVM pUVM, EUSBWEBCAM *pThis)
101e307bb33304d9dda53a7652510880e8228b13vboxsync for (it = pThis->mDevSettings.begin(); it != pThis->mDevSettings.end(); ++it)
101e307bb33304d9dda53a7652510880e8228b13vboxsync CFGMR3InsertString(pConfig, it->first.c_str(), it->second.c_str());
101e307bb33304d9dda53a7652510880e8228b13vboxsync CFGMR3InsertString(pLunL0, "Driver", "HostWebcam");
101e307bb33304d9dda53a7652510880e8228b13vboxsync CFGMR3InsertString(pConfig, "DevicePath", pThis->mPath.c_str());
101e307bb33304d9dda53a7652510880e8228b13vboxsync for (it = pThis->mDrvSettings.begin(); it != pThis->mDrvSettings.end(); ++it)
101e307bb33304d9dda53a7652510880e8228b13vboxsync CFGMR3InsertString(pConfig, it->first.c_str(), it->second.c_str());
101e307bb33304d9dda53a7652510880e8228b13vboxsync int rc = PDMR3UsbCreateEmulatedDevice(pUVM, "Webcam", pInstance, &pThis->mUuid);
101e307bb33304d9dda53a7652510880e8228b13vboxsync LogRel(("PDMR3UsbCreateEmulatedDevice %Rrc\n", rc));
101e307bb33304d9dda53a7652510880e8228b13vboxsync/* static */ DECLCALLBACK(int) EUSBWEBCAM::emulatedWebcamDetach(PUVM pUVM, EUSBWEBCAM *pThis)
101e307bb33304d9dda53a7652510880e8228b13vboxsync int vrc = VMR3ReqCallWaitU(pUVM, 0 /* idDstCpu (saved state, see #6232) */,
101e307bb33304d9dda53a7652510880e8228b13vboxsync int vrc = VMR3ReqCallWaitU(pUVM, 0 /* idDstCpu (saved state, see #6232) */,
101e307bb33304d9dda53a7652510880e8228b13vboxsync * EmulatedUSB implementation.
101e307bb33304d9dda53a7652510880e8228b13vboxsync * Initializes the instance.
101e307bb33304d9dda53a7652510880e8228b13vboxsync * @param pConsole The owner.
101e307bb33304d9dda53a7652510880e8228b13vboxsyncHRESULT EmulatedUSB::init(ComObjPtr<Console> pConsole)
101e307bb33304d9dda53a7652510880e8228b13vboxsync /* Enclose the state transition NotReady->InInit->Ready */
101e307bb33304d9dda53a7652510880e8228b13vboxsync /* Confirm a successful initialization */
101e307bb33304d9dda53a7652510880e8228b13vboxsync * Uninitializes the instance.
101e307bb33304d9dda53a7652510880e8228b13vboxsync * Called either from FinalRelease() or by the parent when it gets destroyed.
101e307bb33304d9dda53a7652510880e8228b13vboxsync /* Enclose the state transition Ready->InUninit->NotReady */
101e307bb33304d9dda53a7652510880e8228b13vboxsyncHRESULT EmulatedUSB::getWebcams(std::vector<com::Utf8Str> &aWebcams)
101e307bb33304d9dda53a7652510880e8228b13vboxsync catch (...)
101e307bb33304d9dda53a7652510880e8228b13vboxsync for (i = 0, it = m.webcams.begin(); it != m.webcams.end(); ++it)
101e307bb33304d9dda53a7652510880e8228b13vboxsyncHRESULT EmulatedUSB::webcamAttach(const com::Utf8Str &aPath,
101e307bb33304d9dda53a7652510880e8228b13vboxsync const Utf8Str &path = aPath.isEmpty() || aPath == "."? s_pathDefault: aPath;
101e307bb33304d9dda53a7652510880e8228b13vboxsync hrc = p->Initialize(m.pConsole, &path, &aSettings);
101e307bb33304d9dda53a7652510880e8228b13vboxsync WebcamsMap::const_iterator it = m.webcams.find(path);
101e307bb33304d9dda53a7652510880e8228b13vboxsync catch (...)
101e307bb33304d9dda53a7652510880e8228b13vboxsyncHRESULT EmulatedUSB::webcamDetach(const com::Utf8Str &aPath)
101e307bb33304d9dda53a7652510880e8228b13vboxsync const Utf8Str &path = aPath.isEmpty() || aPath == "."? s_pathDefault: aPath;
101e307bb33304d9dda53a7652510880e8228b13vboxsync/* vi: set tabstop=4 shiftwidth=4 expandtab: */