16#if defined(__GNUC__) || defined(__clang__)
18#define STATIC_STRCMP(a,b) __builtin_strcmp(a,b)
21#define STATIC_STRCMP(a,b) strcmp(a,b)
23#define STRINGIFY_RAW(x) #x
24#define STRINGIFY(x) STRINGIFY_RAW(x)
31#define DECLARE_USERDATA(UDT) \
34#define REGISTER_USERDATA(UDT) \
35 size_t UserdataSize = sizeof(UDT); \
38#define SET_CALLBACK(CALLBACK_FN, FN) \
51#define ROBOT_CATEGORY robots
57 #define DECLARE_USERDATA(UDT) \
58 extern UDT myuserdata; \
59 static inline constexpr UDT * get_mydata(void) noexcept { return &myuserdata; }
62 #define DECLARE_USERDATA(UDT) \
63 extern UDT myuserdata; \
64 static inline UDT * restrict get_mydata(void) { return &myuserdata; }
70#define mydata (get_mydata())
72#define REGISTER_USERDATA(UDT) \
75#define SET_CALLBACK(CALLBACK_FN, FN)
109#define GET_MACRO_START(_1, _2, _3, NAME, ...) NAME
115void _pogobot_start(
void (*user_init)(
void),
void (*user_step)(
void),
const char *object_category);
116#define pogobot_start_2(user_init, user_step) \
117 _pogobot_start((user_init), (user_step), "robots")
119#define pogobot_start_3(user_init, user_step, object_category) \
120 _pogobot_start((user_init), (user_step), (object_category))
122#define pogobot_start(...) GET_MACRO_START(__VA_ARGS__, pogobot_start_3, pogobot_start_2)(__VA_ARGS__)
125#define get_current_robot_category() (STRINGIFY(ROBOT_CATEGORY))
126#define current_robot_category_is(category) (STATIC_STRCMP(get_current_robot_category(), category)==0)
128void _pogobot_start(
void (*user_init)(
void),
void (*user_step)(
void));
129#define pogobot_start_2(user_init, user_step) \
131 if (current_robot_category_is("robots")) { \
132 _pogobot_start((user_init), (user_step)); \
136#define pogobot_start_3(user_init, user_step, object_category) \
138 if (current_robot_category_is(object_category)) { \
139 _pogobot_start((user_init), (user_step)); \
143#define pogobot_start(...) GET_MACRO_START(__VA_ARGS__, pogobot_start_3, pogobot_start_2)(__VA_ARGS__)
void(* msg_rx_fn)(message_t *)
Definition pogosim.c:14
time_reference_t _global_timer
Definition pogosim.c:20
uint32_t nb_msgs_recv
Definition pogosim.c:25
uint8_t main_loop_hz
Definition pogosim.c:12
void(* callback_create_data_schema)(void)
Definition pogosim.c:6
uint32_t pogobot_ticks
Definition pogosim.c:17
void(* callback_global_step)(void)
Definition pogosim.c:9
uint8_t max_nb_processed_msg_per_tick
Definition pogosim.c:13
uint32_t _current_time_milliseconds
Definition pogosim.c:18
uint32_t nb_msgs_sent
Definition pogosim.c:24
bool(* msg_tx_fn)(void)
Definition pogosim.c:15
void(* callback_global_setup)(void)
Definition pogosim.c:8
uint8_t percent_msgs_sent_per_ticks
Definition pogosim.c:23
int8_t error_codes_led_idx
Definition pogosim.c:16
uint32_t _error_code_initial_time
Definition pogosim.c:19
time_reference_t timer_main_loop
Definition pogosim.c:21
void(* callback_export_data)(void)
Definition pogosim.c:7
const char * get_current_robot_category(void)
Definition pogosim_sim.cpp:17
error_code_t
Definition pogosim.h:103
@ error_code_t_last_entry
Definition pogosim.h:105
@ ERROR_TIME_OVERFLOW
Definition pogosim.h:104
uint32_t current_time_milliseconds(void)
Definition pogosim.c:78
void clear_IR_buffers(void)
Definition pogosim.c:28
void default_walls_user_step(void)
Main control loop for the Pogowalls.
Definition pogosim.c:189
void default_walls_user_init(void)
Initialization function for the pogowalls.
Definition pogosim.c:169
void display_led_error_code(error_code_t const c)
Definition pogosim.c:84
bool current_robot_category_is(const char *category)
Definition pogosim_sim.cpp:21
void pogo_main_loop_step(void(*user_step)(void))
Definition pogosim.c:96
void _pogobot_start(void(*user_init)(void), void(*user_step)(void), const char *object_category)
Definition pogosim_sim.cpp:7
Definition spogobot.h:205
Definition spogobot.h:877