vt100: include pgmspace.h as we use PROGMEM macro
[aversive.git] / projects / microb2010 / mainboard / strat_utils.h
index 986b601..5c7b8e9 100644 (file)
  */
 
 
-#define DEG(x) (((double)(x)) * (180.0 / M_PI))
-#define RAD(x) (((double)(x)) * (M_PI / 180.0))
-#define M_2PI (2*M_PI)
-
 struct xy_point {
        int16_t x;
        int16_t y;
@@ -35,15 +31,42 @@ struct xy_point {
        ({                                                              \
                uint8_t __err = 0;                                      \
                while ( (! (cond)) && (__err == 0)) {                   \
-                       __err = test_traj_end(TRAJ_FLAGS_NO_NEAR);      \
+                       __err = test_traj_end(mask);                    \
                }                                                       \
+               if (!__err)                                             \
+                       DEBUG(E_USER_STRAT, "cond is true at line %d",  \
+                             __LINE__);                                \
+               else                                                    \
+                       DEBUG(E_USER_STRAT, "got %s at line %d",        \
+                             get_err(__err), __LINE__);                \
                __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);
 int16_t simple_modulo_360(int16_t a);
-double simple_modulo_2pi(double a);
 int16_t angle_abs_to_rel(int16_t a_abs);
 void rel_da_to_abs_xy(double d_rel, double a_rel_rad, double *x_abs, double *y_abs);
 double norm(double x, double y);
@@ -55,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);
@@ -62,15 +87,7 @@ uint8_t get_opponent_color(void);
 int8_t get_opponent_xy(int16_t *x, int16_t *y);
 int8_t get_opponent_da(int16_t *d, int16_t *a);
 int8_t get_opponent_xyda(int16_t *x, int16_t *y, int16_t *d, int16_t *a);
-uint8_t get_column_count(void);
-uint8_t get_column_count_right(void);
-uint8_t get_column_count_left(void);
-uint8_t get_lintel_count(void);
-uint8_t get_mechboard_mode(void);
-uint8_t pump_left1_is_full(void);
-uint8_t pump_left2_is_full(void);
-uint8_t pump_right1_is_full(void);
-uint8_t pump_right2_is_full(void);
-uint8_t get_scanner_status(void);
-uint8_t wait_scan_done(uint16_t timeout);
-uint8_t opponent_is_behind(void);
+int16_t distance_from_opponent(int16_t x, int16_t y);
+
+uint8_t get_ball_count(void);
+uint8_t get_cob_count(void);