TEMU  3.0
The Terma Emulator
Events.h
Go to the documentation of this file.
1 //===-- temu-c/Events.h - Event Queue API -----------------------*- C++ -*-===//
2 //
3 // TEMU: The Terma Emulator
4 // (c) Terma 2015, 2016
5 // Authors: Mattias Holm <maho (at) terma.com>
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef TEMU_EVENTS_H
10 #define TEMU_EVENTS_H
11 
12 #include <stdint.h>
13 #include "temu-c/Support/Objsys.h"
15 #ifdef __cplusplus
16 extern "C" {
17 #endif
18 
19 
20 // New style events
22 
23 typedef struct temu_Event {
24  int64_t Time;
25  int64_t EventId;
26  uint32_t Flags;
27  int QueueIdx;
29  void *Obj;
30  void (*Func)(struct temu_Event*);
32  int64_t Period;
33  int64_t RTTime;
34  int64_t RTPeriod;
35 } temu_Event;
36 
38 typedef void (*temu_ThreadSafeCb)(void*);
39 
40 
41 typedef struct {
43  void (*postCallback)(void *Obj, temu_ThreadSafeCb Cb, void *Arg);
45  void (*removeCallback)(void *Obj, temu_ThreadSafeCb Cb, void *Arg);
46 
48  void (*postAbsolute)(void *Obj, int64_t EvId, int64_t T);
50  void (*postRelative)(void *Obj, int64_t EvId, int64_t T);
52  void (*postOnStack)(void *Obj, int64_t EvId);
54 #define TEMU_EVENT_IFACE_TYPE "temu::EventIface"
56 
68 TEMU_API int64_t temu_eventPublishStruct(const char *EvName, temu_Event *Ev, void *Obj,
69  void (*Func)(temu_Event*));
70 
77 TEMU_API void temu_eventDepublish(int64_t EvID);
78 
99 TEMU_API int64_t temu_eventPublish(const char *EvName, void *Obj,
100  void (*Func)(temu_Event*));
101 
102 // Synchronisation events
103 typedef enum {
104  teSE_Cpu, // Trigger event when CPU reaches timer
105  teSE_Machine, // Synchronise event on machine
107 
122 TEMU_API void temu_eventPostCycles(void *Q, int64_t EvID, int64_t Delta,
123  temu_SyncEvent Sync);
134 TEMU_API void temu_eventPostNanos(void *Q, int64_t EvID, int64_t Delta,
135  temu_SyncEvent Sync);
145 TEMU_API void temu_eventPostSecs(void *Q, int64_t EvID, double Delta,
146  temu_SyncEvent Sync);
147 
160 TEMU_API void temu_eventPostStack(void *Q, int64_t EvID, temu_SyncEvent Sync);
161 
170 TEMU_API int temu_eventIsScheduled(int64_t EvID);
171 
177 TEMU_API void temu_eventDeschedule(int64_t EvID);
178 
186 TEMU_API int64_t temu_eventGetCycles(void *Q, int64_t EvID);
187 
195 TEMU_API int64_t temu_eventGetNanos(void *Q, int64_t EvID);
196 
204 TEMU_API double temu_eventGetSecs(void *Q, int64_t EvID);
205 
206 
207 //======================== EXPERIMENTAL API ==================================//
209 #define TEMU_ASYNC_CYCLIC 1
210 #define TEMU_ASYNC_READ (1 << 1)
211 #define TEMU_ASYNC_WRITE (1 << 2)
212 
242 TEMU_API int temu_asyncTimerAdd(void *Q, double T,
243  unsigned Flags, void (*CB)(void*),
244  void *Data);
245 
251 TEMU_API void temu_asyncTimerRemove(int Fd);
252 
269 TEMU_API int temu_asyncSocketAdd(void *Q, int Sock, unsigned Flags,
270  void (*CB)(void*),
271  void *Data);
272 
279 TEMU_API void temu_asyncSocketRemove(int Fd, unsigned Flags);
280 
289 TEMU_API void temu_eventPostAsync(void *Q, temu_ThreadSafeCb CB, void *Data,
290  temu_SyncEvent Sync);
291 
292 
323 TEMU_API int temu_eventSetRealTime(int64_t EvID);
324 
325 
339 TEMU_API void temu_eventSetPeriodCycles(int64_t EvID, int64_t Period);
340 
348 TEMU_API void temu_eventSetRTPeriodNanos(int64_t EvID, int64_t Period);
349 
360 TEMU_API void temu_eventSetRTTime(int64_t EvID, int64_t Time);
361 
365 TEMU_API uint64_t temu_eventQueueGetFreq(void *Q);
366 
367 //================= END OF EXPERIMENTAL API ==================================//
368 
369 #ifdef __cplusplus
370 }
371 #endif
372 
373 #endif /* ! TEMU_EVENTS_H */
TEMU_API void temu_eventDeschedule(int64_t EvID)
struct temu_EventQueue temu_EventQueue
Definition: Events.h:21
TEMU_API int temu_asyncSocketAdd(void *Q, int Sock, unsigned Flags, void(*CB)(void *), void *Data)
TEMU_API int64_t temu_eventPublish(const char *EvName, void *Obj, void(*Func)(temu_Event *))
TEMU_API int temu_eventIsScheduled(int64_t EvID)
temu_EventQueue * Queue
Managed internally, do not touch.
Definition: Events.h:28
Definition: Events.h:41
Definition: Events.h:23
int64_t Time
Managed internally, do not touch.
Definition: Events.h:24
TEMU_API void temu_eventPostCycles(void *Q, int64_t EvID, int64_t Delta, temu_SyncEvent Sync)
TEMU_API int temu_eventSetRealTime(int64_t EvID)
uint32_t Flags
Internal use, do not touch.
Definition: Events.h:26
Definition: Events.h:104
TEMU_API void temu_eventPostAsync(void *Q, temu_ThreadSafeCb CB, void *Data, temu_SyncEvent Sync)
TEMU_API int64_t temu_eventGetNanos(void *Q, int64_t EvID)
TEMU_API int64_t temu_eventPublishStruct(const char *EvName, temu_Event *Ev, void *Obj, void(*Func)(temu_Event *))
TEMU_API int64_t temu_eventGetCycles(void *Q, int64_t EvID)
#define TEMU_API
Definition: Attributes.h:53
int64_t EventId
Managed internally, do not touch.
Definition: Events.h:25
TEMU_API void temu_eventSetPeriodCycles(int64_t EvID, int64_t Period)
temu_SyncEvent
Definition: Events.h:103
TEMU_API uint64_t temu_eventQueueGetFreq(void *Q)
TEMU_API void temu_eventPostStack(void *Q, int64_t EvID, temu_SyncEvent Sync)
int64_t RTPeriod
Managed: Period (ns) for RT events.
Definition: Events.h:34
TEMU_API void temu_asyncSocketRemove(int Fd, unsigned Flags)
int QueueIdx
Managed internally, do not touch.
Definition: Events.h:27
TEMU_IFACE_REFERENCE_TYPE(temu_Event)
TEMU_API double temu_eventGetSecs(void *Q, int64_t EvID)
struct temu_Event temu_Event
TEMU_API int temu_asyncTimerAdd(void *Q, double T, unsigned Flags, void(*CB)(void *), void *Data)
TEMU_API void temu_eventPostNanos(void *Q, int64_t EvID, int64_t Delta, temu_SyncEvent Sync)
TEMU_API void temu_eventSetRTTime(int64_t EvID, int64_t Time)
void * Obj
Definition: Events.h:29
TEMU_API void temu_eventPostSecs(void *Q, int64_t EvID, double Delta, temu_SyncEvent Sync)
int64_t RTTime
Managed: Time (monotonic ns) for RT exec.
Definition: Events.h:33
TEMU_API void temu_eventSetRTPeriodNanos(int64_t EvID, int64_t Period)
int64_t Period
Managed: Period (cycles) for cyclic events.
Definition: Events.h:32
TEMU_API void temu_asyncTimerRemove(int Fd)
void(* Func)(struct temu_Event *)
Event callback.
Definition: Events.h:31
Definition: Events.h:105
TEMU_API void temu_eventDepublish(int64_t EvID)
void(* temu_ThreadSafeCb)(void *)
Posting callback from other threads.
Definition: Events.h:38