Check this one ! mbos setup changed, WTX hor pos changed, no font style check, no checksum check

Dependencies:   4DGL MODSERIAL mbed mbos

Fork of CDU_Mbed_21 by Engravity-CDU

Committer:
LvdK
Date:
Sun Jul 20 16:33:53 2014 +0000
Revision:
8:422544d24df3
Child:
10:7e350a27f936
CDU_Mbed_26; - other mbos setup !; - WTX hor. pos. changed; - no fontstyle check; - no checksum check

Who changed what in which revision?

UserRevisionLine numberNew contents of line
LvdK 8:422544d24df3 1 // L. van der Kolk, ELVEDEKA, Holland //
LvdK 8:422544d24df3 2 // File: FS2CDU_data_5.cpp
LvdK 8:422544d24df3 3 // -- Message handling from FS to CDU --
LvdK 8:422544d24df3 4 // Data field analyzing and filling data structures
LvdK 8:422544d24df3 5
LvdK 8:422544d24df3 6 #include "mbed.h"
LvdK 8:422544d24df3 7 #include "MODSERIAL.h"
LvdK 8:422544d24df3 8 #include "mbos.h"
LvdK 8:422544d24df3 9 #include "mbos_def2.h"
LvdK 8:422544d24df3 10
LvdK 8:422544d24df3 11 extern mbos CDU_OS;
LvdK 8:422544d24df3 12
LvdK 8:422544d24df3 13 // ---- FS-to-CDU data structures to be filled with received data ----------------
LvdK 8:422544d24df3 14 #define max_text0 48 // max text position font 0 (pos 0 invalid )
LvdK 8:422544d24df3 15 #define max_text1 24 // max text position font 1 (pos 0 invalid )
LvdK 8:422544d24df3 16 #define max_lines 14 // max nr of screen lines
LvdK 8:422544d24df3 17 #define max_col_nr 255 // highest possible R,G, or B colour number
LvdK 8:422544d24df3 18 #define fstyle_1 'S' // possible font style character 1
LvdK 8:422544d24df3 19 #define fstyle_2 'N' // possible font style character 2
LvdK 8:422544d24df3 20 #define max_keys 100 // max total nr of select keys 0 - 99
LvdK 8:422544d24df3 21 #define max_leftkeys 6 // max nr of used LEFT select keys ( 0 - 49 )
LvdK 8:422544d24df3 22 #define max_rightkeys 6 // max nr of used RIGHT select keys ( 50 - 99 )
LvdK 8:422544d24df3 23
LvdK 8:422544d24df3 24 // Background colour of CDU display:
LvdK 8:422544d24df3 25 struct { int BG_RED; // : RED value 0 - 255
LvdK 8:422544d24df3 26 int BG_GREEN; // : GREEN value 0 - 255
LvdK 8:422544d24df3 27 int BG_BLUE; // : BLUE value 0 - 255
LvdK 8:422544d24df3 28 } BACKGROUND_COL;
LvdK 8:422544d24df3 29
LvdK 8:422544d24df3 30 // Maintext lines at selectkeys:
LvdK 8:422544d24df3 31 struct { char text[55]; // : maintext string, ending with '\0'
LvdK 8:422544d24df3 32 int font_size; // : fontsize of textline 0 or 1
LvdK 8:422544d24df3 33 char font_style; // : style character S or N
LvdK 8:422544d24df3 34 int text_RED; // : RED value of textline
LvdK 8:422544d24df3 35 int text_GREEN; // : GREEN value of textline
LvdK 8:422544d24df3 36 int text_BLUE; // : BLUE value of textline
LvdK 8:422544d24df3 37 } SELKEY_MAINTEXT[100]; // : array of selectkey Maintext structures
LvdK 8:422544d24df3 38
LvdK 8:422544d24df3 39 // Subtext lines at selectkeys:
LvdK 8:422544d24df3 40 struct { char text[55]; // : subtext string, ending with '\0'
LvdK 8:422544d24df3 41 int font_size; // : fontsize of textline 0 or 1
LvdK 8:422544d24df3 42 char font_style; // : style character S or N
LvdK 8:422544d24df3 43 int text_RED; // : RED value of textline
LvdK 8:422544d24df3 44 int text_GREEN; // : GREEN value of textline
LvdK 8:422544d24df3 45 int text_BLUE; // : BLUE value of textline
LvdK 8:422544d24df3 46 } SELKEY_SUBTEXT[100]; // : array of selectkey Subtext structures
LvdK 8:422544d24df3 47
LvdK 8:422544d24df3 48 // Screen textlines:
LvdK 8:422544d24df3 49 struct { char text[55]; // : text line string, ending with '\0'
LvdK 8:422544d24df3 50 int font_size; // : fontsize of textline 0 or 1
LvdK 8:422544d24df3 51 char font_style; // : style character S or N
LvdK 8:422544d24df3 52 int text_RED; // : RED value of textline
LvdK 8:422544d24df3 53 int text_GREEN; // : GREEN value of textline
LvdK 8:422544d24df3 54 int text_BLUE; // : BLUE value of textline
LvdK 8:422544d24df3 55 } TEXTLINE[16]; // : array of textline structures
LvdK 8:422544d24df3 56
LvdK 8:422544d24df3 57 // CDU status:
LvdK 8:422544d24df3 58 struct { int msg_indicator; // : MSG 0 = light OFF, 1 = light ON
LvdK 8:422544d24df3 59 int exec_indicator; // : EXEC 0 = indicator OFF, 1 = indicator ON
LvdK 8:422544d24df3 60 int fail_indicator; // : FAIL 0 = indicator OFF, 1 = indicator ON
LvdK 8:422544d24df3 61 int dspy_indicator; // : DSPY 0 = indicator OFF, 1 = indicator ON
LvdK 8:422544d24df3 62 int ofst_indicator; // : OFST 0 = indicator OFF, 1 = indicator ON
LvdK 8:422544d24df3 63 int backlight; // : 0 = light OFF, 1 = light ON
LvdK 8:422544d24df3 64 int stby_mode; // : 0 = operational mode, 1 = standby mode
LvdK 8:422544d24df3 65 } CDU_STATUS;
LvdK 8:422544d24df3 66
LvdK 8:422544d24df3 67
LvdK 8:422544d24df3 68 // FS_data_update_ID:
LvdK 8:422544d24df3 69 // These global(!) flags indicate what data has been updated:
LvdK 8:422544d24df3 70 int Background_Col_Update = 0; // : 1 when color was updated, must be reset to 0 when data has been read
LvdK 8:422544d24df3 71 int CDU_Status_Update = 0; // : 1 when status was updated, must be reset to 0 when data has been read
LvdK 8:422544d24df3 72 int DO_CLR_SCREEN = 0; // : 1 when screen should be cleared, must be reset to 0 when done
LvdK 8:422544d24df3 73 int Text_Line_Update = 0; // : equal to line number whose text was updated, must be reset to 0 when text has been read
LvdK 8:422544d24df3 74 int Key_Maintext_Update = -1; // : equal to keynumber whose main text line was updated, must be reset to -1 (!) when text has been read
LvdK 8:422544d24df3 75 int Key_Subtext_Update = -1; // : equal to keynumber whose sub text line was updated, must be reset to -1 (!) when text has been read
LvdK 8:422544d24df3 76
LvdK 8:422544d24df3 77 //------------- debug only ---------------------------
LvdK 8:422544d24df3 78 extern MODSERIAL SERIAL_DEBUG; // : debug serial port
LvdK 8:422544d24df3 79 //----------------------------------------------------
LvdK 8:422544d24df3 80
LvdK 8:422544d24df3 81 extern MODSERIAL USB;
LvdK 8:422544d24df3 82 extern char string_received[];
LvdK 8:422544d24df3 83 extern int comma[];
LvdK 8:422544d24df3 84
LvdK 8:422544d24df3 85 // Common flag to signal that an update was stored in the datastructures:
LvdK 8:422544d24df3 86 int FSdata_received_flag = false; // : true when some FS-to-CDU data was updated
LvdK 8:422544d24df3 87
LvdK 8:422544d24df3 88 void set_initial_data()
LvdK 8:422544d24df3 89 { // Function to fill all FS-to-CDU datastructures with (dummy) data at initial power-up conditions.
LvdK 8:422544d24df3 90 // Prevents non-printable chars in data structures !
LvdK 8:422544d24df3 91 int key_nr, line_nr;
LvdK 8:422544d24df3 92 // Init background colour of screen :
LvdK 8:422544d24df3 93 BACKGROUND_COL.BG_RED = 128;
LvdK 8:422544d24df3 94 BACKGROUND_COL.BG_GREEN = 128;
LvdK 8:422544d24df3 95 BACKGROUND_COL.BG_BLUE = 128;
LvdK 8:422544d24df3 96
LvdK 8:422544d24df3 97 // Filling of all select key datastructures:
LvdK 8:422544d24df3 98 // Init Maintext at left selectkeys starting from 0 :
LvdK 8:422544d24df3 99 for ( key_nr = 0; key_nr < max_leftkeys; key_nr++ )
LvdK 8:422544d24df3 100 { SELKEY_MAINTEXT[key_nr].text_RED = 128;
LvdK 8:422544d24df3 101 SELKEY_MAINTEXT[key_nr].text_GREEN = 128;
LvdK 8:422544d24df3 102 SELKEY_MAINTEXT[key_nr].text_BLUE = 128;
LvdK 8:422544d24df3 103 SELKEY_MAINTEXT[key_nr].font_size = 0;
LvdK 8:422544d24df3 104 SELKEY_MAINTEXT[key_nr].font_style = fstyle_1;
LvdK 8:422544d24df3 105 strcpy(SELKEY_MAINTEXT[key_nr].text, " \0"); // some space chars
LvdK 8:422544d24df3 106 }
LvdK 8:422544d24df3 107 // Init Maintext at right selectkeys starting from 50 :
LvdK 8:422544d24df3 108 for ( key_nr = 50; key_nr < (50+max_rightkeys); key_nr++ )
LvdK 8:422544d24df3 109 { SELKEY_MAINTEXT[key_nr].text_RED = 128;
LvdK 8:422544d24df3 110 SELKEY_MAINTEXT[key_nr].text_GREEN = 128;
LvdK 8:422544d24df3 111 SELKEY_MAINTEXT[key_nr].text_BLUE = 128;
LvdK 8:422544d24df3 112 SELKEY_MAINTEXT[key_nr].font_size = 0;
LvdK 8:422544d24df3 113 SELKEY_MAINTEXT[key_nr].font_style = fstyle_1;
LvdK 8:422544d24df3 114 strcpy(SELKEY_MAINTEXT[key_nr].text, " \0"); // some space chars
LvdK 8:422544d24df3 115 }
LvdK 8:422544d24df3 116 // Init Subtext at left selectkeys starting from 0 :
LvdK 8:422544d24df3 117 for ( key_nr = 0; key_nr < max_leftkeys; key_nr++ )
LvdK 8:422544d24df3 118 { SELKEY_SUBTEXT[key_nr].text_RED = 128;
LvdK 8:422544d24df3 119 SELKEY_SUBTEXT[key_nr].text_GREEN = 128;
LvdK 8:422544d24df3 120 SELKEY_SUBTEXT[key_nr].text_BLUE = 128;
LvdK 8:422544d24df3 121 SELKEY_SUBTEXT[key_nr].font_size = 0;
LvdK 8:422544d24df3 122 SELKEY_SUBTEXT[key_nr].font_style = fstyle_1;
LvdK 8:422544d24df3 123 strcpy(SELKEY_SUBTEXT[key_nr].text," \0"); // some space chars
LvdK 8:422544d24df3 124 }
LvdK 8:422544d24df3 125 // Init Subtext at right selectkeys starting from 50 :
LvdK 8:422544d24df3 126 for ( key_nr = 50; key_nr < (50+max_rightkeys); key_nr++ )
LvdK 8:422544d24df3 127 { SELKEY_SUBTEXT[key_nr].text_RED = 128;
LvdK 8:422544d24df3 128 SELKEY_SUBTEXT[key_nr].text_GREEN = 128;
LvdK 8:422544d24df3 129 SELKEY_SUBTEXT[key_nr].text_BLUE = 128;
LvdK 8:422544d24df3 130 SELKEY_SUBTEXT[key_nr].font_size = 0;
LvdK 8:422544d24df3 131 SELKEY_SUBTEXT[key_nr].font_style = fstyle_1;
LvdK 8:422544d24df3 132 strcpy(SELKEY_SUBTEXT[key_nr].text, " \0"); // some space chars
LvdK 8:422544d24df3 133 }
LvdK 8:422544d24df3 134
LvdK 8:422544d24df3 135 // Init screen text lines with space chars :
LvdK 8:422544d24df3 136 for ( line_nr = 1; line_nr <= 14; line_nr++ )
LvdK 8:422544d24df3 137 { TEXTLINE[line_nr].text_RED = 128;
LvdK 8:422544d24df3 138 TEXTLINE[line_nr].text_GREEN = 128;
LvdK 8:422544d24df3 139 TEXTLINE[line_nr].text_BLUE = 128;
LvdK 8:422544d24df3 140 TEXTLINE[line_nr].font_size = 0;
LvdK 8:422544d24df3 141 TEXTLINE[line_nr].font_style = fstyle_1;
LvdK 8:422544d24df3 142 strcpy(TEXTLINE[line_nr].text, " \0"); // : all space chars
LvdK 8:422544d24df3 143 }
LvdK 8:422544d24df3 144 // Init CDU status items:
LvdK 8:422544d24df3 145 CDU_STATUS.msg_indicator = 0;
LvdK 8:422544d24df3 146 CDU_STATUS.exec_indicator = 0;
LvdK 8:422544d24df3 147 CDU_STATUS.backlight = 0;
LvdK 8:422544d24df3 148 CDU_STATUS.stby_mode = 0;
LvdK 8:422544d24df3 149 }
LvdK 8:422544d24df3 150
LvdK 8:422544d24df3 151 void read_datafields(int command_number) {
LvdK 8:422544d24df3 152 // Function to read all comma seperated datafields in string_received[] from USB
LvdK 8:422544d24df3 153 // and fill in the FS-to-CDU data structures.
LvdK 8:422544d24df3 154 // Parameter is found command_number by decoder.
LvdK 8:422544d24df3 155 int colour, size, pos, line, last, cnt, k_id, a ;
LvdK 8:422544d24df3 156 int modified, char_pntr;
LvdK 8:422544d24df3 157 char ch;
LvdK 8:422544d24df3 158
LvdK 8:422544d24df3 159 modified = false;
LvdK 8:422544d24df3 160 //CDU_OS.LockResource(FS_DATA_RESOURCE); // : lock FS database <<--- !!
LvdK 8:422544d24df3 161
LvdK 8:422544d24df3 162 switch ( command_number )
LvdK 8:422544d24df3 163 { case 0:
LvdK 8:422544d24df3 164 { // 0 is no valid commandnumber, do nothing
LvdK 8:422544d24df3 165 break;
LvdK 8:422544d24df3 166 }
LvdK 8:422544d24df3 167
LvdK 8:422544d24df3 168 case 1: // MSG command, message indicator control CDU
LvdK 8:422544d24df3 169 {
LvdK 8:422544d24df3 170 // Get message indicator status:
LvdK 8:422544d24df3 171 char_pntr = comma[1] + 1; // : set char pointer to char after comma 1
LvdK 8:422544d24df3 172 if (string_received[char_pntr] == '0' || string_received[char_pntr] == '1')
LvdK 8:422544d24df3 173 { CDU_STATUS.msg_indicator = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 174 CDU_Status_Update = 1;
LvdK 8:422544d24df3 175 }
LvdK 8:422544d24df3 176 break;
LvdK 8:422544d24df3 177 }
LvdK 8:422544d24df3 178
LvdK 8:422544d24df3 179 case 2: // EXC command, exec indicator control CDU
LvdK 8:422544d24df3 180 {
LvdK 8:422544d24df3 181 // Get exec indicator status:
LvdK 8:422544d24df3 182 char_pntr = comma[1] + 1; // : set char pointer to char after comma 1
LvdK 8:422544d24df3 183 if (string_received[char_pntr] == '0' || string_received[char_pntr] == '1')
LvdK 8:422544d24df3 184 { CDU_STATUS.exec_indicator = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 185 CDU_Status_Update = 1;
LvdK 8:422544d24df3 186 }
LvdK 8:422544d24df3 187 break;
LvdK 8:422544d24df3 188 }
LvdK 8:422544d24df3 189
LvdK 8:422544d24df3 190 case 3: // BLT command, backlight control CDU
LvdK 8:422544d24df3 191 {
LvdK 8:422544d24df3 192 // Get backlight status:
LvdK 8:422544d24df3 193 char_pntr = comma[1] + 1; // : set char pointer to char after comma 1
LvdK 8:422544d24df3 194 if (string_received[char_pntr] == '0' || string_received[char_pntr] == '1')
LvdK 8:422544d24df3 195 { CDU_STATUS.backlight = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 196 CDU_Status_Update = 1;
LvdK 8:422544d24df3 197 }
LvdK 8:422544d24df3 198 break;
LvdK 8:422544d24df3 199 }
LvdK 8:422544d24df3 200
LvdK 8:422544d24df3 201 case 4: // SBY command, standby control CDU
LvdK 8:422544d24df3 202 {
LvdK 8:422544d24df3 203 // Get standby status:
LvdK 8:422544d24df3 204 char_pntr = comma[1] + 1; // : set char pointer to char after comma 1
LvdK 8:422544d24df3 205 if (string_received[char_pntr] == '0' || string_received[char_pntr] == '1')
LvdK 8:422544d24df3 206 { CDU_STATUS.stby_mode = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 207 CDU_Status_Update = 1;
LvdK 8:422544d24df3 208 }
LvdK 8:422544d24df3 209 break;
LvdK 8:422544d24df3 210 }
LvdK 8:422544d24df3 211
LvdK 8:422544d24df3 212 case 5: // CLS command, CDU clear screen control
LvdK 8:422544d24df3 213 {
LvdK 8:422544d24df3 214 DO_CLR_SCREEN = 1; // : tell to clear the screen
LvdK 8:422544d24df3 215 break;
LvdK 8:422544d24df3 216 }
LvdK 8:422544d24df3 217
LvdK 8:422544d24df3 218
LvdK 8:422544d24df3 219 case 6: // SBC command, screen background colour control
LvdK 8:422544d24df3 220 {
LvdK 8:422544d24df3 221 char_pntr = comma[1] + 1; // : set char pointer to char after comma 1
LvdK 8:422544d24df3 222 colour = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 223 if ( colour >= 0 && colour <= max_col_nr ) {
LvdK 8:422544d24df3 224 BACKGROUND_COL.BG_RED = colour;
LvdK 8:422544d24df3 225 }
LvdK 8:422544d24df3 226 char_pntr = comma[2] + 1; // : set char pointer to char after comma 2
LvdK 8:422544d24df3 227 colour = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 228 if ( colour >= 0 && colour <= max_col_nr ) {
LvdK 8:422544d24df3 229 BACKGROUND_COL.BG_GREEN = colour;
LvdK 8:422544d24df3 230 }
LvdK 8:422544d24df3 231 char_pntr = comma[3] + 1; // : set char pointer to char after comma 3
LvdK 8:422544d24df3 232 colour = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 233 if ( colour >= 0 && colour <= max_col_nr ) {
LvdK 8:422544d24df3 234 BACKGROUND_COL.BG_BLUE = colour;
LvdK 8:422544d24df3 235 }
LvdK 8:422544d24df3 236
LvdK 8:422544d24df3 237 Background_Col_Update = 1; // : set update of background colour
LvdK 8:422544d24df3 238 break;
LvdK 8:422544d24df3 239 }
LvdK 8:422544d24df3 240
LvdK 8:422544d24df3 241
LvdK 8:422544d24df3 242 case 7: // WTX command, write textline to CDU screen
LvdK 8:422544d24df3 243 {
LvdK 8:422544d24df3 244 // Read linenumber:
LvdK 8:422544d24df3 245 char_pntr = comma[1] + 1; // : set char pointer to char after comma 1
LvdK 8:422544d24df3 246 line = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 247 // Read char position:
LvdK 8:422544d24df3 248 char_pntr = comma[2] + 1; // : set char pointer to char after comma 2
LvdK 8:422544d24df3 249 pos = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 250
LvdK 8:422544d24df3 251 // Test if char X,Y position is within range:
LvdK 8:422544d24df3 252 if ( line >= 1 && line <= max_lines && pos >= 1 && pos <= max_text0 )
LvdK 8:422544d24df3 253 { // Read font size :
LvdK 8:422544d24df3 254 char_pntr = comma[3] + 1; // : set char pointer to char after comma 3
LvdK 8:422544d24df3 255 size = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 256 // Test if size is valid:
LvdK 8:422544d24df3 257 if ( size == 0 || size == 1 ) {
LvdK 8:422544d24df3 258 TEXTLINE[line].font_size = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 259 modified = true;
LvdK 8:422544d24df3 260 }
LvdK 8:422544d24df3 261 // Read line font style:
LvdK 8:422544d24df3 262 char_pntr = comma[4] + 1; // : set char pointer to char after comma 4
LvdK 8:422544d24df3 263 ch = string_received[char_pntr];
LvdK 8:422544d24df3 264 // !! Font style check disabled:
LvdK 8:422544d24df3 265 //if (ch == fstyle_1 || ch == fstyle_2 ) {
LvdK 8:422544d24df3 266 TEXTLINE[line].font_style = ch;
LvdK 8:422544d24df3 267 modified = true;
LvdK 8:422544d24df3 268 //}
LvdK 8:422544d24df3 269 // Read RGB line colour:
LvdK 8:422544d24df3 270 char_pntr = comma[5] + 1; // : set char pointer to char after comma 5
LvdK 8:422544d24df3 271 colour = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 272 if ( colour >= 0 && colour <= max_col_nr ) {
LvdK 8:422544d24df3 273 TEXTLINE[line].text_RED = colour;
LvdK 8:422544d24df3 274 modified = true;
LvdK 8:422544d24df3 275 }
LvdK 8:422544d24df3 276 char_pntr = comma[6] + 1; // : set char pointer to char after comma 6
LvdK 8:422544d24df3 277 colour = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 278 if ( colour >= 0 && colour <= max_col_nr ) {
LvdK 8:422544d24df3 279 TEXTLINE[line].text_GREEN = colour;
LvdK 8:422544d24df3 280 modified = true;
LvdK 8:422544d24df3 281 }
LvdK 8:422544d24df3 282 char_pntr = comma[7] + 1; // : set char pointer to char after comma 7
LvdK 8:422544d24df3 283 colour = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 284 if ( colour >= 0 && colour <= max_col_nr ) {
LvdK 8:422544d24df3 285 TEXTLINE[line].text_BLUE = colour;
LvdK 8:422544d24df3 286 modified = true;
LvdK 8:422544d24df3 287 }
LvdK 8:422544d24df3 288 // Read textfield :
LvdK 8:422544d24df3 289 char_pntr = comma[8] + 1; // : set char pointer to first char of textfield
LvdK 8:422544d24df3 290 last = 0;
LvdK 8:422544d24df3 291 // read font size to determine last possible position:
LvdK 8:422544d24df3 292 if ( TEXTLINE[line].font_size == 0 ) last = max_text0;
LvdK 8:422544d24df3 293 else if ( TEXTLINE[line].font_size == 1 ) last = max_text1;
LvdK 8:422544d24df3 294
LvdK 8:422544d24df3 295 if (last > 0 && pos <= last) { // : test for valid area and valid fontsize
LvdK 8:422544d24df3 296 a = pos-1; // : !!!!!!
LvdK 8:422544d24df3 297 while ( a <= last )
LvdK 8:422544d24df3 298 { ch = string_received[char_pntr];
LvdK 8:422544d24df3 299 if (ch == '*') break; // : do not include * in text
LvdK 8:422544d24df3 300 TEXTLINE[line].text[a] = ch;
LvdK 8:422544d24df3 301 a++;
LvdK 8:422544d24df3 302 char_pntr++;
LvdK 8:422544d24df3 303 }
LvdK 8:422544d24df3 304 modified = true;
LvdK 8:422544d24df3 305 TEXTLINE[line].text[a] = '\0'; // : mark end of text
LvdK 8:422544d24df3 306 }
LvdK 8:422544d24df3 307 }
LvdK 8:422544d24df3 308
LvdK 8:422544d24df3 309 if ( modified == true ) {
LvdK 8:422544d24df3 310 Text_Line_Update = line; // : set update of text line
LvdK 8:422544d24df3 311 }
LvdK 8:422544d24df3 312
LvdK 8:422544d24df3 313 // --------------- Debug only -----------------------------------------------------------------------
LvdK 8:422544d24df3 314 //SERIAL_DEBUG.printf("\rWTX command received :\r\n");
LvdK 8:422544d24df3 315 //SERIAL_DEBUG.printf("WTX line : %d\r\n",line ); // show line nr
LvdK 8:422544d24df3 316 //SERIAL_DEBUG.printf("WTX begin pos : %d\r\n",pos ); // show begin position
LvdK 8:422544d24df3 317 //SERIAL_DEBUG.printf("WTX fontsize is : %d\r\n",TEXTLINE[line].font_size ); // show fontsize
LvdK 8:422544d24df3 318 //SERIAL_DEBUG.printf("WTX fontstyle is: %c\r\n",TEXTLINE[line].font_style); // show fontstyle
LvdK 8:422544d24df3 319 //SERIAL_DEBUG.printf("WTX R_colour is : %d\r\n",TEXTLINE[line].text_RED ); // show textcolour
LvdK 8:422544d24df3 320 //SERIAL_DEBUG.printf("WTX G_colour is : %d\r\n",TEXTLINE[line].text_GREEN ); // show textcolour
LvdK 8:422544d24df3 321 //SERIAL_DEBUG.printf("WTX B_colour is : %d\r\n",TEXTLINE[line].text_BLUE ); // show textcolour
LvdK 8:422544d24df3 322 //SERIAL_DEBUG.printf("WTX line text is: \r\n" );
LvdK 8:422544d24df3 323 //SERIAL_DEBUG.printf("%s\r\n",TEXTLINE[line].text ); // show line text
LvdK 8:422544d24df3 324 //----------------------------------------------------------------------------------------------------
LvdK 8:422544d24df3 325
LvdK 8:422544d24df3 326 break;
LvdK 8:422544d24df3 327 }
LvdK 8:422544d24df3 328
LvdK 8:422544d24df3 329 case 8: // ETX command, erase (part of) textline of CDU screen
LvdK 8:422544d24df3 330 {
LvdK 8:422544d24df3 331 // Read linenumber:
LvdK 8:422544d24df3 332 char_pntr = comma[1] + 1; // : set char pointer to char after comma 1
LvdK 8:422544d24df3 333 line = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 334 // Read char position:
LvdK 8:422544d24df3 335 char_pntr = comma[2] + 1; // : set char pointer to char after comma 2
LvdK 8:422544d24df3 336 pos = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 337 // Read nr of char to be erased:
LvdK 8:422544d24df3 338 char_pntr = comma[3] + 1; // : set char pointer to char after comma 3
LvdK 8:422544d24df3 339 cnt = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 340 // Test if char X,Y position is within range:
LvdK 8:422544d24df3 341 if ( line >= 1 && line <= max_lines && pos >= 1 && pos <= max_text0 )
LvdK 8:422544d24df3 342 {
LvdK 8:422544d24df3 343 last = 0;
LvdK 8:422544d24df3 344 // read font size to determine last possible position:
LvdK 8:422544d24df3 345 if ( TEXTLINE[line].font_size == 0 )last = max_text0;
LvdK 8:422544d24df3 346 else if ( TEXTLINE[line].font_size == 1 )last = max_text1;
LvdK 8:422544d24df3 347
LvdK 8:422544d24df3 348 if (last > 0 && pos <= last && cnt > 0) { // : test if in valid area and chars > 0
LvdK 8:422544d24df3 349 a = pos-1; //: !!!!!!
LvdK 8:422544d24df3 350 modified = true;
LvdK 8:422544d24df3 351 while ( a <= last && cnt > 0)
LvdK 8:422544d24df3 352 {
LvdK 8:422544d24df3 353 TEXTLINE[line].text[a] = ' '; //: write space
LvdK 8:422544d24df3 354 a++;
LvdK 8:422544d24df3 355 cnt--;
LvdK 8:422544d24df3 356 }
LvdK 8:422544d24df3 357 }
LvdK 8:422544d24df3 358 }
LvdK 8:422544d24df3 359 if ( modified == true ) {
LvdK 8:422544d24df3 360 Text_Line_Update = line; // : set update of text line
LvdK 8:422544d24df3 361 }
LvdK 8:422544d24df3 362
LvdK 8:422544d24df3 363 // ---------------- Debug only -----------------------------------------------
LvdK 8:422544d24df3 364 //SERIAL_DEBUG.printf("ETX line : %d\r\n",line ); // show line nr
LvdK 8:422544d24df3 365 //SERIAL_DEBUG.printf("ETX first erase pos : %d\r\n",pos ); // show begin pos
LvdK 8:422544d24df3 366 //SERIAL_DEBUG.printf("ETX modified text line :\r\n" );
LvdK 8:422544d24df3 367 //SERIAL_DEBUG.printf("%s\r\n",TEXTLINE[line].text ); // show text line
LvdK 8:422544d24df3 368 // ---------------------------------------------------------------------------
LvdK 8:422544d24df3 369
LvdK 8:422544d24df3 370 break;
LvdK 8:422544d24df3 371 }
LvdK 8:422544d24df3 372
LvdK 8:422544d24df3 373 case 9: // KTX command, write textline to select key area
LvdK 8:422544d24df3 374 {
LvdK 8:422544d24df3 375 // Read key ID:
LvdK 8:422544d24df3 376 char_pntr = comma[1] + 1; // : set char pointer to char after comma 1
LvdK 8:422544d24df3 377 k_id = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 378
LvdK 8:422544d24df3 379 // Read text type:
LvdK 8:422544d24df3 380 char_pntr = comma[2] + 1; // : set char pointer to char after comma 2
LvdK 8:422544d24df3 381 ch = string_received[char_pntr];
LvdK 8:422544d24df3 382
LvdK 8:422544d24df3 383 if (ch == 'M' && k_id < max_keys ) // : text type = MAIN text and keyID valid
LvdK 8:422544d24df3 384 { // Read font size :
LvdK 8:422544d24df3 385 char_pntr = comma[3] + 1; // : set char pointer to char after comma 3
LvdK 8:422544d24df3 386 size = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 387 // Test if size is valid:
LvdK 8:422544d24df3 388 if ( size == 0 || size == 1 ) {
LvdK 8:422544d24df3 389 SELKEY_MAINTEXT[k_id].font_size = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 390 modified = true;
LvdK 8:422544d24df3 391 }
LvdK 8:422544d24df3 392 // Read line font style:
LvdK 8:422544d24df3 393 char_pntr = comma[4] + 1; // : set char pointer to char after comma 4
LvdK 8:422544d24df3 394 ch = string_received[char_pntr];
LvdK 8:422544d24df3 395 // !! Font style check disabled:
LvdK 8:422544d24df3 396 //if (ch == fstyle_1 || ch == fstyle_2 ) {
LvdK 8:422544d24df3 397 SELKEY_MAINTEXT[k_id].font_style = ch;
LvdK 8:422544d24df3 398 modified = true;
LvdK 8:422544d24df3 399 //}
LvdK 8:422544d24df3 400 // Read RGB line colour:
LvdK 8:422544d24df3 401 char_pntr = comma[5] + 1; // : set char pointer to char after comma 5
LvdK 8:422544d24df3 402 colour = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 403 if ( colour >= 0 && colour <= max_col_nr ) {
LvdK 8:422544d24df3 404 SELKEY_MAINTEXT[k_id].text_RED = colour;
LvdK 8:422544d24df3 405 modified = true;
LvdK 8:422544d24df3 406 }
LvdK 8:422544d24df3 407 char_pntr = comma[6] + 1; // : set char pointer to char after comma 5
LvdK 8:422544d24df3 408 colour = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 409 if ( colour >= 0 && colour <= max_col_nr ) {
LvdK 8:422544d24df3 410 SELKEY_MAINTEXT[k_id].text_GREEN = colour;
LvdK 8:422544d24df3 411 modified = true;
LvdK 8:422544d24df3 412 }
LvdK 8:422544d24df3 413 char_pntr = comma[7] + 1; // : set char pointer to char after comma 7
LvdK 8:422544d24df3 414 colour = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 415 if ( colour >= 0 && colour <= max_col_nr ) {
LvdK 8:422544d24df3 416 SELKEY_MAINTEXT[k_id].text_BLUE = colour;
LvdK 8:422544d24df3 417 modified = true;
LvdK 8:422544d24df3 418 }
LvdK 8:422544d24df3 419 // Read textfield :
LvdK 8:422544d24df3 420 char_pntr = comma[8] + 1; // : set char pointer to first char of textfield
LvdK 8:422544d24df3 421 last = 0;
LvdK 8:422544d24df3 422 // read font size to determine last possible position:
LvdK 8:422544d24df3 423 if ( SELKEY_MAINTEXT[k_id].font_size == 0 )last = max_text0;
LvdK 8:422544d24df3 424 else if ( SELKEY_MAINTEXT[k_id].font_size == 1 )last = max_text1;
LvdK 8:422544d24df3 425
LvdK 8:422544d24df3 426 if (last > 0) { // : test on valid fontsize
LvdK 8:422544d24df3 427 a = 0; // : !!! pos 0 !!
LvdK 8:422544d24df3 428 modified = true;
LvdK 8:422544d24df3 429 while ( a <= last )
LvdK 8:422544d24df3 430 { ch = string_received[char_pntr];
LvdK 8:422544d24df3 431 if (ch == '*') break; // : do not include * in text
LvdK 8:422544d24df3 432 SELKEY_MAINTEXT[k_id].text[a] = ch;
LvdK 8:422544d24df3 433 a++;
LvdK 8:422544d24df3 434 char_pntr++;
LvdK 8:422544d24df3 435 }
LvdK 8:422544d24df3 436 SELKEY_MAINTEXT[k_id].text[a] = '\0'; // : mark end of text
LvdK 8:422544d24df3 437 }
LvdK 8:422544d24df3 438
LvdK 8:422544d24df3 439 if ( modified == true ) {
LvdK 8:422544d24df3 440 Key_Maintext_Update = k_id; // : set keynumber whose main text was updated
LvdK 8:422544d24df3 441
LvdK 8:422544d24df3 442 }
LvdK 8:422544d24df3 443
LvdK 8:422544d24df3 444 // ----------------------- Debug only -----------------------------------------------------------------
LvdK 8:422544d24df3 445 //SERIAL_DEBUG.printf("KTX decoded key nr is : %d\r\n\n",k_id ); // show key nr
LvdK 8:422544d24df3 446 //SERIAL_DEBUG.printf("KTX MAINTEXT is : %s\r\n",SELKEY_MAINTEXT[k_id].text ); // show text
LvdK 8:422544d24df3 447 //SERIAL_DEBUG.printf("KTX fontsize is : %d\r\n",SELKEY_MAINTEXT[k_id].font_size ); // show fontsize
LvdK 8:422544d24df3 448 //SERIAL_DEBUG.printf("KTX fontstyle is: %c\r\n",SELKEY_MAINTEXT[k_id].font_style); // show fontstyle
LvdK 8:422544d24df3 449 //SERIAL_DEBUG.printf("KTX R_colour is : %d\r\n",SELKEY_MAINTEXT[k_id].text_RED ); // show textcolour
LvdK 8:422544d24df3 450 //SERIAL_DEBUG.printf("KTX G_colour is : %d\r\n",SELKEY_MAINTEXT[k_id].text_GREEN ); // show textcolour
LvdK 8:422544d24df3 451 //SERIAL_DEBUG.printf("KTX B_colour is : %d\r\n",SELKEY_MAINTEXT[k_id].text_BLUE ); // show textcolour
LvdK 8:422544d24df3 452 //----------------------------------------------------------------------------------------------------
LvdK 8:422544d24df3 453 }
LvdK 8:422544d24df3 454
LvdK 8:422544d24df3 455 else if ( ch == 'S' && k_id < max_keys ) // : text type = SUB text and keyID valid
LvdK 8:422544d24df3 456 { // Read font size 0 - 9:
LvdK 8:422544d24df3 457 char_pntr = comma[3] + 1; // : set char pointer to char after comma 3
LvdK 8:422544d24df3 458 size = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 459 // Test if size is valid:
LvdK 8:422544d24df3 460 if ( size == 0 || size == 1 ) {
LvdK 8:422544d24df3 461 SELKEY_SUBTEXT[k_id].font_size = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 462 modified = true;
LvdK 8:422544d24df3 463 }
LvdK 8:422544d24df3 464 // Read line font style:
LvdK 8:422544d24df3 465 char_pntr = comma[4] + 1; // : set char pointer to char after comma 4
LvdK 8:422544d24df3 466 ch = string_received[char_pntr];
LvdK 8:422544d24df3 467 if (ch == fstyle_1 || ch == fstyle_2 ) {
LvdK 8:422544d24df3 468 SELKEY_SUBTEXT[k_id].font_style = ch;
LvdK 8:422544d24df3 469 modified = true;
LvdK 8:422544d24df3 470 }
LvdK 8:422544d24df3 471 // Read RGB line colour:
LvdK 8:422544d24df3 472 char_pntr = comma[5] + 1; // : set char pointer to char after comma 5
LvdK 8:422544d24df3 473 colour = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 474 if ( colour >= 0 && colour <= max_col_nr ) {
LvdK 8:422544d24df3 475 SELKEY_SUBTEXT[k_id].text_RED = colour;
LvdK 8:422544d24df3 476 modified = true;
LvdK 8:422544d24df3 477 }
LvdK 8:422544d24df3 478 char_pntr = comma[6] + 1; // : set char pointer to char after comma 6
LvdK 8:422544d24df3 479 colour = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 480 if ( colour >= 0 && colour <= max_col_nr ) {
LvdK 8:422544d24df3 481 SELKEY_SUBTEXT[k_id].text_GREEN = colour;
LvdK 8:422544d24df3 482 modified = true;
LvdK 8:422544d24df3 483 }
LvdK 8:422544d24df3 484 char_pntr = comma[7] + 1; // : set char pointer to char after comma 7
LvdK 8:422544d24df3 485 colour = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 486 if ( colour >= 0 && colour <= max_col_nr ) {
LvdK 8:422544d24df3 487 SELKEY_SUBTEXT[k_id].text_BLUE = colour;
LvdK 8:422544d24df3 488 modified = true;
LvdK 8:422544d24df3 489 }
LvdK 8:422544d24df3 490 // Read textfield :
LvdK 8:422544d24df3 491 char_pntr = comma[8] + 1; // : set char pointer to first char of textfield
LvdK 8:422544d24df3 492 last = 0;
LvdK 8:422544d24df3 493 // read font size to determine last possible position:
LvdK 8:422544d24df3 494 if ( SELKEY_SUBTEXT[k_id].font_size == 0 )last = max_text0;
LvdK 8:422544d24df3 495 else if ( SELKEY_SUBTEXT[k_id].font_size == 1 )last = max_text1;
LvdK 8:422544d24df3 496
LvdK 8:422544d24df3 497 if (last > 0) { // : test on valid fontsize
LvdK 8:422544d24df3 498 a = 0; // : !!! pos 0 !!
LvdK 8:422544d24df3 499 modified = true;
LvdK 8:422544d24df3 500 while ( a <= last )
LvdK 8:422544d24df3 501 { ch = string_received[char_pntr];
LvdK 8:422544d24df3 502 if (ch == '*') break; // : do not include * in text
LvdK 8:422544d24df3 503 SELKEY_SUBTEXT[k_id].text[a] = ch;
LvdK 8:422544d24df3 504 a++;
LvdK 8:422544d24df3 505 char_pntr++;
LvdK 8:422544d24df3 506 }
LvdK 8:422544d24df3 507 SELKEY_SUBTEXT[k_id].text[a] = '\0'; // : mark end of text
LvdK 8:422544d24df3 508 }
LvdK 8:422544d24df3 509
LvdK 8:422544d24df3 510 if ( modified == true ) {
LvdK 8:422544d24df3 511 Key_Subtext_Update = k_id; // : set keynumber whose sub text was updated
LvdK 8:422544d24df3 512 }
LvdK 8:422544d24df3 513
LvdK 8:422544d24df3 514 // ------------------ Debug only ----------------------------------------------------------
LvdK 8:422544d24df3 515 //SERIAL_DEBUG.printf("KTX key nr is : %d\r\n",k_id ); // show key nr
LvdK 8:422544d24df3 516 //SERIAL_DEBUG.printf("KTX SUBTEXT is : %s\r\n",SELKEY_SUBTEXT[k_id].text ); // show text
LvdK 8:422544d24df3 517 //SERIAL_DEBUG.printf("KTX fontsize is : %d\r\n",SELKEY_SUBTEXT[k_id].font_size ); // show fontsize
LvdK 8:422544d24df3 518 //SERIAL_DEBUG.printf("KTX fontstyle is: %c\r\n",SELKEY_SUBTEXT[k_id].font_style); // show fontstyle
LvdK 8:422544d24df3 519 //SERIAL_DEBUG.printf("KTX R_colour is : %d\r\n",SELKEY_SUBTEXT[k_id].text_RED ); // show textcolour
LvdK 8:422544d24df3 520 //SERIAL_DEBUG.printf("KTX G_colour is : %d\r\n",SELKEY_SUBTEXT[k_id].text_GREEN ); // show textcolour
LvdK 8:422544d24df3 521 //SERIAL_DEBUG.printf("KTX B_colour is : %d\r\n",SELKEY_SUBTEXT[k_id].text_BLUE ); // show textcolour
LvdK 8:422544d24df3 522 // -----------------------------------------------------------------------------------------
LvdK 8:422544d24df3 523 }
LvdK 8:422544d24df3 524 break;
LvdK 8:422544d24df3 525 }
LvdK 8:422544d24df3 526
LvdK 8:422544d24df3 527 default:
LvdK 8:422544d24df3 528 {
LvdK 8:422544d24df3 529 // unknown commandnumber !
LvdK 8:422544d24df3 530 break;
LvdK 8:422544d24df3 531 }
LvdK 8:422544d24df3 532
LvdK 8:422544d24df3 533 }
LvdK 8:422544d24df3 534
LvdK 8:422544d24df3 535 CDU_OS.SetEvent(FS_DATA_EVENT,CDU_DSP_CSS_TASK_ID); // : set event for CDU screen update task
LvdK 8:422544d24df3 536 }
LvdK 8:422544d24df3 537
LvdK 8:422544d24df3 538
LvdK 8:422544d24df3 539
LvdK 8:422544d24df3 540