Esempio n. 1
0
CalDevice* CalDevice::createDevice(int num)
{
    if (!CalInitObject::check()) return 0;
    CalDevice* pDev = new CalDevice(num);

    if(calDeviceOpen(&pDev->mDevice, num) != CAL_RESULT_OK) {
        /* Opening device failed */
        delete pDev;
        pDev = NULL;
        return pDev;
    }
    if (calCtxCreate( &pDev->mCtx, pDev->mDevice ) != CAL_RESULT_OK) {
        delete pDev;
        pDev = NULL;
        return pDev;
    }
    pDev->mHasContext = true;

    /* Retrieve info and attribs of the opened device */
    calDeviceGetInfo(&pDev->mInfo, num);
    pDev->mAttribs.struct_size = sizeof(CALdeviceattribs);
    if (calDeviceGetAttribs(&pDev->mAttribs, num)!= CAL_RESULT_OK) {
        fprintf(stderr, "ERROR: Could not query device attributes.\n");
    }

    return pDev;
}
static CALresult mwGetDevice(MWCALInfo* ci, CALuint devID)
{
    CALresult err;

    err = calDeviceGetCount(&ci->numDevices);
    if (err != CAL_RESULT_OK)
    {
        cal_warn("Failed to get CAL device count", err);
        return err;
    }

    if (ci->numDevices == 0)
    {
        warn("Didn't find any CAL devices\n");
        return CAL_RESULT_ERROR;
    }

    if (devID + 1 > ci->numDevices)
    {
        warn("Requested device ID %u > found number of devices (%u)\n",
             devID, ci->numDevices);
        return CAL_RESULT_ERROR;
    }

    ci->devID = devID;
    err = calDeviceOpen(&ci->dev, ci->devID);
    if (err != CAL_RESULT_OK)
    {
        cal_warn("Failed to open CAL device", err);
        return err;
    }

    err = calDeviceGetInfo(&ci->devInfo, ci->devID);
    if (err != CAL_RESULT_OK)
    {
        cal_warn("Failed to get CAL device information", err);
        return err;
    }

    ci->devAttribs.struct_size = sizeof(struct CALdeviceattribsRec);
    err = calDeviceGetAttribs(&ci->devAttribs, ci->devID);
    if (err != CAL_RESULT_OK)
    {
        cal_warn("Failed to get CAL device attributes", err);
        return err;
    }

    return CAL_RESULT_OK;
}