#ifndef _LIVOX_GEN1_PCLOUD_STIMULUS_BUFFER_H #define _LIVOX_GEN1_PCLOUD_STIMULUS_BUFFER_H #include #include #include #include #include #include #include "stagingBuffer.h" #include "ioUringAssemblyEngine.h" namespace smo { namespace stim_buff { /** * PcloudStimulusBuffer is a specialized StimulusBuffer for point cloud data. * * This class extends StimulusBuffer to handle point cloud-specific stimulus * frames, particularly those generated from LiDAR point cloud data. It * provides additional functionality for managing point cloud frame metadata * and processing. */ class PcloudStimulusBuffer : public StimulusBuffer { public: explicit PcloudStimulusBuffer( const device::DeviceAttachmentSpec& deviceAttachmentSpec, std::shared_ptr &device, const PcloudFormatDesc& formatDesc, int histbuffMs, size_t nDgramsPerStagingBufferFrame); ~PcloudStimulusBuffer() = default; // Non-copyable, movable PcloudStimulusBuffer(const PcloudStimulusBuffer&) = delete; PcloudStimulusBuffer& operator=(const PcloudStimulusBuffer&) = delete; PcloudStimulusBuffer(PcloudStimulusBuffer&&) = default; PcloudStimulusBuffer& operator=(PcloudStimulusBuffer&&) = default; // Control methods void start() override; void stop() override; protected: void stimFrameProductionTimesliceInd() override; // Callback function type for assembleAndProduceStimulusFrameReq typedef std::function assembleAndProduceStimulusFrameReqCbFn; public: void assembleAndProduceStimulusFrameReq( smo::Callback callback); device::DeviceAttachmentSpec deviceAttachmentSpec; std::shared_ptr device; PcloudFormatDesc formatDesc; StagingBuffer stagingBuffer; IoUringAssemblyEngine ioUringAssemblyEngine; private: class AssembleAndProduceStimulusFrameReq; }; } // namespace stim_buff } // namespace smo #endif // _LIVOX_GEN1_PCLOUD_STIMULUS_BUFFER_H