]> rtime.felk.cvut.cz Git - eurobot/public.git/commitdiff
fsmdisplay and uoled: added functions for indication of balls,
authorMartin Zidek <zidekm1@gmail.com>
Thu, 1 May 2008 04:39:06 +0000 (06:39 +0200)
committerMartin Zidek <martin@martinzidek.com>
Thu, 1 May 2008 04:39:06 +0000 (06:39 +0200)
   added config.omk to .gitignore and removed old
   display application

build/linux/.gitignore
src/disp-4dgl/.gitignore [new file with mode: 0644]
src/disp-4dgl/control.4dg
src/disp-4dgl/display.4dg [deleted file]
src/robofsm/eb2008/fsmdisplay.cc
src/robofsm/eb2008/roboevent_eb2008.py
src/ulcdd/oledlib.cc
src/ulcdd/oledlib.h
src/ulcdd/uoled.c
src/ulcdd/uoled.h

index 8e695ec83aa8b1d596183b26206a514576570fff..db598ef44c13ae52490336e12cfb445dc305ad29 100644 (file)
@@ -1 +1,2 @@
 doc
+config.omk
diff --git a/src/disp-4dgl/.gitignore b/src/disp-4dgl/.gitignore
new file mode 100644 (file)
index 0000000..938b5e3
--- /dev/null
@@ -0,0 +1,2 @@
+display.4dg
+pokus.4dg
index dd5d33793903189dc974e1a2a89f205537accc13..873bc0f2167d500b7d6cc5a4bd264d2d56396212 100644 (file)
 #constant CAR_LEFT 1\r
 #constant CAR_RIGHT 2\r
 \r
+#constant NO_BALL 0\r
 #constant BLUE_BALL 1\r
 #constant RED_BALL 2\r
-#constant NO_BALL 3\r
+#constant WHITE_BALL 3\r
 \r
 #constant HW_STATUS_OK 1\r
 \r
@@ -382,6 +383,9 @@ func update_balls()
     if(balls_state[0]==NO_BALL)\r
         gfx_Circle(24, 150, 22, GRAY);\r
     endif\r
+    if(balls_state[0]==WHITE_BALL)\r
+        gfx_Circle(24, 150, 22, WHITE);\r
+    endif\r
     \r
     if(balls_state[1]==BLUE_BALL)\r
         gfx_Circle(72, 150, 22, BLUE);\r
@@ -392,6 +396,9 @@ func update_balls()
     if(balls_state[1]==NO_BALL)\r
         gfx_Circle(72, 150, 22, GRAY);\r
     endif\r
+    if(balls_state[1]==WHITE_BALL)\r
+        gfx_Circle(72, 150, 22, WHITE);\r
+    endif\r
 \r
     if(balls_state[2]==BLUE_BALL)\r
         gfx_Circle(120, 150, 22, BLUE);\r
@@ -402,6 +409,9 @@ func update_balls()
     if(balls_state[2]==NO_BALL)\r
         gfx_Circle(120, 150, 22, GRAY);\r
     endif\r
+    if(balls_state[2]==WHITE_BALL)\r
+        gfx_Circle(120, 150, 22, WHITE);\r
+    endif\r
 \r
     if(balls_state[3]==BLUE_BALL)\r
         gfx_Circle(168, 150, 22, BLUE);\r
@@ -412,6 +422,9 @@ func update_balls()
     if(balls_state[3]==NO_BALL)\r
         gfx_Circle(168, 150, 22, GRAY);\r
     endif    \r
+    if(balls_state[3]==WHITE_BALL)\r
+        gfx_Circle(168, 150, 22, WHITE);\r
+    endif    \r
     \r
     if(balls_state[4]==BLUE_BALL)\r
         gfx_Circle(216, 150, 22, BLUE);\r
@@ -422,8 +435,11 @@ func update_balls()
     if(balls_state[4]==NO_BALL)\r
         gfx_Circle(216, 150, 22, GRAY);\r
     endif\r
+    if(balls_state[4]==WHITE_BALL)\r
+        gfx_Circle(216, 150, 22, WHITE);\r
+    endif\r
     \r
-    draw_carousel_pos(ball_up, ball_down);\r
+//    draw_carousel_pos(ball_up, ball_down);\r
     return 0;\r
 endfunc\r
 \r
@@ -1237,3 +1253,5 @@ func main()
     forever\r
 endfunc\r
 \r
+\r
+\r
diff --git a/src/disp-4dgl/display.4dg b/src/disp-4dgl/display.4dg
deleted file mode 100644 (file)
index 520b780..0000000
+++ /dev/null
@@ -1,576 +0,0 @@
-#platform "uOLED-32028-PMD3T"\r
-\r
-/*           4DGL Demo Application\r
-       -  Packed String Manipulation   -\r
-            -- PICASO Platform --\r
-*/\r
-\r
-\r
-#inherit "4DGL_16bitColours.fnc"\r
-\r
-#constant NEWLINE $print("\n")      // a macro for carriage return\r
-#constant LEFT_BT1 0\r
-#constant TOP_BT  290\r
-\r
-#constant MODE_CONS 0\r
-#constant MODE_STATUS 1\r
-#constant MODE_MAP 2\r
-#constant MODE_MISC 3\r
-\r
-#constant MSG_START 150\r
-#constant MSG_VOLTAGE 160\r
-#constant MSG_FSM_STATE 161\r
-#constant MSG_BALLS 162\r
-#constant MSG_HW_STATUS 163\r
-#constant MSG_COLOR 164\r
-#constant MSG_POSITION 165\r
-#constant CHANGE_MODE_REP 200\r
-#constant CHANGE_MODE_OK 201\r
-\r
-#constant MSG_TERM 254\r
-\r
-#constant MSG_BUFF_LEN 20\r
-\r
-#constant TEXTWIDTH  1\r
-#constant TEXTHEIGHT 1    \r
-#constant TXT_BT_1 $"CONS"\r
-#constant TXT_BT_2 $"STATUS"\r
-#constant TXT_BT_3 $" MAP "\r
-#constant TXT_BT_4 $" MISC "\r
-\r
-#constant VOLTAGE_OK 1\r
-\r
-\r
-    var bt_x[4];\r
-    var mode_change[4];\r
-\r
-    var voltage33[4];\r
-    var voltage50[4];\r
-    var voltage80[4];\r
-    var voltageBAT[5];\r
-    \r
-    var position[8];\r
-    var color;\r
-    var fsm_state[41];\r
-    var fsm_state_len;\r
-\r
-    var msg_buff[MSG_BUFF_LEN];\r
-    var msg_len;\r
-\r
-    var cnt, ch, rep;\r
-    \r
-    var isConsole, isStatus, isMap, isMisc;\r
-    \r
-    var state, x, y;\r
-    \r
-    var change_mode_req_flag;\r
-\r
-func draw_voltage33(var status, var value)\r
-    var col_rect;\r
-\r
-    if(status==VOLTAGE_OK)\r
-        col_rect := RED;\r
-    else\r
-        col_rect := GREEN;\r
-    endif\r
-\r
-    gfx_Rectangle(0,10,60,50,col_rect);\r
-    gfx_Line(59, 10, 59, 50, BLACK);\r
-    txt_Set(TEXT_COLOUR, WHITE);\r
-    txt_Set(FONT_SIZE, FONT3);\r
-    txt_MoveCursor(1,1);\r
-    putstr("3,30V");\r
-    txt_Set(FONT_SIZE, FONT4);\r
-    txt_MoveCursor(2,0);\r
-    print([CHR] voltage33[0]);\r
-    print([CHR] voltage33[1]);\r
-    print([CHR] voltage33[2]);\r
-    print([CHR] voltage33[3]);\r
-endfunc\r
-\r
-func draw_voltage50(var status, var value)\r
-    var col_rect;\r
-\r
-    if(status==VOLTAGE_OK)\r
-        col_rect := RED;\r
-    else\r
-        col_rect := GREEN;\r
-    endif\r
-\r
-    gfx_Rectangle(60,10,120,50,col_rect);\r
-    gfx_Line(119, 10, 119, 50, BLACK);\r
-    txt_Set(TEXT_COLOUR, WHITE);\r
-    txt_Set(FONT_SIZE, FONT3);\r
-    txt_MoveCursor(1,9);\r
-    putstr("5,00V");\r
-    txt_Set(FONT_SIZE, FONT4);\r
-    txt_MoveCursor(2,5);\r
-    print([CHR] voltage50[0]);\r
-    print([CHR] voltage50[1]);\r
-    print([CHR] voltage50[2]);\r
-    print([CHR] voltage50[3]);\r
-endfunc\r
-\r
-func draw_voltage80(var status, var value)\r
-    var col_rect;\r
-\r
-    if(status==VOLTAGE_OK)\r
-        col_rect := RED;\r
-    else\r
-        col_rect := GREEN;\r
-    endif\r
-\r
-    gfx_Rectangle(120,10,180,50,col_rect);\r
-    gfx_Line(179, 10, 179, 50, BLACK);\r
-    txt_Set(TEXT_COLOUR, WHITE);\r
-    txt_Set(FONT_SIZE, FONT3);\r
-    txt_MoveCursor(1,17);\r
-    putstr("8,00V");\r
-    txt_Set(FONT_SIZE, FONT4);\r
-    txt_MoveCursor(2,10);\r
-    print([CHR] voltage80[0]);\r
-    print([CHR] voltage80[1]);\r
-    print([CHR] voltage80[2]);\r
-    print([CHR] voltage80[3]);\r
-endfunc\r
-\r
-func draw_voltageBAT(var status, var value)\r
-    var col_rect;\r
-\r
-    if(status==VOLTAGE_OK)\r
-        col_rect := RED;\r
-    else\r
-        col_rect := GREEN;\r
-    endif\r
-\r
-    gfx_Rectangle(180,10,240,50,col_rect);\r
-    txt_Set(TEXT_COLOUR, WHITE);\r
-    txt_Set(FONT_SIZE, FONT3);\r
-    txt_MoveCursor(1,25);\r
-    putstr("BATT");\r
-    txt_Set(FONT_SIZE, FONT4);\r
-    txt_MoveCursor(2,15);\r
-    print([CHR] voltageBAT[0]);\r
-    print([CHR] voltageBAT[1]);\r
-    print([CHR] voltageBAT[2]);\r
-    print([CHR] voltageBAT[3]);\r
-    print([CHR] voltageBAT[4]);\r
-endfunc\r
-\r
-func draw_fsm_state()\r
-    var idx;\r
-    txt_Set(FONT_SIZE, FONT3);\r
-    txt_MoveCursor(5, 6);           // move the cursor to line 4, column 5\r
-    txt_Set(TEXT_COLOUR, RED);\r
-    \r
-    putstr("CURRENT FSM STATE");\r
-    gfx_Rectangle(0, 70, 239, 100, BLACK);\r
-    txt_Set(FONT_SIZE, FONT4);\r
-    txt_MoveCursor(5, 0);           // move the cursor to line 4, column 5\r
-    txt_Set(TEXT_COLOUR, WHITE);\r
-    idx:=0;\r
-    repeat\r
-        print([CHR] fsm_state[idx]);\r
-        idx++;\r
-    until(idx==fsm_state_len)\r
-endfunc\r
-\r
-func draw_balls()\r
-    txt_Set(FONT_SIZE, FONT3);\r
-    txt_MoveCursor(9, 12);           // move the cursor to line 4, column 5\r
-    txt_Set(TEXT_COLOUR, RED);\r
-    \r
-    putstr("BALLS");\r
-    gfx_Set(0,0);\r
-    gfx_Circle(24, 150, 22, BLUE);\r
-    gfx_Circle(72, 150, 22, BLUE);\r
-    gfx_Circle(120, 150, 22, RED);\r
-    gfx_Circle(168, 150, 22, BLUE);\r
-    gfx_Circle(216, 150, 22, WHITE);\r
-endfunc\r
-\r
-func draw_carousel_pos(var up, var down)\r
-    var x_up, x_down;\r
-\r
-    x_up  := up*48 + 24;\r
-    x_down := down*48 + 24;\r
-    \r
-    gfx_Set(1,0);\r
-    gfx_Triangle(x_up-15, 160, x_up+15, 160, x_up, 135, BLACK);\r
-    gfx_Triangle(x_down, 165, x_down+15, 140, x_down-15, 140, BLACK);\r
-endfunc\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
-    txt_Set(TEXT_COLOUR, RED);\r
-    \r
-    putstr("POSITION AND COLOR");\r
-\r
-    gfx_Rectangle(0,266,239,289,color);\r
-    txt_Set(FONT_SIZE, FONT4);\r
-    txt_Set(TEXT_COLOUR, WHITE);\r
-    txt_MoveCursor(17,0);\r
-    print("X,Y: ");\r
-    print([CHR] position[0]);\r
-    print([CHR] position[1]);\r
-    print([CHR] position[2]);\r
-    print([CHR] position[3]);\r
-    print(" ");\r
-    print([CHR] position[4]);\r
-    print([CHR] position[5]);\r
-    print([CHR] position[6]);\r
-    print([CHR] position[7]);\r
-    print(" [m]");\r
-    \r
-endfunc\r
-\r
-func draw_hw1()\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
-endfunc\r
-    \r
-func draw_status() \r
-    txt_Set(FONT_SIZE, FONT3);\r
-    txt_MoveCursor(0, 12);           // move the cursor to line 4, column 5\r
-    txt_Set(TEXT_COLOUR, RED);\r
-    \r
-    putstr("VOLTAGE");\r
-    draw_voltage33(0, 1);\r
-    draw_voltage50(0, 1);\r
-    draw_voltage80(0, 1);\r
-    draw_voltageBAT(0, 1);\r
-    \r
-    fsm_state_len := 1;\r
-    draw_fsm_state();\r
-\r
-    draw_balls();\r
-    draw_carousel_pos(3, 2);\r
-    draw_hw1();\r
-    draw_position();\r
-endfunc\r
-\r
-func draw_misc()\r
-    txt_Set(FONT_SIZE, FONT4);\r
-    txt_MoveCursor(0, 9);           // move the cursor to line 4, column 5\r
-    txt_Set(TEXT_COLOUR, RED);\r
-    putstr("MISC");\r
-endfunc\r
-\r
-func draw_console()\r
-    gfx_Cls();\r
-    \r
-    gfx_Set(1, BLACK);\r
-    txt_Set(2, 0); \r
-    \r
-    bt_x[0] := 0;\r
-    gfx_Button(UP, bt_x[0], TOP_BT, BLUE, RED, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_1);\r
-    bt_x[1] := gfx_Get(2);\r
-    gfx_Button(UP, bt_x[1], TOP_BT, BLUE, RED, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_2);\r
-    bt_x[2] := gfx_Get(2);\r
-    gfx_Button(UP, bt_x[2], TOP_BT, BLUE, RED, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_3);\r
-    bt_x[3] := gfx_Get(2);\r
-    gfx_Button(UP, bt_x[3], TOP_BT, BLUE, RED, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_4);\r
-    txt_MoveCursor(0, 0);\r
-    return;\r
-endfunc\r
-\r
-func clear_screen()\r
-    gfx_Rectangle(0, 0, 239, 284, BLACK);   // clear the text portion of the display, much faster than redrawing the whole screen.\r
-    txt_MoveCursor(0, 0);\r
-    return;\r
-endfunc\r
-\r
-func get_msg()\r
-    var in, idx;\r
-\r
-    idx:=0;\r
-\r
-    repeat\r
-        in:=serin();\r
-        if(in!=-1)\r
-            msg_buff[idx] := in;\r
-            idx++;\r
-        endif\r
-    until((in==MSG_TERM)||(idx==MSG_BUFF_LEN))\r
-    msg_len := idx;\r
-\r
-endfunc\r
-\r
-func print_msg_buff()\r
-    var idx;\r
-    idx:=0;\r
-    repeat\r
-        print(msg_buff[idx],",");\r
-        idx++;\r
-    until(idx==msg_len-1)\r
-endfunc\r
-\r
-func print_ser()\r
-    \r
-    print([CHR]ch);\r
-    cnt++;\r
-    if(cnt==1400)\r
-        clear_screen();\r
-        cnt := 0;\r
-    endif\r
-    \r
-endfunc\r
-\r
-\r
-\r
-func set_mode(var mode)\r
-    if(mode==MODE_CONS)\r
-        clear_screen();\r
-        putstr("CONSOLE");\r
-    endif\r
-    \r
-    if(mode==MODE_STATUS)\r
-        clear_screen();\r
-        print("STATUS");\r
-    endif\r
-    \r
-    if(mode==MODE_MAP)\r
-        clear_screen();\r
-        print("MAP");\r
-    endif\r
-    \r
-    if(mode==MODE_MISC)\r
-        clear_screen();\r
-        print("MISC");\r
-    endif\r
-endfunc\r
-\r
-func process_msg()\r
-    var idx;\r
-    if(msg_buff[0]==CHANGE_MODE_REP)\r
-        if(msg_buff[1]==CHANGE_MODE_OK)\r
-            set_mode(msg_buff[2]);\r
-            mode_change[msg_buff[2]]:=0;\r
-        else\r
-            print("CHANGE MODE FAILED!!!");\r
-        endif\r
-    endif\r
-    if(msg_buff[0]==MSG_VOLTAGE)\r
-        voltage33[0]:=msg_buff[1];\r
-        voltage33[1]:=msg_buff[2];\r
-        voltage33[2]:=msg_buff[3];\r
-        voltage33[3]:=msg_buff[4];\r
-        \r
-        voltage50[0]:=msg_buff[5];\r
-        voltage50[1]:=msg_buff[6];\r
-        voltage50[2]:=msg_buff[7];\r
-        voltage50[3]:=msg_buff[8];\r
-        \r
-        voltage80[0]:=msg_buff[9];\r
-        voltage80[1]:=msg_buff[10];\r
-        voltage80[2]:=msg_buff[11];\r
-        voltage80[3]:=msg_buff[12];\r
-        \r
-        voltageBAT[0]:=msg_buff[13];\r
-        voltageBAT[1]:=msg_buff[14];\r
-        voltageBAT[2]:=msg_buff[15];\r
-        voltageBAT[3]:=msg_buff[16];\r
-        voltageBAT[4]:=msg_buff[17];\r
-        draw_voltage33(0,0);\r
-        draw_voltage50(0,0);\r
-        draw_voltage80(0,0);\r
-        draw_voltageBAT(0,0);\r
-    endif\r
-    if(msg_buff[0]==MSG_POSITION)\r
-        idx:=1;\r
-        repeat\r
-            position[idx-1] := msg_buff[idx];\r
-            idx++;\r
-        until (msg_buff[idx]==MSG_TERM)\r
-        draw_position();\r
-    endif\r
-    if(msg_buff[0]==MSG_FSM_STATE)\r
-        idx:=1;\r
-        repeat\r
-            fsm_state[idx-1] := msg_buff[idx];\r
-            idx++;\r
-        until(msg_buff[idx]==MSG_TERM)\r
-        fsm_state_len := idx-1;\r
-        draw_fsm_state();\r
-    endif\r
-    if(msg_buff[0]==MSG_COLOR)\r
-        if(msg_buff[1]==1)\r
-            color := RED;\r
-        else\r
-            color := BLUE;\r
-        endif\r
-    endif\r
-endfunc\r
-\r
-func change_mode_rq(var mode)\r
-    mode_change[mode] := 1;\r
-    isConsole := 0;\r
-    serout(mode);    \r
-endfunc\r
-\r
-func change_mode()\r
-    var ch, i;\r
-\r
-    ch := serin();\r
-    i:=0;\r
-    print("CHANGE MODE OK ",ch);\r
-    if(ch==CHANGE_MODE_OK)\r
-        \r
-        repeat\r
-            if(mode_change[i]==1)\r
-                set_mode(i);\r
-                mode_change[i]:=0;\r
-            endif\r
-            i++;\r
-        until (i<4);\r
-\r
-    endif\r
-endfunc\r
-\r
-\r
-\r
-func bt_pressed(var x)\r
-    if(x < bt_x[1]) // CONSOLE button\r
-        change_mode_rq(MODE_CONS);\r
-        gfx_Button(DOWN, bt_x[0], TOP_BT, YELLOW, RED, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_1);\r
-    endif\r
-                \r
-    if((x > bt_x[1]) & (x < bt_x[2])) // STATUS button\r
-        change_mode_rq(MODE_STATUS);\r
-        gfx_Button(DOWN, bt_x[1], TOP_BT, YELLOW, RED, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_2);\r
-    endif\r
-            \r
-    if((x > bt_x[2]) & (x < bt_x[3])) // MAP button\r
-        change_mode_rq(MODE_MAP);\r
-        gfx_Button(DOWN, bt_x[2], TOP_BT, YELLOW, RED, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_3);\r
-    endif\r
-            \r
-    if(x > bt_x[3]) // MISC button\r
-        change_mode_rq(MODE_MISC);\r
-        gfx_Button(DOWN, bt_x[3], TOP_BT, YELLOW, RED, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_4);\r
-    endif\r
-endfunc\r
-\r
-func bt_released(var x)\r
-\r
-endfunc\r
-\r
-func touchscreen()\r
-    var col;\r
-    state := touch_Get(TOUCH_STATUS);               // get touchscreen status\r
-        \r
-        if(state == NOTOUCH)\r
-            return;\r
-        endif\r
-        //-----------------------------------------------------------------------------------------\r
-        if(state == TOUCH_PRESS)                        // if there's a press\r
-            x := touch_Get(TOUCH_GETX);                          \r
-            y := touch_Get(TOUCH_GETY);\r
-            \r
-            if(y > TOP_BT)\r
-                bt_pressed(x);                \r
-            endif            \r
-        endif\r
-        \r
-        //-----------------------------------------------------------------------------------------\r
-        if(state == TOUCH_RELEASE)                      // if there's a release\r
-            if(y > TOP_BT)\r
-                \r
-                if(x < bt_x[1])\r
-                    gfx_Button(UP, 0, TOP_BT, GREEN, RED, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_1);\r
-                    gfx_Button(UP, bt_x[1], TOP_BT, BLUE, RED, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_2);\r
-                    gfx_Button(UP, bt_x[2], TOP_BT, BLUE, RED, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_3);\r
-                    gfx_Button(UP, bt_x[3], TOP_BT, BLUE, RED, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_4);\r
-                endif\r
-                \r
-                if(x > bt_x[1])\r
-                    gfx_Button(UP, 0, TOP_BT, BLUE, RED, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_1);\r
-                    gfx_Button(UP, bt_x[1], TOP_BT, GREEN, RED, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_2);\r
-                    gfx_Button(UP, bt_x[2], TOP_BT, BLUE, RED, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_3);\r
-                    gfx_Button(UP, bt_x[3], TOP_BT, BLUE, RED, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_4);\r
-                endif\r
-            \r
-                if(x > bt_x[2])\r
-                    gfx_Button(UP, 0, TOP_BT, BLUE, RED, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_1);\r
-                    gfx_Button(UP, bt_x[1], TOP_BT, BLUE, RED, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_2);\r
-                    gfx_Button(UP, bt_x[2], TOP_BT, GREEN, RED, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_3);\r
-                    gfx_Button(UP, bt_x[3], TOP_BT, BLUE, RED, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_4);\r
-                endif\r
-            \r
-                if(x > bt_x[3])\r
-                    gfx_Button(UP, 0, TOP_BT, BLUE, RED, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_1);\r
-                    gfx_Button(UP, bt_x[1], TOP_BT, BLUE, RED, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_2);\r
-                    gfx_Button(UP, bt_x[2], TOP_BT, BLUE, RED, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_3);\r
-                    gfx_Button(UP, bt_x[3], TOP_BT, GREEN, RED, FONT3, TEXTWIDTH, TEXTHEIGHT, TXT_BT_4);\r
-                endif\r
-            endif        \r
-\r
-        endif\r
-    \r
-        //-----------------------------------------------------------------------------------------\r
-        if(state == TOUCH_MOVING)                       // if it's moving\r
-            x := touch_Get(TOUCH_GETX);                          \r
-            y := touch_Get(TOUCH_GETY);\r
-            //\r
-            //+++++++++++CODE++++++++++++++++++\r
-            //\r
-        endif\r
-endfunc\r
-\r
-func main()\r
-    var n;\r
-    isConsole := 0;\r
-    isStatus := 1;\r
-    cnt:=0;\r
-    color:=BLACK;\r
-    draw_console();\r
-\r
-    // first, set all the buttons to the up state\r
\r
-    setbaud(BAUD_2400); \r
-    touch_Set(TOUCH_ENABLE);\r
-    touch_Set(2); \r
-    draw_status();\r
-    repeat\r
-        \r
-        touchscreen();\r
-        ch := serin();\r
-        if(ch!=-1)\r
-            if(isConsole==1)\r
-                print_ser();\r
-            else\r
-                if(ch==MSG_START)            \r
-                    get_msg();\r
-                    process_msg();\r
-                endif\r
-            endif\r
-        endif\r
-        \r
-    forever\r
-\r
-endfunc\r
-//----------------------------------------------------------------------------------------//\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
index b95255832a2786e73797075bd9cab77847bea1a6..7de0e4644cd4c437e61638f63f2cc240f77eb89d 100644 (file)
@@ -177,10 +177,12 @@ int process_msg(uint8_t *buff) {
                case SWITCH_TO_STATUS_DONE:
                        wait_flag = false;
                        mode_to_go = MODE_STATUS;
+                       return MODE_STATUS;
                        break;
                case SWITCH_TO_CONTROL_DONE:
                        wait_flag = false;
                        mode_to_go = MODE_CONTROL;
+                       return MODE_CONTROL;
                        break;
                case ACTUATORS:
                        set_actuators(buff[2]);
@@ -204,6 +206,11 @@ int process_msg(uint8_t *buff) {
 FSM_STATE_DECL(disp_init);
 FSM_STATE_DECL(control);
 FSM_STATE_DECL(status);
+FSM_STATE_DECL(status_send_voltage);
+FSM_STATE_DECL(status_send_state);
+FSM_STATE_DECL(status_send_balls);
+FSM_STATE_DECL(status_send_hw);
+FSM_STATE_DECL(status_send_position);
 FSM_STATE_DECL(set_init_mode);
 FSM_STATE_DECL(wait_for_mode_switch);
 
@@ -213,7 +220,6 @@ FSM_STATE(disp_init)
        if (FSM_EVENT == EV_ENTRY) {
                msg_waiting = false;
                init_display();
-//             FSM_TRANSITION(control);
                FSM_TRANSITION(set_init_mode);
        }
 }
@@ -235,6 +241,7 @@ FSM_STATE(set_init_mode)
 FSM_STATE(status)
 {
        uint8_t buff[10];
+       uint8_t ret;
 
        switch (FSM_EVENT) {
                case EV_ENTRY:
@@ -243,53 +250,219 @@ FSM_STATE(status)
                        break;
                case EV_TIMER:
                        uoled_send_voltage(&robot.gorte.pwr_voltage);
+                       uoled_send_state(fsm->state_name, strlen(fsm->state_name));
+                       uoled_set_balls((uint8_t*)&robot.carousel);
                        uoled_send_position(&robot.gorte.est_pos);
                        ROBOT_LOCK(disp);
                        if(msg_waiting) {
                                memcpy(buff, msg, 10);
                                msg_waiting = false;
                                ROBOT_UNLOCK(disp);
-                               switch(process_msg(buff)) {
+                               ret = process_msg(buff);
+                               switch(ret) {
                                        case MODE_CONTROL:
                                                FSM_TRANSITION(wait_for_mode_switch);
                                                break;
                                        default:
-                                               printf("display: request to switch to unknown mode\n");
+                                               printf("display: request to switch to unknown mode %d\n",ret);
                                                break;
                                }
                        }
                        else
                                ROBOT_UNLOCK(disp);
+                       //FSM_TRANSITION(status_send_voltage);
                        FSM_TIMER(1000);
                        break;
-               case EV_SWITCH_TO_CONS:
+               default:
+                       break;
+       }
+}
+
+FSM_STATE(status_send_voltage)
+{
+       uint8_t buff[10];
+       uint8_t ret;
+
+       switch (FSM_EVENT) {
+               case EV_ENTRY:
+                       uoled_send_voltage(&robot.gorte.pwr_voltage);
+                       FSM_TIMER(400);
+                       break;
+               case EV_TIMER:
+                       ROBOT_LOCK(disp);
+                       if(msg_waiting) {
+                               memcpy(buff, msg, 10);
+                               msg_waiting = false;
+                               ROBOT_UNLOCK(disp);
+                               ret = process_msg(buff);
+                               switch(ret) {
+                                       case MODE_CONTROL:
+                                               FSM_TRANSITION(wait_for_mode_switch);
+                                               break;
+                                       default:
+                                               printf("display: request to switch to unknown mode %d\n",ret);
+                                               break;
+                               }
+                       }
+                       else
+                               ROBOT_UNLOCK(disp);
+                       FSM_TRANSITION(status_send_state);
                        break;
-               case EV_SWITCH_TO_STATUS:
+               default:
                        break;
-               case EV_SWITCH_TO_MAP:
+       }
+}
+
+FSM_STATE(status_send_state)
+{
+       uint8_t buff[10];
+       uint8_t ret;
+
+       switch (FSM_EVENT) {
+               case EV_ENTRY:
+                       uoled_send_state(fsm->state_name, strlen(fsm->state_name));
+                       FSM_TIMER(400);
                        break;
-               case EV_SWITCH_TO_MISC:
+               case EV_TIMER:
+                       ROBOT_LOCK(disp);
+                       if(msg_waiting) {
+                               memcpy(buff, msg, 10);
+                               msg_waiting = false;
+                               ROBOT_UNLOCK(disp);
+                               ret = process_msg(buff);
+                               switch(ret) {
+                                       case MODE_CONTROL:
+                                               FSM_TRANSITION(wait_for_mode_switch);
+                                               break;
+                                       default:
+                                               printf("display: request to switch to unknown mode %d\n",ret);
+                                               break;
+                               }
+                       }
+                       else
+                               ROBOT_UNLOCK(disp);
+                       FSM_TRANSITION(status_send_balls);
                        break;
                default:
                        break;
        }
 }
 
-FSM_STATE(control)
+
+FSM_STATE(status_send_balls)
 {
        uint8_t buff[10];
+       uint8_t ret;
 
        switch (FSM_EVENT) {
                case EV_ENTRY:
-                       FSM_TIMER(1000);
+                       uoled_set_balls((uint8_t*)&robot.carousel);
+                       FSM_TIMER(400);
+                       break;
+               case EV_TIMER:
+                       ROBOT_LOCK(disp);
+                       if(msg_waiting) {
+                               memcpy(buff, msg, 10);
+                               msg_waiting = false;
+                               ROBOT_UNLOCK(disp);
+                               ret = process_msg(buff);
+                               switch(ret) {
+                                       case MODE_CONTROL:
+                                               FSM_TRANSITION(wait_for_mode_switch);
+                                               break;
+                                       default:
+                                               printf("display: request to switch to unknown mode %d\n",ret);
+                                               break;
+                               }
+                       }
+                       else
+                               ROBOT_UNLOCK(disp);
+                       FSM_TRANSITION(status_send_hw);
+                       break;
+               default:
+                       break;
+       }
+}
+
+
+FSM_STATE(status_send_hw)
+{
+       uint8_t buff[10];
+       uint8_t ret;
+
+       switch (FSM_EVENT) {
+               case EV_ENTRY:
+                       //TODO: send HW status here
+                       FSM_TIMER(400);
+                       break;
+               case EV_TIMER:
+                       ROBOT_LOCK(disp);
+                       if(msg_waiting) {
+                               memcpy(buff, msg, 10);
+                               msg_waiting = false;
+                               ROBOT_UNLOCK(disp);
+                               ret = process_msg(buff);
+                               switch(ret) {
+                                       case MODE_CONTROL:
+                                               FSM_TRANSITION(wait_for_mode_switch);
+                                               break;
+                                       default:
+                                               printf("display: request to switch to unknown mode %d\n",ret);
+                                               break;
+                               }
+                       }
+                       else
+                               ROBOT_UNLOCK(disp);
+                       FSM_TRANSITION(status_send_position);
+                       break;
+               default:
                        break;
-               case EV_SWITCH_TO_CONS:
+       }
+}
+
+
+FSM_STATE(status_send_position)
+{
+       uint8_t buff[10];
+       uint8_t ret;
+
+       switch (FSM_EVENT) {
+               case EV_ENTRY:
+                       uoled_send_position(&robot.gorte.est_pos);
+                       FSM_TIMER(400);
                        break;
-               case EV_SWITCH_TO_STATUS:
+               case EV_TIMER:
+                       ROBOT_LOCK(disp);
+                       if(msg_waiting) {
+                               memcpy(buff, msg, 10);
+                               msg_waiting = false;
+                               ROBOT_UNLOCK(disp);
+                               ret = process_msg(buff);
+                               switch(ret) {
+                                       case MODE_CONTROL:
+                                               FSM_TRANSITION(wait_for_mode_switch);
+                                               break;
+                                       default:
+                                               printf("display: request to switch to unknown mode %d\n",ret);
+                                               break;
+                               }
+                       }
+                       else
+                               ROBOT_UNLOCK(disp);
+                       FSM_TRANSITION(status);
                        break;
-               case EV_SWITCH_TO_MAP:
+               default:
                        break;
-               case EV_SWITCH_TO_MISC:
+       }
+}
+
+FSM_STATE(control)
+{
+       uint8_t buff[10];
+
+       switch (FSM_EVENT) {
+               case EV_ENTRY:
+                       FSM_TIMER(1000);
                        break;
                case EV_TIMER:
                        ROBOT_LOCK(disp);
@@ -324,14 +497,6 @@ FSM_STATE(wait_for_mode_switch)
                case EV_ENTRY:
                        FSM_TIMER(500);
                        break;
-               case EV_SWITCH_TO_CONS:
-                       break;
-               case EV_SWITCH_TO_STATUS:
-                       break;
-               case EV_SWITCH_TO_MAP:
-                       break;
-               case EV_SWITCH_TO_MISC:
-                       break;
                case EV_TIMER:
                        ROBOT_LOCK(disp);
                        if(msg_waiting) {
index 21b2d247ea3536dce15886e21699e8e39085198b..913be7a0ac4104ef94f019052703768c9915d0d6 100644 (file)
@@ -32,9 +32,5 @@ events = {
     "joystick" : {
     },
     "disp" : {
-       "EV_SWITCH_TO_CONS" : "Switch display mode to CONSOLE",
-       "EV_SWITCH_TO_STATUS" : "Switch display mode to STATUS",
-       "EV_SWITCH_TO_MAP" : "Switch display mode to MAP",
-       "EV_SWITCH_TO_MISC" : "Switch display mode to MISC",
     }
 }
index 921ccb498c2bfee340acb01374ea1d19c4188c07..0f30e0c1102095b87e4f2629300c47eccca7fc8d 100644 (file)
@@ -8,9 +8,29 @@
 
 #include <robottype.h>
 #include <robottype_eb2008.h>
+#include <robot_eb2008.h>
 
 #include "oledlib.h"
 
+int oled_set_balls(uint8_t *buff, int buff_size, uint8_t *carousel)
+{
+       if(buff_size < BALLS_MSG_SIZE)
+               return -1;
+       
+       buff[0] = MSG_START;
+       buff[1] = BALLS_MSG;
+       buff[2] = carousel[0];
+       buff[3] = carousel[1];
+       buff[4] = carousel[2];
+       buff[5] = carousel[3];
+       buff[6] = carousel[4];
+       buff[7] = 0;//FIXME
+       buff[8] = 0;//FIXME
+       buff[9] = MSG_TERM;
+       printf("\n");   
+       return 0;
+}
+
 int oled_set_color(uint8_t *buff, int buff_size, uint8_t color)
 {
        if(buff_size < COLOR_MSG_SIZE)
index 6af32eff1d068f0f5f313235b9be94d13a1ed20e..6ce91e26a4b24e1d40cfe53a4c2e668cf77e2996 100644 (file)
@@ -10,6 +10,7 @@
 #define FSM_STATE_MSG_SIZE 40
 #define POSITION_MSG_SIZE 11
 #define COLOR_MSG_SIZE 4
+#define BALLS_MSG_SIZE 10
 #define MSG_START 150
 
 #define VOLTAGE_MSG 160
 
 #define MSG_TERM 254
 
+#define BLUE_BALL 1
+#define RED_BALL 2
+#define NO_BALL 3
+#define HW_STATUS_OK 1
+
 struct mode_info {
        uint8_t mode;
        uint8_t status; 
@@ -70,6 +76,7 @@ int oled_send_voltage(uint8_t *buff, int buff_size, struct pwr_voltage_type *vol
 int oled_set_color(uint8_t *buff, int buff_size, uint8_t color);
 int oled_send_position(uint8_t *buff, int buff_size, struct est_pos_type *pos);
 int oled_send_fsm_state(uint8_t *buff, int buff_size, const char *name, int len);
+int oled_set_balls(uint8_t *buff, int buff_size, uint8_t *carousel);
 #ifdef __cplusplus
 }
 #endif
index fe63dedb55c5504b77816bf8d910b4a7187c4c7b..763c5384782a39f60c0fb937b3bcd0550ea0f4b0 100644 (file)
@@ -67,6 +67,21 @@ int uoled_switch_mode_rep(uint8_t mode, uint8_t status)
 
 }
 
+int uoled_set_balls(uint8_t *balls) 
+{
+       uint8_t ret;
+       uint8_t msg[BALLS_MSG_SIZE];
+       
+       oled_set_balls(msg, BALLS_MSG_SIZE, balls);
+
+       ret = uoled_write_cmd(msg, BALLS_MSG_SIZE);
+       if(ret)
+               return -1;
+       
+       return 0;
+
+}
+
 int uoled_send_voltage(struct pwr_voltage_type *volt) 
 {
        int ret;
index 389c60bbad048c93e29b96341324dd7a3a82618c..5d861d9fb72a53b9aa55727c7bc2e42a936533e0 100644 (file)
@@ -13,6 +13,7 @@ int uoled_switch_mode_rep(uint8_t mode, uint8_t status);
 int uoled_send_state(const char *name, int len);
 int uoled_send_position(struct est_pos_type *pos); 
 int uoled_set_color(uint8_t color);
+int uoled_set_balls(uint8_t *balls); 
 #ifdef __cplusplus
 }
 #endif