auto_init_utils.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2022 Otto-von-Guericke-Universität Magdebug
3  *
4  * This file is subject to the terms and conditions of the GNU Lesser
5  * General Public License v2.1. See the file LICENSE in the top level
6  * directory for more details.
7  */
8 
27 #ifndef AUTO_INIT_UTILS_H
28 #define AUTO_INIT_UTILS_H
29 
30 #include <stdint.h>
31 #include "xfa.h"
32 #include "macros/xtstr.h"
33 #include "modules.h"
34 #if IS_USED(MODULE_PREPROCESSOR_SUCCESSOR)
35 #include "preprocessor_successor.h"
36 #endif
37 
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41 
42 #ifndef CONFIG_AUTO_INIT_ENABLE_DEBUG
46 #define CONFIG_AUTO_INIT_ENABLE_DEBUG 0
47 #endif
48 
52 typedef void (*auto_init_fn_t)(void);
53 
57 typedef uint16_t auto_init_prio_t;
58 
62 typedef struct {
64 #if IS_ACTIVE(CONFIG_AUTO_INIT_ENABLE_DEBUG) || defined(DOXYGEN)
66  const char *name;
67 #endif
69 
70 #if IS_ACTIVE(CONFIG_AUTO_INIT_ENABLE_DEBUG) || defined(DOXYGEN)
77 #define AUTO_INIT(function, priority) \
78  XFA_CONST(auto_init_module_t, auto_init_xfa, priority) \
79  auto_init_xfa_ ## function \
80  = { .init = (auto_init_fn_t)function, \
81  .prio = priority, \
82  .name = XTSTR(function) }
83 #else
84 #define AUTO_INIT(function, priority) \
85  XFA_CONST(auto_init_module_t, auto_init_xfa, priority) \
86  auto_init_xfa_ ## function \
87  = { .init = (auto_init_fn_t)function }
88 #endif
89 
94 #define AUTO_INIT_PRIORITY_AFTER(priority) RIOT_PP_SUCCESSOR(priority)
95 
96 #ifdef __cplusplus
97 }
98 #endif
99 
100 #endif /* AUTO_INIT_UTILS_H */
void(* auto_init_fn_t)(void)
Auto-init function type.
uint16_t auto_init_prio_t
Data type to store the priority of a module.
Common macros and compiler attributes/pragmas configuration.
Type to represent a module to be auto-initialized.
auto_init_prio_t prio
Module priority.
const char * name
Module auto-init function name.
auto_init_fn_t init
Function to initialize the module.
Cross File Arrays.
Macro to return string representation of x.