Pogosim
Loading...
Searching...
No Matches
spogobot.h
Go to the documentation of this file.
1#ifndef POGOBOT_H
2#define POGOBOT_H
3
4#include <stddef.h> /* size_t */
5#include <stdint.h> /* uint8_t and friends */
6#include <stdio.h>
7#include <stdlib.h>
8#include <string.h>
9#include <time.h>
10#include <stdbool.h>
11
12#include "FifoBuffer.h"
13
14// Create a macro to specify that we are using a simulator, and not real Pogobots
15#define SIMULATOR
16
17// Rename the main function from the robot code. The simulator uses a different main function.
18#define main robot_main
19
20#ifdef __cplusplus
21extern "C" {
22#endif
23
24
25
26/************************* POGOLIB API ************************ {{{1 */
27
28#define IR_RX_COUNT 4
29
30
34
46void pogobot_init(void);
47
52
53#ifndef MAX_PAYLOAD_SIZE_BYTES
54#define MAX_PAYLOAD_SIZE_BYTES 382
55#endif /* MAX_PAYLOAD_SIZE_BYTES */
56
61
62#ifndef MAX_NUMBER_OF_WORD
63#define MAX_NUMBER_OF_WORD 20
64#endif /* MAX_NUMBER_OF_WORD */
65
74
75#define pogobot_infrared_emitter_power_max 3
76#define pogobot_infrared_emitter_power_twoThird 2
77#define pogobot_infrared_emitter_power_oneThird 1
78#define pogobot_infrared_emitter_power_null 0
79
80#define pogobot_infrared_emitter_width_bits 2
81
82#define pogobot_infrared_emitting_power_list( front, right, back, left ) \
83 ( front ) | ( ( right ) << ( pogobot_infrared_emitter_width_bits ) ) | \
84 ( ( back ) << ( 2 * pogobot_infrared_emitter_width_bits ) ) | \
85 ( ( left ) << ( 3 * pogobot_infrared_emitter_width_bits ) )
86
87#define get_infrared_emitter_dir(dir, emitting_power_list) (((emitting_power_list) >> ((pogobot_infrared_emitter_width_bits) * (dir))) & 0x03)
88
89enum
90{
105 ( 1 << ( 2 * pogobot_infrared_emitter_width_bits ) ) |
106 ( 1 << ( 3 * pogobot_infrared_emitter_width_bits ) ) ) ),
107};
108
109/*static inline uint8_t
110pogobot_infrared_emitter_byindex(uint8_t index)
111{
112 return (1<<index)
113};*/
114
115/* Private, implementation part */
116
117#define pogobot_infrared_emitter_front_mask ( 1 << 0 )
118#define pogobot_infrared_emitter_right_mask ( 1 << 8 )
119#define pogobot_infrared_emitter_back_mask ( 1 << 16 )
120#define pogobot_infrared_emitter_left_mask ( 1 << 24 )
121
122#define pogobot_infrared_emitter_mask_byindex( index ) ( 1 << ( 8 * index ) )
123
125{
126 uint32_t number;
127 struct
128 {
129 uint8_t front;
130 uint8_t left;
131 uint8_t back;
132 uint8_t right;
134 uint8_t array[4];
136
137
147typedef enum
148{
155
156
157// From pogolib/slip.h in pogobot repository
164
165
166
167/* ******************************** ******************************** */
168
184
194
203
209
221
227
236
242
251
252typedef enum
253{
254 ir_t_cmd = 1, // only to send command to the robot
255 ir_t_flash = 2, // only to send part of the prog
256 ir_t_short = 3, // only to send short header message
257 ir_t_user = 16 // userspace
259
260
261/* ******************************** ******************************** */
262
263/* fifo */
264
265#define NUMEL 20
267
268extern Messagefifo my_mes_fifo;
269extern Messagefifo *my_mes_fifo_p;
270
271/* ******************************** ******************************** */
272
276
288void pogobot_infrared_ll_init( void );
289
300void pogobot_infrared_update( void );
301
313
325
337
347void pogobot_infrared_set_power( uint8_t power );
348
361uint32_t pogobot_infrared_sendRawLongMessage( message_t *const message );
362
377
391uint32_t pogobot_infrared_sendLongMessage_uniSpe( ir_direction dir, uint8_t *message, uint16_t message_size );
392
406uint32_t pogobot_infrared_sendLongMessage_omniGen( uint8_t *message, uint16_t message_size );
407
422uint32_t pogobot_infrared_sendLongMessage_omniSpe( uint8_t *message, uint16_t message_size );
423
424
438uint32_t pogobot_infrared_sendShortMessage_uni( ir_direction dir, uint8_t *message, uint16_t message_size );
439
452uint32_t pogobot_infrared_sendShortMessage_omni( uint8_t *message, uint16_t message_size );
453
454
465void pogobot_infrared_get_receiver_error_counter( slip_error_counter_s *error_counter, uint8_t ir_index );
466
478
482
496void pogobot_led_setColor(const uint8_t r, const uint8_t g, const uint8_t b);
497
498
514void pogobot_led_setColors(const uint8_t r, const uint8_t g, const uint8_t b, uint8_t id);
515
516
520
527
528typedef enum
529{
530 p_FL = 1,
531 p_FR = 2,
532 p_B = 0
534
535
539
550int16_t pogobot_photosensors_read( uint8_t sensor_number );
551
552
556
577void pogobot_imu_read( float *acc, float *gyro );
578
588float pogobot_imu_readTemp( void );
589
590
594
604int16_t pogobot_battery_voltage_read( void );
605
609
617
618typedef enum
619{
620 motorR = 0, // Right
621 motorL = 1, // Left
622 motorB = 2 // Back
623} motor_id;
624
633
634typedef enum
635{
642
643
647
659void pogobot_motor_power_set( motor_id motor, uint16_t value );
660void pogobot_motor_set ( motor_id motor, uint16_t value );
661
672uint32_t pogobot_motor_dir_current_status( void );
673
685int8_t pogobot_motor_dir_mem_get( uint8_t *p_directions );
686
698int8_t pogobot_motor_dir_mem_set( uint8_t *p_directions);
699
711void pogobot_motor_dir_set( motor_id motor, uint8_t value );
712
724uint8_t pogobot_motor_power_mem_get( uint16_t *p_powers );
725
737uint8_t pogobot_motor_power_mem_set( uint16_t *p_powers );
738
739
740
744
755uint16_t pogobot_helper_getid(void);
756
767int16_t pogobot_helper_getRandSeed( void );
768
781
782
786
787
848
861
871// Original Pogobot.h struct:
872//typedef struct time_reference_t
873//{
874// uint32_t hardware_value_at_time_origin;
875//} time_reference_t;
876
877typedef struct time_reference_t {
878#ifdef __cplusplus
879 void reset();
880 uint32_t get_elapsed_microseconds();
881 void enable();
882 void disable();
883 void add_elapsed_microseconds(uint64_t microseconds);
884 void offset_origin_microseconds(uint64_t microseconds);
885#endif
886
889 //std::chrono::time_point<std::chrono::system_clock> start_time;
890 uint64_t start_time;
891 uint32_t elapsed_ms;
893
894
907
918int32_t pogobot_stopwatch_lap( time_reference_t *stopwatch );
919
931
943void pogobot_stopwatch_offset_origin_microseconds( time_reference_t *stopwatch, int32_t microseconds_offset );
944
956void pogobot_timer_init( time_reference_t *timer, int32_t microseconds_to_go );
957
969
981
993
1005void pogobot_timer_offset_origin_microseconds( time_reference_t *timer, int32_t microseconds_offset );
1006
1007
1008#ifdef __cplusplus
1009}
1010#endif
1011
1012
1013/************************* General API ************************ {{{1 */
1014
1015#ifdef __cplusplus
1016extern "C" {
1017#endif
1018
1019void msleep(int milliseconds);
1020void pogosim_printf(const char* format, ...);
1021int pogosim_putchar(int ch);
1022
1030uint32_t get_nb_robots(void);
1031
1036void stop_simulation(void);
1037
1038void data_add_column_int8(char const* name);
1039void data_add_column_int16(char const* name);
1040void data_add_column_int32(char const* name);
1041void data_add_column_int64(char const* name);
1042void data_add_column_double(char const* name);
1043void data_add_column_string(char const* name);
1044void data_add_column_bool(char const* name);
1045void data_add_column_float16(char const* name);
1046
1047void enable_data_export(void);
1048void disable_data_export(void);
1049
1050void data_set_value_int8(char const* name, int8_t value);
1051void data_set_value_int16(char const* name, int16_t value);
1052void data_set_value_int32(char const* name, int32_t value);
1053void data_set_value_int64(char const* name, int64_t value);
1054void data_set_value_double(char const* name, double value);
1055void data_set_value_string(char const* name, char const* value);
1056void data_set_value_bool(char const* name, bool value);
1057void data_set_value_float16(char const* name, float value);
1058
1059void init_bool_from_configuration(bool* var, char const* name, bool const default_value);
1060void init_double_from_configuration(double* var, char const* name, double const default_value);
1061void init_float_from_configuration(float* var, char const* name, float const default_value);
1062void init_int32_from_configuration(int32_t* var, char const* name, int32_t const default_value);
1063void init_uint32_from_configuration(uint32_t* var, char const* name, uint32_t const default_value);
1064void init_int16_from_configuration(int16_t* var, char const* name, int16_t const default_value);
1065void init_uint16_from_configuration(uint16_t* var, char const* name, uint16_t const default_value);
1066void init_int8_from_configuration(int8_t* var, char const* name, int8_t const default_value);
1067void init_uint8_from_configuration(uint8_t* var, char const* name, uint8_t const default_value);
1068void init_float_array_from_configuration(float* var, char const* name, size_t const size);
1069void init_double_array_from_configuration(double* var, char const* name, size_t const size);
1070void init_string_from_configuration(char *var, char const *name, size_t const size);
1071
1072#ifdef __cplusplus
1073}
1074#endif
1075
1076// Generic variable initialization from configuration (only from C code)
1077#ifndef __cplusplus
1078#define init_from_configuration(x) \
1079 _Generic ((x), \
1080 bool: init_bool_from_configuration, \
1081 double: init_double_from_configuration, \
1082 float: init_float_from_configuration, \
1083 int32_t: init_int32_from_configuration, \
1084 uint32_t: init_uint32_from_configuration, \
1085 int16_t: init_int16_from_configuration, \
1086 uint16_t: init_uint16_from_configuration, \
1087 int8_t: init_int8_from_configuration, \
1088 uint8_t: init_uint8_from_configuration \
1089 )(&(x), #x, (x))
1090
1091#define init_array_from_configuration(a) \
1092 _Generic (&(a), \
1093 float (*)[] : init_float_array_from_configuration, \
1094 double (*)[] : init_double_array_from_configuration, \
1095 char (*)[] : init_string_from_configuration \
1096 )((a), #a, sizeof(a) / sizeof((a)[0]))
1097#endif
1098
1099// Define custom printf as the default in files including pogosim.h
1100#define printf pogosim_printf
1101#define putchar pogosim_putchar
1102
1103
1104#endif
1105
1106// MODELINE "{{{1
1107// vim:expandtab:softtabstop=4:shiftwidth=4:fileencoding=utf-8
1108// vim:foldmethod=marker
#define FifoBuffer_typedef(T, NAME)
Definition FifoBuffer.h:14
photosensor_id
Definition spogobot.h:529
@ p_B
Definition spogobot.h:532
@ p_FL
Definition spogobot.h:530
@ p_FR
Definition spogobot.h:531
#define pogobot_infrared_emitter_power_max
Definition spogobot.h:75
void pogobot_timer_init(time_reference_t *timer, int32_t microseconds_to_go)
Definition spogobot.cpp:437
Messagefifo my_mes_fifo
motor_range
Definition spogobot.h:635
@ motorFull
Definition spogobot.h:640
@ motorThreeQuarter
Definition spogobot.h:639
@ motorHalf
Definition spogobot.h:638
@ motorQuarter
Definition spogobot.h:637
@ motorStop
Definition spogobot.h:636
uint32_t pogobot_motor_dir_current_status(void)
Definition spogobot.cpp:353
void data_add_column_double(char const *name)
Definition spogobot.cpp:558
uint32_t pogobot_infrared_sendShortMessage_omni(uint8_t *message, uint16_t message_size)
Definition spogobot.cpp:239
void disable_data_export(void)
Definition spogobot.cpp:542
void init_uint16_from_configuration(uint16_t *var, char const *name, uint16_t const default_value)
Definition spogobot.cpp:623
ir_direction
Definition spogobot.h:148
@ ir_back
Definition spogobot.h:151
@ ir_right
Definition spogobot.h:150
@ ir_all
Definition spogobot.h:153
@ ir_left
Definition spogobot.h:152
@ ir_front
Definition spogobot.h:149
int8_t pogobot_motor_dir_mem_set(uint8_t *p_directions)
Definition spogobot.cpp:364
void pogobot_helper_print_version(void)
Definition spogobot.cpp:404
int32_t pogobot_timer_get_remaining_microseconds(time_reference_t *timer)
Definition spogobot.cpp:442
void msleep(int milliseconds)
Definition spogobot.cpp:469
void stop_simulation(void)
Definition spogobot.cpp:534
void data_set_value_int64(char const *name, int64_t value)
Definition spogobot.cpp:580
uint32_t pogobot_infrared_sendShortMessage_uni(ir_direction dir, uint8_t *message, uint16_t message_size)
Definition spogobot.cpp:232
uint32_t pogobot_infrared_sendLongMessage_omniSpe(uint8_t *message, uint16_t message_size)
Definition spogobot.cpp:215
void pogobot_motor_dir_set(motor_id motor, uint8_t value)
Definition spogobot.cpp:369
void data_set_value_string(char const *name, char const *value)
Definition spogobot.cpp:586
void pogobot_motor_set(motor_id motor, uint16_t value)
Definition spogobot.cpp:349
uint8_t pogobot_motor_power_mem_set(uint16_t *p_powers)
Definition spogobot.cpp:380
uint32_t pogobot_infrared_sendRawLongMessage(message_t *const message)
Definition spogobot.cpp:135
int16_t pogobot_helper_getRandSeed(void)
Definition spogobot.cpp:395
void init_double_from_configuration(double *var, char const *name, double const default_value)
Definition spogobot.cpp:602
void data_set_value_float16(char const *name, float value)
Definition spogobot.cpp:592
float pogobot_imu_readTemp(void)
Definition spogobot.cpp:316
void data_add_column_int32(char const *name)
Definition spogobot.cpp:552
void init_uint32_from_configuration(uint32_t *var, char const *name, uint32_t const default_value)
Definition spogobot.cpp:615
int pogosim_putchar(int ch)
Definition spogobot.cpp:524
uint16_t pogobot_helper_getid(void)
Definition spogobot.cpp:391
void data_add_column_float16(char const *name)
Definition spogobot.cpp:567
int16_t pogobot_photosensors_read(uint8_t sensor_number)
Definition spogobot.cpp:279
void pogobot_infrared_recover_next_message(message_t *mes)
Definition spogobot.cpp:113
void pogobot_imu_read(float *acc, float *gyro)
Definition spogobot.cpp:296
void init_int16_from_configuration(int16_t *var, char const *name, int16_t const default_value)
Definition spogobot.cpp:619
int32_t pogobot_stopwatch_get_elapsed_microseconds(time_reference_t *stopwatch)
Definition spogobot.cpp:429
void init_float_from_configuration(float *var, char const *name, float const default_value)
Definition spogobot.cpp:606
void init_int32_from_configuration(int32_t *var, char const *name, int32_t const default_value)
Definition spogobot.cpp:611
uint32_t pogobot_infrared_sendRawShortMessage(ir_direction dir, short_message_t *const message)
Definition spogobot.cpp:184
uint32_t pogobot_infrared_sendLongMessage_omniGen(uint8_t *message, uint16_t message_size)
Definition spogobot.cpp:205
void init_double_array_from_configuration(double *var, char const *name, size_t const size)
Definition spogobot.cpp:692
uint32_t pogobot_infrared_sendLongMessage_uniSpe(ir_direction dir, uint8_t *message, uint16_t message_size)
Definition spogobot.cpp:195
void pogobot_infrared_set_power(uint8_t power)
Definition spogobot.cpp:131
void data_set_value_double(char const *name, double value)
Definition spogobot.cpp:583
void init_int8_from_configuration(int8_t *var, char const *name, int8_t const default_value)
Definition spogobot.cpp:627
void init_uint8_from_configuration(uint8_t *var, char const *name, uint8_t const default_value)
Definition spogobot.cpp:631
void pogobot_stopwatch_reset(time_reference_t *stopwatch)
Definition spogobot.cpp:419
#define pogobot_infrared_emitter_width_bits
Definition spogobot.h:80
int16_t pogobot_battery_voltage_read(void)
Definition spogobot.cpp:331
void enable_data_export(void)
Definition spogobot.cpp:538
uint32_t get_nb_robots(void)
Definition spogobot.cpp:530
void data_set_value_int16(char const *name, int16_t value)
Definition spogobot.cpp:574
int pogobot_infrared_message_available(void)
Definition spogobot.cpp:109
void pogobot_led_setColors(const uint8_t r, const uint8_t g, const uint8_t b, uint8_t id)
Definition spogobot.cpp:269
void data_add_column_int16(char const *name)
Definition spogobot.cpp:549
void data_add_column_bool(char const *name)
Definition spogobot.cpp:564
void data_set_value_int32(char const *name, int32_t value)
Definition spogobot.cpp:577
ir_type_message
Definition spogobot.h:253
@ ir_t_user
Definition spogobot.h:257
@ ir_t_flash
Definition spogobot.h:255
@ ir_t_cmd
Definition spogobot.h:254
@ ir_t_short
Definition spogobot.h:256
#define MAX_PAYLOAD_SIZE_BYTES
Definition spogobot.h:54
@ pogobot_infrared_emitting_power_list_back_full
Definition spogobot.h:96
@ pogobot_infrared_emitting_power_list_front_full
Definition spogobot.h:91
@ pogobot_infrared_emitting_power_list_left_full
Definition spogobot.h:99
@ pogobot_infrared_emitting_power_list_all_full
Definition spogobot.h:102
@ pogobot_infrared_emitting_power_list_right_full
Definition spogobot.h:93
void data_add_column_int64(char const *name)
Definition spogobot.cpp:555
void pogobot_stopwatch_offset_origin_microseconds(time_reference_t *stopwatch, int32_t microseconds_offset)
Definition spogobot.cpp:433
Messagefifo * my_mes_fifo_p
void pogobot_infrared_update(void)
Definition spogobot.cpp:105
void pogosim_printf(const char *format,...)
Definition spogobot.cpp:495
void pogobot_infrared_ll_init(void)
Definition spogobot.cpp:101
void pogobot_infrared_clear_message_queue(void)
Definition spogobot.cpp:123
void init_string_from_configuration(char *var, char const *name, size_t const size)
void data_add_column_string(char const *name)
Definition spogobot.cpp:561
void data_set_value_int8(char const *name, int8_t value)
Definition spogobot.cpp:571
void data_set_value_bool(char const *name, bool value)
Definition spogobot.cpp:589
void pogobot_timer_wait_for_expiry(time_reference_t *timer)
Definition spogobot.cpp:452
int8_t pogobot_motor_dir_mem_get(uint8_t *p_directions)
Definition spogobot.cpp:359
uint8_t pogobot_motor_power_mem_get(uint16_t *p_powers)
Definition spogobot.cpp:375
void pogobot_timer_offset_origin_microseconds(time_reference_t *timer, int32_t microseconds_offset)
Definition spogobot.cpp:460
void pogobot_led_setColor(const uint8_t r, const uint8_t g, const uint8_t b)
Definition spogobot.cpp:264
void init_bool_from_configuration(bool *var, char const *name, bool const default_value)
Definition spogobot.cpp:598
void pogobot_infrared_get_receiver_error_counter(slip_error_counter_s *error_counter, uint8_t ir_index)
Definition spogobot.cpp:250
bool pogobot_timer_has_expired(time_reference_t *timer)
Definition spogobot.cpp:448
void pli_timer_sleep_stopwatch_init(void)
Definition spogobot.cpp:414
void data_add_column_int8(char const *name)
Definition spogobot.cpp:546
motor_id
Definition spogobot.h:619
@ motorR
Definition spogobot.h:620
@ motorL
Definition spogobot.h:621
@ motorB
Definition spogobot.h:622
void init_float_array_from_configuration(float *var, char const *name, size_t const size)
Definition spogobot.cpp:676
void pogobot_motor_power_set(motor_id motor, uint16_t value)
Definition spogobot.cpp:341
void pogobot_init(void)
Definition spogobot.cpp:91
int32_t pogobot_stopwatch_lap(time_reference_t *stopwatch)
Definition spogobot.cpp:423
void pogobot_infrared_reset_receiver_error_counter(void)
Definition spogobot.cpp:255
Definition spogobot.h:186
uint16_t _sender_id
Definition spogobot.h:189
uint8_t _packet_type
Definition spogobot.h:187
uint8_t _emitting_power_list
Definition spogobot.h:188
uint16_t payload_length
Definition spogobot.h:192
uint8_t _receiver_ir_index
Definition spogobot.h:191
uint8_t _sender_ir_index
Definition spogobot.h:190
Definition spogobot.h:223
uint8_t _packet_type
Definition spogobot.h:224
uint16_t payload_length
Definition spogobot.h:225
Definition spogobot.h:205
message_header_t header
Definition spogobot.h:206
uint8_t payload[MAX_PAYLOAD_SIZE_BYTES]
Definition spogobot.h:207
Definition spogobot.h:238
message_short_header_t header
Definition spogobot.h:239
uint8_t payload[MAX_PAYLOAD_SIZE_BYTES]
Definition spogobot.h:240
Definition spogobot.h:159
uint32_t unknown_escaped_byte_counter
Definition spogobot.h:161
uint32_t crc_mismatch_counter
Definition spogobot.h:162
uint32_t overflow_counter
Definition spogobot.h:160
Definition spogobot.h:877
uint32_t elapsed_ms
Definition spogobot.h:891
uint64_t start_time
Definition spogobot.h:890
bool enabled
Definition spogobot.h:888
uint32_t hardware_value_at_time_origin
Definition spogobot.h:887
Definition spogobot.h:125
uint8_t back
Definition spogobot.h:131
uint8_t right
Definition spogobot.h:132
uint8_t array[4]
Definition spogobot.h:134
struct emitting_power_list_t::@250061334135076261050064362000365057264236024353 fields
uint32_t number
Definition spogobot.h:126
uint8_t left
Definition spogobot.h:130
uint8_t front
Definition spogobot.h:129