diff --git a/include/user/deviceAttachmentSpec.h b/include/user/deviceAttachmentSpec.h index be6fb8a..d6786b3 100644 --- a/include/user/deviceAttachmentSpec.h +++ b/include/user/deviceAttachmentSpec.h @@ -114,6 +114,36 @@ public: + it->second + "' as integer: " + e.what()); } } + + /** + * @brief Parse an optional integer parameter from a parameter list using synonyms + * @param params The parameter vector to search in + * @param synonymNames The collection of synonymous parameter names to try + * @param defaultValue The default value to return if no parameter is found + * @return The parsed integer value, or defaultValue if none found + * @note Synonyms are tried in reverse order; lattermost synonym wins if multiple are present + */ + static int parseOptionalParamAsIntWithSynonyms( + const std::vector>& params, + const std::vector& synonymNames, + int defaultValue + ) + { + // Loop through synonyms in reverse order; lattermost synonym wins. + for (auto synIt = synonymNames.rbegin(); + synIt != synonymNames.rend(); ++synIt) + { + const auto& paramName = *synIt; + try { + return parseRequiredParamAsInt(params, paramName); + } catch (const std::exception&) { + // Parameter not found or parse error, continue to next synonym + continue; + } + } + + return defaultValue; + } }; class InteroceptorDevAttachmentSpec : public DeviceAttachmentSpec diff --git a/stimBuffApis/livoxGen1/livoxGen1.cpp b/stimBuffApis/livoxGen1/livoxGen1.cpp index a8f9c14..7e2d22d 100644 --- a/stimBuffApis/livoxGen1/livoxGen1.cpp +++ b/stimBuffApis/livoxGen1/livoxGen1.cpp @@ -84,29 +84,14 @@ getStimulusProducer( static size_t parseNDgramsPerFrame( const std::shared_ptr& spec) { - size_t nDgramsPerFrame = 84; // Default: 84 datagrams per frame const std::vector nDgramsPerFrameParamNames = { "n-dgrams-per-frame", "num-dgrams-per-frame" }; - // Loop through synonyms in reverse order; lattermost synonym wins. - for (auto synIt = nDgramsPerFrameParamNames.rbegin(); - synIt != nDgramsPerFrameParamNames.rend(); ++synIt) - { - const auto& paramName = *synIt; - try { - nDgramsPerFrame = static_cast( - smo::device::DeviceAttachmentSpec::parseRequiredParamAsInt( - spec->stimBuffApiParams, paramName)); - break; // Found and parsed successfully - } catch (const std::exception&) { - // Parameter not found or parse error, continue to next synonym - continue; - } - } - - return nDgramsPerFrame; + return static_cast( + smo::device::DeviceAttachmentSpec::parseOptionalParamAsIntWithSynonyms( + spec->stimBuffApiParams, nDgramsPerFrameParamNames, 84)); } // LivoxProto1DllState constructor implementation diff --git a/stimBuffApis/livoxGen1/pcloudStimulusProducer.cpp b/stimBuffApis/livoxGen1/pcloudStimulusProducer.cpp index 9adb6a5..7e113aa 100644 --- a/stimBuffApis/livoxGen1/pcloudStimulusProducer.cpp +++ b/stimBuffApis/livoxGen1/pcloudStimulusProducer.cpp @@ -110,7 +110,6 @@ void produceStimFrameAck(void) static int parseHistbuffMs( const std::shared_ptr& spec) { - int histbuffMs = 30000; // Default: 30000ms (30 seconds) const std::vector histbuffParamNames = { "history-buffer-duration-ms", "hist-buff-duration-ms", @@ -118,23 +117,8 @@ static int parseHistbuffMs( "histbuff-ms" }; - // Loop through synonyms in reverse order; lattermost synonym wins. - for (auto synIt = histbuffParamNames.rbegin(); - synIt != histbuffParamNames.rend(); ++synIt) - { - const auto& paramName = *synIt; - try { - histbuffMs = device::DeviceAttachmentSpec - ::parseRequiredParamAsInt( - spec->qualeIfaceApiParams, paramName); - break; // Found and parsed successfully - } catch (const std::exception&) { - // Parameter not found or parse error, continue to next synonym - continue; - } - } - - return histbuffMs; + return device::DeviceAttachmentSpec::parseOptionalParamAsIntWithSynonyms( + spec->qualeIfaceApiParams, histbuffParamNames, 30000); } std::shared_ptr