]> rtime.felk.cvut.cz Git - eurobot/public.git/commitdiff
added 4dgl application for display
authorMartin Zidek <zidekm1@gmail.com>
Tue, 1 Apr 2008 08:26:12 +0000 (10:26 +0200)
committerMartin Zidek <martin@martinzidek.com>
Tue, 1 Apr 2008 08:26:12 +0000 (10:26 +0200)
src/disp-4dgl/display.4dg [new file with mode: 0644]

diff --git a/src/disp-4dgl/display.4dg b/src/disp-4dgl/display.4dg
new file mode 100644 (file)
index 0000000..51d18b6
--- /dev/null
@@ -0,0 +1,291 @@
+#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 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
+\r
+    var bt_x[4];\r
+    var mode_change[4];\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_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
+    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
+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
+    cnt:=0;\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
+\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