PcloudStimBuff: Add skeleton assembleAndProduceStimulusFrameReq impl

This commit is contained in:
2025-11-01 04:14:07 -04:00
parent a32b4f05d1
commit ba955ef633
2 changed files with 50 additions and 0 deletions
@@ -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<assembleAndProduceStimulusFrameReqCbFn> callback)
: PostedAsynchronousContinuation<assembleAndProduceStimulusFrameReqCbFn>(
buffer.device->componentThread, std::move(callback)),
stimBuff(buffer)
{}
void callOriginalCallback()
{
stimBuff.frameAssemblyRateLimiter.release();
callOriginalCb(static_cast<SimultaneityStamp>(0));
}
void callOriginalCallbackWithFailure()
{
stimBuff.frameAssemblyRateLimiter.release();
callOriginalCb(static_cast<SimultaneityStamp>(0));
}
};
// OpenCL kernels are used to collate and produce our StimFrames.
static SpMcRingBuffer::InputEngineConstraints openClInputConstraints(
static_cast<size_t>(sysconf(_SC_PAGE_SIZE)), sizeof(void *));
@@ -37,5 +67,12 @@ void PcloudStimulusBuffer::stimFrameProductionTimesliceInd()
frameAssemblyRateLimiter.release();
}
void PcloudStimulusBuffer::assembleAndProduceStimulusFrameReq(
smo::Callback<assembleAndProduceStimulusFrameReqCbFn> callback)
{
// Wireframe implementation - do nothing for now
(void)callback;
}
} // namespace stim_buff
} // namespace smo
@@ -1,9 +1,12 @@
#ifndef _LIVOX_GEN1_PCLOUD_STIMULUS_BUFFER_H
#define _LIVOX_GEN1_PCLOUD_STIMULUS_BUFFER_H
#include <functional>
#include <user/stimulusBuffer.h>
#include <user/stimFrame.h>
#include <livoxProto1/device.h>
#include <asynchronousContinuation.h>
#include <callback.h>
#include "stagingBuffer.h"
#include "ioUringAssemblyEngine.h"
@@ -40,12 +43,22 @@ public:
protected:
void stimFrameProductionTimesliceInd() override;
// Callback function type for assembleAndProduceStimulusFrameReq
typedef std::function<void(SimultaneityStamp)>
assembleAndProduceStimulusFrameReqCbFn;
public:
void assembleAndProduceStimulusFrameReq(
smo::Callback<assembleAndProduceStimulusFrameReqCbFn> callback);
device::DeviceAttachmentSpec deviceAttachmentSpec;
std::shared_ptr<livoxProto1::Device> device;
PcloudFormatDesc formatDesc;
StagingBuffer stagingBuffer;
IoUringAssemblyEngine ioUringAssemblyEngine;
private:
class AssembleAndProduceStimulusFrameReq;
};
} // namespace stim_buff