From 5f3d5c781839034a53d0d30cb76e56abaa1d8036 Mon Sep 17 00:00:00 2001 From: Hayodea Hekol Date: Sun, 14 Jun 2026 11:01:04 -0400 Subject: [PATCH] Refactor LivoxGen1 provider param parsing to shared DAP helpers. Replace local param parsing with DeviceAttachmentSpec primitives for consistency with lcameraBuff and intrin threshold modules. Co-authored-by: Cursor --- stimBuffApis/livoxGen1/livoxGen1.cpp | 155 ++++++++++++------ .../livoxGen1/pcloudAmbienceQualeIfaceApi.h | 16 +- 2 files changed, 106 insertions(+), 65 deletions(-) diff --git a/stimBuffApis/livoxGen1/livoxGen1.cpp b/stimBuffApis/livoxGen1/livoxGen1.cpp index e869142..b177258 100644 --- a/stimBuffApis/livoxGen1/livoxGen1.cpp +++ b/stimBuffApis/livoxGen1/livoxGen1.cpp @@ -78,63 +78,112 @@ size_t parseNDgramsPerFrame( LivoxProviderParams parseLivoxProviderParams( const std::shared_ptr &desc) { + using device::DeviceAttachmentSpec; + + const auto& providerParams = desc->providerParams; + + static const std::vector cmdTimeoutSynonyms = { + "cmd-timeout-ms", + "command-timeout-ms", + }; + static const std::vector retryDelaySynonyms = { + "retry-delay-ms", + }; + static const std::vector smoSubnetSynonyms = { + "smo-subnet-nbits", + }; + static const std::vector dataPortSynonyms = { + "data-port", + }; + static const std::vector cmdPortSynonyms = { + "cmd-port", + }; + static const std::vector imuPortSynonyms = { + "imu-port", + }; + static const std::vector smoIpSynonyms = { + "smo-ip", + }; + + DeviceAttachmentSpec::rejectUnknownParams( + providerParams, + std::string(__func__) + ": Unknown provider parameter: ", + cmdTimeoutSynonyms, + retryDelaySynonyms, + smoSubnetSynonyms, + dataPortSynonyms, + cmdPortSynonyms, + imuPortSynonyms, + smoIpSynonyms); + LivoxProviderParams params; - // Parse optional integer parameters from provider params - for (const auto &providerParam : desc->providerParams) { - if (providerParam.first == "cmd-timeout-ms" - || providerParam.first == "command-timeout-ms") - { - params.commandTimeoutMs = device::DeviceAttachmentSpec - ::parseRequiredParamAsInt( - desc->providerParams, - providerParam.first); - } else if (providerParam.first == "retry-delay-ms") { - params.retryDelayMs = device::DeviceAttachmentSpec - ::parseRequiredParamAsInt( - desc->providerParams, - "retry-delay-ms"); - } else if (providerParam.first == "smo-subnet-nbits") { - params.smoSubnetNbits = static_cast( - device::DeviceAttachmentSpec::parseRequiredParamAsInt( - desc->providerParams, - "smo-subnet-nbits")); - } else if (providerParam.first == "data-port") { - params.dataPort = static_cast( - device::DeviceAttachmentSpec::parseRequiredParamAsInt( - desc->providerParams, - "data-port")); - } else if (providerParam.first == "cmd-port") { - params.cmdPort = static_cast( - device::DeviceAttachmentSpec::parseRequiredParamAsInt( - desc->providerParams, - "cmd-port")); - } else if (providerParam.first == "imu-port") { - params.imuPort = static_cast( - device::DeviceAttachmentSpec::parseRequiredParamAsInt( - desc->providerParams, - "imu-port")); - } else if (providerParam.first == "smo-ip") { - if (providerParam.second.empty()) { - throw std::runtime_error( - std::string(__func__) + ": smo-ip parameter is empty"); - } - if (providerParam.second.find('.') == std::string::npos - || std::count( - providerParam.second.begin(), - providerParam.second.end(), - '.') != 3) - { - throw std::runtime_error( - std::string(__func__) - + ": smo-ip parameter is not an IPv4 address"); - } - params.smoIp = providerParam.second; - } else { + if (const auto matchedParam = DeviceAttachmentSpec::findOptionalParamWithSynonyms( + providerParams, cmdTimeoutSynonyms)) + { + params.commandTimeoutMs = DeviceAttachmentSpec::parseParamValueAsInt( + matchedParam->first, matchedParam->second); + } + + if (const auto matchedParam = DeviceAttachmentSpec::findOptionalParamWithSynonyms( + providerParams, retryDelaySynonyms)) + { + params.retryDelayMs = DeviceAttachmentSpec::parseParamValueAsInt( + matchedParam->first, matchedParam->second); + } + + if (const auto matchedParam = DeviceAttachmentSpec::findOptionalParamWithSynonyms( + providerParams, smoSubnetSynonyms)) + { + params.smoSubnetNbits = static_cast( + DeviceAttachmentSpec::parseParamValueAsInt( + matchedParam->first, matchedParam->second)); + } + + if (const auto matchedParam = DeviceAttachmentSpec::findOptionalParamWithSynonyms( + providerParams, dataPortSynonyms)) + { + params.dataPort = static_cast( + DeviceAttachmentSpec::parseParamValueAsInt( + matchedParam->first, matchedParam->second)); + } + + if (const auto matchedParam = DeviceAttachmentSpec::findOptionalParamWithSynonyms( + providerParams, cmdPortSynonyms)) + { + params.cmdPort = static_cast( + DeviceAttachmentSpec::parseParamValueAsInt( + matchedParam->first, matchedParam->second)); + } + + if (const auto matchedParam = DeviceAttachmentSpec::findOptionalParamWithSynonyms( + providerParams, imuPortSynonyms)) + { + params.imuPort = static_cast( + DeviceAttachmentSpec::parseParamValueAsInt( + matchedParam->first, matchedParam->second)); + } + + if (const auto matchedParam = DeviceAttachmentSpec::findOptionalParamWithSynonyms( + providerParams, smoIpSynonyms)) + { + if (matchedParam->second.empty()) { throw std::runtime_error( - std::string(__func__) + ": Unknown provider parameter: " - + providerParam.first); + std::string(__func__) + ": smo-ip parameter is empty"); } + + if (matchedParam->second.find('.') == std::string::npos + || std::count( + matchedParam->second.begin(), + matchedParam->second.end(), + '.') != 3) + { + throw std::runtime_error( + std::string(__func__) + + ": smo-ip parameter is not an IPv4 address"); + } + + params.smoIp = matchedParam->second; } return params; diff --git a/stimBuffApis/livoxGen1/pcloudAmbienceQualeIfaceApi.h b/stimBuffApis/livoxGen1/pcloudAmbienceQualeIfaceApi.h index be8bce9..7a4454c 100644 --- a/stimBuffApis/livoxGen1/pcloudAmbienceQualeIfaceApi.h +++ b/stimBuffApis/livoxGen1/pcloudAmbienceQualeIfaceApi.h @@ -1,7 +1,6 @@ #ifndef _LIVOX_GEN1_PCLOUD_AMBIENCE_QUALE_IFACE_API_H #define _LIVOX_GEN1_PCLOUD_AMBIENCE_QUALE_IFACE_API_H -#include #include #include #include @@ -39,15 +38,6 @@ struct ParamComparator } }; -inline bool paramsContain( - const std::vector>& params, - const std::string& name) -{ - return std::any_of( - params.begin(), params.end(), - [&name](const auto& p) { return p.first == name; }); -} - /* pcloudLightAmbience requires exactly one `passband-count-gt-val` on its * qualeIfaceApi params; `passband-count-lt-val` is a hard error. Feeds a * negtrin(...) segment (scene is "unbearably much, get away"). @@ -57,7 +47,8 @@ inline ParamComparator parsePcloudLightAmbienceGtComparator( { const auto& params = deviceAttachmentSpec->qualeIfaceApiParams; - if (paramsContain(params, "passband-count-lt-val")) + if (device::DeviceAttachmentSpec::paramsContain( + params, "passband-count-lt-val")) { throw std::runtime_error( "pcloudLightAmbience qualeIfaceApi does not accept " @@ -91,7 +82,8 @@ inline ParamComparator parsePcloudDarkAmbienceLtComparator( { const auto& params = deviceAttachmentSpec->qualeIfaceApiParams; - if (paramsContain(params, "passband-count-gt-val")) + if (device::DeviceAttachmentSpec::paramsContain( + params, "passband-count-gt-val")) { throw std::runtime_error( "pcloudDarkAmbience qualeIfaceApi does not accept "