diff --git a/Bin/SensorKinect091-K4W-Bin-Win32-v5.1.0.25.msi b/Bin/SensorKinect091-K4W-Bin-Win32-v5.1.0.25.msi new file mode 100644 index 0000000..60d2694 Binary files /dev/null and b/Bin/SensorKinect091-K4W-Bin-Win32-v5.1.0.25.msi differ diff --git a/Platform/Linux/Install/55-primesense-usb.rules b/Platform/Linux/Install/55-primesense-usb.rules index 4d93f5a..f167f2f 100644 --- a/Platform/Linux/Install/55-primesense-usb.rules +++ b/Platform/Linux/Install/55-primesense-usb.rules @@ -9,4 +9,7 @@ SYSFS{idProduct}=="0601",SYSFS{idVendor}=="1d27",MODE="666",OWNER="xxx",GROUP="u SYSFS{idProduct}=="02AE",SYSFS{idVendor}=="045E",MODE="666",OWNER="xxx",GROUP="users" SYSFS{idProduct}=="02AD",SYSFS{idVendor}=="045E",MODE="666",OWNER="xxx",GROUP="users" SYSFS{idProduct}=="02B0",SYSFS{idVendor}=="045E",MODE="666",OWNER="xxx",GROUP="users" +#--shenberg mod-- +SYSFS{idProduct}=="02BF",SYSFS{idVendor}=="045E",MODE="666",OWNER="xxx",GROUP="users" +SYSFS{idProduct}=="02BE",SYSFS{idVendor}=="045E",MODE="666",OWNER="xxx",GROUP="users" diff --git a/Platform/Win32/Driver/psdrv3.inf b/Platform/Win32/Driver/psdrv3.inf index 4e57fbb..c33bd6e 100644 --- a/Platform/Win32/Driver/psdrv3.inf +++ b/Platform/Win32/Driver/psdrv3.inf @@ -63,6 +63,10 @@ DefaultDestDir = 12 ; Driver Dir %USB\VID_045E&PID_02AD.DeviceDesc%=psdrv3.Dev, USB\VID_045E&PID_02AD %USB\VID_045E&PID_02AE.DeviceDesc%=psdrv3.Dev, USB\VID_045E&PID_02AE&MI_00 %USB\VID_045E&PID_02AE.DeviceDesc%=psdrv3.Dev, USB\VID_045E&PID_02AE +%USB\VID_045E&PID_02BF.DeviceDesc%=psdrv3.Dev, USB\VID_045E&PID_02BF&MI_00 +%USB\VID_045E&PID_02BF.DeviceDesc%=psdrv3.Dev, USB\VID_045E&PID_02BF +%USB\VID_045E&PID_02BE.DeviceDesc%=psdrv3.Dev, USB\VID_045E&PID_02BE&MI_00 +%USB\VID_045E&PID_02BE.DeviceDesc%=psdrv3.Dev, USB\VID_045E&PID_02BE [PrimeSense.NTamd64] %USB\VID_1D27&PID_0200.DeviceDesc%=psdrv3.Dev, USB\VID_1D27&PID_0200&MI_00 @@ -85,6 +89,10 @@ DefaultDestDir = 12 ; Driver Dir %USB\VID_045E&PID_02AD.DeviceDesc%=psdrv3.Dev, USB\VID_045E&PID_02AD %USB\VID_045E&PID_02AE.DeviceDesc%=psdrv3.Dev, USB\VID_045E&PID_02AE&MI_00 %USB\VID_045E&PID_02AE.DeviceDesc%=psdrv3.Dev, USB\VID_045E&PID_02AE +%USB\VID_045E&PID_02BF.DeviceDesc%=psdrv3.Dev, USB\VID_045E&PID_02BF&MI_00 +%USB\VID_045E&PID_02BF.DeviceDesc%=psdrv3.Dev, USB\VID_045E&PID_02BF +%USB\VID_045E&PID_02BE.DeviceDesc%=psdrv3.Dev, USB\VID_045E&PID_02BE&MI_00 +%USB\VID_045E&PID_02BE.DeviceDesc%=psdrv3.Dev, USB\VID_045E&PID_02BE [psdrv3.Dev.NT] CopyFiles=psdrv3.Files.Ext @@ -165,4 +173,6 @@ USB\VID_1D27&PID_2100.DeviceDesc="PrimeSense Sensor Development Kit NG" USB\VID_1D27&PID_F9DB.DeviceDesc="PrimeSense Sensor Development Kit NG Debug" USB\VID_045E&PID_02B0.DeviceDesc="Kinect Motor" USB\VID_045E&PID_02AD.DeviceDesc="Kinect Audio" -USB\VID_045E&PID_02AE.DeviceDesc="Kinect Camera" \ No newline at end of file +USB\VID_045E&PID_02AE.DeviceDesc="Kinect Camera" +USB\VID_045E&PID_02BE.DeviceDesc="Kinect for Windows Audio" +USB\VID_045E&PID_02BF.DeviceDesc="Kinect for Windows Camera" diff --git a/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp b/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp index 53a07e8..1b35004 100644 --- a/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp +++ b/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp @@ -33,6 +33,9 @@ #define XN_SENSOR_VENDOR_ID_KINECT 0x045E #define XN_SENSOR_PRODUCT_ID_KINECT 0x02AE +#define XN_SENSOR_PRODUCT_ID_KINECT4WINDOWS 0x02BF + + //--------------------------------------------------------------------------- // Enums //--------------------------------------------------------------------------- @@ -45,6 +48,8 @@ typedef enum //--------------------------------------------------------------------------- // Code //--------------------------------------------------------------------------- +XnStringsHash s_k4wDevices;// --shenberg mod-- - will replace with proper singleton later + XnSensorIO::XnSensorIO(XN_SENSOR_HANDLE* pSensorHandle) : m_pSensorHandle(pSensorHandle), m_bMiscSupported(FALSE), @@ -121,6 +126,14 @@ XnStatus XnSensorIO::OpenDevice(const XnChar* strPath) strcpy(m_strDeviceName, strPath); + // --shenberg mod-- + XnValue val; + if (XN_STATUS_OK == s_k4wDevices.Get(strPath, val)) { + m_pSensorHandle->bIsK4W = TRUE; + } else { + m_pSensorHandle->bIsK4W = FALSE; + } + return XN_STATUS_OK; } @@ -146,11 +159,13 @@ XnStatus XnSensorIO::OpenDataEndPoints(XnSensorUsbInterface nInterface, const Xn XN_LOG_WARNING_RETURN(XN_STATUS_USB_INTERFACE_NOT_SUPPORTED, XN_MASK_DEVICE_IO, "Unknown interface type: %d", nInterface); } // --avin mod-- -/* - xnLogVerbose(XN_MASK_DEVICE_IO, "Setting USB alternative interface to %d...", nAlternativeInterface); - nRetVal = xnUSBSetInterface(m_pSensorHandle->USBDevice, 0, nAlternativeInterface); - XN_IS_STATUS_OK(nRetVal); -*/ +// --shenberg mod-- on top of it + if (m_pSensorHandle->bIsK4W == TRUE) { + //TODO: un-hard-code (meaning, fix XnHostProtocolInitFWParams) + xnLogVerbose(XN_MASK_DEVICE_IO, "K4W - Setting USB alternative interface to %d...", 1); + nRetVal = xnUSBSetInterface(m_pSensorHandle->USBDevice, 0, 1); + XN_IS_STATUS_OK(nRetVal); + } } xnLogVerbose(XN_MASK_DEVICE_IO, "Opening endpoints..."); @@ -389,7 +404,7 @@ XnStatus XnSensorIO::EnumerateSensors(XnConnectionString* aConnectionStrings, Xn // Temporary patch: "Cache" the devices since running USB enum on the MacOSX platform takes several seconds due to problems in libusb! #if (XN_PLATFORM == XN_PLATFORM_MACOSX) - static XnStringsHash devicesSet; + static XnStringsHash devicesSet; // --shenberg mod-- if (devicesSet.Size() == 0) { @@ -397,14 +412,24 @@ XnStatus XnSensorIO::EnumerateSensors(XnConnectionString* aConnectionStrings, Xn // search for a kinect device nRetVal = Enumerate(XN_SENSOR_PRODUCT_ID_KINECT, devicesSet); XN_IS_STATUS_OK(nRetVal); + // --shenberg mod-- + nRetVal = Enumerate(XN_SENSOR_PRODUCT_ID_KINECT4WINDOWS, devicesSet); + XN_IS_STATUS_OK(nRetVal); + nRetVal = Enumerate(XN_SENSOR_PRODUCT_ID_KINECT4WINDOWS, s_k4wDevices); + XN_IS_STATUS_OK(nRetVal); } #else - XnStringsHash devicesSet; + XnStringsHash devicesSet;// --shenberg mod-- // --avin mod-- // search for a kinect device nRetVal = Enumerate(XN_SENSOR_PRODUCT_ID_KINECT, devicesSet); XN_IS_STATUS_OK(nRetVal); + // --shenberg mod-- + nRetVal = Enumerate(XN_SENSOR_PRODUCT_ID_KINECT4WINDOWS, devicesSet); + XN_IS_STATUS_OK(nRetVal); + nRetVal = Enumerate(XN_SENSOR_PRODUCT_ID_KINECT4WINDOWS, s_k4wDevices); + XN_IS_STATUS_OK(nRetVal); #endif // now copy back diff --git a/Source/XnDeviceSensorV2/XnDeviceSensorIO.h b/Source/XnDeviceSensorV2/XnDeviceSensorIO.h index a329975..d3f0635 100644 --- a/Source/XnDeviceSensorV2/XnDeviceSensorIO.h +++ b/Source/XnDeviceSensorV2/XnDeviceSensorIO.h @@ -64,6 +64,7 @@ typedef struct XN_SENSOR_HANDLE XnUsbConnection ImageConnection; XnUsbConnection MiscConnection; XnUInt8 nBoardVer; + XnBool bIsK4W; // -- shenberg mod -- } XN_SENSOR_HANDLE; //--------------------------------------------------------------------------- diff --git a/Source/XnDeviceSensorV2/XnHostProtocol.cpp b/Source/XnDeviceSensorV2/XnHostProtocol.cpp index c080369..06f02de 100644 --- a/Source/XnDeviceSensorV2/XnHostProtocol.cpp +++ b/Source/XnDeviceSensorV2/XnHostProtocol.cpp @@ -1022,7 +1022,6 @@ XnStatus XnHostProtocolGetFixedParams(XnDevicePrivateData* pDevicePrivateData, X XnChar* pData = FixedParamsBuffer; xnLogVerbose(XN_MASK_SENSOR_PROTOCOL, "Getting the fixed params..."); - if (pDevicePrivateData->FWInfo.nFWVer >= XN_SENSOR_FW_VER_3_0) { nFixedParamSize = sizeof(XnFixedParams); @@ -1035,6 +1034,10 @@ XnStatus XnHostProtocolGetFixedParams(XnDevicePrivateData* pDevicePrivateData, X { nFixedParamSize = sizeof(XnFixedParamsV20); } + // --shenberg mod-- + if (pDevicePrivateData->SensorHandle.bIsK4W == TRUE) { + nFixedParamSize = 334; // value taken from libfreenect + } xnOSMemSet(&FixedParams, 0, sizeof(XnFixedParams));