Skip to content

Commit b264276

Browse files
authored
APG-1890 Adds Guards around updating firmware (#13)
1 parent 25868fc commit b264276

File tree

10 files changed

+35
-17
lines changed

10 files changed

+35
-17
lines changed

docs/launch_parameters.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,10 @@ The following are the launch parameters available:
1414
* The USB port of the camera. This is required when multiple cameras are used
1515
* **device_num**
1616
* The number of devices. This must be filled in if multiple cameras are required
17-
* **upgrade_firmware**
17+
* **firmware_upgrade_filepath**
1818
* The input parameter is the firmware path
19+
* **expected_firmware_version**
20+
* The expected firmware version
1921
* **preset_firmware_path**
2022
* The input parameter is the perset firmware path. If multiple paths are input, each path needs to be separated by `,`and a maximum of 3 firmware paths can be input
2123
* **uvc_backend**

orbbec_camera/examples/benchmark/gemini_330_series_benchmark.launch.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ def generate_launch_description():
5757
DeclareLaunchArgument('serial_number', default_value=''),
5858
DeclareLaunchArgument('usb_port', default_value=''),
5959
DeclareLaunchArgument('device_num', default_value='1'),
60-
DeclareLaunchArgument('upgrade_firmware', default_value=''),
60+
DeclareLaunchArgument('firmware_upgrade_filepath', default_value=''),
61+
DeclareLaunchArgument('expected_firmware_version', default_value=''),
6162
DeclareLaunchArgument('preset_firmware_path', default_value=''),
6263
DeclareLaunchArgument('load_config_json_file_path', default_value=''),
6364
DeclareLaunchArgument('export_config_json_file_path', default_value=''),

orbbec_camera/examples/gmsl_camera/gemini_330_gmsl.launch.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ def generate_launch_description():
5757
DeclareLaunchArgument('serial_number', default_value=''),
5858
DeclareLaunchArgument('usb_port', default_value=''),
5959
DeclareLaunchArgument('device_num', default_value='1'),
60-
DeclareLaunchArgument('upgrade_firmware', default_value=''),
60+
DeclareLaunchArgument('firmware_upgrade_filepath', default_value=''),
61+
DeclareLaunchArgument('expected_firmware_version', default_value=''),
6162
DeclareLaunchArgument('preset_firmware_path', default_value=''),
6263
DeclareLaunchArgument('load_config_json_file_path', default_value=''),
6364
DeclareLaunchArgument('export_config_json_file_path', default_value=''),

orbbec_camera/examples/multi_camera_synced_verification_tool/gemini_330_series_synced_verify.launch.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ def generate_launch_description():
5757
DeclareLaunchArgument('serial_number', default_value=''),
5858
DeclareLaunchArgument('usb_port', default_value=''),
5959
DeclareLaunchArgument('device_num', default_value='1'),
60-
DeclareLaunchArgument('upgrade_firmware', default_value=''),
60+
DeclareLaunchArgument('firmware_upgrade_filepath', default_value=''),
61+
DeclareLaunchArgument('expected_firmware_version', default_value=''),
6162
DeclareLaunchArgument('preset_firmware_path', default_value=''),
6263
DeclareLaunchArgument('load_config_json_file_path', default_value=''),
6364
DeclareLaunchArgument('export_config_json_file_path', default_value=''),

orbbec_camera/include/orbbec_camera/ob_camera_node_driver.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,8 @@ class OBCameraNodeDriver : public rclcpp::Node {
117117
std::chrono::time_point<std::chrono::system_clock> start_time_;
118118
std::string extension_path_;
119119
static backward::SignalHandling sh; // for stack trace
120-
std::string upgrade_firmware_;
120+
std::string firmware_upgrade_filepath_;
121+
std::string expected_firmware_version_;
121122
bool enable_streams_on_startup_ {true};
122123
};
123124
} // namespace orbbec_camera

orbbec_camera/launch/dabai_a.launch.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ def generate_launch_description():
5656
DeclareLaunchArgument('serial_number', default_value=''),
5757
DeclareLaunchArgument('usb_port', default_value=''),
5858
DeclareLaunchArgument('device_num', default_value='1'),
59-
DeclareLaunchArgument('upgrade_firmware', default_value=''),
59+
DeclareLaunchArgument('firmware_upgrade_filepath', default_value=''),
60+
DeclareLaunchArgument('expected_firmware_version', default_value=''),
6061
DeclareLaunchArgument('load_config_json_file_path', default_value=''),
6162
DeclareLaunchArgument('export_config_json_file_path', default_value=''),
6263
DeclareLaunchArgument('uvc_backend', default_value='libuvc'),#libuvc or v4l2

orbbec_camera/launch/dabai_al.launch.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ def generate_launch_description():
5656
DeclareLaunchArgument('serial_number', default_value=''),
5757
DeclareLaunchArgument('usb_port', default_value=''),
5858
DeclareLaunchArgument('device_num', default_value='1'),
59-
DeclareLaunchArgument('upgrade_firmware', default_value=''),
59+
DeclareLaunchArgument('firmware_upgrade_filepath', default_value=''),
60+
DeclareLaunchArgument('expected_firmware_version', default_value=''),
6061
DeclareLaunchArgument('load_config_json_file_path', default_value=''),
6162
DeclareLaunchArgument('export_config_json_file_path', default_value=''),
6263
DeclareLaunchArgument('uvc_backend', default_value='libuvc'),#libuvc or v4l2

orbbec_camera/launch/gemini435_le.launch.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ def generate_launch_description():
5656
DeclareLaunchArgument('serial_number', default_value=''),
5757
DeclareLaunchArgument('usb_port', default_value=''),
5858
DeclareLaunchArgument('device_num', default_value='1'),
59-
DeclareLaunchArgument('upgrade_firmware', default_value=''),
59+
DeclareLaunchArgument('firmware_upgrade_filepath', default_value=''),
60+
DeclareLaunchArgument('expected_firmware_version', default_value=''),
6061
DeclareLaunchArgument('preset_firmware_path', default_value=''),
6162
DeclareLaunchArgument('load_config_json_file_path', default_value=''),
6263
DeclareLaunchArgument('export_config_json_file_path', default_value=''),

orbbec_camera/launch/gemini_330_series.launch.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ def generate_launch_description():
5858
DeclareLaunchArgument('serial_number', default_value=''),
5959
DeclareLaunchArgument('usb_port', default_value=''),
6060
DeclareLaunchArgument('device_num', default_value='1'),
61-
DeclareLaunchArgument('upgrade_firmware', default_value=''),
61+
DeclareLaunchArgument('firmware_upgrade_filepath', default_value=''),
62+
DeclareLaunchArgument('expected_firmware_version', default_value=''),
6263
DeclareLaunchArgument('preset_firmware_path', default_value=''),
6364
DeclareLaunchArgument('load_config_json_file_path', default_value=''),
6465
DeclareLaunchArgument('export_config_json_file_path', default_value=''),

orbbec_camera/src/ob_camera_node_driver.cpp

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,8 @@ void OBCameraNodeDriver::init() {
125125
auto log_level = obLogSeverityFromString(log_level_str);
126126
connection_delay_ = static_cast<int>(declare_parameter<int>("connection_delay", 100));
127127
enable_sync_host_time_ = declare_parameter<bool>("enable_sync_host_time", true);
128-
upgrade_firmware_ = declare_parameter<std::string>("upgrade_firmware", "");
128+
firmware_upgrade_filepath_ = declare_parameter<std::string>("firmware_upgrade_filepath", "");
129+
expected_firmware_version_ = declare_parameter<std::string>("expected_firmware_version", "");
129130
g_camera_name = declare_parameter<std::string>("camera_name", g_camera_name);
130131
g_time_domain = declare_parameter<std::string>("time_domain", g_time_domain);
131132
preset_firmware_path_ =
@@ -497,12 +498,19 @@ void OBCameraNodeDriver::initializeDevice(const std::shared_ptr<ob::Device> &dev
497498
auto time_cost = std::chrono::duration_cast<std::chrono::milliseconds>(
498499
std::chrono::high_resolution_clock::now() - start_time_);
499500
RCLCPP_INFO_STREAM(logger_, "Start device cost " << time_cost.count() << " ms");
500-
if (!upgrade_firmware_.empty()) {
501-
device_->updateFirmware(
502-
upgrade_firmware_.c_str(),
503-
std::bind(&OBCameraNodeDriver::firmwareUpdateCallback, this, std::placeholders::_1,
504-
std::placeholders::_2, std::placeholders::_3),
505-
false);
501+
if (!firmware_upgrade_filepath_.empty() && !expected_firmware_version_.empty()) {
502+
if (device_info_->getFirmwareVersion() != expected_firmware_version_) {
503+
RCLCPP_INFO_STREAM(logger_,
504+
"Firmware does not match the expected version : " <<
505+
expected_firmware_version_ << ". Upgrading device.");
506+
device_->updateFirmware(
507+
firmware_upgrade_filepath_.c_str(),
508+
std::bind(&OBCameraNodeDriver::firmwareUpdateCallback, this, std::placeholders::_1,
509+
std::placeholders::_2, std::placeholders::_3),
510+
false);
511+
} else {
512+
RCLCPP_INFO_STREAM(logger_, "Firmware matches the expected version: " << expected_firmware_version_);
513+
}
506514
}
507515
if (ob_camera_node_) {
508516
ob_camera_node_->startIMU();
@@ -750,7 +758,7 @@ void OBCameraNodeDriver::firmwareUpdateCallback(OBFwUpdateState state, const cha
750758
RCLCPP_INFO(logger_, "Reboot device");
751759
ob_camera_node_->rebootDevice();
752760
device_connected_ = false;
753-
upgrade_firmware_ = "";
761+
firmware_upgrade_filepath_ = "";
754762
}
755763
}
756764
} // namespace orbbec_camera

0 commit comments

Comments
 (0)