IDS peak genericC++ v1.17.0
Loading...
Searching...
No Matches
peak_command_node.hpp
Go to the documentation of this file.
1
6
7#pragma once
8
9
10#include <type_traits>
13#include <peak/dll_interface/peak_dll_interface_util.hpp>
16
17
18namespace peak
19{
20namespace core
21{
22namespace nodes
23{
24
30class CommandNode : public Node
31{
32public:
33 static constexpr auto NodeType = nodes::NodeType::Command;
34 using NodeDataType = void;
35 using NodeHasRange = std::false_type;
36
37 CommandNode() = delete;
38 ~CommandNode() override = default;
39 CommandNode(const CommandNode& other) = delete;
40 CommandNode& operator=(const CommandNode& other) = delete;
41 CommandNode(CommandNode&& other) = delete;
42 CommandNode& operator=(CommandNode&& other) = delete;
43
55 PEAK_COMMON_NO_DISCARD bool IsDone() const;
56
65 void Execute();
66
77 void WaitUntilDone(Timeout waitTimeout_ms = 500);
78
88 void ExecuteAndWait(Timeout waitTimeout_ms = 500);
89
90
91private:
92 friend ClassCreator<CommandNode>;
93 CommandNode(PEAK_COMMAND_NODE_HANDLE commandNodeHandle, const std::weak_ptr<NodeMap>& parentNodeMap);
94 PEAK_COMMAND_NODE_HANDLE m_backendHandle;
95};
96
97} /* namespace nodes */
98} /* namespace core */
99} /* namespace peak */
100
101/* Implementation */
102namespace peak
103{
104namespace core
105{
106namespace nodes
107{
108
110 PEAK_COMMAND_NODE_HANDLE commandNodeHandle, const std::weak_ptr<NodeMap>& parentNodeMap)
111 : Node(QueryNumericFromCInterfaceFunction<PEAK_NODE_HANDLE>([&](PEAK_NODE_HANDLE* nodeHandle) {
112 return PEAK_C_ABI_PREFIX PEAK_CommandNode_ToNode(commandNodeHandle, nodeHandle);
113 }),
114 parentNodeMap)
115 , m_backendHandle(commandNodeHandle)
116{}
117
118inline bool CommandNode::IsDone() const
119{
120 return QueryNumericFromCInterfaceFunction<PEAK_BOOL8>([&](PEAK_BOOL8* isDone) {
121 return PEAK_C_ABI_PREFIX PEAK_CommandNode_GetIsDone(m_backendHandle, isDone);
122 }) > 0;
123}
125{
126 CallAndCheckCInterfaceFunction([&] { return PEAK_C_ABI_PREFIX PEAK_CommandNode_Execute(m_backendHandle); });
127}
128
129inline void CommandNode::WaitUntilDone(Timeout waitTimeout_ms /*= 500*/)
130{
131 CallAndCheckCInterfaceFunction(
132 [&] { return PEAK_C_ABI_PREFIX PEAK_CommandNode_WaitUntilDone(m_backendHandle, waitTimeout_ms); });
133}
134
135inline void CommandNode::ExecuteAndWait(Timeout waitTimeout_ms)
136{
137 Execute();
138 WaitUntilDone(waitTimeout_ms);
139}
140
141} /* namespace nodes */
142} /* namespace core */
143} /* namespace peak */
Represents a timeout value in milliseconds.
Definition peak_timeout.hpp:28
CommandNode & operator=(CommandNode &&other)=delete
std::false_type NodeHasRange
Definition peak_command_node.hpp:35
void ExecuteAndWait(Timeout waitTimeout_ms=500)
Executes the command associated with this node and waits for the executed command to be finished,...
Definition peak_command_node.hpp:135
static constexpr auto NodeType
Definition peak_command_node.hpp:33
void NodeDataType
Definition peak_command_node.hpp:34
void WaitUntilDone(Timeout waitTimeout_ms=500)
(Blocking) Wait for the executed command to be finished, i.e. until IsDone() is true.
Definition peak_command_node.hpp:129
CommandNode(const CommandNode &other)=delete
CommandNode(CommandNode &&other)=delete
~CommandNode() override=default
PEAK_COMMON_NO_DISCARD bool IsDone() const
Checks whether the command is done.
Definition peak_command_node.hpp:118
void Execute()
Executes the command associated with this node.
Definition peak_command_node.hpp:124
CommandNode & operator=(const CommandNode &other)=delete
@ Command
Definition peak_node.hpp:91
The "nodes" namespace contains all GenAPI node types.
Definition peak_utils.hpp:31
The "core" namespace contains the direct GenAPI and GenTL wrapper.
Definition peak_buffer.hpp:32
The "peak" namespace directly contains convenience functionality like the DeviceManager as well as th...
Definition peak_buffer.hpp:29
PEAK_C_API PEAK_CommandNode_ToNode(PEAK_COMMAND_NODE_HANDLE commandNodeHandle, PEAK_NODE_HANDLE *nodeHandle)
Casts the given command node to a node.
struct PEAK_COMMAND_NODE * PEAK_COMMAND_NODE_HANDLE
Definition peak_backend.h:439
struct PEAK_NODE * PEAK_NODE_HANDLE
Definition peak_backend.h:427
PEAK_C_API PEAK_CommandNode_Execute(PEAK_COMMAND_NODE_HANDLE commandNodeHandle)
Tells the given command node to execute its associated command.
int8_t PEAK_BOOL8
Definition peak_backend.h:41
PEAK_C_API PEAK_CommandNode_WaitUntilDone(PEAK_COMMAND_NODE_HANDLE commandNodeHandle, uint64_t waitTimeout_ms)
Waits (blocking) until the previously executed command is finished, i.e. PEAK_CommandNode_GetIsDone()...
PEAK_C_API PEAK_CommandNode_GetIsDone(PEAK_COMMAND_NODE_HANDLE commandNodeHandle, PEAK_BOOL8 *isDone)
Asks the given command node whether its associated command is done.
#define PEAK_COMMON_NO_DISCARD
Definition peak_common_defines.h:89
#define PEAK_C_ABI_PREFIX
Definition peak_dll_defines.h:13