X-Git-Url: http://git.droids-corp.org/?p=aversive.git;a=blobdiff_plain;f=projects%2Fmicrob2010%2Fmainboard%2Fi2c_protocol.c;h=d0726cb8ee9a8ea4bb5ebc6886f8de80dc6a3e12;hp=2ceb7e8818146a03cd37001fd480f755deee813b;hb=4fb57a4dab8bd564445e824696a2dab470af8628;hpb=57b3e145f2ff46e1a7e7d522c85f3c56821dbf48 diff --git a/projects/microb2010/mainboard/i2c_protocol.c b/projects/microb2010/mainboard/i2c_protocol.c index 2ceb7e8..d0726cb 100644 --- a/projects/microb2010/mainboard/i2c_protocol.c +++ b/projects/microb2010/mainboard/i2c_protocol.c @@ -263,6 +263,10 @@ void i2c_recvevent(uint8_t * buf, int8_t size) /* status */ 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); + cobboard.right_cobroller_speed = ans->right_cobroller_speed; + cs_set_consign(&mainboard.right_cobroller.cs, cobboard.right_cobroller_speed); break; } @@ -368,19 +372,61 @@ 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_manual(void) +int8_t i2c_cobboard_mode_eject(void) { struct i2c_cmd_cobboard_set_mode buf; buf.hdr.cmd = I2C_CMD_COBBOARD_SET_MODE; - buf.mode = I2C_COBBOARD_MODE_MANUAL; + buf.mode = cobboard.mode | I2C_COBBOARD_MODE_EJECT; return i2c_send_command(I2C_COBBOARD_ADDR, (uint8_t*)&buf, sizeof(buf)); } -int8_t i2c_cobboard_mode_harvest(void) +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; + } + 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)); +} + +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; + } + 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)); +} + +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; - buf.mode = I2C_COBBOARD_MODE_HARVEST; + 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)); }