]> rtime.felk.cvut.cz Git - eurobot/public.git/commitdiff
display: all functions should be now ready in display
authorMartin Zidek <zidekm1@gmail.com>
Thu, 1 May 2008 01:52:25 +0000 (03:52 +0200)
committerMartin Zidek <martin@martinzidek.com>
Thu, 1 May 2008 01:52:25 +0000 (03:52 +0200)
src/disp-4dgl/control.4dg

index 75cb5d7df4a0febb868f63155a109365f78977fb..dd5d33793903189dc974e1a2a89f205537accc13 100644 (file)
 #constant MSG_SWITCH_TO_CONTROL 184\r
 #constant MSG_SWITCH_TO_STATUS_DONE 185\r
 #constant MSG_SWITCH_TO_CONTROL_DONE 186\r
+#constant MSG_SET_COLOR 187\r
+#constant MSG_SET_MODE 188\r
+#constant MSG_CAR_LEFT 189\r
+#constant MSG_CAR_RIGHT 190\r
 \r
 #constant MSG_LBRUSH_SERVO 1\r
 #constant MSG_RBRUSH_SERVO 2\r
 \r
 #constant TXT_BT_GET_READY $"  GET READY!  "\r
 #constant TXT_BT_START $"     START    "\r
+#constant TXT_BT_COLOR $"     COLOR    "\r
 \r
-#constant TXT_BT_BAGR_DRIVE $"  BAGR  "\r
+#constant TXT_BT_CAR_LEFT $"  <<  "\r
+#constant TXT_BT_CAR_RIGHT $"  >> "\r
+\r
+#constant TXT_BT_BAGR_DRIVE $"    BAGR    "\r
 \r
 #constant MSG_BUFF_LEN 40\r
 \r
-#constant BT_X_0    0\r
+\r
 #constant BT_S_ROW1_Y   0\r
 #constant BT_S_ROW2_Y   1\r
 #constant BT_D_ROW1_Y   2\r
 #constant BT_START_END_Y 8\r
 #constant BT_STATUS_Y   9\r
 #constant BT_STATUS_END_Y   10\r
-\r
-#constant BT_S_RBRUSH_X           1\r
-#constant BT_S_BDOOR_X            2\r
-#constant BT_D_RBRUSH_X           3\r
-#constant BT_D_BAGR_X               4\r
-#constant BT_D_BAGR_END_X       5\r
-#constant BT_GET_READY_X         6\r
-#constant BT_GET_READY_END_X 7\r
-#constant BT_START_X                   8\r
-#constant BT_START_END_X          9\r
-#constant BT_STATUS_X                10\r
-#constant BT_STATUS_END_X        11\r
+#constant BT_COLOR_Y   11\r
+#constant BT_COLOR_END_Y   12\r
+#constant BT_CAR_LEFT_Y   13\r
+#constant BT_CAR_LEFT_END_Y   14\r
+#constant BT_CAR_RIGHT_Y   15\r
+#constant BT_CAR_RIGHT_END_Y   16\r
+#constant BT_X_0    17\r
+\r
+#constant BT_S_RBRUSH_X           0\r
+#constant BT_S_BDOOR_X            1\r
+#constant BT_D_RBRUSH_X           2\r
+#constant BT_D_BAGR_X               3\r
+#constant BT_D_BAGR_END_X       4\r
+#constant BT_GET_READY_X         5\r
+#constant BT_GET_READY_END_X 6\r
+#constant BT_START_X                   7\r
+#constant BT_START_END_X          8\r
+#constant BT_STATUS_X                9\r
+#constant BT_STATUS_END_X        10\r
+#constant BT_COLOR_X                11\r
+#constant BT_COLOR_END_X        12\r
+#constant BT_CAR_LEFT_X   13\r
+#constant BT_CAR_LEFT_END_X   14\r
+#constant BT_CAR_RIGHT_X   15\r
+#constant BT_CAR_RIGHT_END_X   16\r
 \r
 #constant VOLTAGE33 0\r
 #constant VOLTAGE50 1\r
 #constant VOLTAGE80 2\r
 #constant VOLTAGE_BAT 3\r
 \r
+#constant COLOR_RED 1\r
+#constant COLOR_BLUE 0\r
+\r
+#constant CAR_LEFT 1\r
+#constant CAR_RIGHT 2\r
+\r
+#constant BLUE_BALL 1\r
+#constant RED_BALL 2\r
+#constant NO_BALL 3\r
+\r
+#constant HW_STATUS_OK 1\r
+\r
+#constant HW1 1\r
+#constant HW2 2\r
+#constant HW3 3\r
+#constant HW4 4\r
+#constant HW5 5\r
+#constant HW6 6\r
+\r
 var msg_buff[MSG_BUFF_LEN];\r
 var bt_x[20];\r
 var bt_y[20];\r
@@ -114,6 +154,12 @@ var game_color;
 var fsm_state[41];\r
 var fsm_state_len;\r
 \r
+var balls_state[5];\r
+var ball_up;\r
+var ball_down;\r
+\r
+var current_color;\r
+\r
 var isStatus;\r
 var isControl;\r
 \r
@@ -152,6 +198,14 @@ func bt_bagr_drive(var state, var color)
     gfx_Button(state, bt_x[BT_D_BAGR_X], bt_y[BT_D_ROW2_Y], color, WHITE, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_BAGR_DRIVE);\r
 endfunc\r
 \r
+func bt_carousel_left(var state, var color)\r
+    gfx_Button(state, bt_x[BT_CAR_LEFT_X], bt_y[BT_CAR_LEFT_Y], color, WHITE, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_CAR_LEFT);\r
+endfunc\r
+\r
+func bt_carousel_right(var state, var color)\r
+    gfx_Button(state, bt_x[BT_CAR_RIGHT_X], bt_y[BT_CAR_RIGHT_Y], color, WHITE, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_CAR_RIGHT);\r
+endfunc\r
+\r
 func bt_get_ready(var state, var color)\r
     gfx_Button(state, bt_x[BT_GET_READY_X], bt_y[BT_GET_READY_Y], color, WHITE, FONT4, TEXTWIDTH, TEXTHEIGHT, TXT_BT_GET_READY);\r
 endfunc\r
@@ -164,6 +218,10 @@ func bt_status(var state, var color, var text)
     gfx_Button(state, bt_x[BT_STATUS_X], bt_y[BT_STATUS_Y], color, WHITE, FONT3, TEXTWIDTH, TEXTHEIGHT, text);\r
 endfunc\r
 \r
+func bt_color(var state, var color)\r
+    gfx_Button(state, bt_x[BT_COLOR_X], bt_y[BT_COLOR_Y], color, WHITE, FONT4, TEXTWIDTH, TEXTHEIGHT, TXT_BT_COLOR);\r
+endfunc\r
+\r
 //----------------------------------------------------------------------------------------------------\r
 func draw_voltage33()\r
     var col_rect;\r
@@ -312,6 +370,65 @@ func draw_carousel_pos(var up, var down)
     return 0;\r
 endfunc\r
 \r
+func update_balls()\r
+    \r
+    gfx_Set(0,0);\r
+    if(balls_state[0]==BLUE_BALL)\r
+        gfx_Circle(24, 150, 22, BLUE);\r
+    endif\r
+    if(balls_state[0]==RED_BALL)\r
+        gfx_Circle(24, 150, 22, RED);\r
+    endif\r
+    if(balls_state[0]==NO_BALL)\r
+        gfx_Circle(24, 150, 22, GRAY);\r
+    endif\r
+    \r
+    if(balls_state[1]==BLUE_BALL)\r
+        gfx_Circle(72, 150, 22, BLUE);\r
+    endif\r
+    if(balls_state[1]==RED_BALL)\r
+        gfx_Circle(72, 150, 22, RED);\r
+    endif\r
+    if(balls_state[1]==NO_BALL)\r
+        gfx_Circle(72, 150, 22, GRAY);\r
+    endif\r
+\r
+    if(balls_state[2]==BLUE_BALL)\r
+        gfx_Circle(120, 150, 22, BLUE);\r
+    endif\r
+    if(balls_state[2]==RED_BALL)\r
+        gfx_Circle(120, 150, 22, RED);\r
+    endif\r
+    if(balls_state[2]==NO_BALL)\r
+        gfx_Circle(120, 150, 22, GRAY);\r
+    endif\r
+\r
+    if(balls_state[3]==BLUE_BALL)\r
+        gfx_Circle(168, 150, 22, BLUE);\r
+    endif\r
+    if(balls_state[3]==RED_BALL)\r
+        gfx_Circle(168, 150, 22, RED);\r
+    endif\r
+    if(balls_state[3]==NO_BALL)\r
+        gfx_Circle(168, 150, 22, GRAY);\r
+    endif    \r
+    \r
+    if(balls_state[4]==BLUE_BALL)\r
+        gfx_Circle(216, 150, 22, BLUE);\r
+    endif\r
+    if(balls_state[4]==RED_BALL)\r
+        gfx_Circle(216, 150, 22, RED);\r
+    endif\r
+    if(balls_state[4]==NO_BALL)\r
+        gfx_Circle(216, 150, 22, GRAY);\r
+    endif\r
+    \r
+    draw_carousel_pos(ball_up, ball_down);\r
+    return 0;\r
+endfunc\r
+\r
+\r
+\r
 func draw_position()\r
     txt_Set(FONT_SIZE, FONT3);\r
     txt_MoveCursor(21, 6);           // move the cursor to line 4, column 5\r
@@ -337,20 +454,104 @@ func draw_position()
     return 0;\r
 endfunc\r
 \r
-func draw_hw1()\r
+func draw_hw1(var status)\r
+    txt_Set(FONT_SIZE, FONT3);\r
+    txt_Set(TEXT_COLOUR, WHITE);\r
+    \r
+    if(status==HW_STATUS_OK)\r
+        gfx_Rectangle(0,193,79,218,GREEN);\r
+    else\r
+        gfx_Rectangle(0,193,79,218,RED);\r
+    endif\r
+\r
+    txt_MoveCursor(17,1);\r
+    putstr("HW1");\r
+endfunc\r
+\r
+func draw_hw2(var status)\r
+    txt_Set(FONT_SIZE, FONT3);\r
+    txt_Set(TEXT_COLOUR, WHITE);\r
+    \r
+    if(status==HW_STATUS_OK)\r
+        gfx_Rectangle(81,193,159,218,GREEN);\r
+        else\r
+        gfx_Rectangle(81,193,159,218,RED);\r
+        endif\r
+    txt_MoveCursor(17,11);\r
+    putstr("HW2");\r
+endfunc\r
+\r
+func draw_hw3(var status)\r
+    txt_Set(FONT_SIZE, FONT3);\r
+    txt_Set(TEXT_COLOUR, WHITE);\r
+    \r
+    if(status==HW_STATUS_OK)\r
+        gfx_Rectangle(161,193,240,218,GREEN);\r
+        else\r
+        gfx_Rectangle(161,193,240,218,RED);\r
+    endif\r
+\r
+    txt_MoveCursor(17,21);\r
+    putstr("HW3");\r
+endfunc\r
+\r
+func draw_hw4(var status)\r
+    txt_Set(FONT_SIZE, FONT3);\r
+    txt_Set(TEXT_COLOUR, WHITE);\r
+    \r
+    if(status==HW_STATUS_OK)\r
+        gfx_Rectangle(0,220,79,245,GREEN);\r
+        else\r
+        gfx_Rectangle(0,220,79,245,RED);\r
+    endif\r
+    \r
+    txt_MoveCursor(19,1);\r
+    putstr("HW4");\r
+endfunc\r
+\r
+func draw_hw5(var status)\r
+    txt_Set(FONT_SIZE, FONT3);\r
+    txt_Set(TEXT_COLOUR, WHITE);\r
+    \r
+    if(status==HW_STATUS_OK)\r
+        gfx_Rectangle(81,220,159,245,GREEN);\r
+        else\r
+        gfx_Rectangle(81,220,159,245,RED);\r
+    endif\r
+    \r
+    txt_MoveCursor(19,11);\r
+    putstr("HW5");\r
+endfunc\r
+\r
+func draw_hw6(var status)\r
+    txt_Set(FONT_SIZE, FONT3);\r
+    txt_Set(TEXT_COLOUR, WHITE);\r
+    \r
+    if(status==HW_STATUS_OK)\r
+        gfx_Rectangle(161,220,240,245,GREEN);\r
+        else\r
+        gfx_Rectangle(161,220,240,245,RED);\r
+    endif\r
+    \r
+    txt_MoveCursor(19,21);\r
+    putstr("HW6");\r
+endfunc\r
+\r
+func draw_hw()\r
     txt_Set(FONT_SIZE, FONT3);\r
     txt_MoveCursor(15, 10);           // move the cursor to line 4, column 5\r
     txt_Set(TEXT_COLOUR, RED);\r
     \r
     putstr("HW STATUS");\r
     \r
-    gfx_Rectangle(0,193,79,218,GREEN);\r
-    gfx_Rectangle(81,193,159,218,GREEN);\r
-    gfx_Rectangle(161,193,240,218,GREEN);\r
-    \r
-    gfx_Rectangle(0,220,79,245,GREEN);\r
-    gfx_Rectangle(81,220,159,245,GREEN);\r
-    gfx_Rectangle(161,220,240,245,GREEN);\r
+    txt_Set(TEXT_COLOUR, WHITE);\r
+\r
+    draw_hw1(HW_STATUS_OK);\r
+    draw_hw2(HW_STATUS_OK);\r
+    draw_hw3(HW_STATUS_OK);\r
+    draw_hw4(HW_STATUS_OK);\r
+    draw_hw5(HW_STATUS_OK);\r
+    draw_hw6(HW_STATUS_OK);\r
     return 0;\r
 endfunc\r
 \r
@@ -469,6 +670,45 @@ func switch_to_control_done()
     until(idx==len)\r
 endfunc\r
 \r
+func move_carousel(var dir)\r
+    var len,idx;\r
+    \r
+    out_msg_buff[0] := MSG_START;\r
+    if(dir==CAR_LEFT)\r
+    out_msg_buff[1] := MSG_CAR_LEFT;\r
+    else\r
+        if(dir==CAR_RIGHT)\r
+            out_msg_buff[1] := MSG_CAR_RIGHT;\r
+        endif\r
+    endif\r
+    out_msg_buff[2] := MSG_TERM_LF;\r
+\r
+    len := 3;\r
+    idx := 0;\r
+    \r
+    repeat\r
+        serout(out_msg_buff[idx]);\r
+        idx++;\r
+    until(idx==len)\r
+endfunc\r
+\r
+func set_color(var des_col)\r
+    var len,idx;\r
+    \r
+    out_msg_buff[0] := MSG_START;\r
+    out_msg_buff[1] := MSG_SET_COLOR;\r
+    out_msg_buff[2] := des_col;\r
+    out_msg_buff[3] := MSG_TERM_LF;\r
+\r
+    len := 4;\r
+    idx := 0;\r
+    \r
+    repeat\r
+        serout(out_msg_buff[idx]);\r
+        idx++;\r
+    until(idx==len)\r
+endfunc\r
+\r
 func draw_ctrl_titles()\r
     txt_Set(FONT_SIZE, FONT3);\r
     txt_Set(TEXT_COLOUR, RED);\r
@@ -509,11 +749,23 @@ func draw_drives_buttons()
     bt_y[BT_D_ROW2_Y] := gfx_Get(3);\r
 \r
 // SECOND ROW\r
-    bt_x[BT_D_BAGR_X] := 80;\r
+    bt_x[BT_D_BAGR_X] := 0;\r
     bt_bagr_drive(UP, BLUE);\r
     \r
     bt_y[BT_D_ROW2_END_Y] := gfx_Get(3);\r
     bt_x[BT_D_BAGR_END_X] := gfx_Get(2);\r
+\r
+    bt_y[BT_CAR_LEFT_Y] := bt_y[BT_D_ROW2_Y];\r
+    bt_x[BT_CAR_LEFT_X] := bt_x[BT_D_BAGR_END_X];\r
+    bt_carousel_left(UP, BLUE);\r
+    bt_y[BT_CAR_LEFT_END_Y] := bt_y[BT_D_ROW2_END_Y];\r
+    bt_x[BT_CAR_LEFT_END_X] := gfx_Get(2);\r
+    \r
+    bt_y[BT_CAR_RIGHT_Y] := bt_y[BT_D_ROW2_Y];\r
+    bt_x[BT_CAR_RIGHT_X] := gfx_Get(2);\r
+    bt_carousel_right(UP, BLUE);\r
+    bt_y[BT_CAR_RIGHT_END_Y] := bt_y[BT_D_ROW2_END_Y];\r
+    bt_x[BT_CAR_RIGHT_END_X] := gfx_Get(3);\r
 endfunc\r
 \r
 func draw_robot_control_buttons()\r
@@ -531,6 +783,15 @@ func draw_robot_control_buttons()
 \r
     bt_x[BT_START_END_X] := gfx_Get(2);\r
     bt_y[BT_START_END_Y] := gfx_Get(3);\r
+    \r
+    bt_x[BT_COLOR_X] := 30;\r
+    bt_y[BT_COLOR_Y] := bt_y[BT_START_END_Y] + 5;\r
+    \r
+    bt_color(UP, BLUE);\r
+    \r
+    bt_x[BT_COLOR_END_X] := gfx_Get(2);\r
+    bt_y[BT_COLOR_END_Y] := gfx_Get(3);\r
+    \r
 endfunc\r
 \r
 func draw_status_button()\r
@@ -570,7 +831,7 @@ func draw_status()
 \r
     draw_balls();\r
     draw_carousel_pos(3, 2);\r
-    draw_hw1();\r
+    draw_hw();\r
     draw_position();\r
     draw_control_button();\r
     return 0;\r
@@ -587,7 +848,6 @@ endfunc
 \r
 func process_msg()\r
     var idx;\r
-    \r
     if(msg_buff[0]==CHANGE_MODE_REP)\r
         if(msg_buff[1]==CHANGE_MODE_STATUS)\r
             draw_status();\r
@@ -629,7 +889,6 @@ func process_msg()
         draw_voltage50();\r
         draw_voltage80();\r
         draw_voltageBAT();\r
-\r
     endif\r
     if((msg_buff[0]==MSG_POSITION)&&(isStatus==1))\r
         idx:=1;\r
@@ -655,6 +914,50 @@ func process_msg()
             game_color := BLUE;\r
         endif\r
     endif\r
+    if((msg_buff[0]==MSG_SET_COLOR))\r
+        if(msg_buff[1]==COLOR_BLUE)\r
+            current_color:=COLOR_BLUE;\r
+            if(isControl==1)\r
+                bt_color(UP, BLUE);\r
+            endif\r
+        endif\r
+        if(msg_buff[1]==COLOR_RED)\r
+            current_color:=COLOR_RED;\r
+            if(isControl==1)\r
+                bt_color(DOWN, RED);\r
+            endif\r
+        endif\r
+    endif\r
+    if((msg_buff[0]==MSG_BALLS)&&(isStatus==1))\r
+        balls_state[0]:=msg_buff[1];\r
+        balls_state[1]:=msg_buff[2];\r
+        balls_state[2]:=msg_buff[3];\r
+        balls_state[3]:=msg_buff[4];\r
+        balls_state[4]:=msg_buff[5];\r
+        ball_up:=msg_buff[6];\r
+        ball_down:=msg_buff[7];\r
+        update_balls();\r
+    endif\r
+    if((msg_buff[0]==MSG_HW_STATUS)&&(isStatus==1))\r
+        if(msg_buff[1]==HW1)\r
+            draw_hw1(msg_buff[2]);\r
+        endif\r
+        if(msg_buff[1]==HW2)\r
+            draw_hw2(msg_buff[2]);\r
+        endif\r
+        if(msg_buff[1]==HW3)\r
+            draw_hw3(msg_buff[2]);\r
+        endif\r
+        if(msg_buff[1]==HW4)\r
+            draw_hw4(msg_buff[2]);\r
+        endif\r
+        if(msg_buff[1]==HW5)\r
+            draw_hw5(msg_buff[2]);\r
+        endif\r
+        if(msg_buff[1]==HW6)\r
+            draw_hw6(msg_buff[2]);\r
+        endif\r
+    endif\r
     return 0;\r
 endfunc\r
 \r
@@ -714,6 +1017,14 @@ func bt_pressed_d_row2(var x)
         bt_bagr_drive(DOWN, GREEN);\r
         set_actuators(MSG_BAGR_DRIVE);\r
     endif\r
+    if((x>bt_x[BT_CAR_LEFT_X])&&(x<bt_x[BT_CAR_LEFT_END_X]))\r
+        bt_carousel_left(DOWN, GREEN);\r
+        move_carousel(CAR_LEFT);\r
+    endif\r
+    if(x>bt_x[BT_CAR_RIGHT_X])\r
+        bt_carousel_right(DOWN, GREEN);\r
+        move_carousel(CAR_RIGHT);\r
+    endif\r
 endfunc\r
 \r
 func bt_pressed_get_ready()\r
@@ -734,6 +1045,20 @@ func bt_pressed_control()
     bt_status(DOWN, GREEN, TXT_BT_CONTROL);\r
 endfunc\r
 \r
+func bt_pressed_color()\r
+    if(current_color==COLOR_RED)\r
+        bt_color(UP, BLUE);\r
+        set_color(COLOR_BLUE);\r
+        current_color := COLOR_BLUE;\r
+    else\r
+        if(current_color==COLOR_BLUE)\r
+            bt_color(DOWN, RED);\r
+            set_color(COLOR_RED);\r
+            current_color := COLOR_RED;\r
+        endif\r
+    endif\r
+endfunc\r
+\r
 func bt_unpressed_s_row1(var x)\r
     if(x<bt_x[BT_S_RBRUSH_X])\r
         bt_lbrush_servo(UP, BLUE);\r
@@ -762,6 +1087,12 @@ func bt_unpressed_d_row2(var x)
     if((x>bt_x[BT_D_BAGR_X])&&(x<bt_x[BT_D_BAGR_END_X]))\r
         bt_bagr_drive(UP, BLUE);\r
     endif\r
+    if((x>bt_x[BT_CAR_LEFT_X])&&(x<bt_x[BT_CAR_LEFT_END_X]))\r
+        bt_carousel_left(UP, BLUE);\r
+    endif\r
+    if(x>bt_x[BT_CAR_RIGHT_X])\r
+        bt_carousel_right(UP, BLUE);\r
+    endif\r
 endfunc\r
 \r
 func bt_unpressed_get_ready()\r
@@ -818,6 +1149,10 @@ func touchscreen()
             if((y > bt_y[BT_START_Y])&&(y<bt_y[BT_START_END_Y])&&(x>bt_x[BT_START_X])&&(x<bt_x[BT_START_END_X]))\r
                 bt_pressed_start();\r
             endif\r
+            \r
+            if((y > bt_y[BT_COLOR_Y])&&(y<bt_y[BT_COLOR_END_Y])&&(x>bt_x[BT_COLOR_X])&&(x<bt_x[BT_COLOR_END_X]))\r
+                bt_pressed_color();\r
+            endif\r
 \r
             if(y > bt_y[BT_STATUS_Y])\r
                 bt_pressed_status();\r
@@ -888,6 +1223,7 @@ func main()
     touch_Set(2); \r
     isStatus := 1;\r
     isControl := 0;\r
+    current_color := COLOR_BLUE;\r
     draw_status();\r
 //    draw_control();\r
 \r
@@ -901,15 +1237,3 @@ func main()
     forever\r
 endfunc\r
 \r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r