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