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>
&deviceAttachmentSpec) = 0;
virtual bool exportsQualeIfaceApi(
const std::string& qualeIfaceApi) const = 0;
bool addAttachedStimulusBufferIfNotExists(
const std::shared_ptr<StimulusBuffer>& buffer);
+2 -38
View File
@@ -30,35 +30,6 @@ static SmoThreadingModelDesc smoThreadingModelDesc;
// Local collection of stimulus producers
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
static std::shared_ptr<StimulusProducer>
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 '"
@@ -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 "
@@ -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<StimulusBuffer> getOrCreateAttachedStimulusBuffer(
const std::shared_ptr<device::DeviceAttachmentSpec>
&deviceAttachmentSpec) override;