1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307
|
/*****************************************************************************
* *
* OpenNI 2.x Alpha *
* Copyright (C) 2012 PrimeSense Ltd. *
* *
* This file is part of OpenNI. *
* *
* Licensed under the Apache License, Version 2.0 (the "License"); *
* you may not use this file except in compliance with the License. *
* You may obtain a copy of the License at *
* *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, software *
* distributed under the License is distributed on an "AS IS" BASIS, *
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
* See the License for the specific language governing permissions and *
* limitations under the License. *
* *
*****************************************************************************/
#ifndef __XN_SENSOR_H__
#define __XN_SENSOR_H__
//---------------------------------------------------------------------------
// Includes
//---------------------------------------------------------------------------
#include <DDK/XnDeviceBase.h>
#include "XnDeviceSensorIO.h"
#include "XnParams.h"
#include "XnDeviceSensor.h"
#include "XnSensorFixedParams.h"
#include "XnSensorFirmwareParams.h"
#include <DDK/XnDeviceStream.h>
#include "XnSensorFirmware.h"
#include "XnCmosInfo.h"
#include "IXnSensorStream.h"
#include <DDK/XnIntPropertySynchronizer.h>
#include "XnArray.h"
//---------------------------------------------------------------------------
// XnSensor class
//---------------------------------------------------------------------------
class XnSensor : public XnDeviceBase
{
friend class XnServerSensorInvoker;
public:
XnSensor(XnBool bResetOnStartup = TRUE, XnBool bLeanInit = FALSE);
~XnSensor();
virtual XnStatus InitImpl(const XnDeviceConfig* pDeviceConfig);
virtual XnStatus Destroy();
virtual XnStatus OpenAllStreams();
virtual XnStatus LoadConfigFromFile(const XnChar* csINIFilePath, const XnChar* csSectionName);
public:
inline XnSensorFixedParams* GetFixedParams() { return GetFirmware()->GetFixedParams(); }
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(); }
inline XnSensorUsbInterface GetCurrentUsbInterface() const { return m_SensorIO.GetCurrentInterface(*m_Firmware.GetInfo()); }
XnStatus GetStream(const XnChar* strStream, XnDeviceStream** ppStream);
inline XnStatus GetErrorState() { return (XnStatus)m_ErrorState.GetValue(); }
XnStatus SetErrorState(XnStatus errorState);
/**
* Resolves the config file's path.
* Specify NULL to strConfigDir to resolve it based on the driver's directory.
*/
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_SensorIO.GetDevicePath(); }
XnBool ShouldUseHostTimestamps() { return (m_HostTimestamps.GetValue() == TRUE); }
XnBool HasReadingStarted() { return (m_ReadData.GetValue() == TRUE); }
inline XnBool IsTecDebugPring() const { return (XnBool)m_FirmwareTecDebugPrint.GetValue(); }
XnStatus SetFrameSyncStreamGroup(XnDeviceStream** ppStreamList, XnUInt32 numStreams);
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);
virtual void OnNewStreamData(XnDeviceStream* pStream, OniFrame* pFrame);
private:
XnStatus InitSensor(const XnDeviceConfig* pDeviceConfig);
XnStatus ValidateSensorID(XnChar* csSensorID);
XnStatus SetMirrorForModule(XnDeviceModule* pModule, XnUInt64 nValue);
XnStatus FindSensorStream(const XnChar* StreamName, IXnSensorStream** ppStream);
XnStatus InitReading();
XnStatus OnFrameSyncPropertyChanged();
static XnStatus XN_CALLBACK_TYPE GetInstanceCallback(const XnGeneralProperty* pSender, const OniGeneralBuffer& gbValue, void* pCookie);
XnStatus ChangeTaskInterval(XnScheduledTask** ppTask, XnTaskCallbackFuncPtr pCallback, XnUInt32 nInterval);
void ReadFirmwareLog();
void ReadFirmwareCPU();
//---------------------------------------------------------------------------
// 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);
XnStatus GetDepthCmosRegister(XnControlProcessingData* pRegister);
XnStatus GetImageCmosRegister(XnControlProcessingData* pRegister);
XnStatus ReadAHB(XnAHBData* pData);
XnStatus GetI2C(XnI2CReadData* pI2CReadData);
XnStatus GetTecStatus(XnTecData* pTecData);
XnStatus GetTecFastConvergenceStatus(XnTecFastConvergenceData* pTecData);
XnStatus GetEmitterStatus(XnEmitterData* pEmitterData);
XnStatus ReadFlashFile(const XnParamFileData* pFile);
XnStatus ReadFlashChunk(XnParamFlashData* pFlash);
XnStatus GetFirmwareLog(XnChar* csLog, XnUInt32 nSize);
XnStatus GetFileList(XnFlashFileList* pFileList);
//---------------------------------------------------------------------------
// Setters
//---------------------------------------------------------------------------
XnStatus SetInterface(XnSensorUsbInterface nInterface);
XnStatus SetHostTimestamps(XnBool bHostTimestamps);
XnStatus SetNumberOfBuffers(XnUInt32 nCount);
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);
XnStatus SetDepthCmosRegister(const XnControlProcessingData* pRegister);
XnStatus SetImageCmosRegister(const XnControlProcessingData* pRegister);
XnStatus WriteAHB(const XnAHBData* pData);
XnStatus SetLedState(XnUInt16 nLedId, XnUInt16 nState);
XnStatus SetEmitterState(XnBool bActive);
XnStatus SetFirmwareFrameSync(XnBool bOn);
XnStatus SetI2C(const XnI2CWriteData* pI2CWriteData);
XnStatus SetFirmwareLogFilter(XnUInt32 nFilter);
XnStatus SetFirmwareLogInterval(XnUInt32 nMilliSeconds);
XnStatus SetFirmwareLogPrint(XnBool bPrint);
XnStatus SetFirmwareCPUInterval(XnUInt32 nMilliSeconds);
XnStatus SetAPCEnabled(XnBool bEnabled);
XnStatus DeleteFile(XnUInt16 nFileID);
XnStatus SetTecSetPoint(XnUInt16 nSetPoint);
XnStatus SetEmitterSetPoint(XnUInt16 nSetPoint);
XnStatus SetFileAttributes(const XnFileAttributes* pAttributes);
XnStatus WriteFlashFile(const XnParamFileData* pFile);
XnStatus SetProjectorFault(XnProjectorFaultData* pProjectorFaultData);
XnStatus RunBIST(XnUInt32 nTestsMask, XnUInt32* pnFailures);
//---------------------------------------------------------------------------
// Callbacks
//---------------------------------------------------------------------------
static void XN_CALLBACK_TYPE OnDeviceDisconnected(const OniDeviceInfo& deviceInfo, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetInterfaceCallback(XnActualIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetHostTimestampsCallback(XnActualIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetNumberOfBuffersCallback(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 OniGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetCmosBlankingUnitsCallback(XnGeneralProperty* pSender, const OniGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetCmosBlankingTimeCallback(XnGeneralProperty* pSender, const OniGeneralBuffer& 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 OniGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE FrameSyncPropertyChangedCallback(const XnProperty* pSender, void* pCookie);
static XnBool XN_CALLBACK_TYPE HasSynchedFrameArrived(void* pCookie);
static XnStatus XN_CALLBACK_TYPE GetFirmwareParamCallback(const XnGeneralProperty* pSender, const OniGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE GetCmosBlankingUnitsCallback(const XnGeneralProperty* pSender, const OniGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE GetCmosBlankingTimeCallback(const XnGeneralProperty* pSender, const OniGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE GetFirmwareModeCallback(const XnIntProperty* pSender, XnUInt64* pnValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE GetAudioSupportedCallback(const XnIntProperty* pSender, XnUInt64* pnValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE GetImageSupportedCallback(const XnIntProperty* pSender, XnUInt64* pnValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetDepthCmosRegisterCallback(XnGeneralProperty* pSender, const OniGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetImageCmosRegisterCallback(XnGeneralProperty* pSender, const OniGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE GetDepthCmosRegisterCallback(const XnGeneralProperty* pSender, const OniGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE GetImageCmosRegisterCallback(const XnGeneralProperty* pSender, const OniGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE ReadAHBCallback(const XnGeneralProperty* pSender, const OniGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE WriteAHBCallback(XnGeneralProperty* pSender, const OniGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetLedStateCallback(XnGeneralProperty* pSender, const OniGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetEmitterStateCallback(XnIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetFirmwareFrameSyncCallback(XnActualIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetFirmwareLogFilterCallback(XnActualIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetFirmwareLogIntervalCallback(XnActualIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetFirmwareLogPrintCallback(XnActualIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetFirmwareCPUIntervalCallback(XnActualIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetAPCEnabledCallback(XnActualIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetI2CCallback(XnGeneralProperty* pSender, const OniGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE DeleteFileCallback(XnIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetTecSetPointCallback(XnIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetEmitterSetPointCallback(XnIntProperty* pSender, XnUInt64 nValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetFileAttributesCallback(XnGeneralProperty* pSender, const OniGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE WriteFlashFileCallback(XnGeneralProperty* pSender, const OniGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE SetProjectorFaultCallback(XnGeneralProperty* pSender, const OniGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE RunBISTCallback(XnGeneralProperty* pSender, const OniGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE GetFileListCallback(const XnGeneralProperty* pSender, const OniGeneralBuffer& gbValue, void* pCookie);
static void XN_CALLBACK_TYPE ExecuteFirmwareLogTask(void* pCookie);
static void XN_CALLBACK_TYPE ExecuteFirmwareCPUTask(void* pCookie);
static XnStatus XN_CALLBACK_TYPE GetI2CCallback(const XnGeneralProperty* pSender, const OniGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE GetTecStatusCallback(const XnGeneralProperty* pSender, const OniGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE GetTecFastConvergenceStatusCallback(const XnGeneralProperty* pSender, const OniGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE GetEmitterStatusCallback(const XnGeneralProperty* pSender, const OniGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE ReadFlashFileCallback(const XnGeneralProperty* pSender, const OniGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE GetFirmwareLogCallback(const XnGeneralProperty* pSender, const OniGeneralBuffer& gbValue, void* pCookie);
static XnStatus XN_CALLBACK_TYPE ReadFlashChunkCallback(const XnGeneralProperty* pSender, const OniGeneralBuffer& gbValue, void* pCookie);
//---------------------------------------------------------------------------
// Members
//---------------------------------------------------------------------------
XnCallbackHandle m_hDisconnectedCallback;
XnActualIntProperty m_ErrorState;
XnActualIntProperty m_ResetSensorOnStartup;
XnActualIntProperty m_LeanInit;
XnActualIntProperty m_Interface;
XnActualIntProperty m_ReadData;
XnActualIntProperty m_FrameSync;
XnActualIntProperty m_FirmwareFrameSync;
XnActualIntProperty m_CloseStreamsOnShutdown;
XnActualIntProperty m_HostTimestamps;
XnGeneralProperty m_FirmwareParam;
XnGeneralProperty m_CmosBlankingUnits;
XnGeneralProperty m_CmosBlankingTime;
XnIntProperty m_Reset;
XnVersions m_VersionData;
XnActualGeneralProperty m_Version;
XnGeneralProperty m_FixedParam;
XnActualStringProperty m_ID;
XnActualStringProperty m_DeviceName;
XnActualStringProperty m_VendorSpecificData;
XnActualStringProperty m_PlatformString;
XnIntProperty m_AudioSupported;
XnIntProperty m_ImageSupported;
XnGeneralProperty m_ImageControl;
XnGeneralProperty m_DepthControl;
XnGeneralProperty m_AHB;
XnGeneralProperty m_LedState;
XnIntProperty m_EmitterEnabled;
XnActualIntProperty m_FirmwareLogFilter;
XnActualIntProperty m_FirmwareLogInterval;
XnActualIntProperty m_FirmwareLogPrint;
XnActualIntProperty m_FirmwareCPUInterval;
XnActualIntProperty m_APCEnabled;
XnActualIntProperty m_FirmwareTecDebugPrint;
XnGeneralProperty m_I2C;
XnIntProperty m_DeleteFile;
XnIntProperty m_TecSetPoint;
XnGeneralProperty m_TecStatus;
XnGeneralProperty m_TecFastConvergenceStatus;
XnIntProperty m_EmitterSetPoint;
XnGeneralProperty m_EmitterStatus;
XnGeneralProperty m_FileAttributes;
XnGeneralProperty m_FlashFile;
XnGeneralProperty m_FirmwareLog;
XnGeneralProperty m_FlashChunk;
XnGeneralProperty m_FileList;
XnGeneralProperty m_BIST;
XnGeneralProperty m_ProjectorFault;
XnSensorFirmware m_Firmware;
XnDevicePrivateData m_DevicePrivateData;
XnSensorFPS m_FPS;
XnCmosInfo m_CmosInfo;
XnSensorIO m_SensorIO;
XnSensorObjects m_Objects;
/** A scheduler to be used for performing periodic tasks. */
XnScheduler* m_pScheduler;
XnScheduledTask* m_pLogTask;
XnScheduledTask* m_pCPUTask;
XnDumpFile* m_FirmwareLogDump;
XnDumpFile* m_FrameSyncDump;
XnBool m_nFrameSyncEnabled;
typedef struct
{
XnDeviceStream* pStream;
OniFrame* pFrame;
} FrameSyncedStream;
xnl::Array<FrameSyncedStream> m_FrameSyncedStreams;
int m_nFrameSyncLastFrameID;
xnl::CriticalSection m_frameSyncCs;
XnBool m_bInitialized;
XnIntPropertySynchronizer m_PropSynchronizer;
XnChar m_strGlobalConfigFile[XN_FILE_MAX_PATH];
};
#endif //__XN_SENSOR_H__
|