diff --git a/stimBuffApis/livoxGen1/pcloudStimulusBuffer.cpp b/stimBuffApis/livoxGen1/pcloudStimulusBuffer.cpp index 2351013..9ee7e62 100644 --- a/stimBuffApis/livoxGen1/pcloudStimulusBuffer.cpp +++ b/stimBuffApis/livoxGen1/pcloudStimulusBuffer.cpp @@ -9,6 +9,36 @@ namespace smo { namespace stim_buff { +// Continuation class for assembleAndProduceStimulusFrameReq +class PcloudStimulusBuffer::AssembleAndProduceStimulusFrameReq +: public smo::PostedAsynchronousContinuation< + assembleAndProduceStimulusFrameReqCbFn> +{ +private: + PcloudStimulusBuffer& stimBuff; + +public: + AssembleAndProduceStimulusFrameReq( + PcloudStimulusBuffer& buffer, + Callback callback) + : PostedAsynchronousContinuation( + buffer.device->componentThread, std::move(callback)), + stimBuff(buffer) + {} + + void callOriginalCallback() + { + stimBuff.frameAssemblyRateLimiter.release(); + callOriginalCb(static_cast(0)); + } + + void callOriginalCallbackWithFailure() + { + stimBuff.frameAssemblyRateLimiter.release(); + callOriginalCb(static_cast(0)); + } +}; + // OpenCL kernels are used to collate and produce our StimFrames. static SpMcRingBuffer::InputEngineConstraints openClInputConstraints( static_cast(sysconf(_SC_PAGE_SIZE)), sizeof(void *)); @@ -37,5 +67,12 @@ void PcloudStimulusBuffer::stimFrameProductionTimesliceInd() frameAssemblyRateLimiter.release(); } +void PcloudStimulusBuffer::assembleAndProduceStimulusFrameReq( + smo::Callback callback) +{ + // Wireframe implementation - do nothing for now + (void)callback; +} + } // namespace stim_buff } // namespace smo diff --git a/stimBuffApis/livoxGen1/pcloudStimulusBuffer.h b/stimBuffApis/livoxGen1/pcloudStimulusBuffer.h index 03043b0..b712d7d 100644 --- a/stimBuffApis/livoxGen1/pcloudStimulusBuffer.h +++ b/stimBuffApis/livoxGen1/pcloudStimulusBuffer.h @@ -1,9 +1,12 @@ #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" @@ -40,12 +43,22 @@ public: 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