vt100: include pgmspace.h as we use PROGMEM macro
[aversive.git] / projects / microb2010 / mainboard / strat_utils.h
index f314b0e..5c7b8e9 100644 (file)
@@ -42,6 +42,27 @@ struct xy_point {
                __err;                                                  \
        })                                                              \
 
+#define WAIT_COND_OR_TE_TO(cond, mask, timeout)                                \
+       ({                                                              \
+               microseconds __us = time_get_us2();                     \
+               uint8_t __ret = 0;                                      \
+               while ( (! (cond)) && (__ret == 0)) {                   \
+                       __ret = test_traj_end(mask);                    \
+                       if (time_get_us2() - __us > (timeout)*1000L) {  \
+                               __ret = 0;                              \
+                               break;                                  \
+                       }                                               \
+               }                                                       \
+               if (!__ret)                                             \
+                       DEBUG(E_USER_STRAT, "cond / timeout at line %d", \
+                             __LINE__);                                \
+               else                                                    \
+                       DEBUG(E_USER_STRAT, "got %s (%d) at line %d",   \
+                             get_err(__ret), __ret, __LINE__);         \
+                                                                       \
+               __ret;                                                  \
+       })
+
 int16_t distance_between(int16_t x1, int16_t y1, int16_t x2, int16_t y2);
 int32_t quad_distance_between(int16_t x1, int16_t y1, int16_t x2, int16_t y2);
 int16_t distance_from_robot(int16_t x, int16_t y);
@@ -57,6 +78,8 @@ uint8_t robot_is_in_area(int16_t margin);
 uint8_t robot_is_near_disc(void);
 uint8_t y_is_more_than(int16_t y);
 uint8_t x_is_more_than(int16_t x);
+uint8_t __y_is_more_than(int16_t posy, int16_t y);
+uint8_t __x_is_more_than(int16_t posx, int16_t x);
 int16_t fast_sin(int16_t deg);
 int16_t fast_cos(int16_t deg);
 uint8_t get_color(void);