#ifndef _I2C_COMMANDS_H_
#define _I2C_COMMANDS_H_
+#define I2C_OPPONENT_NOT_THERE -1000
+
#define I2C_MAINBOARD_ADDR 1
-#define I2C_MECHBOARD_ADDR 2
-#define I2C_SENSORBOARD_ADDR 3
+#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 /* for prepare_pickup */
-#define I2C_CENTER_SIDE 3 /* for prepare_pickup */
+#define I2C_LEFT_SIDE 0
+#define I2C_RIGHT_SIDE 1
+#define I2C_AUTO_SIDE 2
+#define I2C_CENTER_SIDE 3
-#define I2C_COLOR_RED 0
-#define I2C_COLOR_GREEN 1
+#define I2C_COLOR_YELLOW 0
+#define I2C_COLOR_BLUE 1
-#define I2C_AUTOBUILD_DEFAULT_DIST 210
+#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;
struct i2c_cmd_led_control {
struct i2c_cmd_hdr hdr;
uint8_t led_num:7;
- uint8_t state:1;
+ uint8_t state:1;
};
/****/
/****/
-#define I2C_CMD_MECHBOARD_SET_MODE 0x02
-
-struct i2c_cmd_mechboard_set_mode {
- struct i2c_cmd_hdr hdr;
-#define I2C_MECHBOARD_MODE_MANUAL 0x00
-#define I2C_MECHBOARD_MODE_HARVEST 0x01
-#define I2C_MECHBOARD_MODE_PREPARE_PICKUP 0x02
-#define I2C_MECHBOARD_MODE_PICKUP 0x03
-#define I2C_MECHBOARD_MODE_PREPARE_BUILD 0x04
-#define I2C_MECHBOARD_MODE_AUTOBUILD 0x05
-#define I2C_MECHBOARD_MODE_WAIT 0x06
-#define I2C_MECHBOARD_MODE_INIT 0x07
-#define I2C_MECHBOARD_MODE_PREPARE_GET_LINTEL 0x08
-#define I2C_MECHBOARD_MODE_GET_LINTEL 0x09
-#define I2C_MECHBOARD_MODE_PUT_LINTEL 0x0A
-#define I2C_MECHBOARD_MODE_PREPARE_EJECT 0x0B
-#define I2C_MECHBOARD_MODE_EJECT 0x0C
-#define I2C_MECHBOARD_MODE_CLEAR 0x0D
-#define I2C_MECHBOARD_MODE_LAZY_HARVEST 0x0E
-#define I2C_MECHBOARD_MODE_LOADED 0x0F
-#define I2C_MECHBOARD_MODE_PREPARE_INSIDE 0x10
-#define I2C_MECHBOARD_MODE_STORE 0x11
-#define I2C_MECHBOARD_MODE_LAZY_PICKUP 0x12
-#define I2C_MECHBOARD_MODE_MANIVELLE 0x13
-#define I2C_MECHBOARD_MODE_PUSH_TEMPLE 0x14
-#define I2C_MECHBOARD_MODE_PUSH_TEMPLE_DISC 0x15
-#define I2C_MECHBOARD_MODE_EXIT 0xFF
- uint8_t mode;
- union {
- struct {
-
- } manual;
-
- struct {
- uint8_t side;
- uint8_t next_mode;
- } prep_pickup;
-
- struct {
- uint8_t level_l;
- uint8_t level_r;
- } prep_build;
-
- struct {
- uint8_t side;
- } push_temple_disc;
-
- struct {
- uint8_t level;
- } push_temple;
-
- struct {
- uint8_t level_left;
- uint8_t level_right;
- uint8_t count_left;
- uint8_t count_right;
- uint8_t distance_left;
- uint8_t distance_right;
- uint8_t do_lintel;
- } autobuild;
-
- struct {
- uint8_t level_l;
- uint8_t level_r;
- } prep_inside;
- };
-};
-
-/****/
-
-/* only valid in manual mode */
-#define I2C_CMD_MECHBOARD_ARM_GOTO 0x03
+#define I2C_CMD_COBBOARD_SET_MODE 0x02
-struct i2c_cmd_mechboard_arm_goto {
+struct i2c_cmd_cobboard_set_mode {
struct i2c_cmd_hdr hdr;
-#define I2C_MECHBOARD_ARM_LEFT 0
-#define I2C_MECHBOARD_ARM_RIGHT 1
-#define I2C_MECHBOARD_ARM_BOTH 2
- uint8_t which;
- uint8_t height; /* in cm */
- uint8_t distance; /* in cm */
-};
-
-/****/
-
-#define I2C_CMD_SENSORBOARD_SET_BEACON 0x04
-
-struct i2c_cmd_sensorboard_start_beacon {
- struct i2c_cmd_hdr hdr;
- uint8_t enable;
-};
-
-
-/****/
-
-#define I2C_CMD_SENSORBOARD_SET_SCANNER 0x05
-
-struct i2c_cmd_sensorboard_scanner {
- struct i2c_cmd_hdr hdr;
-
-#define I2C_SENSORBOARD_SCANNER_STOP 0x00
-#define I2C_SENSORBOARD_SCANNER_PREPARE 0x01
-#define I2C_SENSORBOARD_SCANNER_START 0x02
+#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;
};
-/*****/
+#define I2C_CMD_BALLBOARD_SET_MODE 0x10
-#define I2C_CMD_SENSORBOARD_CALIB_SCANNER 0x06
-struct i2c_cmd_sensorboard_calib_scanner {
+struct i2c_cmd_ballboard_set_mode {
struct i2c_cmd_hdr hdr;
-};
-/*****/
-
-#define I2C_CMD_SENSORBOARD_SCANNER_ALGO 0x07
-struct i2c_cmd_sensorboard_scanner_algo {
- struct i2c_cmd_hdr hdr;
-
-#define I2C_SCANNER_ALGO_COLUMN_DROPZONE 1
-#define I2C_SCANNER_ALGO_CHECK_TEMPLE 2
-#define I2C_SCANNER_ALGO_TEMPLE_DROPZONE 3
- uint8_t algo;
-
- union {
- struct {
-#define I2C_SCANNER_ZONE_0 0
-#define I2C_SCANNER_ZONE_1 1
-#define I2C_SCANNER_ZONE_DISC 2
- uint8_t working_zone;
- int16_t center_x;
- int16_t center_y;
- } drop_zone;
-
- struct {
- uint8_t level;
- int16_t temple_x;
- int16_t temple_y;
- } check_temple;
- };
+#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;
};
/****/
/****/
-#define I2C_REQ_MECHBOARD_STATUS 0x80
+#define I2C_REQ_COBBOARD_STATUS 0x80
-struct i2c_req_mechboard_status {
+struct i2c_req_cobboard_status {
struct i2c_cmd_hdr hdr;
- int16_t pump_left1_current;
- int16_t pump_left2_current;
+#define I2C_COBBOARD_SPK_DEPLOY 0x01 /* deploy the spickle */
+#define I2C_COBBOARD_SPK_AUTOHARVEST 0x02 /* auto harvest the cobs */
+#define I2C_COBBOARD_SPK_NO_MOVE 0x04 /* if enabled, don't change state */
+ uint8_t lspickle;
+ uint8_t rspickle;
};
-#define I2C_ANS_MECHBOARD_STATUS 0x81
+#define I2C_ANS_COBBOARD_STATUS 0x81
-struct i2c_ans_mechboard_status {
+struct i2c_ans_cobboard_status {
struct i2c_cmd_hdr hdr;
- /* mode type are defined above: I2C_MECHBOARD_MODE_xxx */
+
+ /* mode type are defined above: I2C_COBBOARD_MODE_xxx */
uint8_t mode;
-#define I2C_MECHBOARD_STATUS_F_READY 0x00
-#define I2C_MECHBOARD_STATUS_F_BUSY 0x01
-#define I2C_MECHBOARD_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 lintel_count;
-
- /* flag is there if column was taken by this pump. Note that
- * we should also check ADC (current) to see if the column is
- * still there. */
-#define I2C_MECHBOARD_COLUMN_L1 0x01
-#define I2C_MECHBOARD_COLUMN_L2 0x02
-#define I2C_MECHBOARD_COLUMN_R1 0x04
-#define I2C_MECHBOARD_COLUMN_R2 0x08
- uint8_t column_flags;
-
- int16_t pump_left1;
- int16_t pump_right1;
- int16_t pump_left2;
- int16_t pump_right2;
-
-#define I2C_MECHBOARD_CURRENT_COLUMN 85
- int16_t pump_right1_current;
- int16_t pump_right2_current;
-
- uint16_t servo_lintel_left;
- uint16_t servo_lintel_right;
+ uint8_t cob_count;
+
+ int16_t left_cobroller_speed;
+ int16_t right_cobroller_speed;
};
-#define I2C_REQ_SENSORBOARD_STATUS 0x82
+#define I2C_REQ_BALLBOARD_STATUS 0x82
-struct i2c_req_sensorboard_status {
+struct i2c_req_ballboard_status {
struct i2c_cmd_hdr hdr;
-
- /* position sent by mainboard */
- int16_t x;
- int16_t y;
- int16_t a;
-
- /* PWM for pickup */
- uint8_t enable_pickup_wheels;
};
-#define I2C_ANS_SENSORBOARD_STATUS 0x83
+#define I2C_ANS_BALLBOARD_STATUS 0x83
-struct i2c_ans_sensorboard_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
+#define I2C_BALLBOARD_STATUS_F_EXCPT 0x02
uint8_t status;
-#define I2C_OPPONENT_NOT_THERE -1000
- int16_t opponent_x;
- int16_t opponent_y;
- int16_t opponent_a;
- int16_t opponent_d;
-
-#define I2C_SCAN_DONE 1
-#define I2C_SCAN_MAX_COLUMN 2
- uint8_t scan_status;
-
-#define I2C_COLUMN_NO_DROPZONE -1
- int8_t dropzone_h;
- int16_t dropzone_x;
- int16_t dropzone_y;
+
+ uint8_t ball_count;
+
+ /* detection of cobs */
+ uint8_t lcob;
+ uint8_t rcob;
};
#endif /* _I2C_PROTOCOL_H_ */