X-Git-Url: http://git.droids-corp.org/?p=aversive.git;a=blobdiff_plain;f=projects%2Fmicrob2010%2Fmainboard%2Fi2c_protocol.c;h=49b707bdca892570d373d85eddd7330f0717a815;hp=69971391010514021bff9f68018dd2d6ab4f9bf6;hb=HEAD;hpb=19cd41f7920628a962928580cd1618a1ee5750aa diff --git a/projects/microb2010/mainboard/i2c_protocol.c b/projects/microb2010/mainboard/i2c_protocol.c index 6997139..49b707b 100644 --- a/projects/microb2010/mainboard/i2c_protocol.c +++ b/projects/microb2010/mainboard/i2c_protocol.c @@ -274,6 +274,7 @@ void i2c_recvevent(uint8_t * buf, int8_t size) /* 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; @@ -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,16 @@ 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; + ballboard.opponent_x = ans->opponent_x; + ballboard.opponent_y = ans->opponent_y; + ballboard.opponent_a = ans->opponent_a; + ballboard.opponent_d = ans->opponent_d; break; } @@ -367,6 +379,10 @@ static int8_t i2c_req_ballboard_status(void) struct i2c_req_ballboard_status buf; buf.hdr.cmd = I2C_REQ_BALLBOARD_STATUS; + /* robot position */ + buf.x = position_get_x_s16(&mainboard.pos); + buf.y = position_get_y_s16(&mainboard.pos); + buf.a = position_get_a_deg_s16(&mainboard.pos); return i2c_send(I2C_BALLBOARD_ADDR, (uint8_t*)&buf, sizeof(buf), I2C_CTRL_GENERIC); } @@ -395,22 +411,25 @@ int8_t i2c_led_control(uint8_t addr, uint8_t led, uint8_t state) int8_t i2c_cobboard_set_mode(uint8_t mode) { #ifdef HOST_VERSION - return robotsim_i2c_cobboard_set_mode(mode); -#else + cobboard.mode = mode; +#endif struct i2c_cmd_cobboard_set_mode buf; buf.hdr.cmd = I2C_CMD_COBBOARD_SET_MODE; buf.mode = mode; return i2c_send_command(I2C_COBBOARD_ADDR, (uint8_t*)&buf, sizeof(buf)); -#endif } static int8_t i2c_cobboard_set_spickle(uint8_t side, uint8_t flags) { +#ifdef HOST_VERSION + return robotsim_i2c_cobboard_set_spickles(side, flags); +#else if (side == I2C_LEFT_SIDE) cobboard.lspickle = flags; else cobboard.rspickle = flags; return 0; +#endif } int8_t i2c_cobboard_pack(uint8_t side) @@ -418,7 +437,12 @@ int8_t i2c_cobboard_pack(uint8_t side) return i2c_cobboard_set_spickle(side, 0); } -int8_t i2c_cobboard_harvest(uint8_t side) +int8_t i2c_cobboard_pack_weak(uint8_t side) +{ + return i2c_cobboard_set_spickle(side, I2C_COBBOARD_SPK_WEAK); +} + +int8_t i2c_cobboard_autoharvest(uint8_t side) { return i2c_cobboard_set_spickle(side, I2C_COBBOARD_SPK_DEPLOY | @@ -430,6 +454,20 @@ int8_t i2c_cobboard_deploy(uint8_t side) return i2c_cobboard_set_spickle(side, I2C_COBBOARD_SPK_DEPLOY); } +int8_t i2c_cobboard_autoharvest_nomove(uint8_t side) +{ + return i2c_cobboard_set_spickle(side, + I2C_COBBOARD_SPK_DEPLOY | + I2C_COBBOARD_SPK_AUTOHARVEST | + I2C_COBBOARD_SPK_NO_MOVE); +} + +int8_t i2c_cobboard_deploy_nomove(uint8_t side) +{ + return i2c_cobboard_set_spickle(side, I2C_COBBOARD_SPK_DEPLOY | + I2C_COBBOARD_SPK_NO_MOVE); +} + int8_t i2c_ballboard_set_mode(uint8_t mode) { struct i2c_cmd_ballboard_set_mode buf; @@ -438,3 +476,11 @@ int8_t i2c_ballboard_set_mode(uint8_t mode) return i2c_send_command(I2C_BALLBOARD_ADDR, (uint8_t*)&buf, sizeof(buf)); } +int8_t i2c_ballboard_set_beacon(uint8_t enable) +{ + struct i2c_cmd_ballboard_start_beacon buf; + buf.hdr.cmd = I2C_CMD_BALLBOARD_SET_BEACON; + buf.enable = enable; + return i2c_send_command(I2C_BALLBOARD_ADDR, (uint8_t*)&buf, sizeof(buf)); +} +