StimBuff: Move supportsQuleIfaceApi into base class
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user