StimBuff: Move supportsQuleIfaceApi into base class

This commit is contained in:
2026-04-01 23:16:25 -04:00
parent cbf9d418b7
commit 3f2d7c24ee
4 changed files with 23 additions and 38 deletions
+3
View File
@@ -76,6 +76,9 @@ public:
const std::shared_ptr<device::DeviceAttachmentSpec> const std::shared_ptr<device::DeviceAttachmentSpec>
&deviceAttachmentSpec) = 0; &deviceAttachmentSpec) = 0;
virtual bool exportsQualeIfaceApi(
const std::string& qualeIfaceApi) const = 0;
bool addAttachedStimulusBufferIfNotExists( bool addAttachedStimulusBufferIfNotExists(
const std::shared_ptr<StimulusBuffer>& buffer); const std::shared_ptr<StimulusBuffer>& buffer);
+2 -38
View File
@@ -30,35 +30,6 @@ static SmoThreadingModelDesc smoThreadingModelDesc;
// Local collection of stimulus producers // Local collection of stimulus producers
static std::vector<std::shared_ptr<StimulusProducer>> attachedStimulusProducers; static std::vector<std::shared_ptr<StimulusProducer>> attachedStimulusProducers;
static bool isSupportedQualeIfaceApi(const std::string& qualeIfaceApi);
// Check if a StimulusProducer matches the requested stim feature
static bool isProducerForStimFeature(
const std::shared_ptr<StimulusProducer>& 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<PcloudStimulusProducer>(
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 // Get stimulus producer by device attachment spec
static std::shared_ptr<StimulusProducer> static std::shared_ptr<StimulusProducer>
getStimulusProducer( getStimulusProducer(
@@ -71,7 +42,7 @@ getStimulusProducer(
if (livoxProto1::comms::deviceIdentifiersEqual( if (livoxProto1::comms::deviceIdentifiersEqual(
stimProducer->deviceAttachmentSpec->deviceSelector, stimProducer->deviceAttachmentSpec->deviceSelector,
spec->deviceSelector) spec->deviceSelector)
&& isProducerForStimFeature(stimProducer, spec->qualeIfaceApi)) && stimProducer->exportsQualeIfaceApi(spec->qualeIfaceApi))
{ {
return stimProducer; 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 // Callback function implementations
extern "C" int livoxGen1_initializeInd(void) extern "C" int livoxGen1_initializeInd(void)
{ {
@@ -681,7 +645,7 @@ extern "C" void livoxGen1_attachDeviceReq(
return; return;
} }
if (!isSupportedQualeIfaceApi(qualeIfaceApi)) if (!PcloudStimulusProducer::supportsQualeIfaceApi(qualeIfaceApi))
{ {
// Unknown qualeIfaceApi // Unknown qualeIfaceApi
std::cerr << __func__ << ": Unsupported qualeIfaceApi '" std::cerr << __func__ << ": Unsupported qualeIfaceApi '"
@@ -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() void PcloudStimulusProducer::start()
{ {
std::cout << __func__ << ": Starting PcloudStimulusProducer for device " std::cout << __func__ << ": Starting PcloudStimulusProducer for device "
@@ -62,6 +62,11 @@ public:
void start() override; void start() override;
void stop() override; void stop() override;
static bool supportsQualeIfaceApi(const std::string& qualeIfaceApi);
bool exportsQualeIfaceApi(
const std::string& qualeIfaceApi) const override;
std::shared_ptr<StimulusBuffer> getOrCreateAttachedStimulusBuffer( std::shared_ptr<StimulusBuffer> getOrCreateAttachedStimulusBuffer(
const std::shared_ptr<device::DeviceAttachmentSpec> const std::shared_ptr<device::DeviceAttachmentSpec>
&deviceAttachmentSpec) override; &deviceAttachmentSpec) override;