X-Git-Url: http://git.droids-corp.org/?p=aversive.git;a=blobdiff_plain;f=projects%2Fmicrob2010%2Fballboard%2Fi2c_protocol.c;h=71ac5166a925f93842cc8815d489eb3298203364;hp=f9e9b554bab378e031937675f06b061dd906c364;hb=HEAD;hpb=c8bae2eb9f3084d53436bc6c9fee9952dfcc1fda diff --git a/projects/microb2010/ballboard/i2c_protocol.c b/projects/microb2010/ballboard/i2c_protocol.c index f9e9b55..71ac516 100644 --- a/projects/microb2010/ballboard/i2c_protocol.c +++ b/projects/microb2010/ballboard/i2c_protocol.c @@ -1,6 +1,6 @@ /* - * Copyright Droids Corporation (2007) - * + * Copyright Droids Corporation (2010) + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -47,6 +47,8 @@ #include "../common/i2c_commands.h" #include "main.h" #include "state.h" +#include "sensor.h" +#include "beacon.h" #include "actuator.h" void i2c_protocol_init(void) @@ -73,8 +75,14 @@ void i2c_send_status(void) struct i2c_ans_ballboard_status ans; i2c_flush(); ans.hdr.cmd = I2C_ANS_BALLBOARD_STATUS; - ans.status = 0x55; /* XXX */ + ans.status = state_get_status(); ans.ball_count = state_get_ball_count(); + ans.lcob = cob_detect_left(); + ans.rcob = cob_detect_right(); + ans.opponent_x = beacon.opponent_x; + ans.opponent_y = beacon.opponent_y; + ans.opponent_a = beacon.opponent_angle; + ans.opponent_d = beacon.opponent_dist; i2c_send(I2C_ADD_MASTER, (uint8_t *) &ans, sizeof(ans), I2C_CTRL_GENERIC); @@ -121,6 +129,19 @@ void i2c_recvevent(uint8_t * buf, int8_t size) break; } + case I2C_CMD_BALLBOARD_SET_BEACON: + { + struct i2c_cmd_ballboard_start_beacon *cmd = void_cmd; + if (size != sizeof (*cmd)) + goto error; + + if (cmd->enable) + beacon_start(); + else + beacon_stop(); + break; + } + case I2C_CMD_BALLBOARD_SET_MODE: { struct i2c_cmd_ballboard_set_mode *cmd = void_cmd; @@ -140,6 +161,10 @@ void i2c_recvevent(uint8_t * buf, int8_t size) if (size != sizeof (*cmd)) goto error; + beacon.robot_x = cmd->x; + beacon.robot_y = cmd->y; + beacon.robot_angle = cmd->a; + i2c_send_status(); break; }