From 98a493a8a1695b700f5961f1ebd268e401e5c821 Mon Sep 17 00:00:00 2001 From: Hayodea Hekol Date: Fri, 14 Nov 2025 23:19:32 -0400 Subject: [PATCH] livoxGen1: Add StimBuffs to PcloudStimProd * PcloudStimulusProducer now has member sh_ptrs. * StimulusProducer now has a vectors. Created new stimbuff-type-specific Pcloud[Xyz|I|Ambience]StimulusBuffer classes for representing each stim feature exposed by livoxGen1's PcloudStimulusProducer. --- .../attachmentSupport/stimulusProducer.cpp | 16 ++++++++ include/user/stimulusBuffer.h | 7 +++- include/user/stimulusProducer.h | 7 ++++ .../livoxGen1/pcloudAmbienceStimulusBuffer.h | 41 +++++++++++++++++++ stimBuffApis/livoxGen1/pcloudDataProducer.h | 8 +++- .../livoxGen1/pcloudIStimulusBuffer.h | 41 +++++++++++++++++++ .../livoxGen1/pcloudXyzStimulusBuffer.h | 41 +++++++++++++++++++ 7 files changed, 159 insertions(+), 2 deletions(-) create mode 100644 stimBuffApis/livoxGen1/pcloudAmbienceStimulusBuffer.h create mode 100644 stimBuffApis/livoxGen1/pcloudIStimulusBuffer.h create mode 100644 stimBuffApis/livoxGen1/pcloudXyzStimulusBuffer.h diff --git a/commonLibs/attachmentSupport/stimulusProducer.cpp b/commonLibs/attachmentSupport/stimulusProducer.cpp index 39d33c6..fb5d959 100644 --- a/commonLibs/attachmentSupport/stimulusProducer.cpp +++ b/commonLibs/attachmentSupport/stimulusProducer.cpp @@ -9,10 +9,26 @@ #include #include #include +#include namespace smo { namespace stim_buff { +std::shared_ptr StimulusProducer::getAttachedStimulusBuffer( + const std::shared_ptr& spec) const +{ + for (const auto& buffer : attachedStimulusBuffers) + { + if (buffer && buffer->deviceAttachmentSpec && + *buffer->deviceAttachmentSpec == *spec) + { + return buffer; + } + } + + return nullptr; +} + void StimulusProducer::stop() { { diff --git a/include/user/stimulusBuffer.h b/include/user/stimulusBuffer.h index 1581b84..8a99088 100644 --- a/include/user/stimulusBuffer.h +++ b/include/user/stimulusBuffer.h @@ -6,6 +6,7 @@ #include #include #include "stimulusFrame.h" +#include "deviceAttachmentSpec.h" namespace smo { namespace stim_buff { @@ -24,9 +25,12 @@ class StimulusBuffer public: explicit StimulusBuffer( std::shared_ptr &producer, + const std::shared_ptr + &deviceAttachmentSpec, int histbuffMs, const SpMcRingBuffer::InputEngineConstraints& ringBufferConstraints) : producer(producer), + deviceAttachmentSpec(deviceAttachmentSpec), histbuffMs(histbuffMs), frames_(static_cast(histbuffMs / CONFIG_STIMBUFF_FRAME_PERIOD_MS)), ringBufferConstraints(ringBufferConstraints), @@ -45,10 +49,11 @@ public: public: std::shared_ptr producer; + std::shared_ptr deviceAttachmentSpec; + int histbuffMs; std::vector frames_; protected: - int histbuffMs; SpMcRingBuffer::InputEngineConstraints ringBufferConstraints; SpMcRingBuffer ringBuffer; }; diff --git a/include/user/stimulusProducer.h b/include/user/stimulusProducer.h index 7d3ba59..3bf7f25 100644 --- a/include/user/stimulusProducer.h +++ b/include/user/stimulusProducer.h @@ -19,6 +19,9 @@ namespace smo { namespace stim_buff { +// Forward declaration +class StimulusBuffer; + /** * StimulusProducer manages a collection of stimulus frames with simultaneity stamps. * @@ -66,6 +69,9 @@ public: void allowNextStimulusFrame() { frameAssemblyRateLimiter.release(); } + std::shared_ptr getAttachedStimulusBuffer( + const std::shared_ptr& spec) const; + protected: SpinLock frameAssemblyRateLimiter; @@ -82,6 +88,7 @@ private: public: std::shared_ptr deviceAttachmentSpec; + std::vector> attachedStimulusBuffers; private: boost::asio::io_service& ioService; diff --git a/stimBuffApis/livoxGen1/pcloudAmbienceStimulusBuffer.h b/stimBuffApis/livoxGen1/pcloudAmbienceStimulusBuffer.h new file mode 100644 index 0000000..68bf94f --- /dev/null +++ b/stimBuffApis/livoxGen1/pcloudAmbienceStimulusBuffer.h @@ -0,0 +1,41 @@ +#ifndef _LIVOX_GEN1_PCLOUD_AMBIENCE_STIMULUS_BUFFER_H +#define _LIVOX_GEN1_PCLOUD_AMBIENCE_STIMULUS_BUFFER_H + +#include +#include + +namespace smo { +namespace stim_buff { + +// Forward declaration +class StimulusProducer; + +/** + * PcloudAmbienceStimulusBuffer is a specialized StimulusBuffer for ambience point cloud data. + */ +class PcloudAmbienceStimulusBuffer +: public StimulusBuffer +{ +public: + explicit PcloudAmbienceStimulusBuffer( + std::shared_ptr& producer, + const std::shared_ptr& deviceAttachmentSpec, + int histbuffMs, + const SpMcRingBuffer::InputEngineConstraints& ringBufferConstraints) + : StimulusBuffer( + producer, deviceAttachmentSpec, histbuffMs, ringBufferConstraints) + {} + + ~PcloudAmbienceStimulusBuffer() = default; + + // Non-copyable, movable + PcloudAmbienceStimulusBuffer(const PcloudAmbienceStimulusBuffer&) = delete; + PcloudAmbienceStimulusBuffer& operator=(const PcloudAmbienceStimulusBuffer&) = delete; + PcloudAmbienceStimulusBuffer(PcloudAmbienceStimulusBuffer&&) = default; + PcloudAmbienceStimulusBuffer& operator=(PcloudAmbienceStimulusBuffer&&) = default; +}; + +} // namespace stim_buff +} // namespace smo + +#endif // _LIVOX_GEN1_PCLOUD_AMBIENCE_STIMULUS_BUFFER_H diff --git a/stimBuffApis/livoxGen1/pcloudDataProducer.h b/stimBuffApis/livoxGen1/pcloudDataProducer.h index c43cd65..6e30c3b 100644 --- a/stimBuffApis/livoxGen1/pcloudDataProducer.h +++ b/stimBuffApis/livoxGen1/pcloudDataProducer.h @@ -11,6 +11,9 @@ #include "stagingBuffer.h" #include "ioUringAssemblyEngine.h" #include "openClCollatingAndMeshingEngine.h" +#include "pcloudXyzStimulusBuffer.h" +#include "pcloudIStimulusBuffer.h" +#include "pcloudAmbienceStimulusBuffer.h" namespace smo { namespace stim_buff { @@ -74,9 +77,12 @@ public: StagingBuffer assemblyBuffer; IoUringAssemblyEngine ioUringAssemblyEngine; StagingBuffer collationBuffer; - std::atomic nAttachedStimBuffs{0}; StimulusFrame tempStimulusFrame; + std::shared_ptr xyzStimulusBuffer; + std::shared_ptr iStimulusBuffer; + std::shared_ptr ambienceStimulusBuffer; + private: class ProduceFrameReq; }; diff --git a/stimBuffApis/livoxGen1/pcloudIStimulusBuffer.h b/stimBuffApis/livoxGen1/pcloudIStimulusBuffer.h new file mode 100644 index 0000000..f827b54 --- /dev/null +++ b/stimBuffApis/livoxGen1/pcloudIStimulusBuffer.h @@ -0,0 +1,41 @@ +#ifndef _LIVOX_GEN1_PCLOUD_I_STIMULUS_BUFFER_H +#define _LIVOX_GEN1_PCLOUD_I_STIMULUS_BUFFER_H + +#include +#include + +namespace smo { +namespace stim_buff { + +// Forward declaration +class StimulusProducer; + +/** + * PcloudIStimulusBuffer is a specialized StimulusBuffer for intensity point cloud data. + */ +class PcloudIStimulusBuffer +: public StimulusBuffer +{ +public: + explicit PcloudIStimulusBuffer( + std::shared_ptr& producer, + const std::shared_ptr& deviceAttachmentSpec, + int histbuffMs, + const SpMcRingBuffer::InputEngineConstraints& ringBufferConstraints) + : StimulusBuffer( + producer, deviceAttachmentSpec, histbuffMs, ringBufferConstraints) + {} + + ~PcloudIStimulusBuffer() = default; + + // Non-copyable, movable + PcloudIStimulusBuffer(const PcloudIStimulusBuffer&) = delete; + PcloudIStimulusBuffer& operator=(const PcloudIStimulusBuffer&) = delete; + PcloudIStimulusBuffer(PcloudIStimulusBuffer&&) = default; + PcloudIStimulusBuffer& operator=(PcloudIStimulusBuffer&&) = default; +}; + +} // namespace stim_buff +} // namespace smo + +#endif // _LIVOX_GEN1_PCLOUD_I_STIMULUS_BUFFER_H diff --git a/stimBuffApis/livoxGen1/pcloudXyzStimulusBuffer.h b/stimBuffApis/livoxGen1/pcloudXyzStimulusBuffer.h new file mode 100644 index 0000000..516cb65 --- /dev/null +++ b/stimBuffApis/livoxGen1/pcloudXyzStimulusBuffer.h @@ -0,0 +1,41 @@ +#ifndef _LIVOX_GEN1_PCLOUD_XYZ_STIMULUS_BUFFER_H +#define _LIVOX_GEN1_PCLOUD_XYZ_STIMULUS_BUFFER_H + +#include +#include + +namespace smo { +namespace stim_buff { + +// Forward declaration +class StimulusProducer; + +/** + * PcloudXyzStimulusBuffer is a specialized StimulusBuffer for XYZ point cloud data. + */ +class PcloudXyzStimulusBuffer +: public StimulusBuffer +{ +public: + explicit PcloudXyzStimulusBuffer( + std::shared_ptr& producer, + const std::shared_ptr& deviceAttachmentSpec, + int histbuffMs, + const SpMcRingBuffer::InputEngineConstraints& ringBufferConstraints) + : StimulusBuffer( + producer, deviceAttachmentSpec, histbuffMs, ringBufferConstraints) + {} + + ~PcloudXyzStimulusBuffer() = default; + + // Non-copyable, movable + PcloudXyzStimulusBuffer(const PcloudXyzStimulusBuffer&) = delete; + PcloudXyzStimulusBuffer& operator=(const PcloudXyzStimulusBuffer&) = delete; + PcloudXyzStimulusBuffer(PcloudXyzStimulusBuffer&&) = default; + PcloudXyzStimulusBuffer& operator=(PcloudXyzStimulusBuffer&&) = default; +}; + +} // namespace stim_buff +} // namespace smo + +#endif // _LIVOX_GEN1_PCLOUD_XYZ_STIMULUS_BUFFER_H