feat: add device preset option to list_camera_profile tool

This commit is contained in:
ob-yalian
2026-09-21 11:12:56 +08:00
parent dfa44a5172
commit 80f9a24778
+46 -1
View File
@@ -22,15 +22,18 @@ constexpr char kDocumentationUrl[] =
struct CliArgs { struct CliArgs {
bool help = false; bool help = false;
std::string serial_number; std::string serial_number;
std::string device_preset;
std::string sdk_log_level = "off"; std::string sdk_log_level = "off";
}; };
void printUsage() { void printUsage() {
std::cout << "Usage:\n" std::cout << "Usage:\n"
<< "ros2 run orbbec_camera list_camera_profile_mode_node --\\\n" << "ros2 run orbbec_camera list_camera_profile_mode_node --\\\n"
<< " [--serial_number SN]\n\n" << " [--serial_number SN] [--device_preset PRESET]\n\n"
<< "Parameters:\n" << "Parameters:\n"
<< " --serial_number SN Select a specific camera by serial number.\n" << " --serial_number SN Select a specific camera by serial number.\n"
<< " --device_preset PRESET\n"
<< " Load a device preset before listing profiles.\n"
<< " --sdk_log_level LEVEL\n" << " --sdk_log_level LEVEL\n"
<< " SDK file log level: debug/info/warn/error/fatal/off " << " SDK file log level: debug/info/warn/error/fatal/off "
"(default: off).\n" "(default: off).\n"
@@ -67,6 +70,28 @@ bool parseArgs(int argc, char** argv, CliArgs& args, std::string& error) {
continue; continue;
} }
if (current.rfind("--device_preset=", 0) == 0) {
args.device_preset = current.substr(std::strlen("--device_preset="));
if (args.device_preset.empty()) {
error = "--device_preset requires a value";
return false;
}
continue;
}
if (current == "--device_preset") {
if (++i >= argc) {
error = "--device_preset requires a value";
return false;
}
args.device_preset = argv[i];
if (args.device_preset.empty()) {
error = "--device_preset requires a value";
return false;
}
continue;
}
if (current.rfind("--sdk_log_level=", 0) == 0) { if (current.rfind("--sdk_log_level=", 0) == 0) {
args.sdk_log_level = current.substr(std::strlen("--sdk_log_level=")); args.sdk_log_level = current.substr(std::strlen("--sdk_log_level="));
continue; continue;
@@ -220,6 +245,23 @@ void printPreset(const std::shared_ptr<ob::Device>& device) {
} }
} }
bool loadDevicePreset(const std::shared_ptr<ob::Device>& device, const std::string& device_preset) {
if (device_preset.empty()) {
return true;
}
try {
device->loadPreset(device_preset.c_str());
std::cout << "Loaded device preset: " << device_preset << std::endl;
return true;
} catch (const ob::Error& e) {
std::cerr << "Failed to load device preset: " << formatObErrorWithStatus(e) << std::endl;
} catch (const std::exception& e) {
std::cerr << "Failed to load device preset: " << e.what() << std::endl;
}
return false;
}
int main(int argc, char** argv) { int main(int argc, char** argv) {
CliArgs args; CliArgs args;
std::string parse_error; std::string parse_error;
@@ -247,6 +289,9 @@ int main(int argc, char** argv) {
if (isSdkLogEnabled(args.sdk_log_level)) { if (isSdkLogEnabled(args.sdk_log_level)) {
firmware_log_enabled = enableFirmwareLog(device); firmware_log_enabled = enableFirmwareLog(device);
} }
if (!loadDevicePreset(device, args.device_preset)) {
return -1;
}
listSensorProfiles(device); listSensorProfiles(device);
printDeviceProperties(device); printDeviceProperties(device);
printPreset(device); printPreset(device);