XnStatus XnDeviceSensorConfigureVersion(XnDevicePrivateData* pDevicePrivateData) { XnStatus nRetVal = XN_STATUS_OK; // GetVersion is exactly the same in all versions, except a change that was made in version 5.1. // so, we'll start with that, and if doesn't work we'll try previous protocols XnHostProtocolUsbCore usb = XN_USB_CORE_JANGO; nRetVal = XnHostProtocolInitFWParams(pDevicePrivateData, 5, 1, 0, usb); XN_IS_STATUS_OK(nRetVal); nRetVal = XnHostProtocolGetVersion(pDevicePrivateData, pDevicePrivateData->Version); // Strange bug: sometimes, when sending first command to device, no reply is received, so try again if (nRetVal == XN_STATUS_USB_TRANSFER_TIMEOUT) { xnOSSleep(2000); nRetVal = XnHostProtocolGetVersion(pDevicePrivateData, pDevicePrivateData->Version); } // if command failed for any reason, try again with older protocol if (nRetVal != XN_STATUS_OK) { nRetVal = XnHostProtocolInitFWParams(pDevicePrivateData, 5, 0, 0, usb); XN_IS_STATUS_OK(nRetVal); nRetVal = XnHostProtocolGetVersion(pDevicePrivateData, pDevicePrivateData->Version); } // if it still fails, give up XN_IS_STATUS_OK(nRetVal); // check which usb core is used (don't check error code. If this fails, assume JANGO if (XN_STATUS_OK != XnHostProtocolGetUsbCoreType(pDevicePrivateData, usb)) { usb = XN_USB_CORE_JANGO; } // Now that we have the actual version, configure protocol accordingly nRetVal = XnHostProtocolInitFWParams(pDevicePrivateData, pDevicePrivateData->Version.nMajor, pDevicePrivateData->Version.nMinor, pDevicePrivateData->Version.nBuild, usb); XN_IS_STATUS_OK(nRetVal); pDevicePrivateData->HWInfo.nHWVer = pDevicePrivateData->Version.HWVer; pDevicePrivateData->ChipInfo.nChipVer = pDevicePrivateData->Version.ChipVer; return (XN_STATUS_OK); }
XnStatus XnDeviceSensorConfigureVersion(XnDevicePrivateData* pDevicePrivateData) { XnStatus nRetVal = XN_STATUS_OK; nRetVal = XnHostProtocolGetVersion(pDevicePrivateData, pDevicePrivateData->Version); // Strange bug: sometimes, when sending first command to device, no reply is received, so try again if (nRetVal == XN_STATUS_USB_TRANSFER_TIMEOUT) { xnOSSleep(2000); nRetVal = XnHostProtocolGetVersion(pDevicePrivateData, pDevicePrivateData->Version); } if (nRetVal != XN_STATUS_OK) { return nRetVal; } // Sensor HW Version is always 1.0 now... pDevicePrivateData->SensorInfo.nSensorVer = XN_SENSOR_VER_2_0; return (XN_STATUS_OK); }