PicoScenes API Docs
 
Loading...
Searching...
No Matches
AbstractNIC.hxx
Go to the documentation of this file.
1//
2// Created by Zhiping Jiang on 12/26/19.
3//
4
5#ifndef PICOSCENES_PLATFORM_ABSTRACTNIC_HXX
6#define PICOSCENES_PLATFORM_ABSTRACTNIC_HXX
7
8#include "AsyncPipeline.hxx"
10#include "LoggingService.hxx"
12#include "FrontEndFactory.hxx"
14
15using namespace std::chrono_literals;
16
18
20
21class AbstractNIC : public std::enable_shared_from_this<AbstractNIC> {
22public:
23
24 virtual void startTxService() = 0;
25
26 virtual void stopTxService() = 0;
27
28 virtual void pauseTx() = 0;
29
30 virtual void resumeTx() = 0;
31
32 virtual bool isTxServiceStarted() const = 0;
33
34 virtual int transmitPicoScenesFrame(const ModularPicoScenesTxFrame &frame) = 0;
35
36 virtual int transmitPicoScenesFrameSync(const ModularPicoScenesTxFrame &frame) = 0;
37
38 virtual int transmitFramesInBatch(const std::vector<ModularPicoScenesTxFrame> &frames, uint16_t numRepeats) = 0;
39
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>>) &&...)>>
44 int transmitFramesInBatch(Frames &&... frames) {
45 std::vector<ModularPicoScenesTxFrame> batchFrames;
46
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), ...);
53 }
54 return transmitFramesInBatch(batchFrames, repeat);
55 }
56
61 virtual ModularPicoScenesTxFrame initializeTxFrame() {
62 return frontEnd->initializeTxFrame();
63 }
64
65// int transmitTest(const ModularPicoScenesTxFrame &frame1, const ModularPicoScenesTxFrame &frame2) {
66// ModularPicoScenesTxFrame t1, t2, t3;
67// auto t4 = std::make_shared<ModularPicoScenesTxFrame>();
68// auto t5 = std::make_shared<ModularPicoScenesTxFrame>();
69// auto t6 = std::make_unique<ModularPicoScenesTxFrame>();
70// auto t7 = std::make_unique<ModularPicoScenesTxFrame>();
71// transmitFramesInBatch(t4, t6);
72// transmitFramesInBatch(t6, t7);
73// transmitFramesInBatch(t1, t2, t3);
74// return transmitFramesInBatch(frame1, frame2);
75// }
76
77 virtual void startRxService() = 0;
78
79 virtual void stopRxService() = 0;
80
81 virtual void pauseRx() = 0;
82
83 virtual void resumeRx() = 0;
84
85 virtual bool isRxServiceStarted() const = 0;
86
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;
88
89 virtual std::optional<ModularPicoScenesRxFrame> syncRxWaitTaskId(uint16_t taskid, uint32_t maxWait_ms) = 0;
90
91 virtual void registerTaskIdHandler(uint16_t taskId, const std::function<bool(const ModularPicoScenesRxFrame &)> &handle) = 0;
92
93 virtual std::function<bool(const ModularPicoScenesRxFrame &)> getHandlerForFrameType(uint8_t frameType) = 0;
94
95 virtual void unregisterTaskIdHandler(uint16_t taskId) = 0;
96
97 virtual bool checkTaskIdHandlerExist(uint16_t taskId) = 0;
98
99 virtual void registerFrameTypeHandler(uint8_t frameType, const std::function<bool(const ModularPicoScenesRxFrame &)> &handle) = 0;
100
101 virtual std::function<bool(const ModularPicoScenesRxFrame &)> getHandlerForTaskId(uint16_t taskId) = 0;
102
103 virtual void unregisterFrameTypeHandler(uint8_t frameType) = 0;
104
105 virtual bool checkFrameTypeHandlerExist(uint8_t frameType) = 0;
106
107 virtual void registerGeneralHandler(const std::string &handlerKeyName, const std::function<bool(const ModularPicoScenesRxFrame &)> &handle) = 0;
108
109 virtual std::function<bool(const ModularPicoScenesRxFrame &)> getGeneralHandler(const std::string &handlerKeyName) = 0;
110
111 virtual void unregisterGeneralHandler(const std::string &handlerKeyName) = 0;
112
113 virtual bool checkGeneralHandlerExist(const std::string &handlerKeyName) = 0;
114
115 const std::string &getReferredInterfaceName() const;
116
117 const std::string &getPhyId() const;
118
119 const std::shared_ptr<AbstractFrontEnd> &getFrontEnd() const;
120
129 virtual const PicoScenesFrameTxParameters &getUserSpecifiedTxParameters() const = 0;
130
139 virtual PicoScenesFrameTxParameters &getUserSpecifiedTxParameters() = 0;
140
141 PicoScenesDeviceType getDeviceType() const;
142
143 std::shared_ptr<AbstractHALConfiguration> getConfiguration() const;
144
145 template<typename FrontEndT, class = std::enable_if_t<std::is_base_of_v<AbstractFrontEnd, FrontEndT>>>
149
150 const std::shared_ptr<PicoScenesPluginManager> &getPluginManager() const;
151
152 virtual void installPlugins() const = 0;
153
154 std::vector<std::shared_ptr<po::options_description>> getAllNICOptions();
155
156protected:
158 std::string phyId;
159 PicoScenesDeviceType deviceType = PicoScenesDeviceType::Unknown;
160 std::shared_ptr<AbstractHALConfiguration> configuration;
161 std::shared_ptr<AbstractFrontEnd> frontEnd;
162 std::shared_ptr<PicoScenesPluginManager> pluginManager;
163
164 explicit AbstractNIC(const std::string &referredInterfaceName);
165};
166
167
168#endif //PICOSCENES_PLATFORM_ABSTRACTNIC_HXX
virtual bool checkGeneralHandlerExist(const std::string &handlerKeyName)=0
virtual void pauseRx()=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
std::string phyId
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 pauseTx()=0
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)