// 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); }
/// <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; } }