X-Git-Url: http://git.droids-corp.org/?p=aversive.git;a=blobdiff_plain;f=projects%2Fmicrob2010%2Fmainboard%2Fi2c_protocol.c;h=9908f1a4541317a9f8f7ba06bf0f268ed772d54b;hp=aed92c7b17b32a5a1002b2a2db821e065ea68919;hb=d776dc0dab6dd3ddf92041f1ad42e521847ea9cf;hpb=b022f257a5ee568737e1a684a83d0154397fffcb diff --git a/projects/microb2010/mainboard/i2c_protocol.c b/projects/microb2010/mainboard/i2c_protocol.c index aed92c7..9908f1a 100644 --- a/projects/microb2010/mainboard/i2c_protocol.c +++ b/projects/microb2010/mainboard/i2c_protocol.c @@ -272,8 +272,9 @@ 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.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; @@ -283,6 +284,7 @@ void i2c_recvevent(uint8_t * buf, int8_t size) } case I2C_ANS_BALLBOARD_STATUS: { + uint8_t tmp; struct i2c_ans_ballboard_status * ans = (struct i2c_ans_ballboard_status *)buf; @@ -291,6 +293,12 @@ void i2c_recvevent(uint8_t * buf, int8_t size) ballboard.mode = ans->mode; ballboard.status = ans->status; ballboard.ball_count = ans->ball_count; + tmp = ans->lcob; + if (tmp != I2C_COB_NONE) + ballboard.lcob = tmp; + tmp = ans->rcob; + if (tmp != I2C_COB_NONE) + ballboard.rcob = tmp; break; } @@ -354,7 +362,8 @@ static int8_t i2c_req_cobboard_status(void) int8_t err; buf.hdr.cmd = I2C_REQ_COBBOARD_STATUS; - buf.mode = cobboard.mode; + buf.lspickle = cobboard.lspickle; + buf.rspickle = cobboard.rspickle; err = i2c_send(I2C_COBBOARD_ADDR, (uint8_t*)&buf, sizeof(buf), I2C_CTRL_GENERIC); @@ -391,78 +400,42 @@ int8_t i2c_led_control(uint8_t addr, uint8_t led, uint8_t state) return i2c_send_command(addr, (uint8_t*)&buf, sizeof(buf)); } -static int8_t i2c_cobboard_set_mode(uint8_t mode) +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; + buf.mode = mode; return i2c_send_command(I2C_COBBOARD_ADDR, (uint8_t*)&buf, sizeof(buf)); #endif } -int8_t i2c_cobboard_mode_eject(void) +static int8_t i2c_cobboard_set_spickle(uint8_t side, uint8_t flags) { - /* 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); + if (side == I2C_LEFT_SIDE) + cobboard.lspickle = flags; + else + cobboard.rspickle = flags; return 0; } -int8_t i2c_cobboard_mode_harvest(uint8_t side) -{ - uint8_t mode = cobboard.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; - } - return i2c_cobboard_set_mode(mode); -} - -int8_t i2c_cobboard_mode_deploy(uint8_t side) +int8_t i2c_cobboard_pack(uint8_t side) { - uint8_t mode = cobboard.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; - } - return i2c_cobboard_set_mode(mode); + return i2c_cobboard_set_spickle(side, 0); } -int8_t i2c_cobboard_mode_pack(uint8_t side) +int8_t i2c_cobboard_autoharvest(uint8_t side) { - uint8_t mode = cobboard.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); - return i2c_cobboard_set_mode(mode); + 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) { - return i2c_cobboard_set_mode(I2C_COBBOARD_MODE_INIT); + return i2c_cobboard_set_spickle(side, I2C_COBBOARD_SPK_DEPLOY); } int8_t i2c_ballboard_set_mode(uint8_t mode)