X-Git-Url: http://git.droids-corp.org/?p=aversive.git;a=blobdiff_plain;f=projects%2Fmicrob2010%2Fmainboard%2Fi2c_protocol.c;h=aed92c7b17b32a5a1002b2a2db821e065ea68919;hp=4e5c1746aae0fd1fd549a690d21b76acc54bd709;hb=b022f257a5ee568737e1a684a83d0154397fffcb;hpb=ebfaaedd491e61696cc93b353471be15408d23e4 diff --git a/projects/microb2010/mainboard/i2c_protocol.c b/projects/microb2010/mainboard/i2c_protocol.c index 4e5c174..aed92c7 100644 --- a/projects/microb2010/mainboard/i2c_protocol.c +++ b/projects/microb2010/mainboard/i2c_protocol.c @@ -53,6 +53,9 @@ #include "main.h" #include "sensor.h" #include "i2c_protocol.h" +#ifdef HOST_VERSION +#include "robotsim.h" +#endif #define I2C_STATE_MAX 4 @@ -269,7 +272,7 @@ void i2c_recvevent(uint8_t * buf, int8_t size) goto error; /* status */ - cobboard.mode = ans->mode; + //cobboard.mode = ans->mode; cobboard.status = ans->status; cobboard.left_cobroller_speed = ans->left_cobroller_speed; cs_set_consign(&mainboard.left_cobroller.cs, cobboard.left_cobroller_speed); @@ -321,7 +324,7 @@ static int8_t 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(); @@ -351,6 +354,7 @@ static int8_t i2c_req_cobboard_status(void) int8_t err; buf.hdr.cmd = I2C_REQ_COBBOARD_STATUS; + buf.mode = cobboard.mode; err = i2c_send(I2C_COBBOARD_ADDR, (uint8_t*)&buf, sizeof(buf), I2C_CTRL_GENERIC); @@ -387,20 +391,38 @@ int8_t i2c_led_control(uint8_t addr, uint8_t led, uint8_t state) return i2c_send_command(addr, (uint8_t*)&buf, sizeof(buf)); } -int8_t i2c_cobboard_mode_eject(void) +static int8_t i2c_cobboard_set_mode(uint8_t mode) { +#ifdef HOST_VERSION + return robotsim_i2c_cobboard_set_mode(mode); +#else + cobboard.mode = mode; + return 0; +#endif + +#if 0 /* old */ struct i2c_cmd_cobboard_set_mode buf; buf.hdr.cmd = I2C_CMD_COBBOARD_SET_MODE; buf.mode = cobboard.mode | I2C_COBBOARD_MODE_EJECT; return i2c_send_command(I2C_COBBOARD_ADDR, (uint8_t*)&buf, sizeof(buf)); +#endif +} + +int8_t i2c_cobboard_mode_eject(void) +{ + /* XXXXXXXXX bad bad bad */ + uint8_t mode = cobboard.mode | I2C_COBBOARD_MODE_EJECT; + i2c_cobboard_set_mode(mode); + time_wait_ms(500); + mode = cobboard.mode & (~I2C_COBBOARD_MODE_EJECT); + i2c_cobboard_set_mode(mode); + return 0; } int8_t i2c_cobboard_mode_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; mode |= I2C_COBBOARD_MODE_L_HARVEST; @@ -409,16 +431,13 @@ int8_t i2c_cobboard_mode_harvest(uint8_t side) 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)); + return i2c_cobboard_set_mode(mode); } int8_t i2c_cobboard_mode_deploy(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; @@ -427,30 +446,23 @@ int8_t i2c_cobboard_mode_deploy(uint8_t side) 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_mode(mode); } int8_t i2c_cobboard_mode_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); 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_mode(mode); } int8_t i2c_cobboard_mode_init(void) { - 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_mode(I2C_COBBOARD_MODE_INIT); } int8_t i2c_ballboard_set_mode(uint8_t mode) @@ -458,6 +470,6 @@ 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)); }