/****************************************************************************
* *
* PrimeSense Sensor 5.x Alpha *
* Copyright (C) 2011 PrimeSense Ltd. *
* *
* This file is part of PrimeSense Sensor. *
* *
* PrimeSense Sensor is free software: you can redistribute it and/or modify*
* it under the terms of the GNU Lesser General Public License as published *
* by the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* PrimeSense Sensor is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public License *
* along with PrimeSense Sensor. If not, see .*
* *
****************************************************************************/
#ifndef __XN_SENSOR_H__
#define __XN_SENSOR_H__
//---------------------------------------------------------------------------
// Includes
//---------------------------------------------------------------------------
#include
#include "XnDeviceSensorIO.h"
#include "XnParams.h"
#include "XnDeviceSensor.h"
#include "XnSensorFixedParams.h"
#include "XnSensorFirmwareParams.h"
#include
#include "XnSensorFirmware.h"
#include "XnCmosInfo.h"
#include "IXnSensorStream.h"
#include
//---------------------------------------------------------------------------
// Defines
//---------------------------------------------------------------------------
#define XN_SENSOR_PROPERTY_INSTANCE_POINTER "InstancePointer"
//---------------------------------------------------------------------------
// XnSensor class
//---------------------------------------------------------------------------
class XnSensor : public XnDeviceBase
{
friend class XnServerSensorInvoker;
public:
XnSensor();
~XnSensor();
static XnStatus GetDefinition(XnDeviceDefinition* pDeviceDefinition);
static XnStatus Enumerate(XnConnectionString* aConnectionStrings, XnUInt32* pnCount);
virtual XnStatus InitImpl(const XnDeviceConfig* pDeviceConfig);
virtual XnStatus Destroy();
virtual XnStatus OpenAllStreams();
virtual XnStatus ReadStream(XnStreamData* pStreamOutput);
virtual XnStatus Read(XnStreamDataSet* pStreamOutputSet);
virtual XnStatus WriteStream(const XnStreamData* pStreamOutput);
virtual XnStatus Write(const XnStreamDataSet* pStreamOutputSet);
virtual XnStatus Seek(XnUInt64 nTimestamp);
virtual XnStatus SeekFrame(XnUInt32 nFrameID);
virtual XnStatus LoadConfigFromFile(const XnChar* csINIFilePath, const XnChar* csSectionName);
public:
inline const XnSensorFixedParams* GetFixedParams() const { return &m_FixedParams; }
inline XnSensorFirmware* GetFirmware() { return &m_Firmware; }
inline XnSensorFPS* GetFPSCalculator() { return &m_FPS; }
XnStatus SetCmosConfiguration(XnCMOSType nCmos, XnResolutions nRes, XnUInt32 nFPS);
inline XnDevicePrivateData* GetDevicePrivateData() { return &m_DevicePrivateData; }
XnStatus ConfigPropertyFromFile(XnStringProperty* pProperty, const XnChar* csINIFilePath, const XnChar* csSectionName);
XnStatus ConfigPropertyFromFile(XnIntProperty* pProperty, const XnChar* csINIFilePath, const XnChar* csSectionName);
inline XnBool IsMiscSupported() const { return m_SensorIO.IsMiscEndpointSupported(); }
inline XnBool IsLowBandwidth() const { return m_SensorIO.IsLowBandwidth(); }
XnStatus GetSharedBufferPool(const XnChar* strStream, XnSharedMemoryBufferPool** ppBufferPool);
inline XnStatus GetErrorState() { return (XnStatus)m_ErrorState.GetValue(); }
XnStatus SetErrorState(XnStatus errorState);
static XnStatus ResolveGlobalConfigFileName(XnChar* strConfigFile, XnUInt32 nBufSize, const XnChar* strConfigDir);
XnStatus SetGlobalConfigFile(const XnChar* strConfigFile);
XnStatus ConfigureModuleFromGlobalFile(const XnChar* strModule, const XnChar* strSection = NULL);
const XnChar* GetUSBPath() { return m_USBPath.GetValue(); }
XnBool AreOtherUsersAllowed() { return (m_AllowOtherUsers.GetValue() == TRUE); }
protected:
virtual XnStatus CreateStreamImpl(const XnChar* strType, const XnChar* strName, const XnActualPropertiesHash* pInitialSet);
XnStatus CreateDeviceModule(XnDeviceModuleHolder** ppModuleHolder);
XnStatus CreateStreamModule(const XnChar* StreamType, const XnChar* StreamName, XnDeviceModuleHolder** ppStream);
void DestroyStreamModule(XnDeviceModuleHolder* pStreamHolder);
XnStatus WaitForPrimaryStream(XN_EVENT_HANDLE hNewDataEvent, XnStreamDataSet* pSet);
private:
XnStatus InitSensor(const XnDeviceConfig* pDeviceConfig);
XnStatus ParseConnectionString(const XnChar* csConnectionString, XnChar* csSensorID, XnUInt32* pnBoardID);
XnStatus ValidateSensorID(XnChar* csSensorID);
XnStatus ReadFromStreamImpl(XnDeviceStream* pStream, XnStreamData* pStreamOutput);
XnStatus SetMirrorForModule(XnDeviceModule* pModule, XnUInt64 nValue);
XnStatus FindSensorStream(const XnChar* StreamName, IXnSensorStream** ppStream);
XnStatus CheckIfReadingAllowed();
XnStatus InitReading();
XnBool HasSynchedFrameArrived(const XnChar* strDepthStream, const XnChar* strImageStream);
XnStatus OnFrameSyncPropertyChanged();
//---------------------------------------------------------------------------
// Getters
//---------------------------------------------------------------------------
XnStatus GetFirmwareParam(XnInnerParamData* pParam);
XnStatus GetCmosBlankingUnits(XnCmosBlankingUnits* pBlanking);
XnStatus GetCmosBlankingTime(XnCmosBlankingTime* pBlanking);
XnStatus GetFirmwareMode(XnParamCurrentMode* pnMode);
XnStatus GetLastRawFrame(const XnChar* strStream, XnUChar* pBuffer, XnUInt32 nDataSize);
XnStatus GetFixedParams(XnDynamicSizeBuffer* pBuffer);
//---------------------------------------------------------------------------
// Setters
//---------------------------------------------------------------------------
XnStatus SetInterface(XnSensorUsbInterface nInterface);
XnStatus SetAllowOtherUsers(XnBool bAllowOtherUsers);
XnStatus SetNumberOfBuffers(XnUInt32 nCount);
XnStatus SetReadEndpoint1(XnBool bRead);
XnStatus SetReadEndpoint2(XnBool bRead);
XnStatus SetReadEndpoint3(XnBool bRead);
XnStatus SetReadData(XnBool bRead);
XnStatus SetFirmwareParam(const XnInnerParamData* pParam);
XnStatus SetCmosBlankingUnits(const XnCmosBlankingUnits* pBlanking);
XnStatus SetCmosBlankingTime(const XnCmosBlankingTime* pBlanking);
XnStatus Reset(XnParamResetType nType);
XnStatus SetFirmwareMode(XnParamCurrentMode nMode);
//---------------------------------------------------------------------------
// Callbacks
//---------------------------------------------------------------------------
static XnStatus XN_CALLBACK_TYPE SetInterfaceCallback(XnActualIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetAllowOtherUsersCallback(XnActualIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetNumberOfBuffersCallback(XnActualIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetReadEndpoint1Callback(XnActualIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetReadEndpoint2Callback(XnActualIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetReadEndpoint3Callback(XnActualIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetReadDataCallback(XnActualIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetFirmwareParamCallback(XnGeneralProperty* pSender, const XnGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetCmosBlankingUnitsCallback(XnGeneralProperty* pSender, const XnGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetCmosBlankingTimeCallback(XnGeneralProperty* pSender, const XnGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE ResetCallback(XnIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetFirmwareModeCallback(XnIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE GetFixedParamsCallback(const XnGeneralProperty* pSender, const XnGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE FrameSyncPropertyChangedCallback(const XnProperty* pSender, void* pCookie);
static XnBool XN_CALLBACK_TYPE HasSynchedFrameArrived(void* pCookie);
static XnBool XN_CALLBACK_TYPE USBEventCallback(XnUSBEventType USBEventType, XnChar* cpDevPath, void* pCallbackData);
static XnStatus XN_CALLBACK_TYPE GetFirmwareParamCallback(const XnGeneralProperty* pSender, const XnGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE GetCmosBlankingUnitsCallback(const XnGeneralProperty* pSender, const XnGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE GetCmosBlankingTimeCallback(const XnGeneralProperty* pSender, const XnGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE GetFirmwareModeCallback(const XnIntProperty* pSender, XnUInt64* pnValue, void* pCookie);
//---------------------------------------------------------------------------
// Members
//---------------------------------------------------------------------------
XnActualIntProperty m_ErrorState;
XnActualIntProperty m_ResetSensorOnStartup;
XnActualIntProperty m_Interface;
XnActualIntProperty m_NumberOfBuffers;
XnActualIntProperty m_ReadFromEP1;
XnActualIntProperty m_ReadFromEP2;
XnActualIntProperty m_ReadFromEP3;
XnActualIntProperty m_ReadData;
XnActualIntProperty m_FrameSync;
XnActualIntProperty m_CloseStreamsOnShutdown;
XnGeneralProperty m_FirmwareParam;
XnGeneralProperty m_CmosBlankingUnits;
XnGeneralProperty m_CmosBlankingTime;
XnIntProperty m_Reset;
XnIntProperty m_FirmwareMode;
XnVersions m_VersionData;
XnActualGeneralProperty m_Version;
XnGeneralProperty m_FixedParam;
XnSensor* m_pThis;
XnActualGeneralProperty m_InstancePointer;
XnActualStringProperty m_ID;
XnActualStringProperty m_USBPath;
XnActualStringProperty m_DeviceName;
XnActualStringProperty m_VendorSpecificData;
XnActualIntProperty m_AllowOtherUsers;
XnSensorFirmware m_Firmware;
XnDevicePrivateData m_DevicePrivateData;
XnSensorFixedParams m_FixedParams;
XnSensorFPS m_FPS;
XnCmosInfo m_CmosInfo;
XnSensorIO m_SensorIO;
XnSensorObjects m_Objects;
XnDump m_FrameSyncDump;
XnBool m_bInitialized;
XnIntPropertySynchronizer m_PropSynchronizer;
XnChar m_strGlobalConfigFile[XN_FILE_MAX_PATH];
};
#endif //__XN_SENSOR_H__