#include "main.h"
#include "sensor.h"
#include "i2c_protocol.h"
+#ifdef HOST_VERSION
+#include "robotsim.h"
+#endif
#define I2C_STATE_MAX 4
/* status */
cobboard.mode = ans->mode;
cobboard.status = ans->status;
+ cobboard.cob_count = ans->cob_count;
cobboard.left_cobroller_speed = ans->left_cobroller_speed;
cs_set_consign(&mainboard.left_cobroller.cs, cobboard.left_cobroller_speed);
cobboard.right_cobroller_speed = ans->right_cobroller_speed;
i2c_send_command(uint8_t addr, uint8_t * buf, uint8_t size)
{
#ifdef HOST_VERSION
- return 0;
+ return robotsim_i2c(addr, buf, size);
#else
uint8_t flags;
microseconds us = time_get_us2();
int8_t err;
buf.hdr.cmd = I2C_REQ_COBBOARD_STATUS;
+ buf.lspickle = cobboard.lspickle;
+ buf.rspickle = cobboard.rspickle;
err = i2c_send(I2C_COBBOARD_ADDR, (uint8_t*)&buf,
sizeof(buf), I2C_CTRL_GENERIC);
return i2c_send_command(addr, (uint8_t*)&buf, sizeof(buf));
}
-int8_t i2c_cobboard_mode_eject(void)
+int8_t i2c_cobboard_set_mode(uint8_t mode)
{
+#ifdef HOST_VERSION
+ return robotsim_i2c_cobboard_set_mode(mode);
+#else
struct i2c_cmd_cobboard_set_mode buf;
buf.hdr.cmd = I2C_CMD_COBBOARD_SET_MODE;
- buf.mode = cobboard.mode | I2C_COBBOARD_MODE_EJECT;
+ buf.mode = mode;
return i2c_send_command(I2C_COBBOARD_ADDR, (uint8_t*)&buf, sizeof(buf));
+#endif
}
-int8_t i2c_cobboard_mode_harvest(uint8_t side)
+static int8_t i2c_cobboard_set_spickle(uint8_t side, uint8_t flags)
{
- struct i2c_cmd_cobboard_set_mode buf;
- uint8_t mode = cobboard.mode;
-
- buf.hdr.cmd = I2C_CMD_COBBOARD_SET_MODE;
- if (side == I2C_LEFT_SIDE) {
- mode |= I2C_COBBOARD_MODE_L_DEPLOY;
- mode |= I2C_COBBOARD_MODE_L_HARVEST;
- }
- else {
- mode |= I2C_COBBOARD_MODE_R_DEPLOY;
- mode |= I2C_COBBOARD_MODE_R_HARVEST;
- }
- buf.mode = mode;
- return i2c_send_command(I2C_COBBOARD_ADDR, (uint8_t*)&buf, sizeof(buf));
+ if (side == I2C_LEFT_SIDE)
+ cobboard.lspickle = flags;
+ else
+ cobboard.rspickle = flags;
+ return 0;
}
-int8_t i2c_cobboard_mode_deploy(uint8_t side)
+int8_t i2c_cobboard_pack(uint8_t side)
{
- struct i2c_cmd_cobboard_set_mode buf;
- uint8_t mode = cobboard.mode;
-
- buf.hdr.cmd = I2C_CMD_COBBOARD_SET_MODE;
- if (side == I2C_LEFT_SIDE) {
- mode &= ~(I2C_COBBOARD_MODE_L_DEPLOY | I2C_COBBOARD_MODE_L_HARVEST);
- mode |= I2C_COBBOARD_MODE_L_DEPLOY;
- }
- else {
- mode &= ~(I2C_COBBOARD_MODE_R_DEPLOY | I2C_COBBOARD_MODE_R_HARVEST);
- mode |= I2C_COBBOARD_MODE_R_DEPLOY;
- }
- buf.mode = mode;
- return i2c_send_command(I2C_COBBOARD_ADDR, (uint8_t*)&buf, sizeof(buf));
+ return i2c_cobboard_set_spickle(side, 0);
}
-int8_t i2c_cobboard_mode_pack(uint8_t side)
+int8_t i2c_cobboard_harvest(uint8_t side)
{
- struct i2c_cmd_cobboard_set_mode buf;
- uint8_t mode = cobboard.mode;
-
- buf.hdr.cmd = I2C_CMD_COBBOARD_SET_MODE;
- if (side == I2C_LEFT_SIDE)
- mode &= ~(I2C_COBBOARD_MODE_L_DEPLOY | I2C_COBBOARD_MODE_L_HARVEST);
- else
- mode &= ~(I2C_COBBOARD_MODE_R_DEPLOY | I2C_COBBOARD_MODE_R_HARVEST);
- buf.mode = mode;
- return i2c_send_command(I2C_COBBOARD_ADDR, (uint8_t*)&buf, sizeof(buf));
+ return i2c_cobboard_set_spickle(side,
+ I2C_COBBOARD_SPK_DEPLOY |
+ I2C_COBBOARD_SPK_AUTOHARVEST);
}
-int8_t i2c_cobboard_mode_init(void)
+int8_t i2c_cobboard_deploy(uint8_t side)
{
- struct i2c_cmd_cobboard_set_mode buf;
- buf.hdr.cmd = I2C_CMD_COBBOARD_SET_MODE;
- buf.mode = I2C_COBBOARD_MODE_INIT;
- return i2c_send_command(I2C_COBBOARD_ADDR, (uint8_t*)&buf, sizeof(buf));
+ return i2c_cobboard_set_spickle(side, I2C_COBBOARD_SPK_DEPLOY);
}
int8_t i2c_ballboard_set_mode(uint8_t mode)
struct i2c_cmd_ballboard_set_mode buf;
buf.hdr.cmd = I2C_CMD_BALLBOARD_SET_MODE;
buf.mode = mode;
- return i2c_send_command(I2C_COBBOARD_ADDR, (uint8_t*)&buf, sizeof(buf));
+ return i2c_send_command(I2C_BALLBOARD_ADDR, (uint8_t*)&buf, sizeof(buf));
}