VirtualBox

Changeset 94368 in vbox


Ignore:
Timestamp:
Mar 25, 2022 7:26:37 AM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
150674
Message:

Main,UsbWebcam: Drop passing pointers through CFGM in favor of using VMM2USERMETHODS::pfnQueryGenericObject, bugref:10053

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/vrdpusb.h

    r94342 r94368  
    9090typedef struct REMOTEUSBIF
    9191{
    92     /** Opqaue user data to pass as the first parameter to the callbacks. */
     92    /** Opaque user data to pass as the first parameter to the callbacks. */
    9393    void                        *pvUser;
    9494
     
    109109#define REMOTEUSBIF_OID "87012f58-2ad6-4f89-b7b1-92f72c7ea8cc"
    110110
     111
     112typedef struct EMULATEDUSBIF
     113{
     114    /** Opaque user data to pass as the first parameter to the callbacks. */
     115    void                        *pvUser;
     116
     117    DECLCALLBACKMEMBER(int, pfnQueryEmulatedUsbDataById, (void *pvUser, const char *pszId, void **ppvEmUsbCb, void **ppvEmUsbCbData, void **ppvObject));
     118} EMULATEDUSBIF;
     119typedef EMULATEDUSBIF *PEMULATEDUSBIF;
     120
     121#define EMULATEDUSBIF_OID "b7b4e194-ada0-4722-8e4e-1700ed9064f3"
     122
    111123/** @} */
    112124
  • trunk/src/VBox/Main/include/EmulatedUSBImpl.h

    r93115 r94368  
    2424#include "EmulatedUSBWrap.h"
    2525
     26#include <VBox/vrdpusb.h>
     27
    2628class Console;
    2729class EUSBWEBCAM;
     
    4749                                            const void *pvData, uint32_t cbData);
    4850
     51    PEMULATEDUSBIF i_getEmulatedUsbIf();
     52
    4953    HRESULT i_webcamAttachInternal(const com::Utf8Str &aPath,
    5054                                   const com::Utf8Str &aSettings,
     
    5761    static DECLCALLBACK(int) eusbCallbackEMT(EmulatedUSB *pThis, char *pszId, uint32_t iEvent,
    5862                                             void *pvData, uint32_t cbData);
     63
     64    static DECLCALLBACK(int) i_QueryEmulatedUsbDataById(void *pvUser, const char *pszId, void **ppvEmUsbCb, void **ppvEmUsbCbData, void **ppvObject);
    5965
    6066    HRESULT webcamPathFromId(com::Utf8Str *pPath, const char *pszId);
     
    8086
    8187    Data m;
     88    EMULATEDUSBIF mEmUsbIf;
    8289};
    8390
  • trunk/src/VBox/Main/src-client/ConsoleImpl.cpp

    r94342 r94368  
    1098310983        return &pConsole->mRemoteUsbIf;
    1098410984
     10985    if (UuidCopy == EMULATEDUSBIF_OID)
     10986        return pConsole->mEmulatedUSB->i_getEmulatedUsbIf();
     10987
    1098510988    return NULL;
    1098610989}
  • trunk/src/VBox/Main/src-client/EmulatedUSBImpl.cpp

    r93444 r94368  
    101101    bool HasId(const char *pszId) { return RTStrCmp(pszId, mszUuid) == 0;}
    102102
     103    void *getObjectPtr() { return mpvObject; }
     104
    103105    EUSBDEVICESTATUS enmStatus;
    104106};
     
    145147    rc = pVMM->pfnCFGMR3InsertString(pEUSB,         "Id", pThis->mszUuid);
    146148    AssertRCReturn(rc, rc);
    147     /** @todo BUGBUG: No pointers via CFGM in 7.0!   */
    148     rc = pVMM->pfnCFGMR3InsertInteger(pEUSB,        "pfnCallback", (uintptr_t)EmulatedUSB::i_eusbCallback);
    149     AssertRCReturn(rc, rc);
    150     rc = pVMM->pfnCFGMR3InsertInteger(pEUSB,        "pvCallback", (uintptr_t)pThis->mpEmulatedUSB);
    151     AssertRCReturn(rc, rc);
    152149
    153150    PCFGMNODE pLunL0;
     
    160157    rc = pVMM->pfnCFGMR3InsertString(pConfig,       "DevicePath", pThis->mPath.c_str());
    161158    AssertRCReturn(rc, rc);
    162     /** @todo BUGBUG: No pointers via CFGM in 7.0!   */
    163     rc = pVMM->pfnCFGMR3InsertInteger(pConfig,      "Object", (uintptr_t)pThis->mpvObject);
     159    rc = pVMM->pfnCFGMR3InsertString(pConfig,       "Id", pThis->mszUuid);
    164160    AssertRCReturn(rc, rc);
    165161    rc = emulatedWebcamInsertSettings(pConfig, pVMM, &pThis->mDrvSettings);
     
    337333    m.pConsole = pConsole;
    338334
     335    mEmUsbIf.pvUser = this;
     336    mEmUsbIf.pfnQueryEmulatedUsbDataById = EmulatedUSB::i_QueryEmulatedUsbDataById;
     337
    339338    /* Confirm a successful initialization */
    340339    autoInitSpan.setSucceeded();
     
    400399
    401400    return hrc;
     401}
     402
     403PEMULATEDUSBIF EmulatedUSB::i_getEmulatedUsbIf()
     404{
     405    return &mEmUsbIf;
    402406}
    403407
     
    603607}
    604608
     609/*static*/
     610DECLCALLBACK(int) EmulatedUSB::i_QueryEmulatedUsbDataById(void *pvUser, const char *pszId, void **ppvEmUsbCb, void **ppvEmUsbCbData, void **ppvObject)
     611{
     612    EmulatedUSB *pEmUsb = (EmulatedUSB *)pvUser;
     613
     614    AutoReadLock alock(pEmUsb COMMA_LOCKVAL_SRC_POS);
     615    WebcamsMap::const_iterator it;
     616    for (it = pEmUsb->m.webcams.begin(); it != pEmUsb->m.webcams.end(); ++it)
     617    {
     618        EUSBWEBCAM *p = it->second;
     619        if (p->HasId(pszId))
     620        {
     621            if (ppvEmUsbCb)
     622                *ppvEmUsbCb = (void *)EmulatedUSB::i_eusbCallback;
     623            if (ppvEmUsbCbData)
     624                *ppvEmUsbCbData = pEmUsb;
     625            if (ppvObject)
     626                *ppvObject = p->getObjectPtr();
     627
     628            return VINF_SUCCESS;
     629        }
     630    }
     631
     632    return VERR_NOT_FOUND;
     633}
     634
    605635HRESULT EmulatedUSB::webcamPathFromId(com::Utf8Str *pPath, const char *pszId)
    606636{
  • trunk/src/VBox/Main/src-client/UsbWebcamInterface.cpp

    r93444 r94368  
    404404    }
    405405
    406     void *pv = NULL;
    407     int rc = pDrvIns->pHlpR3->pfnCFGMQueryPtr(pCfg, "Object", &pv);
    408     if (!RT_VALID_PTR(pv))
    409          rc = VERR_INVALID_PARAMETER;
    410     AssertMsgRCReturn(rc, ("Configuration error: No/bad \"Object\" %p value! rc=%Rrc\n", pv, rc), rc);
     406    char *pszId = NULL;
     407    int rc = pDrvIns->pHlpR3->pfnCFGMQueryStringAlloc(pCfg, "Id", &pszId);
     408    if (RT_SUCCESS(rc))
     409    {
     410        RTUUID UuidEmulatedUsbIf;
     411        rc = RTUuidFromStr(&UuidEmulatedUsbIf, EMULATEDUSBIF_OID); AssertRC(rc);
     412
     413        PEMULATEDUSBIF pEmulatedUsbIf = (PEMULATEDUSBIF)PDMDrvHlpQueryGenericUserObject(pDrvIns, &UuidEmulatedUsbIf);
     414        AssertPtrReturn(pEmulatedUsbIf, VERR_INVALID_PARAMETER);
     415
     416        rc = pEmulatedUsbIf->pfnQueryEmulatedUsbDataById(pEmulatedUsbIf->pvUser, pszId,
     417                                                         NULL /*ppvEmUsbCb*/, NULL /*ppvEmUsbCbData*/, (void **)&pThis->pRemote);
     418        pDrvIns->pHlpR3->pfnMMHeapFree(pDrvIns, pszId);
     419        AssertRCReturn(rc, rc);
     420    }
     421    else
     422        return rc;
    411423
    412424    /* Everything ok. Initialize. */
    413     pThis->pRemote = (EMWEBCAMREMOTE *)pv;
    414425    pThis->pRemote->pEmWebcam->EmWebcamConstruct(pThis);
    415426
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette