agileRTOS (zrtos)  Version 0.8.0 (ghostbuster)
event_index.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2024 ykat UG (haftungsbeschraenkt) - All Rights Reserved
3  *
4  * Permission for non-commercial use is hereby granted,
5  * free of charge, without warranty of any kind.
6  */
7 #ifndef ZRTOS_EVENT_INDEX_H
8 #define ZRTOS_EVENT_INDEX_H
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
13 
14 #include <zrtos/types.h>
15 #include <zrtos/progmem.h>
16 #include <zrtos/event_type.h>
17 #include <zrtos/event_handler.h>
18 #include <zrtos/event.h>
19 
20 //#define ZRTOS_EVENT_INDEX__CFG_ENABLE_PROGMEM
21 #define ZRTOS_EVENT_INDEX(name,...) \
22 zrtos_event_handler_t name[] ZRTOS_PROGMEM = { \
23  __VA_ARGS__ \
24  ,{} \
25 };
26 
28 
30  zrtos_event_index_t *thiz
31  ,zrtos_event_type_t type
32  ,void *data
33 ){
34  zrtos_event_t event;
36  &event
37  ,type
38  ,data
39  )){
40 #ifndef ZRTOS_EVENT_INDEX__CFG_ENABLE_PROGMEM
42  for(;handler->callback;handler++){
43  if(zrtos_event_type__is_any(&handler->type)
44  || 0 == zrtos_event_type__cmp(&handler->type,&event.type)){
45  if(!handler->callback(handler,&event)){
46  break;
47  }
48  }
49  }
50  return true;
51 #else
52  zrtos_event_handler_t *phandler = (zrtos_event_handler_t *)thiz;
53  while(1){
54  zrtos_event_handler_t handler;
55  zrtos_progmem__cpy(&handler,phandler++,sizeof(zrtos_event_handler_t));
56  if(handler.callback){
57  if(zrtos_event_type__is_any(&handler.type)
58  || 0 == zrtos_event_type__cmp(&handler.type,&event.type)){
59  if(!handler.callback(&handler,&event)){
60  break;
61  }
62  }
63  }else{
64  break;
65  }
66  }
67  return true;
68 #endif
69  }
70  return false;
71 }
72 
73 
74 #ifdef __cplusplus
75 }
76 #endif
77 #endif
bool zrtos_event_type__cmp(zrtos_event_type_t *a, zrtos_event_type_t *b)
Definition: event_type.h:17
bool zrtos_event_index__invoke(zrtos_event_index_t *thiz, zrtos_event_type_t type, void *data)
Definition: event_index.h:29
zrtos_event_type_t type
Definition: event_handler.h:26
bool zrtos_progmem__cpy(void *dest, void *src, size_t len)
Definition: progmem.h:17
zrtos_event_type_t type
Definition: event.h:20
zrtos_event_handler_callback_t callback
Definition: event_handler.h:25
bool zrtos_event__init(zrtos_event_t *thiz, zrtos_event_type_t type, void *data)
Definition: event.h:24
bool zrtos_event_type__is_any(zrtos_event_type_t *thiz)
Definition: event_type.h:21
zrtos_event_handler_t zrtos_event_index_t
Definition: event_index.h:27