/* status */
ans.mode = state_get_mode();
- ans.status = 0x55; /* TODO */
+ ans.status = state_get_status();
ans.left_cobroller_speed = cobboard.left_cobroller_speed;
ans.right_cobroller_speed = cobboard.right_cobroller_speed;
ans.cob_count = state_get_cob_count();
-;
+
i2c_send(I2C_ADD_MASTER, (uint8_t *) &ans,
sizeof(ans), I2C_CTRL_GENERIC);
}
-static int8_t i2c_set_mode(struct i2c_cmd_cobboard_set_mode *cmd)
-{
- state_set_mode(cmd->mode);
- return 0;
-}
-
void i2c_recvevent(uint8_t * buf, int8_t size)
{
void *void_cmd = buf;
-
+
static uint8_t a = 0;
-
+
a++;
if (a & 0x10)
LED2_TOGGLE();
-
+
if (size <= 0) {
goto error;
}
-
+
switch (buf[0]) {
/* Commands (no answer needed) */
- case I2C_CMD_GENERIC_LED_CONTROL:
+ case I2C_CMD_GENERIC_LED_CONTROL:
{
struct i2c_cmd_led_control *cmd = void_cmd;
if (size != sizeof (*cmd))
i2c_led_control(cmd->led_num, cmd->state);
break;
}
-
+
case I2C_CMD_COBBOARD_SET_MODE:
{
struct i2c_cmd_cobboard_set_mode *cmd = void_cmd;
if (size != sizeof(struct i2c_cmd_cobboard_set_mode))
goto error;
- i2c_set_mode(cmd);
+ if (!state_get_i2c_ignore())
+ state_set_mode(cmd->mode);
break;
}
}
#ifdef notyet
- case I2C_CMD_EXTENSION_TEST:
+ case I2C_CMD_EXTENSION_TEST:
{
struct i2c_cmd_extension_test *cmd = void_cmd;
if (size != sizeof (*cmd))
break;
}
#endif
-
- /* Add other commands here ...*/
+ /* Add other commands here ...*/
case I2C_REQ_COBBOARD_STATUS:
{
- //struct i2c_req_cobboard_status *cmd = void_cmd;
+ struct i2c_req_cobboard_status *cmd = void_cmd;
if (size != sizeof (struct i2c_req_cobboard_status))
goto error;
-
+
+ /* mode is in req */
+ if (state_get_status() != I2C_COBBOARD_STATUS_OFF &&
+ !state_get_i2c_ignore()) {
+ state_set_spickle(I2C_LEFT_SIDE, cmd->lspickle);
+ state_set_spickle(I2C_RIGHT_SIDE, cmd->rspickle);
+ }
i2c_send_status();
break;
}