ToFCalculusCamera.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. /*
  2. * TI Voxel Lib component.
  3. *
  4. * Copyright (c) 2014 Texas Instruments Inc.
  5. */
  6. #ifndef VOXEL_TI_TOFCALCULUSCAMERA_H
  7. #define VOXEL_TI_TOFCALCULUSCAMERA_H
  8. #include <ToFCamera.h>
  9. #define MOD_M_FRAC "mod_m_frac"
  10. #undef MOD_PS1
  11. #define MOD_PS "mod_ps"
  12. #undef MOD_PS2
  13. #undef MOD_FREQ1
  14. #undef MOD_FREQ2
  15. #define MOD_F "mod_freq1"
  16. #undef DEALIAS_16BIT_OP_ENABLE
  17. #undef DEALIASED_PHASE_MASK
  18. #define ALT_FRM_EN "alt_frm_en"
  19. #define ALT_FREQ_SEL "alt_freq_sel"
  20. #define SUP_FRM_INTG_SCALE "sup_frm_intg_scale"
  21. #define STANDBY "standby"
  22. #define DIS_SDMOD "dis_sdmod"
  23. #define INIT_0 "init_0"
  24. #define INIT_1 "init_1"
  25. #define INIT_2 "init_2"
  26. #define INIT_3 "init_3"
  27. #define INIT_4 "init_4"
  28. #define INIT_5 "init_5"
  29. #define INIT_6 "init_6"
  30. #define INIT_7 "init_7"
  31. #define INIT_8 "init_8"
  32. #define UPDATE_SEL "update_sel"
  33. #define OP_DATA_ARRANGE_MODE "op_data_arrange_mode"
  34. #define MOD_CDRIV_EN "mod_cdriv_en"
  35. #define MOD_CDRIV_CURR "mod_cdriv_curr"
  36. #define SHUTTER_EN "shutter_en"
  37. #define LUMPED_DEAD_TIME "lumped_dead_time"
  38. #undef CONFIDENCE_THRESHOLD
  39. #define CONFIDENCE_THRESHOLD "amplitude_threshold"
  40. #undef SUBFRAME_CNT_MAX
  41. #define SUBFRAME_CNT_MAX1 "sub_frame_cnt_max1"
  42. #define SUBFRAME_CNT_MAX2 "sub_frame_cnt_max2"
  43. #define COEFF_ILLUM "coeff_illum"
  44. #define COEFF_SENSOR "coeff_sensor"
  45. #define NONLINEARITY_PHASE_PERIOD "phase_lin_corr_period"
  46. #define NONLINEARITY_COEFF "phase_lin_coeff"
  47. #define NONLINEARITY_DISABLE "phase_lin_corr_dis"
  48. // For unambigous range
  49. #define SCRATCH2 "scratch2"
  50. namespace Voxel
  51. {
  52. namespace TI
  53. {
  54. class TI3DTOF_EXPORT ToFCalculusCamera: public ToFCamera
  55. {
  56. protected:
  57. bool _init();
  58. virtual bool _initStartParams();
  59. virtual bool _getIlluminationFrequency(float& frequency) const;
  60. bool _getMaximumFrameSize(FrameSize &s) const;
  61. virtual bool _getFrameSize(Voxel::FrameSize &s) const;
  62. virtual bool _getBytesPerPixel(uint &bpp) const;
  63. virtual bool _getOpDataArrangeMode(int &dataArrangeMode) const;
  64. virtual bool _getSystemClockFrequency(uint &frequency) const;
  65. virtual bool _getToFFrameType(ToFFrameType &frameType) const;
  66. virtual bool _allowedROI(String &message);
  67. virtual bool _getROI(RegionOfInterest &roi) const;
  68. virtual bool _setROI(const RegionOfInterest &roi);
  69. virtual bool _getBinning(uint &rowsToMerge, uint &columnsToMerge) const;
  70. virtual bool _setBinning(uint rowsToMerge, uint columnsToMerge, const FrameSize &frameSize);
  71. virtual bool _is16BitModeEnabled(bool &mode16Bit);
  72. virtual bool _getDealiasedPhaseMask(int &dealiasedPhaseMask);
  73. virtual bool _getSubFrameCount(int &subframeCount) const;
  74. virtual bool _isHistogramEnabled() const;
  75. virtual bool _applyCalibrationParams();
  76. bool _updateEasyConf();
  77. virtual bool _getCurrentProfileRegisterName(String& name);
  78. public:
  79. ToFCalculusCamera(const String &name, DevicePtr device);
  80. virtual ~ToFCalculusCamera() {}
  81. friend class CalculusVCOFrequency;
  82. friend class CalculusModulationFrequencyParameter;
  83. friend class CalculusIntegDutyCycle;
  84. friend class CalculusUnambiguousRangeParameter;
  85. };
  86. class TI3DTOF_EXPORT CalculusModulationFrequencyParameter: public FloatParameter
  87. {
  88. ToFCalculusCamera &_depthCamera;
  89. float _optimalMinimum, _optimalMaximum;
  90. public:
  91. CalculusModulationFrequencyParameter(ToFCalculusCamera &depthCamera, RegisterProgrammer &programmer, const float &optimalMinimum, const float &optimalMaximum, const float &defaultValue):
  92. FloatParameter(programmer, MOD_F, "MHz", 0, 0, 0, 1, 2.5f, 600.0f, defaultValue, "Modulation frequency", "Frequency used for modulation of illumination",
  93. Parameter::IO_READ_WRITE, {VCO_FREQ, MOD_M, MOD_M_FRAC, MOD_N, MOD_PS}), _optimalMinimum(optimalMinimum), _optimalMaximum(optimalMaximum), _depthCamera(depthCamera) {}
  94. const float getOptimalMaximum() { return _optimalMaximum; }
  95. const float getOptimalMinimum() { return _optimalMinimum; }
  96. virtual const float lowerLimit() const;
  97. virtual const float upperLimit() const;
  98. virtual bool get(float &value, bool refresh = false);
  99. virtual bool set(const float &value);
  100. virtual ~CalculusModulationFrequencyParameter() {}
  101. };
  102. class TI3DTOF_EXPORT CalculusUnambiguousRangeParameter: public UnsignedIntegerParameter
  103. {
  104. ToFCalculusCamera &_depthCamera;
  105. uint _defaultValue;
  106. public:
  107. CalculusUnambiguousRangeParameter(ToFCalculusCamera &depthCamera, RegisterProgrammer &programmer, const uint &minimum, const uint &maximum, const uint &defaultValue):
  108. UnsignedIntegerParameter(programmer, UNAMBIGUOUS_RANGE, "m", 0, 0, 23, 16, minimum, maximum,
  109. defaultValue, "Unambiguous Range", "Unambiguous range of distance the camera needs to support"), _defaultValue(defaultValue),
  110. _depthCamera(depthCamera) {} //FIXME 0x5839, 24 -- this register is not working
  111. virtual bool get(uint &value, bool refresh = false);
  112. virtual bool set(const uint &value);
  113. virtual ~CalculusUnambiguousRangeParameter() {}
  114. };
  115. }
  116. }
  117. #endif // VOXEL_TI_TOFCALCULUSCAMERA_H