Compute Graph Framework SDK Reference
5.4.5418 Release
For Test and Development only

Node.hpp
Go to the documentation of this file.
1 //
3 // Notice
4 // ALL NVIDIA DESIGN SPECIFICATIONS AND CODE ("MATERIALS") ARE PROVIDED "AS IS" NVIDIA MAKES
5 // NO REPRESENTATIONS, WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO
6 // THE MATERIALS, AND EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTIES OF NONINFRINGEMENT,
7 // MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
8 //
9 // NVIDIA CORPORATION & AFFILIATES assumes no responsibility for the consequences of use of such
10 // information or for any infringement of patents or other rights of third parties that may
11 // result from its use. No license is granted by implication or otherwise under any patent
12 // or patent rights of NVIDIA CORPORATION & AFFILIATES. No third party distribution is allowed unless
13 // expressly authorized by NVIDIA. Details are subject to change without notice.
14 // This code supersedes and replaces all information previously supplied.
15 // NVIDIA CORPORATION & AFFILIATES products are not authorized for use as critical
16 // components in life support devices or systems without express written approval of
17 // NVIDIA CORPORATION & AFFILIATES.
18 //
19 // SPDX-FileCopyrightText: Copyright (c) 2017-2021 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
20 // SPDX-License-Identifier: LicenseRef-NvidiaProprietary
21 //
22 // NVIDIA CORPORATION, its affiliates and licensors retain all intellectual
23 // property and proprietary rights in and to this material, related
24 // documentation and any modifications thereto. Any use, reproduction,
25 // disclosure or distribution of this material and related documentation
26 // without an express license agreement from NVIDIA CORPORATION or
27 // its affiliates is strictly prohibited.
28 //
30 
31 #ifndef DW_FRAMEWORK_BASECLASS_NODE_HPP_
32 #define DW_FRAMEWORK_BASECLASS_NODE_HPP_
33 
34 #include <map>
35 
36 #include <dw/core/base/Types.h>
37 #include <dw/core/base/ObjectExtra.h>
38 
39 #include <dwcgf/Types.hpp>
41 #include <dwcgf/pass/Pass.hpp>
42 #include <dwcgf/logger/Logger.hpp>
44 #include <dw/core/container/VectorFixed.hpp>
45 #include <dw/core/container/BaseString.hpp>
46 
47 #include <string>
48 #include <memory>
49 #include <atomic>
50 
51 namespace dw
52 {
53 namespace framework
54 {
55 using dw::core::FixedString;
56 using dw::core::VectorFixed;
57 class ParameterProvider;
58 
59 #define _DW_CGF_STRINGIFY(x) #x
60 // std::char_traits<char8_t>::length() is not constexpr before C++17, use "sizeof() - 1" as WAR
61 #define STRING_VIEW_OF_FIXED_STRING_TEMPLATE_TYPE(x) dw::core::StringView("dw::core::FixedString<" _DW_CGF_STRINGIFY(x) ">", sizeof("dw::core::FixedString<" _DW_CGF_STRINGIFY(x) ">") - 1)
62 
63 class Node
64 {
65 public:
66  static constexpr size_t MAX_NAME_LEN = 128;
67  using Name_t = FixedString<MAX_NAME_LEN>;
68 
69  static constexpr uint32_t MAX_PORT_COUNT = 256;
70 
71  static constexpr uint32_t MAX_PASS_COUNT = 256;
72  static constexpr uint8_t PASS_SETUP = std::numeric_limits<uint8_t>::max() - 1;
73  static constexpr uint8_t PASS_TEARDOWN = std::numeric_limits<uint8_t>::max();
74 
75  virtual ~Node() = default;
76 
81  virtual dwStatus reset() = 0;
82 
89  virtual dwStatus setInputChannel(ChannelObject* channel, uint8_t portID) = 0;
90 
98  virtual dwStatus setInputChannel(ChannelObject* channel, uint8_t portID, dwSerializationType dataType) = 0;
99 
106  virtual dwStatus setOutputChannel(ChannelObject* channel, uint8_t portID) = 0;
107 
117  virtual dwStatus validate() = 0;
118 
123  virtual dwStatus run() = 0;
124 
129  virtual size_t getPassCount() const noexcept = 0;
130 
136  virtual dwStatus runPassByID(uint8_t passID) = 0;
137 
143  virtual dwStatus runPass(size_t passIndex) = 0;
144 
150  virtual dwStatus getPasses(VectorFixed<Pass*>& passList) = 0;
151 
159  virtual dwStatus getPasses(VectorFixed<Pass*>& passList,
160  dwProcessorType processorType,
161  dwProcessType processType) = 0;
162 
168  virtual dwStatus setName(const char* name) = 0;
169 
175  virtual dwStatus getName(const char** name) = 0;
176 
182  virtual dwStatus getHealthSignals(dwGraphHealthSignalArray*& healthSignals) = 0;
183 
189  virtual dwStatus setIterationCount(uint32_t iterationCount) = 0;
190 };
191 
192 class ProcessNode : public Node
193 {
194 public:
195  ~ProcessNode() override = default;
196 };
197 
198 class SensorNode : public Node
199 {
200 public:
201  ~SensorNode() override = default;
202 
207  virtual dwStatus start() = 0;
208 
213  virtual dwStatus stop() = 0;
214 
219  virtual dwStatus setAffinityMask(uint) = 0;
220 
225  virtual dwStatus setThreadPriority(int) = 0;
226 
231  virtual dwStatus setStartTime(dwTime_t) = 0;
232 
237  virtual dwStatus setEndTime(dwTime_t) = 0;
238 
243  virtual dwStatus isVirtual(bool* isVirtualBool) = 0;
244 
245  enum class DataEventType
246  {
247  PRODUCE, // sensor node produces data for a node-run
248  DROP, // sensor node drops data in the next node-run
249  NONE, // sensor node does not produce data for a node-run
250  };
251 
255  struct DataEvent
256  {
268  dwStatus status;
273  dwTime_t timestamp;
274  };
275 
276  using DataEventReadCallback = dw::core::Function<bool(DataEvent&)>;
283  virtual dwStatus setDataEventReadCallback(DataEventReadCallback cb) = 0;
284 
285  using DataEventWriteCallback = dw::core::Function<void(DataEvent)>;
292  virtual dwStatus setDataEventWriteCallback(DataEventWriteCallback cb) = 0;
293 };
294 
303 {
304 public:
309  virtual dwStatus preShutdown() = 0;
310 };
311 
312 // TODO(ajayawardane) WAR: When there is a single SSM pass in the graph, reset could potentially
313 // be called while node passes are running. Until STM schedule re-entry is supported, we reset the
314 // supported nodes in the setup pass.
316 {
317 public:
322  virtual dwStatus setAsyncReset() = 0;
327  virtual dwStatus executeAsyncReset() = 0;
328 };
329 
332 
333 } // namespace framework
334 } // namespace dw
335 
337 
338 #endif //DW_FRAMEWORK_BASECLASS_NODE_HPP_
static constexpr uint8_t PASS_TEARDOWN
Definition: Node.hpp:73
dw::core::Function< void(DataEvent)> DataEventWriteCallback
Definition: Node.hpp:285
virtual dwStatus validate()=0
Checks that all mandatory ports are bound.
virtual dwStatus reset()=0
Resets the state of the node.
DataEventType dataEventType
The type of event.
Definition: Node.hpp:260
static constexpr uint32_t MAX_PORT_COUNT
Definition: Node.hpp:69
static constexpr uint8_t PASS_SETUP
Definition: Node.hpp:72
virtual dwStatus run()=0
Runs all the passes in the node.
virtual dwStatus runPassByID(uint8_t passID)=0
Run one pass by ID as defined by the PassList enum class.
FixedString< MAX_NAME_LEN > Name_t
Definition: Node.hpp:67
dwStatus status
The status of the node-run.
Definition: Node.hpp:268
Record of data sensor data frame.
Definition: Node.hpp:255
Pass is a runnable describes the metadata of a pass.
Definition: Pass.hpp:49
static constexpr uint32_t MAX_PASS_COUNT
Definition: Node.hpp:71
static constexpr size_t MAX_NAME_LEN
Definition: Node.hpp:66
For nodes require extra actions to be taken before shutdown should implement this interface...
Definition: Node.hpp:302
virtual dwStatus setIterationCount(uint32_t iterationCount)=0
Sets the node&#39;s iteration count.
virtual dwStatus getHealthSignals(dwGraphHealthSignalArray *&healthSignals)=0
Get the pointer to the health signal array for this node.
virtual dwStatus runPass(size_t passIndex)=0
Run one pass by index as defined by the pass descriptors.
virtual size_t getPassCount() const noexcept=0
Get number of passes in the node.
dw::core::Function< bool(DataEvent &)> DataEventReadCallback
Definition: Node.hpp:276
constexpr size_t passIndex(dw::core::StringView identifier)
Get the the pass index for a pass identified by name.
Definition: Exception.hpp:46
virtual dwStatus setOutputChannel(ChannelObject *channel, uint8_t portID)=0
Sets an output channel for this node with an accompanying port.
virtual dwStatus setInputChannel(ChannelObject *channel, uint8_t portID)=0
Sets an input channel for this node with an accompanying port.
virtual dwStatus getName(const char **name)=0
Get the name of the node.
dwTime_t timestamp
The timestamp of involved data.
Definition: Node.hpp:273
virtual dwStatus getPasses(VectorFixed< Pass *> &passList)=0
Get all the passes in the node.
virtual ~Node()=default
virtual dwStatus setName(const char *name)=0
Set the name of the node.