2 * Copyright Droids, Microb Technology (2010)
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 * Revision : $Id: strat.c,v 1.6 2009-11-08 17:24:33 zer0 Exp $
20 * Olivier MATZ <zer0@droids-corp.org>
23 #define WAYPOINTS_NBX 13
24 #define WAYPOINTS_NBY 8
27 /* I2C_COB_UNKNOWN, I2C_COB_WHITE, I2C_COB_BLACK */
31 /* index in corn table */
39 /* structure describing the status of a waypoint */
41 /* type of the waypoint */
42 #define WP_TYPE_WAYPOINT 0 /* no object on it */
43 #define WP_TYPE_OBSTACLE 1 /* cannot reach this point */
44 #define WP_TYPE_TOMATO 2 /* place for a tomato */
45 #define WP_TYPE_CORN 3 /* place for a corn */
48 /* true if point is near the border */
51 /* true if element is present */
54 /* visited by opponent */
55 uint8_t opp_visited:1;
59 /* absolute position of the waypoint */
65 struct tomato_db tomato;
69 /* database reflecting the status of objects on area */
73 /* table of waypoints */
74 struct waypoint_db wp_table[WAYPOINTS_NBX][WAYPOINTS_NBY];
76 /* corn_table: pointers to waypoints */
77 struct waypoint_db *corn_table[CORN_NB];
79 /* tomato_table: pointers to waypoints */
80 struct waypoint_db *tomato_table[TOMATO_NB];
82 /* number of oranges remaining */
83 uint8_t our_oranges_count;
84 uint8_t opp_oranges_count;
87 /* global structure storing the database */
88 extern struct strat_db strat_db;
90 /* return the nearest waypoint that is not a corn: xp and yp contains
91 * the input and output, and ip, jp are only outputs. return 0 on
93 int8_t xycoord_to_ijcoord(int16_t *xp, int16_t *yp, uint8_t *ip, uint8_t *jp);
95 /* convert i,j coords to x,y coords */
96 int8_t ijcoord_to_xycoord(uint8_t i, uint8_t j, int16_t *x, int16_t *y);
98 /* return the index of a corn given its i,j coords. */
99 int8_t ijcoord_to_corn_idx(uint8_t i, uint8_t j);
101 /* return the i,j coords of a corn given its index */
102 int8_t corn_idx_to_ijcoord(uint8_t idx, uint8_t *i, uint8_t *j);
104 /* return the index of a corn given its x,y coords. */
105 int8_t corn_idx_to_xycoord(uint8_t idx, int16_t *x, int16_t *y);
107 /* return the index of the closest corn at these coordinates. If the
108 * corn is really too far (~20cm), return NULL. The x and y pointer are
109 * updated with the real position of the corn */
110 struct waypoint_db *xycoord_to_corn_idx(int16_t *x, int16_t *y);
112 /* set color of a corn
113 * type is I2C_COB_BLACK, I2C_COB_WHITE, I2C_COB_UNKNOWN
114 * it will update the symetric corn if != UNKOWN
115 * it will also deduct color of some other cobs */
116 void corn_set_color(struct waypoint_db *wp, uint8_t color);
118 /* return the idx of the symetric corn */
119 int8_t corn_get_sym_idx(int8_t i);
121 /*********** TOMATO */
123 /* return the index of a tomato given its i,j coords. */
124 int8_t ijcoord_to_tomato_idx(uint8_t i, uint8_t j);
126 /* return the i,j coords of a tomato given its index */
127 int8_t tomato_idx_to_ijcoord(uint8_t idx, uint8_t *i, uint8_t *j);
129 /* return the index of a tomato given its x,y coords. */
130 int8_t tomato_idx_to_xycoord(uint8_t idx, int16_t *x, int16_t *y);
132 /* return the index of the closest tomato at these coordinates. If the
133 * tomato is really too far (~20cm), return NULL. The x and y pointer are
134 * updated with the real position of the tomato */
135 struct waypoint_db *xycoord_to_tomato_idx(int16_t *x, int16_t *y);
138 * Init internal database. The initialization is done with UNKNOWN
139 * corn with all objects present
141 void strat_db_init(void);
143 /* dump infos about area and objects */
144 void strat_db_dump(const char *caller);