ADTF
Loading...
Searching...
No Matches
kernel_intf.h
Go to the documentation of this file.
1
7#pragma once
11
13#define CID_ADTF_KERNEL "kernel.service.adtf.cid"
14
15namespace adtf
16{
17namespace services
18{
19namespace ant
20{
21
26{
27 public:
29 ADTF_IID(IKernel, "kernel.ant.services.adtf.iid");
30
31 protected:
33 ~IKernel() = default;
34
35 public:
39 enum class tSchedulingClass: uint32_t
40 {
41 Default = 0,
42 Normal = 1,
44 };
45
49 enum tThreadFlags // untyped for combinations
50 {
54 };
55
59 enum class tTimerClock: uint32_t
60 {
61 ADTF = 0,
64 };
65
69 enum tTimerFlags: uint8_t
70 {
76 };
77
82 {
92 float fPriority = -1.0,
93 const uint8_t* pProcessorAffinity = nullptr,
94 size_t nProcessorAffinityByteCount = 0):
97 {
98 if (pProcessorAffinity == nullptr)
99 {
100 adtf_util::cMemoryBlock::MemSet(aProcessorAffinity, 0xFF, sizeof(aProcessorAffinity));
101 }
102 else
103 {
104 adtf_util::cMemoryBlock::MemSet(aProcessorAffinity, 0x00, sizeof(aProcessorAffinity));
105 adtf_util::cMemoryBlock::MemCopy(aProcessorAffinity, pProcessorAffinity,
106 std::min<size_t>(nProcessorAffinityByteCount, sizeof(aProcessorAffinity)));
107 }
108 }
109
111 float fPriority;
112 uint8_t aProcessorAffinity[128];
113 };
114
119 {
120 public:
121 ADTF_IID(IScheduling, "scheduling.ant.kernel.services.adtf.iid");
122
123 protected:
125 ~IScheduling() = default;
126
127 public:
133 virtual tResult GetScheduling(tSchedulingInfo& sScheduling) const = 0;
134
140 virtual tResult SetScheduling(const tSchedulingInfo& sScheduling) = 0;
141 };
142
146 class IThread: public ucom::IObject
147 {
148 public:
149 ADTF_IID(IThread, "thread.ant.kernel.services.adtf.iid");
150
151 protected:
153 ~IThread() = default;
154
155 public:
160 virtual tResult Detach() = 0;
161
166 virtual bool IsCurrent() const = 0;
167
173 virtual tResult Join(tTimeStamp nTimeout = -1) = 0;
174 };
175
179 class ITimer: public ucom::IObject
180 {
181 public:
182 ADTF_IID(ITimer, "timer.ant.kernel.services.adtf.iid");
183
184 protected:
186 ~ITimer() = default;
187 public:
192 virtual tResult Stop() = 0;
193 };
194
198 enum tSignalFlags // untyped for combinations
199 {
202 };
203
208 class ISignal: public ucom::IObject
209 {
210 public:
211 ADTF_IID(ISignal, "signal.ant.kernel.services.adtf.iid");
212
213 protected:
215 ~ISignal() = default;
216
217 public:
221 virtual int32_t GetClass() const = 0;
222
226 virtual int32_t GetCode() const = 0;
227 };
228
233 {
234 protected:
236 ~ISignalHandler() = default;
237
238 public:
248 };
249
255 {
256 public:
257 ADTF_IID(IKernelRunnable, "runnable.ant.kernel.services.adtf.iid");
258 protected:
260 ~IKernelRunnable() = default;
261 };
262
263
264 public:
283 virtual tResult ThreadCreate(adtf::ucom::iobject_ptr<IThread>& pThread, const char* strThreadName,
284 const adtf::ucom::iobject_ptr<IKernelRunnable>& pKernelRunnable,
285 const void* pUserData = nullptr,
286 size_t nUserDataSize = 0,
287 const tSchedulingInfo& sScheduling = tSchedulingInfo(),
288 uint32_t ui32Flags = tThreadFlags::THF_None) = 0;
289
311 virtual tResult TimerCreate(adtf::ucom::iobject_ptr<ITimer>& pTimer, const char* strTimerName,
312 tTimeStamp nPeriod,
313 tTimeStamp nInitialDelay,
314 const adtf::ucom::iobject_ptr<IKernelRunnable>& pKernelRunnable,
315 const void* pUserData = nullptr,
316 size_t nUserDataSize = 0,
318 const tSchedulingInfo& sScheduling = tSchedulingInfo(),
319 uint32_t ui32Flags = tTimerFlags::TIF_None) = 0;
320
327 virtual tResult SignalSend(const adtf::ucom::iobject_ptr<ISignal>& pSignal, uint32_t ui32Flags = tSignalFlags::SIG_None) = 0;
328
335 virtual tResult SignalRegister(ISignalHandler& oHandler, uint32_t ui32Flags = tSignalFlags::SIG_None) = 0;
336
343
350};
351
352}
353
354namespace devil
355{
356
361{
362 public:
364 ADTF_IID(IKernel, "kernel.devil.services.adtf.iid");
365
366 public:
367
372 {
373 public:
374 ADTF_IID(INamedKernelObject, "named_kernel_object.devil.kernel.services.adtf.iid");
375
376 public:
377 virtual tResult GetName(base::ant::IString&& strName) const = 0;
378 };
379};
380
381}
382
383namespace penguin
384{
385
390{
391 public:
393 ADTF_IID(IKernel, "kernel.penguin.services.adtf.iid");
394
395 public:
396
398
421 virtual tResult TimerCreate(adtf::ucom::iobject_ptr<ITimer>& pTimer, const char* strTimerName,
422 tTimeStamp nPeriod,
423 tTimeStamp nInitialDelay,
424 tTimeStamp nMaximumExecutionTime,
425 const adtf::ucom::iobject_ptr<IKernelRunnable>& pKernelRunnable,
426 const void* pUserData = nullptr,
427 size_t nUserDataSize = 0,
429 const tSchedulingInfo& sScheduling = tSchedulingInfo(),
430 uint32_t ui32Flags = tTimerFlags::TIF_None) = 0;
431};
432
433}
434
435using penguin::IKernel;
436
437}
438
439}
#define ADTF_IID(_interface, _striid)
Definition adtf_iid.h:19
A_UTILS_NS::cResult tResult
For backwards compatibility and to bring latest version into scope.
Definition result.h:736
Definition runnable_intf.h:27
Definition string_intf.h:29
~IKernelRunnable()=default
Protected destructor.
Definition kernel_intf.h:119
virtual tResult GetScheduling(tSchedulingInfo &sScheduling) const =0
virtual tResult SetScheduling(const tSchedulingInfo &sScheduling)=0
~IScheduling()=default
Protected destructor --> Only the final implementation can be destroyed!
virtual tResult HandleKernelSignal(const adtf::ucom::iobject_ptr< ISignal > &pSignal)=0
~ISignalHandler()=default
Protected destructor.
Definition kernel_intf.h:209
virtual int32_t GetCode() const =0
virtual int32_t GetClass() const =0
~ISignal()=default
Protected destructor --> Only the final implementation can be destroyed!
Definition kernel_intf.h:147
virtual bool IsCurrent() const =0
~IThread()=default
Protected destructor --> Only the final implementation can be destroyed!
virtual tResult Join(tTimeStamp nTimeout=-1)=0
Definition kernel_intf.h:180
~ITimer()=default
Protected destructor --> Only the final implementation can be destroyed!
Definition kernel_intf.h:26
tTimerFlags
Definition kernel_intf.h:70
@ TIF_None
No special behaviour.
Definition kernel_intf.h:71
@ TIF_Reschedule
Reschedule timer interval in case of a missed start instant. Mutally exclusive with TIF_Drop....
Definition kernel_intf.h:72
@ TIF_Drop
Drop missed timer calls and wait until the next valid point in time that matches the interval....
Definition kernel_intf.h:73
@ TIF_ErrorLog
Default error handling action for deadline and start instant misses is set to adtf::base::elasto::IEr...
Definition kernel_intf.h:74
@ TIF_ErrorStop
Default error handling action for deadline and start instant misses is set to adtf::base::elasto::IEr...
Definition kernel_intf.h:75
virtual tResult TimerCreate(adtf::ucom::iobject_ptr< ITimer > &pTimer, const char *strTimerName, tTimeStamp nPeriod, tTimeStamp nInitialDelay, const adtf::ucom::iobject_ptr< IKernelRunnable > &pKernelRunnable, const void *pUserData=nullptr, size_t nUserDataSize=0, tTimerClock eClock=tTimerClock::ADTF, const tSchedulingInfo &sScheduling=tSchedulingInfo(), uint32_t ui32Flags=tTimerFlags::TIF_None)=0
virtual tResult SignalRegister(ISignalHandler &oHandler, uint32_t ui32Flags=tSignalFlags::SIG_None)=0
tTimerClock
Definition kernel_intf.h:60
@ Monotonic
Realtime monotonic clock.
Definition kernel_intf.h:62
@ ADTF
ADTF Stream time.
Definition kernel_intf.h:61
~IKernel()=default
Protected destructor --> Only the final implementation can be destroyed!
virtual tResult ThreadCreate(adtf::ucom::iobject_ptr< IThread > &pThread, const char *strThreadName, const adtf::ucom::iobject_ptr< IKernelRunnable > &pKernelRunnable, const void *pUserData=nullptr, size_t nUserDataSize=0, const tSchedulingInfo &sScheduling=tSchedulingInfo(), uint32_t ui32Flags=tThreadFlags::THF_None)=0
virtual tResult GetObjects(adtf::ucom::iobject_enum< IObject > &oObjects)=0
tSignalFlags
Definition kernel_intf.h:199
@ SIG_None
No special behaviour.
Definition kernel_intf.h:200
@ SIG_Async
Transmit signal asynchronously.
Definition kernel_intf.h:201
virtual tResult SignalUnregister(ISignalHandler &oHandler)=0
virtual tResult SignalSend(const adtf::ucom::iobject_ptr< ISignal > &pSignal, uint32_t ui32Flags=tSignalFlags::SIG_None)=0
tThreadFlags
Definition kernel_intf.h:50
@ THF_None
No special behaviour.
Definition kernel_intf.h:51
@ THF_Detached
Definition kernel_intf.h:52
ADTF_IID(IKernel, "kernel.ant.services.adtf.iid")
Interface ID for the kernel interface.
tSchedulingClass
Definition kernel_intf.h:40
@ Default
The kernel may choose what it (or the user) likes.
Definition kernel_intf.h:41
@ Normal
Basic non-realtime scheduling.
Definition kernel_intf.h:42
@ RealTime
Realtime scheduling.
Definition kernel_intf.h:43
Definition kernel_intf.h:361
ADTF_IID(IKernel, "kernel.devil.services.adtf.iid")
Interface ID for the kernel interface.
Definition kernel_intf.h:390
ADTF_IID(IKernel, "kernel.penguin.services.adtf.iid")
Interface ID for the kernel interface.
virtual tResult TimerCreate(adtf::ucom::iobject_ptr< ITimer > &pTimer, const char *strTimerName, tTimeStamp nPeriod, tTimeStamp nInitialDelay, tTimeStamp nMaximumExecutionTime, const adtf::ucom::iobject_ptr< IKernelRunnable > &pKernelRunnable, const void *pUserData=nullptr, size_t nUserDataSize=0, tTimerClock eClock=tTimerClock::ADTF, const tSchedulingInfo &sScheduling=tSchedulingInfo(), uint32_t ui32Flags=tTimerFlags::TIF_None)=0
Definition object_intf.h:33
Definition object_list.h:22
Namespace for all service interfaces provided since v3.3.
Definition adtf_file_support_intf.h:25
Namespace for all service interfaces provided since v3.15.
Definition reference_clock_intf.h:609
ant::IObject IObject
Alias always bringing the latest version of ant::IObject into scope.
Definition object_intf.h:109
ant::iobject_ptr< T > iobject_ptr
Alias always bringing the latest version of ant::iobject_ptr into scope.
Definition object_ptr_intf.h:437
Namespace for all functionality provided by ADTF and its SDKs.
Definition adtf_client_connector.h:14
float fPriority
The priority [0.0, 1.0].
Definition kernel_intf.h:111
uint8_t aProcessorAffinity[128]
The processor affinity (bitmask).
Definition kernel_intf.h:112
tSchedulingInfo(tSchedulingClass eSchedulingClass=tSchedulingClass::Default, float fPriority=-1.0, const uint8_t *pProcessorAffinity=nullptr, size_t nProcessorAffinityByteCount=0)
Definition kernel_intf.h:91
tSchedulingClass eSchedulingClass
The scheduling class.
Definition kernel_intf.h:110