void XN_CALLBACK_TYPE XnOniDriver::OnDevicePropertyChanged(const XnChar* ModuleName, XnUInt32 nPropertyId, void* pCookie) { XnOniDevice* pDevice = (XnOniDevice*)pCookie; XnOniDriver* pThis = pDevice->GetDriver(); if (nPropertyId == XN_MODULE_PROPERTY_ERROR_STATE) { XnSensor* pSensor = (XnSensor*)pDevice->GetSensor(); // Get the property value. XnUInt64 errorState = 0; XnStatus nRetVal = pSensor->GetProperty(ModuleName, XN_MODULE_PROPERTY_ERROR_STATE, &errorState); if (nRetVal == XN_STATUS_OK) { if (errorState == XN_STATUS_DEVICE_NOT_CONNECTED) { pThis->deviceDisconnected(pDevice->GetInfo()); } else { int errorStateValue = XN_ERROR_STATE_OK; switch (errorState) { case XN_STATUS_OK: { errorStateValue = XN_ERROR_STATE_OK; break; } case XN_STATUS_DEVICE_PROJECTOR_FAULT: { errorStateValue = XN_ERROR_STATE_DEVICE_PROJECTOR_FAULT; break; } case XN_STATUS_DEVICE_OVERHEAT: { errorStateValue = XN_ERROR_STATE_DEVICE_OVERHEAT; break; } default: { // Invalid value. XN_ASSERT(FALSE); } } pThis->deviceStateChanged(pDevice->GetInfo(), errorStateValue); } } } }
void XN_CALLBACK_TYPE XnOniDriver::OnDeviceDisconnected(const OniDeviceInfo& deviceInfo, void* pCookie) { XnOniDriver* pThis = (XnOniDriver*)pCookie; pThis->deviceDisconnected(&deviceInfo); }