// create the instance of the nui sensor
HRESULT KinectSensor::CreateNuiDevice()
{
    assert( m_wsPortID.size() != 0 );

    // check if we can use it
    CComPtr<INuiSensor> pNuiSensor;
    HRESULT hr = NuiCreateSensorById( m_wsPortID.c_str(), &pNuiSensor );
    if( FAILED(hr) )
    {
        return hr;
    }

    // is this one we already have
    if( m_pNuiSensor == pNuiSensor )
    {
        return S_OK;
    }

    assert( nullptr == m_pNuiSensor );

    // if the device is not in use by another process
    if( !IsSensorConflict(pNuiSensor) )
    {
        // start clean
        ResetDevice();

        m_pNuiSensor = pNuiSensor; // auto refcount with CComPtr
    }
    
    // update internal state and return
    return GetNUISensorStatus(true);
}
Пример #2
0
/// <summary>
/// Return the current status of the sensor
/// </summary>
void KinectSensor::NuiSensorStatus(_In_ INuiSensor* pNuiSensor, _Out_ HRESULT& hr, _Out_ KINECT_SENSOR_STATUS& curStatus, bool bCheckConflict)
{
    if (nullptr == pNuiSensor)
    {
        curStatus = KinectSensorStatusNone;
        hr = E_NUI_DEVICE_NOT_CONNECTED;

        return;
    }
    else
    {
        hr = pNuiSensor->NuiStatus();
    }

    switch (hr)
    {
    case S_OK:
        curStatus = KinectSensorStatusStarted;

        if (bCheckConflict)
        {
            // Even if the input sensor is started, we still need to check if it is
            // in use by other process.
            if (IsSensorConflict(pNuiSensor))
            {
                // other app owns this sensor
                curStatus = KinectSensorStatusConflict;
                hr = E_NUI_ALREADY_INITIALIZED;
            }
        }
        break;
    case S_NUI_INITIALIZING:
        curStatus = KinectSensorStatusInitializing;
        break;
    case E_NUI_NOTGENUINE:
        curStatus = KinectSensorStatusNotGenuine;
        break;
    case E_NUI_INSUFFICIENTBANDWIDTH:
        curStatus = KinectSensorStatusInsufficientBandwidth;
        break;
    case E_NUI_NOTSUPPORTED:
        curStatus = KinectSensorStatusNotSupported;
        break;
    case E_NUI_NOTPOWERED:
        curStatus = KinectSensorStatusNotPowered;
        break;
    default:
        curStatus = KinectSensorStatusError;
    }
}