Esempio n. 1
0
//--------------------------------------------------------------
void testApp::draw()
{
	//depth.draw(0,0,320,240);
	//user.draw();
	image.draw(0, 0, 640, 480);
	
	ofxTrackedUser* tracked = user.getTrackedUser(0);
	if(tracked != NULL) 
	{
		tracked->debugDraw();
		
		int xl = tracked->left_lower_arm.end.x;
		int yl = tracked->left_lower_arm.end.y;
		
		int xr = tracked->right_lower_arm.end.x;
		int yr = tracked->right_lower_arm.end.y;
		
		int xh = tracked->neck.begin.x;
		int yh = tracked->neck.begin.y;
		
		ofSetColor(255, 255, 255);
		hands.draw(xl, yl);
		hands.draw(xr, yr);
		
		head.draw(xh, yh);
		
		XnUSBDeviceSpeed* pDevSpeed;
		xnUSBGetDeviceSpeed(usbhandle, pDevSpeed);
		
		char rstr[1024];
		sprintf(rstr, "DEV SPEED: %d", (int)pDevSpeed);
		ofDrawBitmapString(rstr, 400,400);		
		xnUSBCloseDevice(usbhandle);
	}
}
XnStatus XnSensorIO::OpenDevice(const XnChar* strPath)
{
	XnStatus nRetVal;
	XnUSBDeviceSpeed DevSpeed;

	nRetVal = xnUSBInit();
	if (nRetVal != XN_STATUS_OK && nRetVal != XN_STATUS_USB_ALREADY_INIT)
		return nRetVal;

	xnLogVerbose(XN_MASK_DEVICE_IO, "Connecting to USB device...");

	if (strPath == NULL || strcmp(strPath, "*:0") == 0)
	{
		// support old style API
		XnConnectionString aConnections[1];
		XnUInt32 nCount = 1;
		nRetVal = EnumerateSensors(aConnections, &nCount);
		if (nRetVal != XN_STATUS_OK && nRetVal != XN_STATUS_OUTPUT_BUFFER_OVERFLOW)
		{
			return nRetVal;
		}

		strPath = aConnections[0];
	}

	// try to open the device
	xnLogVerbose(XN_MASK_DEVICE_IO, "Trying to open sensor '%s'...", strPath);
	nRetVal = xnUSBOpenDeviceByPath(strPath, &m_pSensorHandle->USBDevice);
	XN_IS_STATUS_OK(nRetVal);

	nRetVal = xnUSBGetDeviceSpeed(m_pSensorHandle->USBDevice, &DevSpeed);
	XN_IS_STATUS_OK(nRetVal);

	if (DevSpeed != XN_USB_DEVICE_HIGH_SPEED)
	{
		XN_LOG_WARNING_RETURN(XN_STATUS_USB_UNKNOWN_DEVICE_SPEED, XN_MASK_DEVICE_IO, "Device is not high speed!");
	}

	// on older firmwares, control was sent over BULK endpoints. Check if this is the case
	xnLogVerbose(XN_MASK_DEVICE_IO, "Trying to open endpoint 0x4 for control out (for old firmwares)...");
	nRetVal = xnUSBOpenEndPoint(m_pSensorHandle->USBDevice, 0x4, XN_USB_EP_BULK, XN_USB_DIRECTION_OUT, &m_pSensorHandle->ControlConnection.ControlOutConnectionEp);
	if (nRetVal == XN_STATUS_USB_ENDPOINT_NOT_FOUND || nRetVal == XN_STATUS_USB_WRONG_ENDPOINT_TYPE || nRetVal == XN_STATUS_USB_WRONG_ENDPOINT_DIRECTION)
	{
		// this is not the case. use regular control endpoint (0)
		m_pSensorHandle->ControlConnection.bIsBulk = FALSE;
	}
	else
	{
		XN_IS_STATUS_OK(nRetVal);

		xnLogVerbose(XN_MASK_DEVICE_IO, "Opening endpoint 0x85 for control in...");
		nRetVal = xnUSBOpenEndPoint(m_pSensorHandle->USBDevice, 0x85, XN_USB_EP_BULK, XN_USB_DIRECTION_IN, &m_pSensorHandle->ControlConnection.ControlInConnectionEp);
		XN_IS_STATUS_OK(nRetVal);

		m_pSensorHandle->ControlConnection.bIsBulk = TRUE;
	}

	nRetVal = IsSensorLowBandwidth(strPath, &m_bIsLowBandwidth);
	XN_IS_STATUS_OK(nRetVal);

	xnLogInfo(XN_MASK_DEVICE_IO, "Connected to USB device%s", m_bIsLowBandwidth ? " (LowBand)" : "");

	strcpy(m_strDeviceName, strPath);

	return XN_STATUS_OK;
}
Esempio n. 3
0
XnStatus XnSensorIO::OpenDevice(const XnChar* strPath, XnBool bLeanInit)
{
    XnStatus nRetVal;
    XnUSBDeviceSpeed DevSpeed;

    xnLogVerbose(XN_MASK_DEVICE_IO, "Connecting to USB device...");

    // try to open the device
    xnLogVerbose(XN_MASK_DEVICE_IO, "Trying to open sensor '%s'...", strPath);
    nRetVal = xnUSBOpenDeviceByPath(strPath, &m_pSensorHandle->USBDevice);
    XN_IS_STATUS_OK(nRetVal);

    if (!bLeanInit)
    {
        nRetVal = xnUSBGetDeviceSpeed(m_pSensorHandle->USBDevice, &DevSpeed);
        XN_IS_STATUS_OK(nRetVal);

        if (DevSpeed != XN_USB_DEVICE_HIGH_SPEED)
        {
            XN_LOG_WARNING_RETURN(XN_STATUS_USB_UNKNOWN_DEVICE_SPEED, XN_MASK_DEVICE_IO, "Device is not high speed!");
        }
    }

    // on older firmwares, control was sent over BULK endpoints. Check if this is the case
    xnLogVerbose(XN_MASK_DEVICE_IO, "Trying to open endpoint 0x4 for control out (for old firmwares)...");
    nRetVal = xnUSBOpenEndPoint(m_pSensorHandle->USBDevice, 0x4, XN_USB_EP_BULK, XN_USB_DIRECTION_OUT, &m_pSensorHandle->ControlConnection.ControlOutConnectionEp);
    if (nRetVal == XN_STATUS_USB_ENDPOINT_NOT_FOUND || nRetVal == XN_STATUS_USB_WRONG_ENDPOINT_TYPE || nRetVal == XN_STATUS_USB_WRONG_ENDPOINT_DIRECTION)
    {
        // this is not the case. use regular control endpoint (0)
        m_pSensorHandle->ControlConnection.bIsBulk = FALSE;
    }
    else
    {
        XN_IS_STATUS_OK(nRetVal);

        xnLogVerbose(XN_MASK_DEVICE_IO, "Opening endpoint 0x85 for control in...");
        nRetVal = xnUSBOpenEndPoint(m_pSensorHandle->USBDevice, 0x85, XN_USB_EP_BULK, XN_USB_DIRECTION_IN, &m_pSensorHandle->ControlConnection.ControlInConnectionEp);
        XN_IS_STATUS_OK(nRetVal);

        m_pSensorHandle->ControlConnection.bIsBulk = TRUE;
    }

    nRetVal = XnDeviceEnumeration::IsSensorLowBandwidth(strPath, &m_bIsLowBandwidth);
    XN_IS_STATUS_OK(nRetVal);

    xnLogInfo(XN_MASK_DEVICE_IO, "Connected to USB device%s", m_bIsLowBandwidth ? " (LowBand)" : "");

    // check if we're currently on BULK interfaces or ISO ones
    XN_USB_EP_HANDLE hEP;
    nRetVal = xnUSBOpenEndPoint(m_pSensorHandle->USBDevice, 0x82, XN_USB_EP_BULK, XN_USB_DIRECTION_IN, &hEP);
    if (nRetVal == XN_STATUS_USB_WRONG_ENDPOINT_TYPE)
    {
        m_interface = XN_SENSOR_USB_INTERFACE_ISO_ENDPOINTS;
    }
    else
    {
        m_interface = XN_SENSOR_USB_INTERFACE_BULK_ENDPOINTS;
        xnUSBCloseEndPoint(hEP);
    }

    strcpy(m_strDeviceName, strPath);

    return XN_STATUS_OK;
}