From 3f2d7c24ee66c64770ae2262a7bf97e414abb9b2 Mon Sep 17 00:00:00 2001 From: Hayodea Hekol Date: Wed, 1 Apr 2026 23:16:25 -0400 Subject: [PATCH] StimBuff: Move supportsQuleIfaceApi into base class --- include/user/stimulusProducer.h | 3 ++ stimBuffApis/livoxGen1/livoxGen1.cpp | 40 +------------------ .../livoxGen1/pcloudStimulusProducer.cpp | 13 ++++++ .../livoxGen1/pcloudStimulusProducer.h | 5 +++ 4 files changed, 23 insertions(+), 38 deletions(-) diff --git a/include/user/stimulusProducer.h b/include/user/stimulusProducer.h index 0208814..5d868a4 100644 --- a/include/user/stimulusProducer.h +++ b/include/user/stimulusProducer.h @@ -76,6 +76,9 @@ public: const std::shared_ptr &deviceAttachmentSpec) = 0; + virtual bool exportsQualeIfaceApi( + const std::string& qualeIfaceApi) const = 0; + bool addAttachedStimulusBufferIfNotExists( const std::shared_ptr& buffer); diff --git a/stimBuffApis/livoxGen1/livoxGen1.cpp b/stimBuffApis/livoxGen1/livoxGen1.cpp index 863c8cc..3313ef2 100644 --- a/stimBuffApis/livoxGen1/livoxGen1.cpp +++ b/stimBuffApis/livoxGen1/livoxGen1.cpp @@ -30,35 +30,6 @@ static SmoThreadingModelDesc smoThreadingModelDesc; // Local collection of stimulus producers static std::vector> attachedStimulusProducers; -static bool isSupportedQualeIfaceApi(const std::string& qualeIfaceApi); - -// Check if a StimulusProducer matches the requested stim feature -static bool isProducerForStimFeature( - const std::shared_ptr& stimProducer, - const std::string& qualeIfaceApi) -{ - // Check if the qualeIfaceApi requires a PcloudStimulusProducer - if (qualeIfaceApi == "mesh" || qualeIfaceApi == "pcloudIntensity" || - qualeIfaceApi == "pcloudAmbience") - { - // Attempt to upcast to PcloudStimulusProducer - auto pcloudProducer = std::dynamic_pointer_cast( - stimProducer); - - return pcloudProducer != nullptr; - } - else if (qualeIfaceApi == "gyro" || qualeIfaceApi == "accel") - { - /** TODO: - * Add upcast mappings for gyro and accel later when we implement - * ImuStimulusProducer. - */ - return false; - } - - return false; -} - // Get stimulus producer by device attachment spec static std::shared_ptr getStimulusProducer( @@ -71,7 +42,7 @@ getStimulusProducer( if (livoxProto1::comms::deviceIdentifiersEqual( stimProducer->deviceAttachmentSpec->deviceSelector, spec->deviceSelector) - && isProducerForStimFeature(stimProducer, spec->qualeIfaceApi)) + && stimProducer->exportsQualeIfaceApi(spec->qualeIfaceApi)) { return stimProducer; } @@ -553,13 +524,6 @@ static const StimBuffApiDesc livoxGen1ApiDesc = { } }; -static bool isSupportedQualeIfaceApi(const std::string& qualeIfaceApi) -{ - // Check if this is a supported (implemented) qualeIfaceApi - return qualeIfaceApi == "mesh" || qualeIfaceApi == "pcloudIntensity" || - qualeIfaceApi == "pcloudAmbience"; -} - // Callback function implementations extern "C" int livoxGen1_initializeInd(void) { @@ -681,7 +645,7 @@ extern "C" void livoxGen1_attachDeviceReq( return; } - if (!isSupportedQualeIfaceApi(qualeIfaceApi)) + if (!PcloudStimulusProducer::supportsQualeIfaceApi(qualeIfaceApi)) { // Unknown qualeIfaceApi std::cerr << __func__ << ": Unsupported qualeIfaceApi '" diff --git a/stimBuffApis/livoxGen1/pcloudStimulusProducer.cpp b/stimBuffApis/livoxGen1/pcloudStimulusProducer.cpp index de155e0..f94d2ca 100644 --- a/stimBuffApis/livoxGen1/pcloudStimulusProducer.cpp +++ b/stimBuffApis/livoxGen1/pcloudStimulusProducer.cpp @@ -133,6 +133,19 @@ tempStimulusFrame( } } +bool PcloudStimulusProducer::supportsQualeIfaceApi( + const std::string& qualeIfaceApi) +{ + return qualeIfaceApi == "mesh" || qualeIfaceApi == "pcloudIntensity" || + qualeIfaceApi == "pcloudAmbience"; +} + +bool PcloudStimulusProducer::exportsQualeIfaceApi( + const std::string& qualeIfaceApi) const +{ + return supportsQualeIfaceApi(qualeIfaceApi); +} + void PcloudStimulusProducer::start() { std::cout << __func__ << ": Starting PcloudStimulusProducer for device " diff --git a/stimBuffApis/livoxGen1/pcloudStimulusProducer.h b/stimBuffApis/livoxGen1/pcloudStimulusProducer.h index 20245c5..7d2f016 100644 --- a/stimBuffApis/livoxGen1/pcloudStimulusProducer.h +++ b/stimBuffApis/livoxGen1/pcloudStimulusProducer.h @@ -62,6 +62,11 @@ public: void start() override; void stop() override; + static bool supportsQualeIfaceApi(const std::string& qualeIfaceApi); + + bool exportsQualeIfaceApi( + const std::string& qualeIfaceApi) const override; + std::shared_ptr getOrCreateAttachedStimulusBuffer( const std::shared_ptr &deviceAttachmentSpec) override;