Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added emmitter always on option #6006

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions include/librealsense2/h/rs_option.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ extern "C" {
RS2_OPTION_ZERO_ORDER_ENABLED, /**< Toggle Zero-Order mode */
RS2_OPTION_ENABLE_MAP_PRESERVATION, /**< Preserve previous map when starting */
RS2_OPTION_FREEFALL_DETECTION_ENABLED, /**< Enable/disable sensor shutdown when a free-fall is detected (on by default) */
RS2_OPTION_EMITTER_ALWAYS_ON, /**< Enable Laser On constantly (GS SKU Only) */
RS2_OPTION_AVALANCHE_PHOTO_DIODE, /**< Changes the exposure time of Avalanche Photo Diode in the receiver */
RS2_OPTION_POST_PROCESSING_SHARPENING, /**< Changes the amount of sharpening in the post-processed image */
RS2_OPTION_PRE_PROCESSING_SHARPENING, /**< Changes the amount of sharpening in the pre-processed image */
Expand Down
5 changes: 5 additions & 0 deletions src/ds5/ds5-device.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -757,6 +757,11 @@ namespace librealsense
depth_sensor.register_option(RS2_OPTION_EMITTER_ON_OFF, std::make_shared<emitter_on_and_off_option>(*_hw_monitor, &raw_depth_sensor));
}

if ((_fw_version >= firmware_version("5.12.1.0")) && ((_device_capabilities & d400_caps::CAP_GLOBAL_SHUTTER) == d400_caps::CAP_GLOBAL_SHUTTER))
{
depth_sensor.register_option(RS2_OPTION_EMITTER_ALWAYS_ON, std::make_shared<emitter_always_on_option>(*_hw_monitor, &depth_sensor));
}

if (_fw_version >= firmware_version("5.9.15.1"))
{
depth_sensor.register_option(RS2_OPTION_INTER_CAM_SYNC_MODE,
Expand Down
35 changes: 35 additions & 0 deletions src/ds5/ds5-options.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -473,4 +473,39 @@ namespace librealsense
static std::vector<uint8_t> alt_emitter_name(ds::alternating_emitter_pattern.begin()+2,ds::alternating_emitter_pattern.begin()+22);
return (alt_emitter_name == res);
}

emitter_always_on_option::emitter_always_on_option(hw_monitor& hwm, sensor_base* ep)
: _hwm(hwm), _sensor(ep)
{
_range = [this]()
{
return option_range{ 0, 1, 1, 0 };
};
}

void emitter_always_on_option::set(float value)
{
command cmd(ds::LASERONCONST);
cmd.param1 = static_cast<int>(value);

_hwm.send(cmd);
_record_action(*this);
}

float emitter_always_on_option::query() const
{
command cmd(ds::LASERONCONST);
cmd.param1 = 2;

auto res = _hwm.send(cmd);
if (res.empty())
throw invalid_value_exception("emitter_always_on_option::query result is empty!");

return (res.front());
}

option_range emitter_always_on_option::get_range() const
{
return *_range;
}
}
22 changes: 22 additions & 0 deletions src/ds5/ds5-options.h
Original file line number Diff line number Diff line change
Expand Up @@ -272,4 +272,26 @@ namespace librealsense
hw_monitor& _hwm;
sensor_base* _sensor;
};

class emitter_always_on_option : public option
{
public:
emitter_always_on_option(hw_monitor& hwm, sensor_base* depth_ep);
virtual ~emitter_always_on_option() = default;
virtual void set(float value) override;
virtual float query() const override;
virtual option_range get_range() const override;
virtual bool is_enabled() const override { return true; }
virtual const char* get_description() const override
{
return "Emitter always on mode: 0:disabled(default), 1:enabled.";
}
virtual void enable_recording(std::function<void(const option &)> record_action) override { _record_action = record_action; }

private:
std::function<void(const option &)> _record_action = [](const option&) {};
lazy<option_range> _range;
hw_monitor& _hwm;
sensor_base* _sensor;
};
}
1 change: 1 addition & 0 deletions src/ds5/ds5-private.h
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,7 @@ namespace librealsense
GETSUBPRESET = 0x7C, // Upload the current sub-preset
GETSUBPRESETNAME= 0x7D, // Retrieve sub-preset's name
RECPARAMSGET = 0x7E, // Retrieve depth calibration table in new format (fw >= 5.11.12.100)
LASERONCONST = 0x7F, // Enable Laser On constantly (GS SKU Only)
AUTO_CALIB = 0x80 // auto calibration commands
};

Expand Down
1 change: 1 addition & 0 deletions src/types.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,7 @@ namespace librealsense
CASE(ZERO_ORDER_ENABLED)
CASE(ENABLE_MAP_PRESERVATION)
CASE(FREEFALL_DETECTION_ENABLED)
CASE(EMITTER_ALWAYS_ON)
CASE(AVALANCHE_PHOTO_DIODE)
CASE(POST_PROCESSING_SHARPENING)
CASE(PRE_PROCESSING_SHARPENING)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ public enum Option {
ZERO_ORDER_ENABLED(61),
ENABLE_MAP_PRESERVATION(62),
FREEFALL_DETECTION_ENABLED(63);
EMITTER_ALWAYS_ON(64);

private final int mValue;

Expand Down
6 changes: 6 additions & 0 deletions wrappers/csharp/Intel.RealSense/Types/Enums/Option.cs
Original file line number Diff line number Diff line change
Expand Up @@ -199,5 +199,11 @@ public enum Option

/// <summary>Preserve previous map when starting</summary>
EnableMapPreservation = 62,

/// <summary>Enable/disable sensor shutdown when a free-fall is detected (on by default)</summary>
FreeFallDetectionEnabled = 63,

/// <summary>Enable Laser On constantly (GS SKU Only)</summary>
EmitterAlwaysOn = 64,
}
}
4 changes: 3 additions & 1 deletion wrappers/matlab/option.m
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@
led_power (60)
zero_order_enabled (61)
enable_map_preservation (62)
count (63)
freefall_detection_enabled (63)
emitter_always_on (64)
count (65)
end
end
11 changes: 11 additions & 0 deletions wrappers/nodejs/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4925,6 +4925,13 @@ const option = {
OPTION_LED_POWER: RS2.RS2_OPTION_LED_POWER,
OPTION_ZERO_ORDER_ENABLED: RS2.RS2_OPTION_ZERO_ORDER_ENABLED,
OPTION_ENABLE_MAP_PRESERVATION: RS2.RS2_OPTION_ENABLE_MAP_PRESERVATION,
OPTION_FREEFALL_DETECTION_ENABLED: RS2.RS2_OPTION_FREEFALL_DETECTION_ENABLED,
/**
* Enable Laser On constantly (GS SKU Only)
* <br>Equivalent to its lowercase counterpart
* @type {Integer}
*/
OPTION_EMITTER_ALWAYS_ON: RS2.RS2_OPTION_EMITTER_ALWAYS_ON,
/**
* Number of enumeration values. Not a valid input: intended to be used in for-loops.
* @type {Integer}
Expand Down Expand Up @@ -5067,6 +5074,10 @@ const option = {
return this.option_zero_order_enabled;
case this.OPTION_ENABLE_MAP_PRESERVATION:
return this.option_enable_map_preservation;
case this.OPTION_FREEFALL_DETECTION_ENABLED:
return this.option_freefall_detection_enabled;
case this.OPTION_EMITTER_ALWAYS_ON:
return this.option_emitter_always_on;
default:
throw new TypeError(
'option.optionToString(option) expects a valid value as the 1st argument');
Expand Down
1 change: 1 addition & 0 deletions wrappers/nodejs/src/addon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4690,6 +4690,7 @@ void InitModule(v8::Local<v8::Object> exports) {
_FORCE_SET_ENUM(RS2_OPTION_ZERO_ORDER_ENABLED);
_FORCE_SET_ENUM(RS2_OPTION_ENABLE_MAP_PRESERVATION);
_FORCE_SET_ENUM(RS2_OPTION_FREEFALL_DETECTION_ENABLED);
_FORCE_SET_ENUM(RS2_OPTION_EMITTER_ALWAYS_ON);
_FORCE_SET_ENUM(RS2_OPTION_COUNT);

// rs2_camera_info
Expand Down
1 change: 1 addition & 0 deletions wrappers/python/pybackend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@ PYBIND11_MODULE(NAME, m) {
.value("zero_order_enabled", RS2_OPTION_ZERO_ORDER_ENABLED)
.value("enable_map_preservation", RS2_OPTION_ENABLE_MAP_PRESERVATION)
.value("enable_freefall_detection", RS2_OPTION_FREEFALL_DETECTION_ENABLED)
.value("emiiter_always_on", RS2_OPTION_EMITTER_ALWAYS_ON)
.value("count", RS2_OPTION_COUNT);

py::enum_<platform::power_state> power_state(m, "power_state");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ enum class ERealSenseOptionType : uint8
ZERO_ORDER_ENABLED , /**< Zero-order mode */
ENABLE_MAP_PRESERVATION , /**< Preserve map from the previous run */
FREEFALL_DETECTION_ENABLED , /**< Enable/disable sensor shutdown when a free-fall is detected (on by default) */
EMITTER_ALWAYS_ON , /**< Enable Laser On constantly (GS SKU Only) */
};

UENUM(Blueprintable)
Expand Down