5#ifndef PICOSCENES_PLATFORM_ABSTRACTNIC_HXX
6#define PICOSCENES_PLATFORM_ABSTRACTNIC_HXX
15using namespace std::chrono_literals;
21class AbstractNIC :
public std::enable_shared_from_this<AbstractNIC> {
38 virtual int transmitFramesInBatch(
const std::vector<ModularPicoScenesTxFrame> &frames, uint16_t numRepeats) = 0;
40 template<
int repeat = 1,
typename ... Frames,
typename = std::enable_if_t<(std::is_same_v<std::remove_cvref_t<Frames>, ModularPicoScenesTxFrame *> &&...) ||
41 (std::is_same_v<std::remove_cvref_t<Frames>, ModularPicoScenesTxFrame> &&...) ||
42 ((std::is_same_v<std::remove_cvref_t<Frames>, std::shared_ptr<ModularPicoScenesTxFrame>> ||
43 std::is_same_v<std::remove_cvref_t<Frames>, std::unique_ptr<ModularPicoScenesTxFrame>>) &&...)>>
45 std::vector<ModularPicoScenesTxFrame> batchFrames;
47 if constexpr (((std::is_same_v<std::remove_cvref_t<Frames>, ModularPicoScenesTxFrame *> ||
48 std::is_same_v<std::remove_cvref_t<Frames>, std::shared_ptr<ModularPicoScenesTxFrame>> ||
49 std::is_same_v<std::remove_cvref_t<Frames>, std::unique_ptr<ModularPicoScenesTxFrame>>) && ...)) {
50 (batchFrames.emplace_back(*frames), ...);
51 }
else if constexpr ((std::is_same_v<std::remove_cvref_t<Frames>, ModularPicoScenesTxFrame> && ...)) {
52 (batchFrames.emplace_back(frames), ...);
62 return frontEnd->initializeTxFrame();
87 virtual std::optional<ModularPicoScenesRxFrame>
syncRxConditionally(
const std::function<
bool(
const ModularPicoScenesRxFrame &)> &condition,
const std::chrono::milliseconds &maxWait_ms, std::optional<std::string> conditionaName = std::nullopt) = 0;
89 virtual std::optional<ModularPicoScenesRxFrame>
syncRxWaitTaskId(uint16_t taskid, uint32_t maxWait_ms) = 0;
91 virtual void registerTaskIdHandler(uint16_t taskId,
const std::function<
bool(
const ModularPicoScenesRxFrame &)> &handle) = 0;
99 virtual void registerFrameTypeHandler(uint8_t frameType,
const std::function<
bool(
const ModularPicoScenesRxFrame &)> &handle) = 0;
107 virtual void registerGeneralHandler(
const std::string &handlerKeyName,
const std::function<
bool(
const ModularPicoScenesRxFrame &)> &handle) = 0;
109 virtual std::function<bool(
const ModularPicoScenesRxFrame &)>
getGeneralHandler(
const std::string &handlerKeyName) = 0;
145 template<
typename FrontEndT,
class = std::enable_if_t<std::is_base_of_v<AbstractFrontEnd, FrontEndT>>>
159 PicoScenesDeviceType
deviceType = PicoScenesDeviceType::Unknown;
virtual bool checkGeneralHandlerExist(const std::string &handlerKeyName)=0
virtual void stopTxService()=0
virtual bool isTxServiceStarted() const =0
virtual std::function< bool(const ModularPicoScenesRxFrame &)> getGeneralHandler(const std::string &handlerKeyName)=0
virtual ModularPicoScenesTxFrame initializeTxFrame()
std::string referredInterfaceName
virtual void registerGeneralHandler(const std::string &handlerKeyName, const std::function< bool(const ModularPicoScenesRxFrame &)> &handle)=0
const std::string & getReferredInterfaceName() const
virtual std::optional< ModularPicoScenesRxFrame > syncRxWaitTaskId(uint16_t taskid, uint32_t maxWait_ms)=0
virtual void startRxService()=0
virtual void stopRxService()=0
std::shared_ptr< AbstractHALConfiguration > configuration
virtual bool checkFrameTypeHandlerExist(uint8_t frameType)=0
std::shared_ptr< PicoScenesPluginManager > pluginManager
std::shared_ptr< AbstractHALConfiguration > getConfiguration() const
PicoScenesDeviceType getDeviceType() const
virtual void resumeRx()=0
const std::shared_ptr< AbstractFrontEnd > & getFrontEnd() const
virtual void resumeTx()=0
virtual int transmitPicoScenesFrame(const ModularPicoScenesTxFrame &frame)=0
virtual void startTxService()=0
virtual bool checkTaskIdHandlerExist(uint16_t taskId)=0
std::shared_ptr< FrontEndT > getTypedFrontEnd() const
PicoScenesDeviceType deviceType
virtual std::optional< ModularPicoScenesRxFrame > syncRxConditionally(const std::function< bool(const ModularPicoScenesRxFrame &)> &condition, const std::chrono::milliseconds &maxWait_ms, std::optional< std::string > conditionaName=std::nullopt)=0
virtual void unregisterFrameTypeHandler(uint8_t frameType)=0
virtual void installPlugins() const =0
virtual int transmitFramesInBatch(const std::vector< ModularPicoScenesTxFrame > &frames, uint16_t numRepeats)=0
virtual PicoScenesFrameTxParameters & getUserSpecifiedTxParameters()=0
This methods returns the PicoScenesFrameTxParameters object created by the user specified Tx paramete...
AbstractNIC(const std::string &referredInterfaceName)
std::vector< std::shared_ptr< po::options_description > > getAllNICOptions()
virtual int transmitPicoScenesFrameSync(const ModularPicoScenesTxFrame &frame)=0
virtual std::function< bool(const ModularPicoScenesRxFrame &)> getHandlerForTaskId(uint16_t taskId)=0
virtual void unregisterTaskIdHandler(uint16_t taskId)=0
virtual std::function< bool(const ModularPicoScenesRxFrame &)> getHandlerForFrameType(uint8_t frameType)=0
virtual bool isRxServiceStarted() const =0
std::shared_ptr< AbstractFrontEnd > frontEnd
virtual void unregisterGeneralHandler(const std::string &handlerKeyName)=0
virtual const PicoScenesFrameTxParameters & getUserSpecifiedTxParameters() const =0
This methods returns the PicoScenesFrameTxParameters object created by the user specified Tx paramete...
const std::shared_ptr< PicoScenesPluginManager > & getPluginManager() const
virtual void registerFrameTypeHandler(uint8_t frameType, const std::function< bool(const ModularPicoScenesRxFrame &)> &handle)=0
virtual void registerTaskIdHandler(uint16_t taskId, const std::function< bool(const ModularPicoScenesRxFrame &)> &handle)=0
int transmitFramesInBatch(Frames &&... frames)
const std::string & getPhyId() const
static std::shared_ptr< FrontEndT > getTypedFrontEndInstance(const std::string &referredInterfaceName)