iop_vdevice.h
Go to the documentation of this file.
1/** @file iop_vdevice.h Virtual device for interface definition */
2
3/*
4 FAU Discrete Event Systems Library (libfaudes)
5
6 Copyright (C) 2008, Thomas Moor
7 Exclusive copyright is granted to Klaus Schmidt
8
9*/
10
11
12
13#ifndef FAUDES_VDEVICE_H
14#define FAUDES_VDEVICE_H
15
16#include "corefaudes.h"
17#include "tp_include.h"
18#include "sp_densityfnct.h"
19
20
21
22// Note: iodevice debuggung uses direct console output since
23// std redirection is not threadsafe.
24
25// Debugging: io level
26#ifdef FAUDES_DEBUG_IODEVICE
27#define FD_DH(message) FAUDES_WRITE_DIRECT("FAUDES_IODEVICE: " << message)
28#else
29#define FD_DH(message)
30#endif
31
32
33// Debugging: io level verbose
34#ifdef FAUDES_DEBUG_IOVERBOSE
35#define FD_DHV(message) FAUDES_WRITE_DIRECT("FAUDES_IODEVICE: " << message)
36#else
37#define FD_DHV(message)
38#endif
39
40
41// Debugging: io performance
42#ifdef FAUDES_DEBUG_IOPERF
43#define FD_DHT(message) FAUDES_WRITE_DIRECT("FAUDES_IOTIMING: " << message)
44#else
45#define FD_DHT(message)
46#endif
47
48
49// Max number of time stamps for performance monitor
50#define FAUDES_DEBUG_IOPERF_SAMPLES 10000
51
52
53
54namespace faudes {
55
56
57
58/**
59 * Attribute for the configuration of a input or output mapping
60 *
61 * The base class for all device event attributes only distinguishes between
62 * output and input events. The actual attribute is of type AttributeVoid.
63 * Derived classes are meant to override this type in order to provide the
64 * defining data for the actual mapping of physical and logical events.
65 *
66 */
67
69
71
72public:
73
74 /** Default constructor (no attributes, aka undefined) */
75
77
78 /** Copy constructor */
80
81 /** Destructor */
82 virtual ~AttributeDeviceEvent(void);
83
84 /** Clear */
85 virtual void Clear(void);
86
87 /** Test for default value (undefined) */
88 virtual bool IsDefault(void) const {return (!mpOutputAttribute && !mpInputAttribute); };
89
90 /** Does this attribute define an output mapping? */
91 bool IsOutput(void) const {return mpOutputAttribute!=0; };
92
93 /** Does this attribute define a input mapping? */
94 bool IsInput(void) const {return mpInputAttribute!=0; };
95
96 /** Set to default output attribute */
97 void DefaultOutput(void) {
98 Clear();
99 mpOutputAttribute= pOutputPrototype->New();
100 };
101
102 /** Set to default input attribute */
103 void DefaultInput(void) {
104 Clear();
105 mpInputAttribute= pInputPrototype->New();
106 };
107
108 /** Set output attribute */
109 virtual void Output(const AttributeVoid& rOutputAttribute) {
110 DefaultOutput();
111 mpOutputAttribute->Copy(rOutputAttribute);
112 };
113
114 /** Set input attribute */
115 virtual void Input(const AttributeVoid& rInputAttribute) {
116 DefaultInput();
117 mpInputAttribute->Copy(rInputAttribute);
118 };
119
120 /** Read output attribute */
121 virtual void ReadOutput(TokenReader& rTr) {
122 DefaultOutput();
123 mpOutputAttribute->Read(rTr);
124 };
125
126 /** Read input attribute */
127 virtual void ReadInput(TokenReader& rTr) {
128 DefaultInput();
129 mpInputAttribute->Read(rTr);
130 };
131
132 /** Get output mapping (return 0 if its not an output) */
133 const AttributeVoid* Outputp(void) const {return mpOutputAttribute; };
134
135 /** Get input mapping (return 0 if its not a input) */
136 const AttributeVoid* Inputp(void) const {return mpInputAttribute; };
137
138
139protected:
140
141 /** Output Attribute (use cast in derived classes) */
143
144 /** Input Attribute (use cast in derived classes) */
146
147 /** Output Prototype (set to nontrivial attribute in derived classes) */
149
150 /** Input Prototype (set to nontrivial attribute in derived classes) */
152
153 /** Fallback attribute type (initialize on first use static construct)*/
154 static const AttributeVoid* FallbackAttributep(void);
155
156 /**
157 * Copyment
158 *
159 * @param rSrcAttr
160 * Source to copy from
161 */
162 void DoCopy(const AttributeDeviceEvent& rSrcAttr);
163
164 /**
165 * Copyment
166 *
167 * @param rSrcAttr
168 * Source to copy from
169 */
170 void DoMove(AttributeDeviceEvent& rSrcAttr);
171
172
173 /**
174 * Reads the attribute from TokenReader, see AttributeVoid for public wrappers.
175 *
176 * If the current token indicates an "Input" or "Output" section, the method reads that
177 * section. Else it does nothing. Exceptions may only be thrown
178 * on invalid data within the section. The label argument is ignored.
179 * The context argument is ignored.
180 *
181 * @param rTr
182 * TokenReader to read from
183 * @param rLabel
184 * Section to read
185 * @param pContext
186 * Read context to provide contextual information
187 *
188 * @exception Exception
189 * - IO error (id 1)
190 */
191 virtual void DoRead(TokenReader& rTr,const std::string& rLabel="", const Type* pContext=0);
192
193 /**
194 * Writes the attribute to TokenWriter, see AttributeVoid for public wrappers.
195 *
196 * Writes all present device event attributes to include the defining data.
197 * The label argument is ignored, we use hardcoded labels "Input" or "Output".
198 * The context argument is ignored.
199 *
200 * @param rTw
201 * TokenWriter to write to
202 * @param rLabel
203 * Section to write
204 * @param pContext
205 * Read context to provide contextual information
206 *
207 * @exception Exception
208 * - IO error (id 2)
209 */
210 virtual void DoWrite(TokenWriter& rTw,const std::string& rLabel="", const Type* pContext=0) const;
211
212
213
214}; // class AttributeDeviceEvent
215
216
217
218/**
219 * Virtual base class to define the interface for event io.
220 *
221 * @section IOPvdeviceA Input and Output event IO
222 *
223 * A vDevice provides an virtual interface to execute output events and sense
224 * input events, ie ReadInput() and WriteOutput(). The latter is prepared to
225 * be organized as a background thread that accumulates events in an internal fifo buffer.
226 * Once a input event has been read by the application, the buffer is cleared.
227 * A device is configured by passing an event set with device event attributes. The virtual
228 * base class formalls takes void attributes, and uses a dynamic cast to the actual attribute
229 * type that is provided by any derived class.
230 *
231 * @section IOPvdeviceB Physical Time
232 *
233 * The vDevice defines an interface to access the current physical time. The default
234 * implementation has msec resolution and is based on the system clock. Time may be queried
235 * in ms by CurrentTimeMs() or in faudes time unis (ftu) by CurrentTime(). Faudes time units
236 * refer to defining data in eg guards and invariants of timed automata or stochastical
237 * execution properties. Conversion to physical time is by the factor mTimeScale given in
238 * msecs per ftu. There is also a default implementation WaitInputs() for timed waiting
239 * for events based on condition variables.
240 * This requires a derived class to send the according signal. Both, physical
241 * time and waiting for events, may be overwritten in derived classes.
242 *
243 * @section IOPvdeviceC Operating Status
244 *
245 * The device may be in one of four operating states Down, StartUp, Up or ShutDown. Once configured
246 * you may Start() the device. The device will assychonously allocate required resources
247 * and if successful eventually be in state Up. While the device is Up, you can write
248 * outputs and read events. You can request the device to release resources by calling
249 * Stop(). While Up, you may also Reset() the device, to set outputs in passive state,
250 * to reset physical time to zero and tu flush the input fifo buffer.
251 *
252 * @section IOPvdeviceD File IO
253 *
254 * The vDevice provides std faudes token io interface via faudes::Type. In addition,
255 * there is a static constructor FromTokenreader() to construct a vDevice
256 * object of specific type as indentifiesd by the token section.
257 *
258 * @section Techical Note
259 *
260 * The vDevice derived classes implement std faudes type semantics for
261 * token IO plus the New() factory function to support type registration required for
262 * XML formated files. Copyment and comparison are, however, not implemented.
263 *
264 * @ingroup IODevicePlugin
265 */
266
267class FAUDES_API vDevice : public Type {
268
269
270 friend class xDevice;
271
272
273 public:
274
275 /** Enum for device stages */
276 typedef enum { Down, StartUp, Up , ShutDown } DeviceState;
277
278 /**
279 * Default constructor
280 */
281 vDevice(void);
282
283 /**
284 * Factorie methods
285 */
286 virtual vDevice* New(void) const = 0;
287 virtual vDevice* NewCpy(void) const = 0;
288
289 /**
290 * Construct on heap from token reader.
291 *
292 * This constructor examines the token strean, determines the coressponding
293 * class and constructs the device on the heap. Todo: the implementation
294 * of this function is a hack, there must be proper
295 * solution to this issue.
296 *
297 * @param rTr
298 * TokenReader to read from
299 * @return
300 * vDevice pointer
301 *
302 * @exception Exception
303 * - token mismatch (id 552)
304 * - IO errors (id 1)
305 */
306 static vDevice* FromTokenReader(TokenReader& rTr);
307
308 /**
309 * Construct on heap from file.
310 *
311 * This constructor examines the file, determines the coressponding
312 * class and constructs the device on the heap.
313 *
314 * @param rFileName
315 * Filename
316 * @return
317 * vDevice pointer
318 *
319 * @exception Exception
320 * - token mismatch (id 552)
321 * - IO errors (id 1)
322 */
323 static vDevice* FromFile(const std::string& rFileName);
324
325
326 /**
327 * Explicit destructor.
328 */
329 virtual ~vDevice(void);
330
331
332 /**
333 * Set the device name
334 *
335 * @param rName
336 * Generator name
337 */
338 void Name(const std::string& rName);
339
340 /**
341 * Get device name
342 *
343 * @return
344 * Name of generator
345 */
346 const std::string& Name(void) const;
347
348
349 /**
350 * Set tolerance for time synchonisation.
351 *
352 * @param maxgap
353 * Max acceptable amount of time by which the generator may be behind device time.
354 *
355 */
356 void Tolerance(Time::Type maxgap) {mMaxSyncGap=maxgap;};
357
358
359 /**
360 * Get tolerance.
361 *
362 * @return
363 * Max acceptable amount of time by which the generator may be behind device time
364 *
365 */
366 Time::Type Tolerance(void) {return mMaxSyncGap;};
367
368
369 /**
370 * Set timescale.
371 *
372 * @param scale
373 * Conversion factor in msecs/ftu (faudes time units)
374 *
375 */
376 virtual void TimeScale(unsigned int scale) {mTimeScale=scale; CurrentTime(0); };
377
378
379 /**
380 * Get timescale.
381 *
382 * @return
383 * Conversion factor in msecs/ftu (faudes time units)
384 *
385 */
386 virtual int TimeScale(void) {return mTimeScale;};
387
388
389 /**
390 * Clear all configuration.
391 * This implies Stop().
392 */
393 virtual void Clear(void);
394
395 /**
396 * Insert/edit input or output configuration
397 *
398 * For a nontrivial device, a dynamic cast is used to
399 * access the attribute parameter.
400 *
401 * @param event
402 * Input or output event by faudes index
403 * @param attr
404 * Configuration attribute
405 * @exception Exception
406 * - unknown event (id 65)
407 * - Cannot cast attribute (id 550)
408 */
409 virtual void Configure(Idx event, const AttributeDeviceEvent& attr);
410
411 /**
412 * Configure by alphabet
413 *
414 * For a nontrivial device, a dynamic cast is used to
415 * access atributes of the alphabet parameter.
416 *
417 * @param rPhysicalEvents
418 * Event set with configuration attributes
419 * @exception Exception
420 * - Cannot cast argument (id 550)
421 */
422 virtual void Configure(const EventSet& rPhysicalEvents);
423
424
425 /**
426 * Compile inner data-structures.
427 *
428 * As every derived class may have its own individual inner data-structures to
429 * set up, it has to reimplement its own Compile()-function if needed.
430 *
431 * In the base class Compile() builds up the input- and output event set.
432 *
433 */
434 virtual void Compile(void);
435
436
437 /**
438 * Get outputs as plain set.
439 *
440 * @return
441 * Set of all configured outputs
442 */
443 virtual const EventSet& Outputs(void) const;
444
445 /**
446 * Get inputs as plain set.
447 *
448 * @return
449 * Set of all configured inputs
450 */
451 virtual const EventSet& Inputs(void) const;
452
453
454 /**
455 * Reset device. Resets any dynamic state such as edge detection.
456 * Since the vDevice only provides timing, it only resets the current faudes
457 * time to zero. A reset does not stop the device.
458 *
459 */
460 virtual void Reset(void);
461
462 /**
463 * A device may ask for a reset by returning true for ResetRequest(). A well behaved
464 * simulator application will perform a Reset() and initialise any faudes::Executors,
465 * and stop the simulation. The device is meant to cancel any pending WaitInputs()
466 * or WaitInputsMs() when it requests a reset. The default implementation returns
467 * false;
468 *
469 * @return
470 * True, if a reset is requested
471 *
472 */
473 virtual bool ResetRequest(void);
474
475 /**
476 * Activate the device. This function enables output execution and input reading.
477 * It will allocate device specific necessary resources eg start a background thread,
478 * initialise operating system device drivers etc.
479 *
480 * @exception Exception
481 * - Not yet configured (id 551)
482 */
483 virtual void Start(void);
484
485 /**
486 * Deactivate the device. This function disables output execution and input reading.
487 * Stop also runs Reset.
488 *
489 */
490 virtual void Stop(void);
491
492 /**
493 * Get status. This function returns the current status of the device.
494 * In derived classes that use background threads for input reading etc,
495 * a device may change its status without notice. Stop runs Reset()
496 *
497 */
498 virtual DeviceState Status(void) { return mState;};
499
500 /**
501 * Get status as infromal string.
502 *
503 */
504 virtual std::string StatusString(void);
505
506
507 /**
508 * Run output command.
509 *
510 * @exception Exception
511 * - unknown output event (id 65)
512 *
513 */
514 virtual void WriteOutput(Idx output)=0;
515
516 /**
517 * Flush pending IO Operations
518 *
519 * A device may implement buffered output operations, i.e. to assemble a process
520 * image befor applying it to the physical plant.
521 * By FlushOutputs() you can ask the device to execute all buffered
522 * output operations. FlushOutputs() is called by
523 * WaitInputs() and WaitInputsMs(), so buffers are automatically
524 * flushed when the simulation waits for input events.
525 * The default impelmentation of FlushOutputs() does nothing.
526 *
527 */
528 virtual void FlushOutputs(void);
529
530 /**
531 * Read sensed input events.
532 * Report the oldest event from the internal input buffer.
533 * The event is removed from the buffer. The function returns
534 * 0 if the buffer is empty.
535 *
536 */
537 virtual Idx ReadInput(void);
538
539 /**
540 * Peek for sensed events.
541 * Report the oldest input-event from the buffer. However,
542 * dont remove the event.
543 *
544 * @return
545 * Input-event index or 0 if no such available.
546 */
547 virtual Idx PeekInput(void);
548
549
550 /**
551 * Report whether a input-event is ready
552 */
553 virtual bool InputReady(void);
554
555
556 /**
557 * Wait for input trigger.
558 *
559 * The default implementation assumes that inputs events are
560 * notified via the condition signal. The duration to wait
561 * is specified in faudes time units (ftu) and is converted to system time
562 * by the scaling factor mTimeScale (ms/ftu).
563 *
564 * @return
565 * True, if events are available for read.
566 */
567 virtual bool WaitInputs(Time::Type duration);
568
569 /**
570 * Wait for input trigger.
571 *
572 * Same as WaitInputs, but with the maximum time to wait given in
573 * msecs.
574 *
575 * @return
576 * True, if events are available for read.
577 */
578 virtual bool WaitInputsMs(long int duration);
579
580
581 /**
582 * Report physical time in ftu.
583 *
584 * The time elapsed since the last reset is retunred
585 * in faudes time units (ftu).
586 *
587 * @return
588 * Physical time.
589 */
590 virtual Time::Type CurrentTime(void);
591
592 /**
593 * Report physical time in ms
594 *
595 * The time elapsed since the last reset is returned
596 * in msecs.
597 *
598 * @return
599 * Physical time.
600 */
601 virtual long int CurrentTimeMs(void);
602
603 /**
604 * Set physical time in ftu.
605 * @param now
606 * physical time in faudes time units (ftu).
607 */
608 virtual void CurrentTime(Time::Type now);
609
610
611 /**
612 * Set physical time in ms.
613 * @param nowms
614 * physical time in msec
615 */
616 virtual void CurrentTimeMs(long int nowms);
617
618
619 /**
620 * Convert faudes time unit duration to system time
621 *
622 * Note: this helper function is not static since it refers to
623 * the parameter mTimeScale.
624 *
625 * @return
626 * Absolut system-time form now + duration in the future
627 * @param duration
628 * Time in faudes-time
629 */
630 virtual faudes_systime_t FtuToSystemTime(Time::Type duration);
631
632 /** Tell the device which condition to use for waiting */
633 void UseCondition(faudes_mutex_t* wmutex, faudes_cond_t* wcond);
634
635 /** Tell the device which buffer to use for inputs */
636 void UseBuffer(faudes_mutex_t* bmutex, std::deque<Idx>* bbuffer);
637
638 /** Convenience method */
639 virtual std::string EStr(Idx ev) {return Inputs().Str(ev);};
640
641 /** Get performance (need compiletime option) */
642 SampledDensityFunction Performance(void);
643
644 /** Clear performance (need compiletime option) */
645 void ResetPerformance(void);
646
647 /** Convenience method */
648 void WritePerformance(void);
649
650 /**
651 * Stop all devices.
652 * This function is intended to be called on ungraceful termination of a
653 * simulater application. It uses a global variable that tracks all device
654 * instances.
655 *
656 */
657 static void StopAll(void);
658
659 protected:
660
661 /**
662 * Token output, see Type::Write for public wrappers.
663 * The vDevice inplements token writing to consist of DoWritePreface (device name and time scale).
664 * and DoWriteConfiguration (device specific event attributes). The default label is taken from the
665 * member variable mDefaultLabel. Derived classes are meant to set mDefaultLabel in their constructor
666 * and to reimplement DoWritePreface to add additional data eg cycle time or network address.
667 * The parameter pContext is ignored and passed on.
668 *
669 * @param rTw
670 * Reference to TokenWriter
671 * @param rLabel
672 * Label of section to write, defaults to name of set
673 * @param pContext
674 * Write context to provide contextual information
675 */
676 virtual void DoWrite(TokenWriter& rTw, const std::string& rLabel="", const Type* pContext=0) const;
677
678 /** Writes non-event-configuration data from TokenWriter
679 *
680 * This function is part of the non-event-configuration token-output mechanism. The vDevice will write
681 * its name and the time scale, derived classes are meant to first call the base class method and then
682 * add additional configuration parameter.
683 *
684 * Note: in order to keep the inputfile-layout as easy as possible no label will be used to separate
685 * this data-section. Never the less a default-label ("Device") is specified.
686 *
687 * @param rTw
688 * TokenWriter to write to
689 * @param rLabel
690 * Section to read
691 * @param pContext
692 * Provide contextual information
693 *
694 * */
695 virtual void DoWritePreface(TokenWriter& rTw, const std::string& rLabel="", const Type* pContext=0) const;
696
697
698 /** Writes event-configuration to TokenWriter
699 *
700 * This function is part of the event-configuration token-output mechanism. It writes the device-specific
701 * event-configuration to provided TokenWriter. It uses the virtual interface of TBaseSet to figure the
702 * actual attribute type.
703 *
704 * Note: the event-configuration will be labeled by "EventConfiguration"
705 *
706 * @param rTw
707 * TokenWriter to write to
708 * @param rLabel
709 * Section to write
710 * @param pContext
711 * Provide contextual information
712 *
713 */
714 virtual void DoWriteConfiguration(TokenWriter& rTw, const std::string& rLabel="", const Type* pContext=0) const;
715
716 /**
717 * Token input, see Type::DRead for public wrappers.
718 * The vDevice implkements token input to consist of DoReadPreface (name, time scale etc) and DoReadConfiguration
719 * (events attributes), followed by Compile (set up internal data structures). The default label is given by
720 * the member variable mDefaultLabel. Derived classes arte meant to set mDefaultLabel in their constructor and
721 * to reimplement DoReadPreface to cover additional parameters. The pContext parameter is ignored.
722 *
723 * @param rTr
724 * Reference to TokenReader
725 * @param rLabel
726 * Label of section to write, defaults to name of set
727 * @param pContext
728 * Write context to provide contextual information
729 */
730 virtual void DoRead(TokenReader& rTr, const std::string& rLabel = "", const Type* pContext=0);
731
732 /** Default label for token io */
733 std::string mDefaultLabel;
734
735 /** Reads non-event-configuration data from TokenReader
736 *
737 * This function is part of the non-event-configuration token-input mechanism and located at the top
738 * of the class hierarchy. The vDevice will read its name and the time scale, derived classes are meant
739 * to first call the base class method and then read add additional configuration parameters.
740 *
741 * Note: in order to keep the inputfile-layout as easy as possible no label will be used to separate
742 * this data-section. Never the less a default-label ("Device") is specified.
743 *
744 * @param rTr
745 * TokenReader to write
746 * @param rLabel
747 * Section to read
748 * @param pContext
749 * Provide contextual information
750 *
751 */
752 virtual void DoReadPreface(TokenReader& rTr, const std::string& rLabel = "", const Type* pContext=0);
753
754 /** Reads event-configuration data from TokenReader
755 *
756 * This function is part of the token-input mechanism and reads the device-specific event-configuration.
757 * It uses the virtual interface of TBaseSet to figure the actual attribute type. The section defaults to
758 * "EventConfiguration".
759 *
760 * @param rTr
761 * TokenReader to read
762 * @param rLabel
763 * Section to read
764 * @param pContext
765 Provide contextual information
766 * */
767 virtual void DoReadConfiguration(TokenReader& rTr, const std::string& rLabel = "", const Type* pContext=0);
768
769 /** Name */
770 std::string mName;
771
772 /** Overall event configuration (uses cast for type) */
774
775 /** All inputs */
777
778 /** All outputs */
780
781 /** Status: running, starting etc */
783
784 /** Default Wait Condition Mutex */
785 faudes_mutex_t mWaitMutex;
786
787 /** Default Wait Condition */
788 faudes_cond_t mWaitCondition;
789
790 /** Actual Wait Condition Mutex*/
791 faudes_mutex_t* pWaitMutex;
792
793 /** Actual Wait Condition */
794 faudes_cond_t* pWaitCondition;
795
796 /** physical timepoint zero */
797 faudes_systime_t mTimeZero;
798
799 /** FauDES-time: scaling factor in ms/ftu */
801
802 /** Toleance for time sync */
804
805 /** Default Fifo buffer for input readings */
806 std::deque<Idx> mInputBuffer;
807
808 /** Actual Fifo buffer for input readings */
809 std::deque<Idx>* pInputBuffer;
810
811 /** Default mutex for input buffer (mutexted) */
812 faudes_mutex_t mBufferMutex;
813
814 /** Actual mutex for input buffer (mutexted) */
815 faudes_mutex_t* pBufferMutex;
816
817 /** Reset request marker (mutexed) */
819
820 /**
821 * convert duration from fauDES-time units to ms
822 *
823 */
824 virtual long int FtuToMs(Time::Type faudes_time);
825
826 /**
827 * convert duration in ms to faudes-time units
828 *
829 */
830 virtual Time::Type MsToFtu(long int real_time);
831
832
833#ifdef FAUDES_DEBUG_IOPERF
834
835 /** Filename for performance log */
836#define FAUDES_DEBUG_IOPERF_LOG "tmp_ioperformance.txt"
837
838 /** Structures to store time-samples in */
839 faudes_systime_t* mpPerformanceWaitEnter;
840 faudes_systime_t* mpPerformanceWaitExit;
841
842 /** Global iterator */
845
846#endif
847
848 private:
849
850 // track all devices (initialize on first use construct)
851 static std::set<vDevice*>& AllDevices(void);
852
853}; // end class vDevice
854
855
856
857} // namespace faudes
858
859
860#endif
861
#define FAUDES_API
#define FAUDES_TYPE_DECLARATION(ftype, ctype, cbase)
Definition cfl_types.h:918
const AttributeVoid * pOutputPrototype
const AttributeVoid * Outputp(void) const
virtual void Output(const AttributeVoid &rOutputAttribute)
const AttributeVoid * Inputp(void) const
virtual void Input(const AttributeVoid &rInputAttribute)
const AttributeVoid * pInputPrototype
virtual void ReadInput(TokenReader &rTr)
bool IsOutput(void) const
Definition iop_vdevice.h:91
AttributeVoid * mpInputAttribute
AttributeVoid * mpOutputAttribute
virtual bool IsDefault(void) const
Definition iop_vdevice.h:88
virtual void ReadOutput(TokenReader &rTr)
int mPerformanceBeginIterator
Time::Type mMaxSyncGap
faudes_systime_t mTimeZero
faudes_mutex_t * pBufferMutex
faudes_cond_t mWaitCondition
virtual vDevice * New(void) const =0
faudes_systime_t * mpPerformanceWaitEnter
std::string mDefaultLabel
faudes_cond_t * pWaitCondition
virtual void TimeScale(unsigned int scale)
faudes_mutex_t mWaitMutex
virtual std::string EStr(Idx ev)
virtual DeviceState Status(void)
EventSet * mpConfiguration
EventSet mOutputs
virtual void WriteOutput(Idx output)=0
std::deque< Idx > mInputBuffer
Time::Type Tolerance(void)
faudes_mutex_t * pWaitMutex
std::string mName
std::deque< Idx > * pInputBuffer
virtual vDevice * NewCpy(void) const =0
faudes_systime_t * mpPerformanceWaitExit
int mPerformanceEndIterator
DeviceState mState
void Tolerance(Time::Type maxgap)
faudes_mutex_t mBufferMutex
virtual int TimeScale(void)
uint32_t Idx

libFAUDES 2.34e --- 2026.03.16 --- c++ api documentaion by doxygen