\r
func process_msg()\r
if(msg_rcvd[0]==200)\r
- load_status();\r
+ if(msg_rcvd[2]==1)\r
+ load_status();\r
+ endif\r
+ endif\r
+ if(msg_rcvd[0]=='c')\r
+ if(msg_rcvd[1]==COLOR_RED)\r
+ current_color := COLOR_RED;\r
+ button_color := RED;\r
+ else\r
+ if(msg_rcvd[1]==COLOR_GREEN)\r
+ current_color := COLOR_GREEN;\r
+ button_color := GREEN;\r
+ endif\r
+ endif\r
+ color_bt(UP);\r
endif\r
endfunc\r
\r
else\r
break;\r
endif\r
- forever\r
+ until(idx==MSG_BUFF_LEN);\r
\r
msg_len := idx;\r
com_Init(msg_buff, MSG_BUFF_LEN, ':');\r
\r
\r
\r
+\r
memcpy(msg,buff,10);
msg_waiting = true;
ROBOT_UNLOCK(disp);
-/* printf("received serial msg: \n");
- for(i=0;i<nr;i++)
- printf("%02x ",msg[i]);
- printf("\n");*/
+// printf("received serial msg: \n");
+// for(i=0;i<nr;i++)
+// printf("%d ",msg[i]);
+// printf("\n");
}
int set_actuators(uint8_t actuator)
{
switch(actuator) {
- case BRUSH_SERVOS:
+// case BRUSH_SERVOS:
#if 0
if(robot.orte.servos.brush_left==BRUSH_LEFT_OPEN) {
brushes_in();
}
int process_msg(uint8_t *buff) {
-// printf("rcvd msg id: %d\n",msg[1]);
switch(buff[1]) {
case SWITCH_TO_STATUS:
uoled_switch_mode_rep(MODE_STATUS, CHANGE_MODE_STATUS);
wait_flag = true;
+ mode_to_go = MODE_STATUS;
return MODE_STATUS;
break;
case SWITCH_TO_CONTROL:
uoled_switch_mode_rep(MODE_STATUS, CHANGE_MODE_CONTROL);
wait_flag = true;
+ mode_to_go = MODE_CONTROL;
return MODE_CONTROL;
break;
case SWITCH_TO_STATUS_DONE:
printf("msg color: %d\n",buff[2]);
set_game_color(buff[2]);
break;
- case GET_READY:
- robot_exit();
- break;
case MSG_LIFT_CAL:
printf("msg lift cal\n");
break;
case MSG_STATUS:
printf("msg status\n");
break;
- case ROBOT_RESTART:
- system("killall ortemanager");
- system("killall cand");
- robot_exit();
+ case MSG_RESTART:
+ printf("msg restart\n");
+// system("killall ortemanager");
+// system("killall cand");
+// robot_exit();
break;
default:
break;
{
uint8_t buff[10];
uint8_t ret;
- static int cycle = 0;
switch (FSM_EVENT) {
case EV_ENTRY:
+ uoled_switch_mode_rep(MODE_STATUS, CHANGE_MODE_STATUS);
DBG("entry to status\n");
FSM_TIMER(TRANS_LEN);
break;
FSM_STATE(control)
{
uint8_t buff[10];
+ int ret;
switch (FSM_EVENT) {
case EV_ENTRY:
+ uoled_switch_mode_rep(MODE_CONTROL, CHANGE_MODE_STATUS);
FSM_TIMER(TRANS_LEN);
break;
case EV_TIMER:
+ ret = uoled_send_control(&robot);
ROBOT_LOCK(disp);
if(msg_waiting) {
memcpy(buff, msg, 10);
case EV_TIMER:
ROBOT_LOCK(disp);
if(msg_waiting) {
- printf("msg waiting\n");
memcpy(buff, msg, 10);
msg_waiting = false;
ROBOT_UNLOCK(disp);
ROBOT_UNLOCK(disp);
}
if(wait_flag) {
- uoled_switch_mode_rep(MODE_STATUS, CHANGE_MODE_STATUS);
+ uoled_switch_mode_rep(mode_to_go, CHANGE_MODE_STATUS);
FSM_TIMER(500);
break;
}
#define VOLTAGE_MSG 'V'
#define FSM_STATE_MSG 'F'
#define HW_STATUS_MSG 163
-#define COLOR_MSG 164
+#define COLOR_MSG 'c'
#define POSITION_MSG 'P'
#define MOVE_FSM_STATE_MSG 'M'
#define LIFT_MSG 'L'
#define MSG_CMU_INIT 156
#define MSG_START_ACT 157
#define MSG_COLOR 158
-#define MSG_RESTART 159
+#define MSG_RESTART 162
#define MSG_INIT 160
#define MSG_STATUS 161
#define MODE_STATUS 1
#define MODE_CONTROL 2
-#define BRUSH_SERVOS 1
-#define DEPOSITE_BALLS 2
-#define FDOOR_SERVO 3
-#define BDOOR_SERVO 4
-#define BRUSH_DRIVES 5
-#define LASER 6
-#define BAGR_DRIVE 7
-
#define HW_STATUS_OK 1
#define HW_STATUS_FAILED 0
#define HW_STATUS_WARNING 2
/** Used to control verbosity */
#define DEBUG
#endif
-#define DEBUG
static struct sercom_data sercom;
int uoled_switch_mode_rep(uint8_t mode, uint8_t status)
{
uint8_t ret;
- uint8_t msg[102];
+ uint8_t msg[105];
memset(msg, ' ', sizeof(msg));
msg[0] = ':';
return 0;
}
+int uoled_send_control(struct robot *state)
+{
+ int ret;
+ uint8_t msg[105];
+ int idx = 0;
+
+ msg[0] = ':';
+ msg[1] = ' ';
+
+ idx+=2;
+
+ ret = oled_set_color(msg+idx, sizeof(msg)-idx, state->team_color);
+ if(ret==-1)
+ return -1;
+ else
+ idx += ret;
+
+ ret = uoled_write_cmd(msg, 105);
+ if(ret)
+ return -1;
+
+ return 0;
+
+}
+
int uoled_send_status(struct robot *state)
{
int ret;