]> rtime.felk.cvut.cz Git - eurobot/public.git/commitdiff
DISPLAY:
authorJarda <sach.jaroslav@gmail.com>
Wed, 28 Apr 2010 07:14:52 +0000 (09:14 +0200)
committerJarda <sach.jaroslav@gmail.com>
Wed, 28 Apr 2010 07:14:52 +0000 (09:14 +0200)
Pridani zmeny barvy dresu, oprava zobrazeni napeti

src/disp-4dgl/Main_page4_zaloha.4dgl [new file with mode: 0755]
src/disp-4dgl/Main_page5.4dg [new file with mode: 0755]

diff --git a/src/disp-4dgl/Main_page4_zaloha.4dgl b/src/disp-4dgl/Main_page4_zaloha.4dgl
new file mode 100755 (executable)
index 0000000..ccd4771
--- /dev/null
@@ -0,0 +1,804 @@
+#platform "uOLED-32028-PMD3T"\r
+\r
+// Note that 4DGL has built in sine table, this is just for #DATA access example.\r
+\r
+#inherit "4DGL_16bitColours.fnc"\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+#CONST                                          \r
+    LEFT 15\r
+    TOP  15\r
+    // tables\r
+    V_TAB   4   //number of rectangles\r
+    MAX_WIDTH   239\r
+    MAX_HEIGHT  319\r
+    LAST_ROW    19\r
+    VOLT_HEIGHT 30\r
+    VOLT_WIDTH  59// width for voltage color field\r
+    BUTTONWIDTH 60 \r
+    BUTTONHEIGHT 30\r
+\r
+    // positions\r
+    VOLT    0\r
+    VOLT1   1\r
+    STATE   2\r
+    NMB_BT  8\r
+#END\r
+\r
+\r
+#CONST\r
+    NO               0\r
+    YES              1\r
+    Y                2\r
+    X                1   \r
+#END\r
+\r
+\r
+#DATA\r
+    // button Y positions for control page\r
+    word dY 3,33,63,93,123,153,183,293\r
+    word colors RED,GREEN,ORANGE\r
+    word collor BLUE,BLUE,RED,RED,YELLOW,YELLOW,GREEN,GRAY,CRIMSON\r
+    byte commands 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88\r
+    byte Text_row 0,2,3\r
+    byte Text_col 1,0\r
+    byte Text_pos 1,6,11,16,1,6,11,16\r
+    byte rec_pos_X 0,60,120,180 \r
+    byte rec_pos_Y 18,48,66,96\r
+    byte rec_X 1,61,121,181,1,61,121,181 \r
+    byte rec_Y 67,67,67,67,97,97,97,97\r
+    byte comm_chars '-', '|', '/', '-', '\\', '|'\r
+#END\r
+\r
+#CONST\r
+   COMPS       0x81\r
+   VOLTAGES    0x82\r
+   MAIN_FSM    0x83\r
+   MOVE_FSM    0x84\r
+   ACT_FSM     0x85\r
+   LOCATION    0x86\r
+   KEEPALIVE   0x87\r
+   CORNS       0x88 \r
+   DRESS       0x89\r
+#END\r
+\r
+\r
+#CONST\r
+    MOT     0\r
+    ODO     1\r
+    CAM     2\r
+    PWR     3\r
+    HOK     4\r
+    APP     5\r
+    VID     6\r
+    STA     7\r
+#END\r
+\r
+\r
+#CONST\r
+    VOLT33      0\r
+    VOLT50      1\r
+    VOLT80      2\r
+    VOLT_BAT    3\r
+#END\r
+\r
+\r
+var RX_buffer[200];//var work_buffer[200];\r
+// voltage strings \r
+var voltage_3V3[4];\r
+var voltage_5V0[4];\r
+var voltage_8V0[4];\r
+var voltage_BAT[5];\r
+// states strings\r
+var act_fsm_state[20];\r
+var move_fsm_state[20];\r
+var main_fsm_state[20];\r
+// pozition\r
+var position[9];\r
+var voltages[17];\r
+var comp_state[10];\r
+//\r
+\r
+\r
+\r
+var firstState, firstCtrl;\r
+var keyval, page;        // - 1 if no key pressed else 0-15\r
+var BT_text[10];\r
+var BT_state[10];\r
+var BT_OLDstate[10];\r
+var names[8];\r
+var buffer[100];//[30];\r
+var comp_collor;\r
+var volt_state;\r
+var corns;\r
+var states;\r
+var rx_ch,index,id;\r
+var comm_idx;\r
+var dress_color;\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func data_init()\r
+   var idx;\r
+   idx := 0;\r
+   repeat \r
+      voltages[idx] := 'x';\r
+      idx++;\r
+   until(idx == 17);\r
\r
+  \r
+   position[0] := 'x';\r
+   position[1] := 'x';\r
+   position[2] := 'x';\r
+   position[3] := 'y';\r
+   position[4] := 'y';\r
+   position[5] := 'y';\r
+   position[6] := 'a';\r
+   position[7] := 'a';\r
+   position[8] := 'a';\r
+   \r
+    \r
+// component names array\r
+      act_fsm_state[0] := 'I';\r
+      act_fsm_state[1] := 'n';\r
+      act_fsm_state[2] := 'i';\r
+      act_fsm_state[3] := 't';\r
+      act_fsm_state[4] := '\0';\r
+\r
+      move_fsm_state[0] := 'I';\r
+      move_fsm_state[1] := 'n';\r
+      move_fsm_state[2] := 'i';\r
+      move_fsm_state[3] := 't';\r
+      move_fsm_state[4] := '\0';\r
+\r
+      main_fsm_state[0] := 'I';\r
+      main_fsm_state[1] := 'n';\r
+      main_fsm_state[2] := 'i';\r
+      main_fsm_state[3] := 't';\r
+      main_fsm_state[4] := '\0';\r
+      \r
+      names[0] := "MOT";\r
+      names[1] := "ODO";\r
+      names[2] := "CAM";\r
+      names[3] := "PWR";\r
+      names[4] := "HOK";\r
+      names[5] := "APP";\r
+      names[6] := "VID";\r
+      names[7] := "STA";\r
+\r
+    idx := 0;\r
+    repeat\r
+        comp_state[idx] := (idx+1) & 0x0f;\r
+        idx++;    \r
+    until(idx==8);\r
+    corns := 0;\r
+  \r
+    dress_color := BLUE;\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func paint_voltage()//select variable is chooseing which voltage will be rewrite. CAN BE VALUE 0, to 5. 5 is ALL\r
+    var cntX, cntY, x, y, v_tab, idx;\r
+    cntX:=0;\r
+    cntY:=0;    \r
+    v_tab:=4;\r
+    gfx_Set(PEN_SIZE, 1);     \r
+    //draw table\r
+    gfx_Rectangle(0, 0, MAX_WIDTH, 18, WHITE);//table\r
+    while(cntX < v_tab)\r
+        x := rec_pos_X[cntX];\r
+        y := rec_pos_Y[cntY];  \r
+        gfx_Rectangle(x, y, x+VOLT_WIDTH, y+VOLT_HEIGHT, WHITE);//table\r
+        cntX++;\r
+    wend\r
+    //write legend\r
+    gfx_Set(PEN_SIZE, 0);     \r
+    txt_Set(FONT_SIZE, 3);\r
+    txt_Set(TEXT_COLOUR, GRAY);\r
+    txt_Set(TEXT_OPACITY, 0); \r
+    txt_MoveCursor(Text_row[VOLT],0);\r
+    print ("Voltage indicator:");\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+func redraw_voltage()//(var voltage)\r
+    var idx, color; \r
+    gfx_Set(PEN_SIZE, 0);   \r
+    txt_Set(TEXT_COLOUR, BLACK);\r
+    color := RED;\r
+    if((voltages[0] & 0x08) != 0x08)\r
+        color := GREEN;\r
+    endif    \r
+    gfx_Rectangle(1, 19, 58, 47, color);//table\r
+    txt_MoveCursor(2,0);\r
+    print([CHR]voltages[1], [CHR]voltages[2],".", [CHR]voltages[3],[CHR]voltages[4], "\n");\r
+    color := RED;    \r
+    if((voltages[0] & 0x04) != 0x04)\r
+        color := GREEN;\r
+    endif\r
+    gfx_Rectangle(61,19,118,47, color);//table\r
+    txt_MoveCursor(2,5);\r
+    print([CHR]voltages[5], [CHR]voltages[6],".", [CHR]voltages[7],[CHR]voltages[8], "\n");\r
+    color := RED;    \r
+    if((voltages[0] & 0x02) != 0x02)\r
+        color := GREEN; \r
+    endif\r
+    gfx_Rectangle(121, 19, 178,47, color);//table\r
+    txt_MoveCursor(2,10);\r
+    print([CHR]voltages[9], [CHR]voltages[10], ".",[CHR]voltages[11],[CHR]voltages[12], "\n");\r
+    color := RED;    \r
+    if((voltages[0] & 0x01) != 0x01)\r
+        color := GREEN;\r
+    endif\r
+    gfx_Rectangle(181,19,238, 47, color);//table\r
+    txt_MoveCursor(2,15);\r
+    print([CHR]voltages[13],[CHR]voltages[14], ".",[CHR]voltages[15],[CHR]voltages[16], "\n");\r
+    paint_voltage();\r
+endfunc\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func paint_comm()\r
+   gfx_Set(PEN_SIZE, 1);//table     \r
+   gfx_Rectangle(180, 174, 239, 192, WHITE);//table\r
+   txt_MoveCursor(11,15);\r
+   txt_Set(TEXT_COLOUR, GRAY);\r
+   print("Comm:");\r
+endfunc\r
+\r
+\r
+\r
+func redraw_comm()\r
+   if(comm_idx >= 6)\r
+        comm_idx := 0;\r
+   endif      \r
+   gfx_Set(PEN_SIZE, 0);//solid rec     \r
+   gfx_Rectangle(181, 191, 238, 221, GREEN);//table\r
+   txt_MoveCursor(13,17);\r
+   txt_Set(TEXT_COLOUR, BLACK);\r
+   print([CHR]comm_chars[comm_idx]);\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+   \r
+func draw_error()\r
+   sys_SetTimer(0,3000);\r
+   gfx_Set(PEN_SIZE, 0);//solid rec     \r
+   gfx_Rectangle(181, 191, 238, 221, BLACK);//table\r
+   txt_MoveCursor(13,16);\r
+   txt_Set(TEXT_COLOUR, RED);\r
+   print("ERR");\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw_comp_state(var data)\r
+    var Y_axes, X_axes,X_end, Y_end, comp_nmb, col_idx, text_Y;\r
+    comp_nmb := ((data & 0x1f)-1);   \r
+    col_idx := (data & 0x60) >> 5;\r
+    if((comp_nmb >7)||(col_idx > 2) ||comp_nmb<0)\r
+        return;\r
+    endif\r
+    Y_axes := rec_Y[comp_nmb];\r
+    X_axes := rec_X[comp_nmb];\r
+    X_end := X_axes + 57;\r
+    Y_end := Y_axes + 28;\r
+    text_Y := 5;\r
+    if(comp_nmb >3)\r
+        text_Y := 7;\r
+    endif    \r
+    gfx_Set(PEN_SIZE, 0);//solid rectangle     \r
+    gfx_Rectangle(X_axes, Y_axes, X_end, Y_end, colors[col_idx]);//table\r
+    txt_MoveCursor(text_Y,Text_pos[comp_nmb]); \r
+    txt_Set(TEXT_COLOUR, BLACK);   \r
+    print([STR]names[comp_nmb]);\r
+    comp_state[comp_nmb] := data;\r
+endfunc\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func paint_comp_states(var select)\r
+    var cntX,cntY,x,y, v_tab, row;\r
+    cntX := 0;\r
+    cntY := 1;\r
+    row := 0;\r
+    v_tab:=4;\r
+    gfx_Set(PEN_SIZE, 1);     \r
+    //draw table for components\r
+    gfx_Rectangle(0, rec_pos_Y[cntY], MAX_WIDTH, 66, WHITE);//table\r
+    cntY++;    \r
+      while(cntX < v_tab)\r
+         x := rec_pos_X[cntX];\r
+         y := rec_pos_Y[cntY];  \r
+         gfx_Rectangle(x, y, x+VOLT_WIDTH, y+VOLT_HEIGHT, WHITE);//table\r
+         cntX++;\r
+      wend\r
+      cntY := 3;\r
+      cntX := 0;\r
+      while(cntX < v_tab)\r
+         x := rec_pos_X[cntX];\r
+         y := rec_pos_Y[cntY];  \r
+         gfx_Rectangle(x, y, x+VOLT_WIDTH, y+VOLT_HEIGHT, WHITE);//table\r
+         cntX++;\r
+      wend\r
+    txt_MoveCursor(Text_row[STATE],0);\r
+    txt_Set(TEXT_COLOUR, GRAY);\r
+    print("Component indicator:")\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func paint_corn()\r
+    gfx_Set(PEN_SIZE, 1);//table     \r
+    gfx_Rectangle(180, 126, 239, 222, WHITE);//table\r
+    gfx_Rectangle(180, 126, 239, 144, WHITE);//table\r
+    gfx_Rectangle(179, 126, 239, 222, WHITE);//table\r
+    txt_MoveCursor(8,15);\r
+    txt_Set(TEXT_COLOUR, GRAY);\r
+    print("Corn:")\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw_corns()    \r
+    txt_MoveCursor(10,17);\r
+    txt_Set(TEXT_COLOUR, BLACK);\r
+    gfx_Set(PEN_SIZE, 0);//solid rectangle     \r
+    gfx_Rectangle(181, 145, 237, 173, dress_color);//table\r
+    print(corns&0x0f);\r
+endfunc\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw_move_state()    \r
+    var idx;    \r
+    gfx_Set(PEN_SIZE, 0);//table     \r
+    gfx_Rectangle(0, 159, 178, 190, BLACK);//table\r
+    txt_MoveCursor(10,0);\r
+    txt_Set(TEXT_COLOUR, OLIVE);\r
+    idx :=0;\r
+    print("MO:");    \r
+    repeat\r
+       if(idx == 11)\r
+            print("-\n   ");\r
+       endif\r
+       putch(move_fsm_state[idx]);\r
+       idx++;\r
+    until(move_fsm_state[idx] == '\0');    \r
+endfunc\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw_act_state()\r
+    var idx;\r
+    gfx_Set(PEN_SIZE, 0);//table     \r
+    gfx_Rectangle(0, 191, 178, 221, BLACK);//table\r
+    txt_MoveCursor(12,0);\r
+    txt_Set(TEXT_COLOUR, BROWN);\r
+    idx :=0;\r
+    print("AC:");    \r
+    repeat\r
+       if(idx == 11)\r
+            print("-\n   ");\r
+       endif\r
+       putch(act_fsm_state[idx]);\r
+       idx++;\r
+    until(act_fsm_state[idx] == '\0');    \r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw_main_state()\r
+    var idx;\r
+    idx :=0;\r
+    gfx_Rectangle(0, 127, 178, 158, BLACK);//table\r
+    txt_MoveCursor(8,0);\r
+    txt_Set(TEXT_COLOUR, TEAL);\r
+    gfx_Set(PEN_SIZE, 0);//table     \r
+    print("MA:");    \r
+    repeat\r
+       if(idx == 11)\r
+            print("-\n   ");\r
+       endif\r
+       putch(main_fsm_state[idx]);\r
+       idx++;\r
+    until(main_fsm_state[idx] == '\0');    \r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func paint_position()\r
+    gfx_Set(PEN_SIZE, 0);//solid rectangle     \r
+    gfx_Rectangle(0, 223, 239, 255, MAGENTA);//table\r
+    gfx_Rectangle(0, 256, 239, 291, MAGENTA);//table\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw_position()\r
+    gfx_Set(PEN_SIZE, 0);//solid rectangle     \r
+    gfx_Rectangle(60, 239, 110, 255, MAGENTA);//table\r
+    gfx_Rectangle(160, 239, 220, 255,MAGENTA);//table\r
+    gfx_Rectangle(0, 272, 47, 286, MAGENTA);//table\r
+    txt_MoveCursor(14,0); \r
+    txt_Set(TEXT_COLOUR, BLACK);   \r
+    print("Position:\n X = ", [CHR]position[0],".",[CHR]position[1],[CHR]position[2]);\r
+    print(" Y = ", [CHR]position[3],".",[CHR]position[4], [CHR]position[5], "\n");\r
+    print("Angle: ","\n"," ", [CHR]position[6],[CHR]position[7],[CHR]position[8]," Deg \n");\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func draw_keys()\r
+    var i;\r
+    i:=0;\r
+    repeat\r
+      gfx_Button(BT_state[i], 3, dY[i], collor[i], BLACK, FONT2, 2, 2, BT_text[i]);\r
+    until(++i == NMB_BT-1);\r
+    gfx_Button(BT_state[i], 3, dY[i], collor[i], BLACK, FONT1, 2, 2, BT_text[i]);\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw()\r
+   if((keyval == 7)||(keyval == 8))//do nothing\r
+      return; \r
+   endif\r
+   if(keyval < 8)\r
+      gfx_Button(BT_state[keyval], 3, dY[keyval], collor[keyval], BLACK, FONT2, 2, 2, BT_text[keyval]);\r
+   endif\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+func send_cmd()\r
+   if((keyval == 7)||(keyval == 8))//do nothing\r
+      return; \r
+   endif\r
+   if(keyval < 7)\r
+      to(COM0);\r
+      putch(commands[keyval]);\r
+      to(TEXT);\r
+   endif\r
+endfunc\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func read_key()\r
+    var x, y;\r
+    y := touch_Get(Y);\r
+    y := y / (BUTTONHEIGHT+1);\r
+    keyval := y;\r
+    if((keyval == 7)||(keyval == 8))\r
+        keyval := -1;\r
+    endif\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func clear_page()\r
+    gfx_Set(0,0);\r
+    gfx_Rectangle(0,0,MAX_WIDTH,MAX_HEIGHT,BLACK);\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+// function for debugging only\r
+func send_axis()\r
+    var y;\r
+    y := touch_Get(Y);\r
+    txt_MoveCursor(16,1);\r
+    to(COM0),print(y);\r
+    to(COM0),print("\n"); \r
+    to(COM0),print(keyval);\r
+    to(COM0),print("\n"); \r
+endfunc\r
+\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func read_serial()\r
+      var cnt_idx;  \r
+      rx_ch := serin();\r
+      if(rx_ch < 0)\r
+          goto out;\r
+      endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+      if((rx_ch & 0x80) == 0x80)\r
+          id := rx_ch;\r
+          index:=0;\r
+      if (id == KEEPALIVE)\r
+          sys_SetTimer(0,3000);// 3 seconds  \r
+          comm_idx++;  \r
+          redraw_comm();\r
+          id:=0;\r
+      endif;\r
+          goto out;//return;\r
+      endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+      if (index < 100)    // 100 is buffer capacity\r
+          RX_buffer[index] := rx_ch;\r
+          index++;\r
+      else\r
+          index := 0;\r
+      endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+      if(id == COMPS && index == 1)\r
+          redraw_comp_state(RX_buffer[0]);//draw_status();\r
+          id:=0;\r
+          goto out;//return;\r
+      endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+      if(id == CORNS)// && index == 1)\r
+          corns := RX_buffer[0];  \r
+          redraw_corns();//draw_status();\r
+          id:=0;\r
+          goto out;//return;\r
+      endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+      if(id == ACT_FSM && rx_ch == '\0')\r
+          cnt_idx := 0;\r
+          repeat    \r
+             act_fsm_state[cnt_idx] := RX_buffer[cnt_idx];\r
+             cnt_idx++;\r
+          until(RX_buffer[cnt_idx] == '\0')\r
+          act_fsm_state[cnt_idx] := '\0';\r
+          redraw_act_state();\r
+          id:=0;\r
+          goto out;//return;\r
+      endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+      if(id == MOVE_FSM && rx_ch == '\0')\r
+          cnt_idx := 0;\r
+          repeat    \r
+             move_fsm_state[cnt_idx] := RX_buffer[cnt_idx];\r
+             cnt_idx++;\r
+          until(RX_buffer[cnt_idx] == '\0')\r
+          move_fsm_state[cnt_idx] := '\0';\r
+          redraw_move_state();\r
+          goto out;//return;\r
+      endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+      if(id == MAIN_FSM && rx_ch == '\0')\r
+          cnt_idx := 0;\r
+          repeat    \r
+             main_fsm_state[cnt_idx] := RX_buffer[cnt_idx];\r
+             cnt_idx++;\r
+          until(RX_buffer[cnt_idx] == '\0')\r
+          main_fsm_state[cnt_idx] := '\0';\r
+          redraw_main_state();\r
+          id:=0;\r
+          goto out;//return;\r
+      endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+      if (id == VOLTAGES && index == 17)\r
+         cnt_idx :=0;   \r
+         repeat    \r
+            voltages[cnt_idx] := RX_buffer[cnt_idx];\r
+            cnt_idx++;\r
+         until(cnt_idx == 17)\r
+         redraw_voltage();\r
+         id:=0;\r
+         goto out;//return;\r
+      endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+      if(id == LOCATION && index == 9)\r
+          cnt_idx := 0;\r
+          repeat\r
+              position[cnt_idx] := RX_buffer[cnt_idx];\r
+              cnt_idx++;\r
+          until(cnt_idx == 9)          \r
+          redraw_position();\r
+          id:=0;\r
+          goto out;//return;\r
+      endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+      if(id == DRESS && index == 1)\r
+          if(RX_buffer[0] == 1)  \r
+              dress_color := YELLOW;\r
+          endif\r
+          if(RX_buffer[0] == 0)  \r
+              dress_color := BLUE;\r
+          endif\r
+              redraw_corns();\r
+              id:=0;\r
+          goto out;//return;\r
+      endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+out:\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func STATE_page()\r
+    var state, cnt,idx1,tmr;\r
+    sys_SetTimer(0,3000);\r
+    paint_voltage();\r
+    cnt:=0;\r
+    redraw_voltage();\r
+    paint_comp_states(0);\r
+    paint_corn();\r
+    com_Init(buffer,100,0);\r
+    cnt := 0;                   //draw states for all components\r
+    repeat\r
+        redraw_comp_state(comp_state[cnt]);\r
+    until(cnt++ == 8)\r
+    paint_position();\r
+    redraw_position();\r
+    redraw_corns();\r
+    redraw_main_state();\r
+    redraw_move_state();\r
+    redraw_act_state();\r
+    paint_comm();\r
+    redraw_comm();\r
+\r
+    gfx_Button(UP,0, MAX_HEIGHT-27, GRAY, BLACK,FONT1,2,2, " To control screen ");\r
+    touch_DetectRegion(0, MAX_HEIGHT-30, MAX_WIDTH, MAX_HEIGHT);\r
+    touch_Set(TOUCH_ENABLE);\r
+    repeat\r
+        state := touch_Get(TOUCH_STATUS);\r
+        if(state == TOUCH_PRESS)\r
+            gfx_Button(DOWN,0, MAX_HEIGHT-27, GRAY, BLUE,FONT1, 2, 2, " To control screen ");\r
+        endif\r
+        if(state == TOUCH_RELEASE)\r
+            gfx_Button(UP,0, MAX_HEIGHT-27, GRAY, BLUE,FONT1, 2, 2, " To control screen ");\r
+            page := 1;\r
+            break;\r
+        endif\r
+        read_serial(); \r
+        if(sys_GetTimer(0) == 0)\r
+            idx1 := 0;\r
+            repeat\r
+                idx1++;  \r
+                comp_state[idx1] := idx1;  \r
+            until(idx1==8);\r
+            cnt := 0;                   //draw states for all components\r
+            repeat\r
+                redraw_comp_state(comp_state[cnt]);\r
+            until(cnt++ == 8)\r
+            draw_error();\r
+        endif\r
+    forever\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func CTRL_page()\r
+    var n, state, x;\r
+    n :=0;\r
+    keyval := -1;  // initate key value\r
+    BT_text[0] := "  FORK DOWN   ";    //set texts for all buttons\r
+    BT_text[1] := "  FORK UP     ";\r
+    BT_text[2] := "  DOOR OPEN   ";\r
+    BT_text[3] := "  DOOR CLOSE  ";\r
+    BT_text[4] := "  START ROLL  ";\r
+    BT_text[5] := "  STOP ROLL   ";\r
+    BT_text[6] := "SEND ALL STATE";\r
+    BT_text[7] := " SWITCH DRESS \n    COLOR";\r
+    BT_text[8] := "  To state screen  ";\r
+    touch_Set(TOUCH_ENABLE);          // enable the touch screen                \r
+    touch_DetectRegion(0, 0, MAX_WIDTH, MAX_HEIGHT);\r
+//*********************************************************************************************\r
+    repeat  \r
+       BT_state[n] := UP;           //set state for all buttons\r
+       BT_OLDstate[n] := DOWN;\r
+    until(++n == 9);   \r
+//*********************************************************************************************\r
+    draw_keys();\r
+    repeat \r
+    sys_SetTimer(0,3000);\r
+        state := touch_Get(TOUCH_STATUS);\r
+        if(state == TOUCH_PRESS)\r
+           read_key();\r
+           //send_axis();     //debugging only   \r
+           if(keyval != -1)\r
+              if((keyval == 9)||(keyval == 10))\r
+                  BT_state[7] := DOWN;\r
+                  gfx_Button(BT_state[7], 3, dY[7], collor[7], BLUE, FONT1, 2, 2, BT_text[7]);// misto redraw();\r
+              else    \r
+                 BT_state[keyval] := DOWN; // set that button is pushed\r
+                 redraw();\r
+              endif;    \r
+           endif\r
+        endif\r
+        if(state == TOUCH_RELEASE)\r
+            if(keyval != -1)\r
+                BT_state[keyval] := UP; //button was released\r
+                redraw();\r
+                page := 0;\r
+                if((keyval == 9)||(keyval == 10))\r
+                    gfx_Button(BT_state[7], 3, dY[7], collor[7], BLACK, FONT1, 2, 2, BT_text[7]);// misto redraw();\r
+                    keyval := -1;\r
+                    break;\r
+                endif;    \r
+                send_cmd();\r
+            endif\r
+        endif\r
+    forever\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func main()\r
+    page := 0;\r
+    firstState := 0;\r
+    firstCtrl := 0;\r
+    comp_collor := RED;\r
+    data_init();\r
+    voltages[0]:=0xff;// voltage color initate\r
+    comm_idx := 3;\r
+\r
+    repeat\r
+        if(!page)// view state page\r
+            clear_page();    \r
+            STATE_page();\r
+        else// view ctrl page\r
+            clear_page();            \r
+            CTRL_page();\r
+        endif    \r
+    forever        \r
+endfunc\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
diff --git a/src/disp-4dgl/Main_page5.4dg b/src/disp-4dgl/Main_page5.4dg
new file mode 100755 (executable)
index 0000000..6afb785
--- /dev/null
@@ -0,0 +1,805 @@
+#platform "uOLED-32028-PMD3T"\r
+\r
+// Note that 4DGL has built in sine table, this is just for #DATA access example.\r
+\r
+#inherit "4DGL_16bitColours.fnc"\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+#CONST                                          \r
+    LEFT 15\r
+    TOP  15\r
+    // tables\r
+    V_TAB   4   //number of rectangles\r
+    MAX_WIDTH   239\r
+    MAX_HEIGHT  319\r
+    LAST_ROW    19\r
+    VOLT_HEIGHT 30\r
+    VOLT_WIDTH  59// width for voltage color field\r
+    BUTTONWIDTH 60 \r
+    BUTTONHEIGHT 30\r
+\r
+    // positions\r
+    VOLT    0\r
+    VOLT1   1\r
+    STATE   2\r
+    NMB_BT  8\r
+#END\r
+\r
+\r
+#CONST\r
+    NO               0\r
+    YES              1\r
+    Y                2\r
+    X                1   \r
+#END\r
+\r
+\r
+#DATA\r
+    // button Y positions for control page\r
+    word dY 3,33,63,93,123,153,183,213,293\r
+    word colors RED,GREEN,ORANGE\r
+    word collor BLUE,BLUE,CRIMSON,CRIMSON,YELLOW,YELLOW,GREEN,INDIGO,GRAY\r
+    byte commands 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88\r
+    byte Text_row 0,2,3\r
+    byte Text_col 1,0\r
+    byte Text_pos 1,6,11,16,1,6,11,16\r
+    byte rec_pos_X 0,60,120,180 \r
+    byte rec_pos_Y 18,48,66,96\r
+    byte rec_X 1,61,121,181,1,61,121,181 \r
+    byte rec_Y 67,67,67,67,97,97,97,97\r
+    byte comm_chars '-', '|', '/', '-', '\\', '|'\r
+#END\r
+\r
+#CONST\r
+   COMPS       0x81\r
+   VOLTAGES    0x82\r
+   MAIN_FSM    0x83\r
+   MOVE_FSM    0x84\r
+   ACT_FSM     0x85\r
+   LOCATION    0x86\r
+   KEEPALIVE   0x87\r
+   CORNS       0x88 \r
+   DRESS       0x89\r
+#END\r
+\r
+\r
+#CONST\r
+    MOT     0\r
+    ODO     1\r
+    CAM     2\r
+    PWR     3\r
+    HOK     4\r
+    APP     5\r
+    VID     6\r
+    STA     7\r
+#END\r
+\r
+\r
+#CONST\r
+    VOLT33      0\r
+    VOLT50      1\r
+    VOLT80      2\r
+    VOLT_BAT    3\r
+#END\r
+\r
+\r
+var RX_buffer[200];//var work_buffer[200];\r
+// voltage strings \r
+var voltage_3V3[4];\r
+var voltage_5V0[4];\r
+var voltage_8V0[4];\r
+var voltage_BAT[5];\r
+// states strings\r
+var act_fsm_state[20];\r
+var move_fsm_state[20];\r
+var main_fsm_state[20];\r
+// pozition\r
+var position[9];\r
+var voltages[17];\r
+var comp_state[10];\r
+//\r
+\r
+\r
+\r
+var firstState, firstCtrl;\r
+var keyval, page;        // - 1 if no key pressed else 0-15\r
+var BT_text[10];\r
+var BT_state[10];\r
+var BT_OLDstate[10];\r
+var names[8];\r
+var buffer[100];//[30];\r
+var comp_collor;\r
+var volt_state;\r
+var corns;\r
+var states;\r
+var rx_ch,index,id;\r
+var comm_idx;\r
+var dress_color;\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func data_init()\r
+   var idx;\r
+   idx := 0;\r
+   repeat \r
+      voltages[idx] := 'x';\r
+      idx++;\r
+   until(idx == 17);\r
\r
+  \r
+   position[0] := 'x';\r
+   position[1] := 'x';\r
+   position[2] := 'x';\r
+   position[3] := 'y';\r
+   position[4] := 'y';\r
+   position[5] := 'y';\r
+   position[6] := 'a';\r
+   position[7] := 'a';\r
+   position[8] := 'a';\r
+   \r
+    \r
+// component names array\r
+      act_fsm_state[0] := 'I';\r
+      act_fsm_state[1] := 'n';\r
+      act_fsm_state[2] := 'i';\r
+      act_fsm_state[3] := 't';\r
+      act_fsm_state[4] := '\0';\r
+\r
+      move_fsm_state[0] := 'I';\r
+      move_fsm_state[1] := 'n';\r
+      move_fsm_state[2] := 'i';\r
+      move_fsm_state[3] := 't';\r
+      move_fsm_state[4] := '\0';\r
+\r
+      main_fsm_state[0] := 'I';\r
+      main_fsm_state[1] := 'n';\r
+      main_fsm_state[2] := 'i';\r
+      main_fsm_state[3] := 't';\r
+      main_fsm_state[4] := '\0';\r
+      \r
+      names[0] := "MOT";\r
+      names[1] := "ODO";\r
+      names[2] := "CAM";\r
+      names[3] := "PWR";\r
+      names[4] := "HOK";\r
+      names[5] := "APP";\r
+      names[6] := "VID";\r
+      names[7] := "STA";\r
+\r
+    idx := 0;\r
+    repeat\r
+        comp_state[idx] := (idx+1) & 0x0f;\r
+        idx++;    \r
+    until(idx==8);\r
+    corns := 0;\r
+  \r
+    dress_color := BLUE;\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func paint_voltage()//select variable is chooseing which voltage will be rewrite. CAN BE VALUE 0, to 5. 5 is ALL\r
+    var cntX, cntY, x, y, v_tab, idx;\r
+    cntX:=0;\r
+    cntY:=0;    \r
+    v_tab:=4;\r
+    gfx_Set(PEN_SIZE, 1);     \r
+    //draw table\r
+    gfx_Rectangle(0, 0, MAX_WIDTH, 18, WHITE);//table\r
+    while(cntX < v_tab)\r
+        x := rec_pos_X[cntX];\r
+        y := rec_pos_Y[cntY];  \r
+        gfx_Rectangle(x, y, x+VOLT_WIDTH, y+VOLT_HEIGHT, WHITE);//table\r
+        cntX++;\r
+    wend\r
+    //write legend\r
+    gfx_Set(PEN_SIZE, 0);     \r
+    txt_Set(FONT_SIZE, 3);\r
+    txt_Set(TEXT_COLOUR, GRAY);\r
+    txt_Set(TEXT_OPACITY, 0); \r
+    txt_MoveCursor(Text_row[VOLT],0);\r
+    print ("Voltage indicator:");\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+func redraw_voltage()//(var voltage)\r
+    var idx, color; \r
+    gfx_Set(PEN_SIZE, 0);   \r
+    txt_Set(TEXT_COLOUR, BLACK);\r
+    color := RED;\r
+    if((voltages[0] & 0x08) != 0x08)\r
+        color := GREEN;\r
+    endif    \r
+    gfx_Rectangle(1, 19, 58, 47, color);//table\r
+    txt_MoveCursor(2,0);\r
+    print([CHR]voltages[1], [CHR]voltages[2],".", [CHR]voltages[3],[CHR]voltages[4], "\n");\r
+    color := RED;    \r
+    if((voltages[0] & 0x04) != 0x04)\r
+        color := GREEN;\r
+    endif\r
+    gfx_Rectangle(61,19,118,47, color);//table\r
+    txt_MoveCursor(2,5);\r
+    print([CHR]voltages[5], [CHR]voltages[6],".", [CHR]voltages[7],[CHR]voltages[8], "\n");\r
+    color := RED;    \r
+    if((voltages[0] & 0x02) != 0x02)\r
+        color := GREEN; \r
+    endif\r
+    gfx_Rectangle(121, 19, 178,47, color);//table\r
+    txt_MoveCursor(2,10);\r
+    print([CHR]voltages[9], [CHR]voltages[10], ".",[CHR]voltages[11],[CHR]voltages[12], "\n");\r
+    color := RED;    \r
+    if((voltages[0] & 0x01) != 0x01)\r
+        color := GREEN;\r
+    endif\r
+    gfx_Rectangle(181,19,238, 47, color);//table\r
+    txt_MoveCursor(2,15);\r
+    print([CHR]voltages[13],[CHR]voltages[14], ".",[CHR]voltages[15],[CHR]voltages[16], "\n");\r
+    paint_voltage();\r
+endfunc\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func paint_comm()\r
+   gfx_Set(PEN_SIZE, 1);//table     \r
+   gfx_Rectangle(180, 174, 239, 192, WHITE);//table\r
+   txt_MoveCursor(11,15);\r
+   txt_Set(TEXT_COLOUR, GRAY);\r
+   print("Comm:");\r
+endfunc\r
+\r
+\r
+\r
+func redraw_comm()\r
+   if(comm_idx >= 6)\r
+        comm_idx := 0;\r
+   endif      \r
+   gfx_Set(PEN_SIZE, 0);//solid rec     \r
+   gfx_Rectangle(181, 191, 238, 221, GREEN);//table\r
+   txt_MoveCursor(13,17);\r
+   txt_Set(TEXT_COLOUR, BLACK);\r
+   print([CHR]comm_chars[comm_idx]);\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+   \r
+func draw_error()\r
+   sys_SetTimer(0,3000);\r
+   gfx_Set(PEN_SIZE, 0);//solid rec     \r
+   gfx_Rectangle(181, 191, 238, 221, BLACK);//table\r
+   txt_MoveCursor(13,16);\r
+   txt_Set(TEXT_COLOUR, RED);\r
+   print("ERR");\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw_comp_state(var data)\r
+    var Y_axes, X_axes,X_end, Y_end, comp_nmb, col_idx, text_Y;\r
+    comp_nmb := ((data & 0x1f)-1);   \r
+    col_idx := (data & 0x60) >> 5;\r
+    if((comp_nmb >7)||(col_idx > 2) ||comp_nmb<0)\r
+        return;\r
+    endif\r
+    Y_axes := rec_Y[comp_nmb];\r
+    X_axes := rec_X[comp_nmb];\r
+    X_end := X_axes + 57;\r
+    Y_end := Y_axes + 28;\r
+    text_Y := 5;\r
+    if(comp_nmb >3)\r
+        text_Y := 7;\r
+    endif    \r
+    gfx_Set(PEN_SIZE, 0);//solid rectangle     \r
+    gfx_Rectangle(X_axes, Y_axes, X_end, Y_end, colors[col_idx]);//table\r
+    txt_MoveCursor(text_Y,Text_pos[comp_nmb]); \r
+    txt_Set(TEXT_COLOUR, BLACK);   \r
+    print([STR]names[comp_nmb]);\r
+    comp_state[comp_nmb] := data;\r
+endfunc\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func paint_comp_states(var select)\r
+    var cntX,cntY,x,y, v_tab, row;\r
+    cntX := 0;\r
+    cntY := 1;\r
+    row := 0;\r
+    v_tab:=4;\r
+    gfx_Set(PEN_SIZE, 1);     \r
+    //draw table for components\r
+    gfx_Rectangle(0, rec_pos_Y[cntY], MAX_WIDTH, 66, WHITE);//table\r
+    cntY++;    \r
+      while(cntX < v_tab)\r
+         x := rec_pos_X[cntX];\r
+         y := rec_pos_Y[cntY];  \r
+         gfx_Rectangle(x, y, x+VOLT_WIDTH, y+VOLT_HEIGHT, WHITE);//table\r
+         cntX++;\r
+      wend\r
+      cntY := 3;\r
+      cntX := 0;\r
+      while(cntX < v_tab)\r
+         x := rec_pos_X[cntX];\r
+         y := rec_pos_Y[cntY];  \r
+         gfx_Rectangle(x, y, x+VOLT_WIDTH, y+VOLT_HEIGHT, WHITE);//table\r
+         cntX++;\r
+      wend\r
+    txt_MoveCursor(Text_row[STATE],0);\r
+    txt_Set(TEXT_COLOUR, GRAY);\r
+    print("Component indicator:")\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func paint_corn()\r
+    gfx_Set(PEN_SIZE, 1);//table     \r
+    gfx_Rectangle(180, 126, 239, 222, WHITE);//table\r
+    gfx_Rectangle(180, 126, 239, 144, WHITE);//table\r
+    gfx_Rectangle(179, 126, 239, 222, WHITE);//table\r
+    txt_MoveCursor(8,15);\r
+    txt_Set(TEXT_COLOUR, GRAY);\r
+    print("Corn:")\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw_corns()    \r
+    txt_MoveCursor(10,17);\r
+    txt_Set(TEXT_COLOUR, BLACK);\r
+    gfx_Set(PEN_SIZE, 0);//solid rectangle     \r
+    gfx_Rectangle(181, 145, 237, 173, dress_color);//table\r
+    print(corns&0x0f);\r
+endfunc\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw_move_state()    \r
+    var idx;    \r
+    gfx_Set(PEN_SIZE, 0);//table     \r
+    gfx_Rectangle(0, 159, 178, 190, BLACK);//table\r
+    txt_MoveCursor(10,0);\r
+    txt_Set(TEXT_COLOUR, OLIVE);\r
+    idx :=0;\r
+    print("MO:");    \r
+    repeat\r
+       if(idx == 11)\r
+            print("-\n   ");\r
+       endif\r
+       putch(move_fsm_state[idx]);\r
+       idx++;\r
+    until(move_fsm_state[idx] == '\0');    \r
+endfunc\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw_act_state()\r
+    var idx;\r
+    gfx_Set(PEN_SIZE, 0);//table     \r
+    gfx_Rectangle(0, 191, 178, 221, BLACK);//table\r
+    txt_MoveCursor(12,0);\r
+    txt_Set(TEXT_COLOUR, BROWN);\r
+    idx :=0;\r
+    print("AC:");    \r
+    repeat\r
+       if(idx == 11)\r
+            print("-\n   ");\r
+       endif\r
+       putch(act_fsm_state[idx]);\r
+       idx++;\r
+    until(act_fsm_state[idx] == '\0');    \r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw_main_state()\r
+    var idx;\r
+    idx :=0;\r
+    gfx_Rectangle(0, 127, 178, 158, BLACK);//table\r
+    txt_MoveCursor(8,0);\r
+    txt_Set(TEXT_COLOUR, TEAL);\r
+    gfx_Set(PEN_SIZE, 0);//table     \r
+    print("MA:");    \r
+    repeat\r
+       if(idx == 11)\r
+            print("-\n   ");\r
+       endif\r
+       putch(main_fsm_state[idx]);\r
+       idx++;\r
+    until(main_fsm_state[idx] == '\0');    \r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func paint_position()\r
+    gfx_Set(PEN_SIZE, 0);//solid rectangle     \r
+    gfx_Rectangle(0, 223, 239, 255, MAGENTA);//table\r
+    gfx_Rectangle(0, 256, 239, 291, MAGENTA);//table\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw_position()\r
+    gfx_Set(PEN_SIZE, 0);//solid rectangle     \r
+    gfx_Rectangle(60, 239, 110, 255, MAGENTA);//table\r
+    gfx_Rectangle(160, 239, 220, 255,MAGENTA);//table\r
+    gfx_Rectangle(0, 272, 47, 286, MAGENTA);//table\r
+    txt_MoveCursor(14,0); \r
+    txt_Set(TEXT_COLOUR, BLACK);   \r
+    print("Position:\n X = ", [CHR]position[0],".",[CHR]position[1],[CHR]position[2]);\r
+    print(" Y = ", [CHR]position[3],".",[CHR]position[4], [CHR]position[5], "\n");\r
+    print("Angle: ","\n"," ", [CHR]position[6],[CHR]position[7],[CHR]position[8]," Deg \n");\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func draw_keys()\r
+    var i;\r
+    i:=0;\r
+    repeat\r
+      gfx_Button(BT_state[i], 3, dY[i], collor[i], BLACK, FONT2, 2, 2, BT_text[i]);\r
+    until(++i == NMB_BT);\r
+    gfx_Button(BT_state[i], 3, dY[i], collor[i], BLACK, FONT1, 2, 2, BT_text[i]);\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func redraw()\r
+   if(keyval == 8)//||(keyval == 8))//do nothing\r
+      return; \r
+   endif\r
+   if(keyval < 9)\r
+      gfx_Button(BT_state[keyval], 3, dY[keyval], collor[keyval], BLACK, FONT2, 2, 2, BT_text[keyval]);\r
+   endif\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+func send_cmd()\r
+   if(keyval == 8)//do nothing\r
+      return; \r
+   endif\r
+   if(keyval < 8)\r
+      to(COM0);\r
+      putch(commands[keyval]);\r
+      to(TEXT);\r
+   endif\r
+endfunc\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func read_key()\r
+    var x, y;\r
+    y := touch_Get(Y);\r
+    y := y / (BUTTONHEIGHT+1);\r
+    keyval := y;\r
+    if(keyval == 9)\r
+        keyval := -1;\r
+    endif\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func clear_page()\r
+    gfx_Set(0,0);\r
+    gfx_Rectangle(0,0,MAX_WIDTH,MAX_HEIGHT,BLACK);\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+// function for debugging only\r
+func send_axis()\r
+    var y;\r
+    y := touch_Get(Y);\r
+    txt_MoveCursor(16,1);\r
+    to(COM0),print(y);\r
+    to(COM0),print("\n"); \r
+    to(COM0),print(keyval);\r
+    to(COM0),print("\n"); \r
+endfunc\r
+\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func read_serial()\r
+      var cnt_idx;  \r
+      rx_ch := serin();\r
+      if(rx_ch < 0)\r
+          goto out;\r
+      endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+      if((rx_ch & 0x80) == 0x80)\r
+          id := rx_ch;\r
+          index:=0;\r
+      if (id == KEEPALIVE)\r
+          sys_SetTimer(0,3000);// 3 seconds  \r
+          comm_idx++;  \r
+          redraw_comm();\r
+          id:=0;\r
+      endif;\r
+          goto out;//return;\r
+      endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+      if (index < 100)    // 100 is buffer capacity\r
+          RX_buffer[index] := rx_ch;\r
+          index++;\r
+      else\r
+          index := 0;\r
+      endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+      if(id == COMPS && index == 1)\r
+          redraw_comp_state(RX_buffer[0]);//draw_status();\r
+          id:=0;\r
+          goto out;//return;\r
+      endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+      if(id == CORNS)// && index == 1)\r
+          corns := RX_buffer[0];  \r
+          redraw_corns();//draw_status();\r
+          id:=0;\r
+          goto out;//return;\r
+      endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+      if(id == ACT_FSM && rx_ch == '\0')\r
+          cnt_idx := 0;\r
+          repeat    \r
+             act_fsm_state[cnt_idx] := RX_buffer[cnt_idx];\r
+             cnt_idx++;\r
+          until(RX_buffer[cnt_idx] == '\0')\r
+          act_fsm_state[cnt_idx] := '\0';\r
+          redraw_act_state();\r
+          id:=0;\r
+          goto out;//return;\r
+      endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+      if(id == MOVE_FSM && rx_ch == '\0')\r
+          cnt_idx := 0;\r
+          repeat    \r
+             move_fsm_state[cnt_idx] := RX_buffer[cnt_idx];\r
+             cnt_idx++;\r
+          until(RX_buffer[cnt_idx] == '\0')\r
+          move_fsm_state[cnt_idx] := '\0';\r
+          redraw_move_state();\r
+          goto out;//return;\r
+      endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+      if(id == MAIN_FSM && rx_ch == '\0')\r
+          cnt_idx := 0;\r
+          repeat    \r
+             main_fsm_state[cnt_idx] := RX_buffer[cnt_idx];\r
+             cnt_idx++;\r
+          until(RX_buffer[cnt_idx] == '\0')\r
+          main_fsm_state[cnt_idx] := '\0';\r
+          redraw_main_state();\r
+          id:=0;\r
+          goto out;//return;\r
+      endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+      if (id == VOLTAGES && index == 17)\r
+         cnt_idx :=0;   \r
+         repeat    \r
+            voltages[cnt_idx] := RX_buffer[cnt_idx];\r
+            cnt_idx++;\r
+         until(cnt_idx == 17)\r
+         redraw_voltage();\r
+         id:=0;\r
+         goto out;//return;\r
+      endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+      if(id == LOCATION && index == 9)\r
+          cnt_idx := 0;\r
+          repeat\r
+              position[cnt_idx] := RX_buffer[cnt_idx];\r
+              cnt_idx++;\r
+          until(cnt_idx == 9)          \r
+          redraw_position();\r
+          id:=0;\r
+          goto out;//return;\r
+      endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+      if(id == DRESS && index == 1)\r
+          if(RX_buffer[0] == 1)  \r
+              dress_color := YELLOW;\r
+          endif\r
+          if(RX_buffer[0] == 0)  \r
+              dress_color := BLUE;\r
+          endif\r
+              redraw_corns();\r
+              id:=0;\r
+          goto out;//return;\r
+      endif\r
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`\r
+out:\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func STATE_page()\r
+    var state, cnt,idx1,tmr;\r
+    sys_SetTimer(0,3000);\r
+    paint_voltage();\r
+    cnt:=0;\r
+    redraw_voltage();\r
+    paint_comp_states(0);\r
+    paint_corn();\r
+    com_Init(buffer,100,0);\r
+    cnt := 0;                   //draw states for all components\r
+    repeat\r
+        redraw_comp_state(comp_state[cnt]);\r
+    until(cnt++ == 8)\r
+    paint_position();\r
+    redraw_position();\r
+    redraw_corns();\r
+    redraw_main_state();\r
+    redraw_move_state();\r
+    redraw_act_state();\r
+    paint_comm();\r
+    redraw_comm();\r
+\r
+    gfx_Button(UP,0, MAX_HEIGHT-27, GRAY, BLACK,FONT1,2,2, " To control screen ");\r
+    touch_DetectRegion(0, MAX_HEIGHT-30, MAX_WIDTH, MAX_HEIGHT);\r
+    touch_Set(TOUCH_ENABLE);\r
+    repeat\r
+        state := touch_Get(TOUCH_STATUS);\r
+        if(state == TOUCH_PRESS)\r
+            gfx_Button(DOWN,0, MAX_HEIGHT-27, GRAY, BLUE,FONT1, 2, 2, " To control screen ");\r
+        endif\r
+        if(state == TOUCH_RELEASE)\r
+            gfx_Button(UP,0, MAX_HEIGHT-27, GRAY, BLUE,FONT1, 2, 2, " To control screen ");\r
+            page := 1;\r
+            break;\r
+        endif\r
+        read_serial(); \r
+        if(sys_GetTimer(0) == 0)\r
+            idx1 := 0;\r
+            repeat\r
+                idx1++;  \r
+                comp_state[idx1] := idx1;  \r
+            until(idx1==8);\r
+            cnt := 0;                   //draw states for all components\r
+            repeat\r
+                redraw_comp_state(comp_state[cnt]);\r
+            until(cnt++ == 8)\r
+            draw_error();\r
+        endif\r
+    forever\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func CTRL_page()\r
+    var n, state, x;\r
+    n :=0;\r
+    keyval := -1;  // initate key value\r
+    BT_text[0] := "  FORK DOWN   ";    //set texts for all buttons\r
+    BT_text[1] := "  FORK UP     ";\r
+    BT_text[2] := "  DOOR OPEN   ";\r
+    BT_text[3] := "  DOOR CLOSE  ";\r
+    BT_text[4] := "  START ROLL  ";\r
+    BT_text[5] := "  STOP ROLL   ";\r
+    BT_text[6] := "SEND ALL STATE";\r
+    BT_text[7] := " SWITCH DRESS ";\r
+    BT_text[8] := "  To state screen  ";\r
+    touch_Set(TOUCH_ENABLE);          // enable the touch screen                \r
+    touch_DetectRegion(0, 0, MAX_WIDTH, MAX_HEIGHT);\r
+//*********************************************************************************************\r
+    repeat  \r
+       BT_state[n] := UP;           //set state for all buttons\r
+       BT_OLDstate[n] := DOWN;\r
+    until(++n == 9);   \r
+//*********************************************************************************************\r
+    draw_keys();\r
+    repeat \r
+    sys_SetTimer(0,3000);\r
+        state := touch_Get(TOUCH_STATUS);\r
+        if(state == TOUCH_PRESS)\r
+           read_key();\r
+           send_axis();     //debugging only   \r
+           if(keyval != -1)\r
+              if(keyval == 10 || keyval == 9)\r
+                  BT_state[8] := DOWN;\r
+                  gfx_Button(BT_state[8], 3, dY[8], collor[8], BLUE, FONT1, 2, 2, BT_text[8]);// misto redraw();\r
+              else    \r
+                 BT_state[keyval] := DOWN; // set that button is pushed\r
+                 redraw();\r
+              endif;    \r
+           endif\r
+        endif\r
+        if(state == TOUCH_RELEASE)\r
+            if(keyval != -1)\r
+                BT_state[keyval] := UP; //button was released\r
+                redraw();\r
+                page := 0;\r
+                if(keyval == 10 || keyval == 9)\r
+                    gfx_Button(BT_state[8], 3, dY[8], collor[8], BLACK, FONT1, 2, 2, BT_text[8]);// misto redraw();\r
+                    keyval := -1;\r
+                    break;\r
+                endif;    \r
+                send_cmd();\r
+            endif\r
+        endif\r
+    forever\r
+endfunc\r
+\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+//*********************************************************************************************\r
+\r
+func main()\r
+    page := 0;\r
+    firstState := 0;\r
+    firstCtrl := 0;\r
+    comp_collor := RED;\r
+    data_init();\r
+    voltages[0]:=0xff;// voltage color initate\r
+    comm_idx := 3;\r
+\r
+    repeat\r
+        if(!page)// view state page\r
+            clear_page();    \r
+            STATE_page();\r
+        else// view ctrl page\r
+            clear_page();            \r
+            CTRL_page();\r
+        endif    \r
+    forever        \r
+endfunc\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r