From 9bdc6d7bd65c936474e4b1700f0c34320f16daae Mon Sep 17 00:00:00 2001 From: ob-yalian Date: Thu, 24 Sep 2026 11:17:08 +0800 Subject: [PATCH 1/2] fix: remove firmware upgrade arguments and related code from launch files and driver --- .../gemini_330_series_benchmark.launch.py | 2 - ...mini_330_series_shared_container.launch.py | 2 - .../gemini_330_series_synced_verify.launch.py | 2 - .../orbbec_camera/ob_camera_node_driver.h | 11 - orbbec_camera/launch/dabai_a.launch.py | 2 - orbbec_camera/launch/dabai_al.launch.py | 2 - orbbec_camera/launch/gemini345.launch.py | 2 - orbbec_camera/launch/gemini345_lg.launch.py | 2 - orbbec_camera/launch/gemini435_le.launch.py | 2 - .../launch/gemini_301_series.launch.py | 2 - .../launch/gemini_330_series.launch.py | 2 - .../gemini_330_series_low_cpu.launch.py | 2 - .../gemini_330_series_sdk_json.launch.py | 2 - orbbec_camera/launch/lidar.launch.py | 5 - orbbec_camera/src/ob_camera_node_driver.cpp | 242 ------------------ 15 files changed, 282 deletions(-) diff --git a/orbbec_camera/examples/benchmark/gemini_330_series_benchmark.launch.py b/orbbec_camera/examples/benchmark/gemini_330_series_benchmark.launch.py index 863dd123..cbc582d2 100644 --- a/orbbec_camera/examples/benchmark/gemini_330_series_benchmark.launch.py +++ b/orbbec_camera/examples/benchmark/gemini_330_series_benchmark.launch.py @@ -57,8 +57,6 @@ def generate_launch_description(): DeclareLaunchArgument('serial_number', default_value=''), DeclareLaunchArgument('usb_port', default_value=''), DeclareLaunchArgument('device_num', default_value='1'), - DeclareLaunchArgument('upgrade_firmware', default_value=''), - DeclareLaunchArgument('preset_firmware_path', default_value=''), DeclareLaunchArgument('load_config_json_file_path', default_value=''), DeclareLaunchArgument('export_config_json_file_path', default_value=''), DeclareLaunchArgument('uvc_backend', default_value='libuvc'),#libuvc or v4l2 diff --git a/orbbec_camera/examples/multi_camera_shared_container/gemini_330_series_shared_container.launch.py b/orbbec_camera/examples/multi_camera_shared_container/gemini_330_series_shared_container.launch.py index f13487fc..18fb8f49 100644 --- a/orbbec_camera/examples/multi_camera_shared_container/gemini_330_series_shared_container.launch.py +++ b/orbbec_camera/examples/multi_camera_shared_container/gemini_330_series_shared_container.launch.py @@ -102,8 +102,6 @@ def generate_launch_description(): # Bag playback: load a previously recorded .bag file as a virtual device DeclareLaunchArgument('bag_filename', default_value=''), DeclareLaunchArgument('bag_loop', default_value='false'), - DeclareLaunchArgument('upgrade_firmware', default_value=''), - DeclareLaunchArgument('preset_firmware_path', default_value=''), DeclareLaunchArgument('load_config_json_file_path', default_value=''), DeclareLaunchArgument('export_config_json_file_path', default_value=''), DeclareLaunchArgument('uvc_backend', default_value='libuvc'),#libuvc or v4l2 diff --git a/orbbec_camera/examples/multi_camera_synced_verification_tool/gemini_330_series_synced_verify.launch.py b/orbbec_camera/examples/multi_camera_synced_verification_tool/gemini_330_series_synced_verify.launch.py index 863dd123..cbc582d2 100644 --- a/orbbec_camera/examples/multi_camera_synced_verification_tool/gemini_330_series_synced_verify.launch.py +++ b/orbbec_camera/examples/multi_camera_synced_verification_tool/gemini_330_series_synced_verify.launch.py @@ -57,8 +57,6 @@ def generate_launch_description(): DeclareLaunchArgument('serial_number', default_value=''), DeclareLaunchArgument('usb_port', default_value=''), DeclareLaunchArgument('device_num', default_value='1'), - DeclareLaunchArgument('upgrade_firmware', default_value=''), - DeclareLaunchArgument('preset_firmware_path', default_value=''), DeclareLaunchArgument('load_config_json_file_path', default_value=''), DeclareLaunchArgument('export_config_json_file_path', default_value=''), DeclareLaunchArgument('uvc_backend', default_value='libuvc'),#libuvc or v4l2 diff --git a/orbbec_camera/include/orbbec_camera/ob_camera_node_driver.h b/orbbec_camera/include/orbbec_camera/ob_camera_node_driver.h index 6b594f13..2149d867 100644 --- a/orbbec_camera/include/orbbec_camera/ob_camera_node_driver.h +++ b/orbbec_camera/include/orbbec_camera/ob_camera_node_driver.h @@ -87,12 +87,6 @@ class OBCameraNodeDriver : public rclcpp::Node { void setBagRecordingCallback( const std::shared_ptr request, std::shared_ptr response); - void presetUpdateCallback(bool firstCall, OBFwUpdateState state, const char* message, - uint8_t percent); - void updatePresetFirmware(std::string path); - - void firmwareUpdateCallback(OBFwUpdateState state, const char* message, uint8_t percent); - bool applyForceIpConfig(); OBDeviceAccessMode stringToAccessMode(const std::string& mode_str); @@ -145,17 +139,12 @@ class OBCameraNodeDriver : public rclcpp::Node { bool enable_sync_host_time_ = true; std::chrono::milliseconds time_sync_period_{6000}; std::string timestamp_clock_type_str_; - std::string preset_firmware_path_; rclcpp::Service::SharedPtr reboot_device_srv_ = nullptr; rclcpp::Service::SharedPtr set_bag_recording_srv_ = nullptr; std::chrono::time_point start_time_; std::string extension_path_; static backward::SignalHandling sh; // for stack trace - std::string upgrade_firmware_; - std::atomic firmware_update_success_{false}; - std::atomic need_reupdate_{false}; - std::atomic is_reupdating_{false}; // Flag to track if we're in reupdate process std::atomic delay_stream_start_after_reconnect_{false}; rclcpp::TimerBase::SharedPtr device_status_timer_ = nullptr; rclcpp::Publisher::SharedPtr device_status_pub_ = nullptr; diff --git a/orbbec_camera/launch/dabai_a.launch.py b/orbbec_camera/launch/dabai_a.launch.py index b56d603e..7714ffcd 100644 --- a/orbbec_camera/launch/dabai_a.launch.py +++ b/orbbec_camera/launch/dabai_a.launch.py @@ -78,8 +78,6 @@ def generate_launch_description(): DeclareLaunchArgument('bag_record_filename', default_value=''), DeclareLaunchArgument('bag_filename', default_value=''), DeclareLaunchArgument('bag_loop', default_value='false'), - DeclareLaunchArgument('upgrade_firmware', default_value=''), - DeclareLaunchArgument('preset_firmware_path', default_value=''), DeclareLaunchArgument('load_config_json_file_path', default_value=''), DeclareLaunchArgument('export_config_json_file_path', default_value=''), DeclareLaunchArgument('uvc_backend', default_value='libuvc'),#libuvc or v4l2 diff --git a/orbbec_camera/launch/dabai_al.launch.py b/orbbec_camera/launch/dabai_al.launch.py index 5eab9010..82d58b3c 100644 --- a/orbbec_camera/launch/dabai_al.launch.py +++ b/orbbec_camera/launch/dabai_al.launch.py @@ -78,8 +78,6 @@ def generate_launch_description(): DeclareLaunchArgument('bag_record_filename', default_value=''), DeclareLaunchArgument('bag_filename', default_value=''), DeclareLaunchArgument('bag_loop', default_value='false'), - DeclareLaunchArgument('upgrade_firmware', default_value=''), - DeclareLaunchArgument('preset_firmware_path', default_value=''), DeclareLaunchArgument('load_config_json_file_path', default_value=''), DeclareLaunchArgument('export_config_json_file_path', default_value=''), DeclareLaunchArgument('uvc_backend', default_value='libuvc'),#libuvc or v4l2 diff --git a/orbbec_camera/launch/gemini345.launch.py b/orbbec_camera/launch/gemini345.launch.py index c0149aec..8760381b 100644 --- a/orbbec_camera/launch/gemini345.launch.py +++ b/orbbec_camera/launch/gemini345.launch.py @@ -77,8 +77,6 @@ def generate_launch_description(): DeclareLaunchArgument('bag_record_filename', default_value=''), DeclareLaunchArgument('bag_filename', default_value=''), DeclareLaunchArgument('bag_loop', default_value='false'), - DeclareLaunchArgument('upgrade_firmware', default_value=''), - DeclareLaunchArgument('preset_firmware_path', default_value=''), DeclareLaunchArgument('load_config_json_file_path', default_value=''), DeclareLaunchArgument('export_config_json_file_path', default_value=''), DeclareLaunchArgument('uvc_backend', default_value='libuvc'),#libuvc or v4l2 diff --git a/orbbec_camera/launch/gemini345_lg.launch.py b/orbbec_camera/launch/gemini345_lg.launch.py index 1a84e50d..f2592bfa 100644 --- a/orbbec_camera/launch/gemini345_lg.launch.py +++ b/orbbec_camera/launch/gemini345_lg.launch.py @@ -78,8 +78,6 @@ def generate_launch_description(): DeclareLaunchArgument('bag_record_filename', default_value=''), DeclareLaunchArgument('bag_filename', default_value=''), DeclareLaunchArgument('bag_loop', default_value='false'), - DeclareLaunchArgument('upgrade_firmware', default_value=''), - DeclareLaunchArgument('preset_firmware_path', default_value=''), DeclareLaunchArgument('load_config_json_file_path', default_value=''), DeclareLaunchArgument('export_config_json_file_path', default_value=''), DeclareLaunchArgument('uvc_backend', default_value='libuvc'),#libuvc or v4l2 diff --git a/orbbec_camera/launch/gemini435_le.launch.py b/orbbec_camera/launch/gemini435_le.launch.py index af71f294..b2101962 100644 --- a/orbbec_camera/launch/gemini435_le.launch.py +++ b/orbbec_camera/launch/gemini435_le.launch.py @@ -78,8 +78,6 @@ def generate_launch_description(): DeclareLaunchArgument('bag_record_filename', default_value=''), DeclareLaunchArgument('bag_filename', default_value=''), DeclareLaunchArgument('bag_loop', default_value='false'), - DeclareLaunchArgument('upgrade_firmware', default_value=''), - DeclareLaunchArgument('preset_firmware_path', default_value=''), DeclareLaunchArgument('load_config_json_file_path', default_value=''), DeclareLaunchArgument('export_config_json_file_path', default_value=''), DeclareLaunchArgument('uvc_backend', default_value='libuvc'),#libuvc or v4l2 diff --git a/orbbec_camera/launch/gemini_301_series.launch.py b/orbbec_camera/launch/gemini_301_series.launch.py index 46e045b0..406c8764 100644 --- a/orbbec_camera/launch/gemini_301_series.launch.py +++ b/orbbec_camera/launch/gemini_301_series.launch.py @@ -101,8 +101,6 @@ def generate_launch_description(): DeclareLaunchArgument('bag_record_filename', default_value=''), DeclareLaunchArgument('bag_filename', default_value=''), DeclareLaunchArgument('bag_loop', default_value='false'), - DeclareLaunchArgument('upgrade_firmware', default_value=''), - DeclareLaunchArgument('preset_firmware_path', default_value=''), DeclareLaunchArgument('load_config_json_file_path', default_value=''), DeclareLaunchArgument('export_config_json_file_path', default_value=''), DeclareLaunchArgument('uvc_backend', default_value='libuvc'),#libuvc or v4l2 diff --git a/orbbec_camera/launch/gemini_330_series.launch.py b/orbbec_camera/launch/gemini_330_series.launch.py index f98091af..f37ecb8e 100644 --- a/orbbec_camera/launch/gemini_330_series.launch.py +++ b/orbbec_camera/launch/gemini_330_series.launch.py @@ -91,8 +91,6 @@ def generate_launch_description(): # Bag playback: load a previously recorded .bag file as a virtual device DeclareLaunchArgument('bag_filename', default_value=''), DeclareLaunchArgument('bag_loop', default_value='false'), - DeclareLaunchArgument('upgrade_firmware', default_value=''), - DeclareLaunchArgument('preset_firmware_path', default_value=''), DeclareLaunchArgument('load_config_json_file_path', default_value=''), DeclareLaunchArgument('export_config_json_file_path', default_value=''), DeclareLaunchArgument('uvc_backend', default_value='libuvc'),#libuvc or v4l2 diff --git a/orbbec_camera/launch/gemini_330_series_low_cpu.launch.py b/orbbec_camera/launch/gemini_330_series_low_cpu.launch.py index 09dcb83c..cb2af47e 100644 --- a/orbbec_camera/launch/gemini_330_series_low_cpu.launch.py +++ b/orbbec_camera/launch/gemini_330_series_low_cpu.launch.py @@ -89,8 +89,6 @@ def generate_launch_description(): DeclareLaunchArgument('bag_record_filename', default_value=''), DeclareLaunchArgument('bag_filename', default_value=''), DeclareLaunchArgument('bag_loop', default_value='false'), - DeclareLaunchArgument('upgrade_firmware', default_value=''), - DeclareLaunchArgument('preset_firmware_path', default_value=''), DeclareLaunchArgument('load_config_json_file_path', default_value=''), DeclareLaunchArgument('export_config_json_file_path', default_value=''), DeclareLaunchArgument('uvc_backend', default_value='libuvc'),#libuvc or v4l2 diff --git a/orbbec_camera/launch/gemini_330_series_sdk_json.launch.py b/orbbec_camera/launch/gemini_330_series_sdk_json.launch.py index 435827f2..b287ef29 100644 --- a/orbbec_camera/launch/gemini_330_series_sdk_json.launch.py +++ b/orbbec_camera/launch/gemini_330_series_sdk_json.launch.py @@ -77,8 +77,6 @@ def generate_launch_description(): DeclareLaunchArgument('bag_filename', default_value=''), DeclareLaunchArgument('bag_loop', default_value='false'), DeclareLaunchArgument('connection_delay', default_value='10'), - DeclareLaunchArgument('upgrade_firmware', default_value=''), - DeclareLaunchArgument('preset_firmware_path', default_value=''), DeclareLaunchArgument('uvc_backend', default_value='libuvc'), DeclareLaunchArgument('load_config_json_file_path', default_value=''), DeclareLaunchArgument('export_config_json_file_path', default_value=''), diff --git a/orbbec_camera/launch/lidar.launch.py b/orbbec_camera/launch/lidar.launch.py index 28850844..02b7f994 100644 --- a/orbbec_camera/launch/lidar.launch.py +++ b/orbbec_camera/launch/lidar.launch.py @@ -66,11 +66,6 @@ def generate_launch_description(): default_value='1', description='Number of devices to start. Required when launching multiple devices.' ), - DeclareLaunchArgument( - 'upgrade_firmware', - default_value='', - description='Firmware file path. If set, attempts firmware upgrade on startup; empty means no upgrade.' - ), DeclareLaunchArgument( 'connection_delay', default_value='10', diff --git a/orbbec_camera/src/ob_camera_node_driver.cpp b/orbbec_camera/src/ob_camera_node_driver.cpp index a44302dd..564b13ce 100644 --- a/orbbec_camera/src/ob_camera_node_driver.cpp +++ b/orbbec_camera/src/ob_camera_node_driver.cpp @@ -359,10 +359,7 @@ void OBCameraNodeDriver::init() { enable_sync_host_time_ = declare_parameter("enable_sync_host_time", true); double time_sync_period = declare_parameter("time_sync_period", 60.0); time_sync_period_ = std::chrono::milliseconds((int)(time_sync_period * 1000)); - upgrade_firmware_ = declare_parameter("upgrade_firmware", ""); g_time_domain = declare_parameter("time_domain", g_time_domain); - preset_firmware_path_ = - declare_parameter("preset_firmware_path", preset_firmware_path_); orb_device_lock_shm_fd_ = shm_open(ORB_DEFAULT_LOCK_NAME.c_str(), O_CREAT | O_RDWR, 0666); if (orb_device_lock_shm_fd_ < 0) { RCLCPP_ERROR_STREAM(logger_, "Failed to open shared memory " << ORB_DEFAULT_LOCK_NAME); @@ -1165,7 +1162,6 @@ void OBCameraNodeDriver::initializeBagPlayback() { void OBCameraNodeDriver::initializeDevice(const std::shared_ptr &device) { device_ = device; - updatePresetFirmware(preset_firmware_path_); CHECK_NOTNULL(device_); CHECK_NOTNULL(device_.get()); if (ob_camera_node_) { @@ -1312,58 +1308,6 @@ void OBCameraNodeDriver::initializeDevice(const std::shared_ptr &dev std::chrono::high_resolution_clock::now() - start_time_); RCLCPP_DEBUG_STREAM(logger_, "Start device cost: " << time_cost.count() << " ms"); - if (!upgrade_firmware_.empty()) { - // Check if this is a second update (reupdate scenario) - bool is_second_update = is_reupdating_.load(); - - if (is_second_update) { - RCLCPP_INFO(logger_, "Device reconnected, starting the second firmware update"); - } else { - RCLCPP_INFO(logger_, "Starting firmware update from file: %s", upgrade_firmware_.c_str()); - } - - firmware_update_success_ = false; - need_reupdate_ = false; - - if (ob_camera_node_) { - TRY_EXECUTE_BLOCK({ - ob_camera_node_->withDeviceLock([&]() { - device_->updateFirmware( - upgrade_firmware_.c_str(), - std::bind(&OBCameraNodeDriver::firmwareUpdateCallback, this, std::placeholders::_1, - std::placeholders::_2, std::placeholders::_3), - false); - }); - }); - } else if (ob_lidar_node_) { - device_->updateFirmware( - upgrade_firmware_.c_str(), - std::bind(&OBCameraNodeDriver::firmwareUpdateCallback, this, std::placeholders::_1, - std::placeholders::_2, std::placeholders::_3), - false); - } - - if (need_reupdate_) { - // Some devices require a second update after reboot - RCLCPP_INFO(logger_, "The device will reboot and perform a second update automatically"); - // Set flag to indicate we're waiting for device to reboot for second update - is_reupdating_ = true; - // Keep upgrade_firmware_ path and wait for device to reconnect - // The second update will be triggered automatically when device reconnects - return; - } - - if (firmware_update_success_) { - if (is_second_update) { - RCLCPP_INFO(logger_, "Second firmware update completed successfully"); - is_reupdating_ = false; - } else { - RCLCPP_INFO(logger_, "Firmware update completed successfully"); - } - return; - } - } - const bool should_delay_stream_start = delay_stream_start_after_reconnect_.exchange(false) && isGemini301SeriesPID(device_info_->getPid()); if (should_delay_stream_start) { @@ -1584,17 +1528,6 @@ void OBCameraNodeDriver::startDevice(const std::shared_ptr &list time_cost = std::chrono::duration_cast(end_time - start_time); RCLCPP_INFO_STREAM(logger_, "Initialize device cost: " << time_cost.count() << " ms"); - if (firmware_update_success_) { - firmware_update_success_ = false; - device_connected_ = false; - { - std::unique_lock reset_device_lock(reset_device_mutex_); - reset_device_flag_ = true; - } - reset_device_cond_.notify_all(); - return; - } - auto pid = device->getDeviceInfo()->getPid(); if (isGmslCameraPID(pid)) { ob_camera_node_->startGmslTrigger(); @@ -1625,181 +1558,6 @@ void OBCameraNodeDriver::startDevice(const std::shared_ptr &list reset_device_cond_.notify_all(); } } -void OBCameraNodeDriver::updatePresetFirmware(std::string path) { - if (path.empty()) { - return; - } else { - std::stringstream ss(path); - std::string path_segment; - std::vector paths; - OBFwUpdateState updateState = STAT_START; - bool firstCall = true; - - while (std::getline(ss, path_segment, ',')) { - paths.push_back(path_segment); - } - uint8_t index = 0; - uint8_t count = static_cast(paths.size()); - char(*filePaths)[OB_PATH_MAX] = new char[count][OB_PATH_MAX]; - RCLCPP_INFO_STREAM(this->get_logger(), "paths.cout : " << (uint32_t)count); - for (const auto &p : paths) { - strcpy(filePaths[index], p.c_str()); - RCLCPP_INFO_STREAM(this->get_logger(), - "path: " << (uint32_t)index << ":" << filePaths[index]); - index++; - } - RCLCPP_INFO_STREAM(this->get_logger(), - "Start to update optional depth preset, please wait a moment..."); - try { - device_->updateOptionalDepthPresets( - filePaths, count, - [this, &updateState, &firstCall](OBFwUpdateState state, const char *message, - uint8_t percent) { - updateState = state; - presetUpdateCallback(firstCall, state, message, percent); - // firstCall = false; - }); - - delete[] filePaths; - filePaths = nullptr; - if (updateState == STAT_DONE || updateState == STAT_DONE_WITH_DUPLICATES) { - RCLCPP_INFO_STREAM(this->get_logger(), "After updating the preset: "); - auto presetList = device_->getAvailablePresetList(); - RCLCPP_INFO_STREAM(this->get_logger(), "Preset count: " << presetList->getCount()); - for (uint32_t i = 0; i < presetList->getCount(); ++i) { - RCLCPP_INFO_STREAM(this->get_logger(), " - " << presetList->getName(i)); - } - RCLCPP_INFO_STREAM(this->get_logger(), - "Current preset: " << device_->getCurrentPresetName()); - std::string key = "PresetVer"; - if (device_->isExtensionInfoExist(key)) { - std::string value = device_->getExtensionInfo(key); - RCLCPP_INFO_STREAM(this->get_logger(), "Preset version: " << value); - } else { - RCLCPP_INFO_STREAM(this->get_logger(), "PresetVer: "); - } - } - } catch (ob::Error &e) { - RCLCPP_ERROR_STREAM(logger_, "Failed to update Preset Firmware " - << orbbec_camera::formatObErrorWithStatus(e)); - } catch (std::exception &e) { - RCLCPP_ERROR_STREAM(logger_, "Failed to update Preset Firmware " << e.what()); - } catch (...) { - RCLCPP_ERROR_STREAM(logger_, "Failed to update Preset Firmware"); - } - } -} -void OBCameraNodeDriver::presetUpdateCallback(bool firstCall, OBFwUpdateState state, - const char *message, uint8_t percent) { - if (!firstCall) { - std::cout << "\033[3F"; - } - - std::cout << "\033[K"; - std::cout << "Progress: " << static_cast(percent) << "%" << std::endl; - - std::cout << "\033[K"; - std::cout << "Status : "; - switch (state) { - case STAT_VERIFY_SUCCESS: - std::cout << "Image file verification success" << std::endl; - break; - case STAT_FILE_TRANSFER: - std::cout << "File transfer in progress" << std::endl; - break; - case STAT_DONE: - std::cout << "Update completed" << std::endl; - break; - case STAT_DONE_REBOOT_AND_REUPDATE: - std::cout << "Update completed, requires reboot and reupdate" << std::endl; - break; - case STAT_DONE_WITH_DUPLICATES: - std::cout << "Update completed, duplicated presets have been ignored" << std::endl; - break; - case STAT_IN_PROGRESS: - std::cout << "Update in progress" << std::endl; - break; - case STAT_START: - std::cout << "Starting the update" << std::endl; - break; - case STAT_VERIFY_IMAGE: - std::cout << "Verifying image file" << std::endl; - break; - default: - std::cout << "Unknown status or error" << std::endl; - break; - } - - std::cout << "\033[K"; - std::cout << "Message : " << message << std::endl << std::flush; -} -void OBCameraNodeDriver::firmwareUpdateCallback(OBFwUpdateState state, const char *message, - uint8_t percent) { - std::cout << "\033[K"; // Clear the current line - std::cout << "Progress: " << static_cast(percent) << "%" << std::endl; - - std::cout << "\033[K"; - std::cout << "Status : "; - switch (state) { - case STAT_VERIFY_SUCCESS: - std::cout << "Image file verification success" << std::endl; - break; - case STAT_FILE_TRANSFER: - std::cout << "File transfer in progress" << std::endl; - break; - case STAT_DONE: - std::cout << "Update completed" << std::endl; - break; - case STAT_DONE_REBOOT_AND_REUPDATE: - need_reupdate_ = true; - std::cout << "Update completed (requires reboot and reupdate)" << std::endl; - break; - case STAT_IN_PROGRESS: - std::cout << "Upgrade in progress" << std::endl; - break; - case STAT_START: - std::cout << "Starting the upgrade" << std::endl; - break; - case STAT_VERIFY_IMAGE: - std::cout << "Verifying image file" << std::endl; - break; - default: - std::cout << "Unknown status or error" << std::endl; - break; - } - - std::cout << "\033[K"; - std::cout << "Message : " << message << std::endl << std::flush; - if (state == STAT_DONE || state == STAT_DONE_REBOOT_AND_REUPDATE) { - RCLCPP_INFO(logger_, "Reboot device"); - - if (ob_camera_node_) { - // Don't call clean() here to avoid deadlock - just stop timers and reboot - // The resetDevice thread will handle proper cleanup when device disconnects - if (sync_host_time_timer_) { - try { - sync_host_time_timer_->cancel(); - sync_host_time_timer_.reset(); - } catch (...) { - RCLCPP_WARN_STREAM(logger_, "Exception during sync timer cleanup in firmware update"); - } - } - delay_stream_start_after_reconnect_ = true; - device_->reboot(); - } else if (ob_lidar_node_) { - ob_lidar_node_.reset(); - } - device_connected_ = false; - firmware_update_success_ = true; - if (state == STAT_DONE_REBOOT_AND_REUPDATE) { - // Keep upgrade_firmware_ path for second update - RCLCPP_INFO(logger_, "Firmware update requires a second update after reboot"); - } else { - upgrade_firmware_ = ""; - } - } -} - OBDeviceAccessMode OBCameraNodeDriver::stringToAccessMode(const std::string &mode_str) { std::string lower_mode; std::transform(mode_str.begin(), mode_str.end(), std::back_inserter(lower_mode), From a86d61d32a8baa5596c124844e4d25bd47c088f3 Mon Sep 17 00:00:00 2001 From: ob-yalian Date: Thu, 24 Sep 2026 17:59:15 +0800 Subject: [PATCH 2/2] fix: update file permissions for common_benchmark_node.py --- orbbec_camera/scripts/common_benchmark_node.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 orbbec_camera/scripts/common_benchmark_node.py diff --git a/orbbec_camera/scripts/common_benchmark_node.py b/orbbec_camera/scripts/common_benchmark_node.py old mode 100644 new mode 100755