traj update
[aversive.git] / projects / microb2010 / common / i2c_commands.h
index 35605b8..fa17fca 100644 (file)
 #ifndef _I2C_COMMANDS_H_
 #define _I2C_COMMANDS_H_
 
+#define I2C_OPPONENT_NOT_THERE -1000
+
 #define I2C_MAINBOARD_ADDR   1
 #define I2C_COBBOARD_ADDR    2
 #define I2C_BALLBOARD_ADDR   3
 
-#define I2C_LEFT_SIDE   0
-#define I2C_RIGHT_SIDE  1
-#define I2C_AUTO_SIDE   2
-#define I2C_CENTER_SIDE 3
+#define I2C_LEFT_SIDE    0
+#define I2C_RIGHT_SIDE   1
+#define I2C_AUTO_SIDE    2
+#define I2C_CENTER_SIDE  3
+
+#define I2C_COLOR_YELLOW 0
+#define I2C_COLOR_BLUE   1
 
-#define I2C_COLOR_RED   0
-#define I2C_COLOR_GREEN 1
+#define I2C_COB_BLACK   0
+#define I2C_COB_WHITE   1
+#define I2C_COB_UNKNOWN 2
+#define I2C_COB_REMOVED 3
+#define I2C_COB_NONE    4
 
 struct i2c_cmd_hdr {
        uint8_t cmd;
@@ -47,7 +55,7 @@ struct i2c_cmd_hdr {
 struct i2c_cmd_led_control {
        struct i2c_cmd_hdr hdr;
        uint8_t led_num:7;
-       uint8_t state:1;        
+       uint8_t state:1;
 };
 
 /****/
@@ -65,18 +73,27 @@ struct i2c_cmd_generic_color {
 
 struct i2c_cmd_cobboard_set_mode {
        struct i2c_cmd_hdr hdr;
-#define I2C_COBBOARD_MODE_INIT               0x00
-#define I2C_COBBOARD_MODE_MANUAL             0x01
-#define I2C_COBBOARD_MODE_HARVEST            0x02
-#define I2C_COBBOARD_MODE_EXIT               0xFF
+
+#define I2C_COBBOARD_MODE_HARVEST      0x01 /* harvest mode */
+#define I2C_COBBOARD_MODE_EJECT        0x02 /* eject cobs */
+#define I2C_COBBOARD_MODE_INIT         0x03 /* init state machine */
        uint8_t mode;
-       union {
-               struct {
-               } manual;
+};
+
+#define I2C_CMD_BALLBOARD_SET_MODE 0x10
+
+struct i2c_cmd_ballboard_set_mode {
+       struct i2c_cmd_hdr hdr;
 
-               struct {
-               } harvest;
-       };
+#define I2C_BALLBOARD_MODE_INIT        0x00
+#define I2C_BALLBOARD_MODE_OFF         0x01
+#define I2C_BALLBOARD_MODE_HARVEST     0x02
+#define I2C_BALLBOARD_MODE_EJECT       0x03
+#define I2C_BALLBOARD_MODE_PREP_L_FORK 0x04
+#define I2C_BALLBOARD_MODE_TAKE_L_FORK 0x05
+#define I2C_BALLBOARD_MODE_PREP_R_FORK 0x06
+#define I2C_BALLBOARD_MODE_TAKE_R_FORK 0x07
+       uint8_t mode;
 };
 
 /****/
@@ -88,22 +105,32 @@ struct i2c_cmd_cobboard_set_mode {
 
 struct i2c_req_cobboard_status {
        struct i2c_cmd_hdr hdr;
-       int16_t sickle_left1_current;
+
+#define I2C_COBBOARD_SPK_DEPLOY  0x01 /* deploy the spickle */
+#define I2C_COBBOARD_SPK_AUTOHARVEST 0x02 /* auto harvest the cobs */
+       uint8_t lspickle;
+       uint8_t rspickle;
 };
 
 #define I2C_ANS_COBBOARD_STATUS 0x81
 
 struct i2c_ans_cobboard_status {
        struct i2c_cmd_hdr hdr;
+
        /* mode type are defined above: I2C_COBBOARD_MODE_xxx */
        uint8_t mode;
 
-#define I2C_COBBOARD_STATUS_F_READY         0x00
-#define I2C_COBBOARD_STATUS_F_BUSY          0x01
-#define I2C_COBBOARD_STATUS_F_EXCPT         0x02
+#define I2C_COBBOARD_STATUS_READY         0x00
+#define I2C_COBBOARD_STATUS_OFF           0x01
+#define I2C_COBBOARD_STATUS_LBUSY         0x02
+#define I2C_COBBOARD_STATUS_RBUSY         0x03
+#define I2C_COBBOARD_STATUS_EJECT         0x04
        uint8_t status;
 
        uint8_t cob_count;
+
+       int16_t left_cobroller_speed;
+       int16_t right_cobroller_speed;
 };
 
 #define I2C_REQ_BALLBOARD_STATUS 0x82
@@ -117,6 +144,7 @@ struct i2c_req_ballboard_status {
 struct i2c_ans_ballboard_status {
        struct i2c_cmd_hdr hdr;
 
+       uint8_t mode;
 
 #define I2C_BALLBOARD_STATUS_F_READY         0x00
 #define I2C_BALLBOARD_STATUS_F_BUSY          0x01
@@ -124,6 +152,10 @@ struct i2c_ans_ballboard_status {
        uint8_t status;
 
        uint8_t ball_count;
+
+       /* detection of cobs */
+       uint8_t lcob;
+       uint8_t rcob;
 };
 
 #endif /* _I2C_PROTOCOL_H_ */