Engravity-CDU / CDU_Mbed_36

Dependencies:   4DGL-UC ConfigFile MODSERIAL mbed mbos

Fork of CDU_Mbed_35 by Engravity-CDU

Committer:
LvdK
Date:
Sun Jul 20 18:48:19 2014 +0000
Revision:
9:1e117310b481
Parent:
8:422544d24df3
3 commands addes

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 9:1e117310b481 149 CDU_STATUS.fail_indicator = 0;
LvdK 9:1e117310b481 150 CDU_STATUS.dspy_indicator = 0;
LvdK 9:1e117310b481 151 CDU_STATUS.ofst_indicator = 0;
LvdK 9:1e117310b481 152
LvdK 8:422544d24df3 153 }
LvdK 8:422544d24df3 154
LvdK 8:422544d24df3 155 void read_datafields(int command_number) {
LvdK 8:422544d24df3 156 // Function to read all comma seperated datafields in string_received[] from USB
LvdK 8:422544d24df3 157 // and fill in the FS-to-CDU data structures.
LvdK 8:422544d24df3 158 // Parameter is found command_number by decoder.
LvdK 8:422544d24df3 159 int colour, size, pos, line, last, cnt, k_id, a ;
LvdK 8:422544d24df3 160 int modified, char_pntr;
LvdK 8:422544d24df3 161 char ch;
LvdK 8:422544d24df3 162
LvdK 8:422544d24df3 163 modified = false;
LvdK 9:1e117310b481 164
LvdK 8:422544d24df3 165 switch ( command_number )
LvdK 8:422544d24df3 166 { case 0:
LvdK 8:422544d24df3 167 { // 0 is no valid commandnumber, do nothing
LvdK 8:422544d24df3 168 break;
LvdK 8:422544d24df3 169 }
LvdK 8:422544d24df3 170
LvdK 8:422544d24df3 171 case 1: // MSG command, message indicator control CDU
LvdK 8:422544d24df3 172 {
LvdK 8:422544d24df3 173 // Get message indicator status:
LvdK 8:422544d24df3 174 char_pntr = comma[1] + 1; // : set char pointer to char after comma 1
LvdK 8:422544d24df3 175 if (string_received[char_pntr] == '0' || string_received[char_pntr] == '1')
LvdK 8:422544d24df3 176 { CDU_STATUS.msg_indicator = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 177 CDU_Status_Update = 1;
LvdK 8:422544d24df3 178 }
LvdK 8:422544d24df3 179 break;
LvdK 8:422544d24df3 180 }
LvdK 8:422544d24df3 181
LvdK 8:422544d24df3 182 case 2: // EXC command, exec indicator control CDU
LvdK 8:422544d24df3 183 {
LvdK 8:422544d24df3 184 // Get exec indicator status:
LvdK 8:422544d24df3 185 char_pntr = comma[1] + 1; // : set char pointer to char after comma 1
LvdK 8:422544d24df3 186 if (string_received[char_pntr] == '0' || string_received[char_pntr] == '1')
LvdK 8:422544d24df3 187 { CDU_STATUS.exec_indicator = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 188 CDU_Status_Update = 1;
LvdK 8:422544d24df3 189 }
LvdK 8:422544d24df3 190 break;
LvdK 8:422544d24df3 191 }
LvdK 8:422544d24df3 192
LvdK 8:422544d24df3 193 case 3: // BLT command, backlight control CDU
LvdK 8:422544d24df3 194 {
LvdK 8:422544d24df3 195 // Get backlight status:
LvdK 8:422544d24df3 196 char_pntr = comma[1] + 1; // : set char pointer to char after comma 1
LvdK 8:422544d24df3 197 if (string_received[char_pntr] == '0' || string_received[char_pntr] == '1')
LvdK 8:422544d24df3 198 { CDU_STATUS.backlight = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 199 CDU_Status_Update = 1;
LvdK 8:422544d24df3 200 }
LvdK 8:422544d24df3 201 break;
LvdK 8:422544d24df3 202 }
LvdK 8:422544d24df3 203
LvdK 8:422544d24df3 204 case 4: // SBY command, standby control CDU
LvdK 8:422544d24df3 205 {
LvdK 8:422544d24df3 206 // Get standby status:
LvdK 8:422544d24df3 207 char_pntr = comma[1] + 1; // : set char pointer to char after comma 1
LvdK 8:422544d24df3 208 if (string_received[char_pntr] == '0' || string_received[char_pntr] == '1')
LvdK 8:422544d24df3 209 { CDU_STATUS.stby_mode = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 210 CDU_Status_Update = 1;
LvdK 8:422544d24df3 211 }
LvdK 8:422544d24df3 212 break;
LvdK 8:422544d24df3 213 }
LvdK 8:422544d24df3 214
LvdK 8:422544d24df3 215 case 5: // CLS command, CDU clear screen control
LvdK 8:422544d24df3 216 {
LvdK 8:422544d24df3 217 DO_CLR_SCREEN = 1; // : tell to clear the screen
LvdK 8:422544d24df3 218 break;
LvdK 8:422544d24df3 219 }
LvdK 8:422544d24df3 220
LvdK 8:422544d24df3 221
LvdK 8:422544d24df3 222 case 6: // SBC command, screen background colour control
LvdK 8:422544d24df3 223 {
LvdK 8:422544d24df3 224 char_pntr = comma[1] + 1; // : set char pointer to char after comma 1
LvdK 8:422544d24df3 225 colour = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 226 if ( colour >= 0 && colour <= max_col_nr ) {
LvdK 8:422544d24df3 227 BACKGROUND_COL.BG_RED = colour;
LvdK 8:422544d24df3 228 }
LvdK 8:422544d24df3 229 char_pntr = comma[2] + 1; // : set char pointer to char after comma 2
LvdK 8:422544d24df3 230 colour = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 231 if ( colour >= 0 && colour <= max_col_nr ) {
LvdK 8:422544d24df3 232 BACKGROUND_COL.BG_GREEN = colour;
LvdK 8:422544d24df3 233 }
LvdK 8:422544d24df3 234 char_pntr = comma[3] + 1; // : set char pointer to char after comma 3
LvdK 8:422544d24df3 235 colour = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 236 if ( colour >= 0 && colour <= max_col_nr ) {
LvdK 8:422544d24df3 237 BACKGROUND_COL.BG_BLUE = colour;
LvdK 8:422544d24df3 238 }
LvdK 8:422544d24df3 239
LvdK 8:422544d24df3 240 Background_Col_Update = 1; // : set update of background colour
LvdK 8:422544d24df3 241 break;
LvdK 8:422544d24df3 242 }
LvdK 8:422544d24df3 243
LvdK 8:422544d24df3 244
LvdK 8:422544d24df3 245 case 7: // WTX command, write textline to CDU screen
LvdK 8:422544d24df3 246 {
LvdK 8:422544d24df3 247 // Read linenumber:
LvdK 8:422544d24df3 248 char_pntr = comma[1] + 1; // : set char pointer to char after comma 1
LvdK 8:422544d24df3 249 line = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 250 // Read char position:
LvdK 8:422544d24df3 251 char_pntr = comma[2] + 1; // : set char pointer to char after comma 2
LvdK 8:422544d24df3 252 pos = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 253
LvdK 8:422544d24df3 254 // Test if char X,Y position is within range:
LvdK 8:422544d24df3 255 if ( line >= 1 && line <= max_lines && pos >= 1 && pos <= max_text0 )
LvdK 8:422544d24df3 256 { // Read font size :
LvdK 8:422544d24df3 257 char_pntr = comma[3] + 1; // : set char pointer to char after comma 3
LvdK 8:422544d24df3 258 size = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 259 // Test if size is valid:
LvdK 8:422544d24df3 260 if ( size == 0 || size == 1 ) {
LvdK 8:422544d24df3 261 TEXTLINE[line].font_size = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 262 modified = true;
LvdK 8:422544d24df3 263 }
LvdK 8:422544d24df3 264 // Read line font style:
LvdK 8:422544d24df3 265 char_pntr = comma[4] + 1; // : set char pointer to char after comma 4
LvdK 8:422544d24df3 266 ch = string_received[char_pntr];
LvdK 8:422544d24df3 267 // !! Font style check disabled:
LvdK 8:422544d24df3 268 //if (ch == fstyle_1 || ch == fstyle_2 ) {
LvdK 8:422544d24df3 269 TEXTLINE[line].font_style = ch;
LvdK 8:422544d24df3 270 modified = true;
LvdK 8:422544d24df3 271 //}
LvdK 8:422544d24df3 272 // Read RGB line colour:
LvdK 8:422544d24df3 273 char_pntr = comma[5] + 1; // : set char pointer to char after comma 5
LvdK 8:422544d24df3 274 colour = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 275 if ( colour >= 0 && colour <= max_col_nr ) {
LvdK 8:422544d24df3 276 TEXTLINE[line].text_RED = colour;
LvdK 8:422544d24df3 277 modified = true;
LvdK 8:422544d24df3 278 }
LvdK 8:422544d24df3 279 char_pntr = comma[6] + 1; // : set char pointer to char after comma 6
LvdK 8:422544d24df3 280 colour = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 281 if ( colour >= 0 && colour <= max_col_nr ) {
LvdK 8:422544d24df3 282 TEXTLINE[line].text_GREEN = colour;
LvdK 8:422544d24df3 283 modified = true;
LvdK 8:422544d24df3 284 }
LvdK 8:422544d24df3 285 char_pntr = comma[7] + 1; // : set char pointer to char after comma 7
LvdK 8:422544d24df3 286 colour = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 287 if ( colour >= 0 && colour <= max_col_nr ) {
LvdK 8:422544d24df3 288 TEXTLINE[line].text_BLUE = colour;
LvdK 8:422544d24df3 289 modified = true;
LvdK 8:422544d24df3 290 }
LvdK 8:422544d24df3 291 // Read textfield :
LvdK 8:422544d24df3 292 char_pntr = comma[8] + 1; // : set char pointer to first char of textfield
LvdK 8:422544d24df3 293 last = 0;
LvdK 8:422544d24df3 294 // read font size to determine last possible position:
LvdK 8:422544d24df3 295 if ( TEXTLINE[line].font_size == 0 ) last = max_text0;
LvdK 8:422544d24df3 296 else if ( TEXTLINE[line].font_size == 1 ) last = max_text1;
LvdK 8:422544d24df3 297
LvdK 8:422544d24df3 298 if (last > 0 && pos <= last) { // : test for valid area and valid fontsize
LvdK 8:422544d24df3 299 a = pos-1; // : !!!!!!
LvdK 8:422544d24df3 300 while ( a <= last )
LvdK 8:422544d24df3 301 { ch = string_received[char_pntr];
LvdK 8:422544d24df3 302 if (ch == '*') break; // : do not include * in text
LvdK 8:422544d24df3 303 TEXTLINE[line].text[a] = ch;
LvdK 8:422544d24df3 304 a++;
LvdK 8:422544d24df3 305 char_pntr++;
LvdK 8:422544d24df3 306 }
LvdK 8:422544d24df3 307 modified = true;
LvdK 8:422544d24df3 308 TEXTLINE[line].text[a] = '\0'; // : mark end of text
LvdK 8:422544d24df3 309 }
LvdK 8:422544d24df3 310 }
LvdK 8:422544d24df3 311
LvdK 8:422544d24df3 312 if ( modified == true ) {
LvdK 8:422544d24df3 313 Text_Line_Update = line; // : set update of text line
LvdK 8:422544d24df3 314 }
LvdK 8:422544d24df3 315
LvdK 8:422544d24df3 316 // --------------- Debug only -----------------------------------------------------------------------
LvdK 8:422544d24df3 317 //SERIAL_DEBUG.printf("\rWTX command received :\r\n");
LvdK 8:422544d24df3 318 //SERIAL_DEBUG.printf("WTX line : %d\r\n",line ); // show line nr
LvdK 8:422544d24df3 319 //SERIAL_DEBUG.printf("WTX begin pos : %d\r\n",pos ); // show begin position
LvdK 8:422544d24df3 320 //SERIAL_DEBUG.printf("WTX fontsize is : %d\r\n",TEXTLINE[line].font_size ); // show fontsize
LvdK 8:422544d24df3 321 //SERIAL_DEBUG.printf("WTX fontstyle is: %c\r\n",TEXTLINE[line].font_style); // show fontstyle
LvdK 8:422544d24df3 322 //SERIAL_DEBUG.printf("WTX R_colour is : %d\r\n",TEXTLINE[line].text_RED ); // show textcolour
LvdK 8:422544d24df3 323 //SERIAL_DEBUG.printf("WTX G_colour is : %d\r\n",TEXTLINE[line].text_GREEN ); // show textcolour
LvdK 8:422544d24df3 324 //SERIAL_DEBUG.printf("WTX B_colour is : %d\r\n",TEXTLINE[line].text_BLUE ); // show textcolour
LvdK 8:422544d24df3 325 //SERIAL_DEBUG.printf("WTX line text is: \r\n" );
LvdK 8:422544d24df3 326 //SERIAL_DEBUG.printf("%s\r\n",TEXTLINE[line].text ); // show line text
LvdK 8:422544d24df3 327 //----------------------------------------------------------------------------------------------------
LvdK 8:422544d24df3 328
LvdK 8:422544d24df3 329 break;
LvdK 8:422544d24df3 330 }
LvdK 8:422544d24df3 331
LvdK 8:422544d24df3 332 case 8: // ETX command, erase (part of) textline of CDU screen
LvdK 8:422544d24df3 333 {
LvdK 8:422544d24df3 334 // Read linenumber:
LvdK 8:422544d24df3 335 char_pntr = comma[1] + 1; // : set char pointer to char after comma 1
LvdK 8:422544d24df3 336 line = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 337 // Read char position:
LvdK 8:422544d24df3 338 char_pntr = comma[2] + 1; // : set char pointer to char after comma 2
LvdK 8:422544d24df3 339 pos = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 340 // Read nr of char to be erased:
LvdK 8:422544d24df3 341 char_pntr = comma[3] + 1; // : set char pointer to char after comma 3
LvdK 8:422544d24df3 342 cnt = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 343 // Test if char X,Y position is within range:
LvdK 8:422544d24df3 344 if ( line >= 1 && line <= max_lines && pos >= 1 && pos <= max_text0 )
LvdK 8:422544d24df3 345 {
LvdK 8:422544d24df3 346 last = 0;
LvdK 8:422544d24df3 347 // read font size to determine last possible position:
LvdK 8:422544d24df3 348 if ( TEXTLINE[line].font_size == 0 )last = max_text0;
LvdK 8:422544d24df3 349 else if ( TEXTLINE[line].font_size == 1 )last = max_text1;
LvdK 8:422544d24df3 350
LvdK 8:422544d24df3 351 if (last > 0 && pos <= last && cnt > 0) { // : test if in valid area and chars > 0
LvdK 8:422544d24df3 352 a = pos-1; //: !!!!!!
LvdK 8:422544d24df3 353 modified = true;
LvdK 8:422544d24df3 354 while ( a <= last && cnt > 0)
LvdK 8:422544d24df3 355 {
LvdK 8:422544d24df3 356 TEXTLINE[line].text[a] = ' '; //: write space
LvdK 8:422544d24df3 357 a++;
LvdK 8:422544d24df3 358 cnt--;
LvdK 8:422544d24df3 359 }
LvdK 8:422544d24df3 360 }
LvdK 8:422544d24df3 361 }
LvdK 8:422544d24df3 362 if ( modified == true ) {
LvdK 8:422544d24df3 363 Text_Line_Update = line; // : set update of text line
LvdK 8:422544d24df3 364 }
LvdK 8:422544d24df3 365
LvdK 8:422544d24df3 366 // ---------------- Debug only -----------------------------------------------
LvdK 8:422544d24df3 367 //SERIAL_DEBUG.printf("ETX line : %d\r\n",line ); // show line nr
LvdK 8:422544d24df3 368 //SERIAL_DEBUG.printf("ETX first erase pos : %d\r\n",pos ); // show begin pos
LvdK 8:422544d24df3 369 //SERIAL_DEBUG.printf("ETX modified text line :\r\n" );
LvdK 8:422544d24df3 370 //SERIAL_DEBUG.printf("%s\r\n",TEXTLINE[line].text ); // show text line
LvdK 8:422544d24df3 371 // ---------------------------------------------------------------------------
LvdK 8:422544d24df3 372
LvdK 8:422544d24df3 373 break;
LvdK 8:422544d24df3 374 }
LvdK 8:422544d24df3 375
LvdK 8:422544d24df3 376 case 9: // KTX command, write textline to select key area
LvdK 8:422544d24df3 377 {
LvdK 8:422544d24df3 378 // Read key ID:
LvdK 8:422544d24df3 379 char_pntr = comma[1] + 1; // : set char pointer to char after comma 1
LvdK 8:422544d24df3 380 k_id = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 381
LvdK 8:422544d24df3 382 // Read text type:
LvdK 8:422544d24df3 383 char_pntr = comma[2] + 1; // : set char pointer to char after comma 2
LvdK 8:422544d24df3 384 ch = string_received[char_pntr];
LvdK 8:422544d24df3 385
LvdK 8:422544d24df3 386 if (ch == 'M' && k_id < max_keys ) // : text type = MAIN text and keyID valid
LvdK 8:422544d24df3 387 { // Read font size :
LvdK 8:422544d24df3 388 char_pntr = comma[3] + 1; // : set char pointer to char after comma 3
LvdK 8:422544d24df3 389 size = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 390 // Test if size is valid:
LvdK 8:422544d24df3 391 if ( size == 0 || size == 1 ) {
LvdK 8:422544d24df3 392 SELKEY_MAINTEXT[k_id].font_size = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 393 modified = true;
LvdK 8:422544d24df3 394 }
LvdK 8:422544d24df3 395 // Read line font style:
LvdK 8:422544d24df3 396 char_pntr = comma[4] + 1; // : set char pointer to char after comma 4
LvdK 8:422544d24df3 397 ch = string_received[char_pntr];
LvdK 8:422544d24df3 398 // !! Font style check disabled:
LvdK 8:422544d24df3 399 //if (ch == fstyle_1 || ch == fstyle_2 ) {
LvdK 8:422544d24df3 400 SELKEY_MAINTEXT[k_id].font_style = ch;
LvdK 8:422544d24df3 401 modified = true;
LvdK 8:422544d24df3 402 //}
LvdK 8:422544d24df3 403 // Read RGB line colour:
LvdK 8:422544d24df3 404 char_pntr = comma[5] + 1; // : set char pointer to char after comma 5
LvdK 8:422544d24df3 405 colour = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 406 if ( colour >= 0 && colour <= max_col_nr ) {
LvdK 8:422544d24df3 407 SELKEY_MAINTEXT[k_id].text_RED = colour;
LvdK 8:422544d24df3 408 modified = true;
LvdK 8:422544d24df3 409 }
LvdK 8:422544d24df3 410 char_pntr = comma[6] + 1; // : set char pointer to char after comma 5
LvdK 8:422544d24df3 411 colour = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 412 if ( colour >= 0 && colour <= max_col_nr ) {
LvdK 8:422544d24df3 413 SELKEY_MAINTEXT[k_id].text_GREEN = colour;
LvdK 8:422544d24df3 414 modified = true;
LvdK 8:422544d24df3 415 }
LvdK 8:422544d24df3 416 char_pntr = comma[7] + 1; // : set char pointer to char after comma 7
LvdK 8:422544d24df3 417 colour = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 418 if ( colour >= 0 && colour <= max_col_nr ) {
LvdK 8:422544d24df3 419 SELKEY_MAINTEXT[k_id].text_BLUE = colour;
LvdK 8:422544d24df3 420 modified = true;
LvdK 8:422544d24df3 421 }
LvdK 8:422544d24df3 422 // Read textfield :
LvdK 8:422544d24df3 423 char_pntr = comma[8] + 1; // : set char pointer to first char of textfield
LvdK 8:422544d24df3 424 last = 0;
LvdK 8:422544d24df3 425 // read font size to determine last possible position:
LvdK 8:422544d24df3 426 if ( SELKEY_MAINTEXT[k_id].font_size == 0 )last = max_text0;
LvdK 8:422544d24df3 427 else if ( SELKEY_MAINTEXT[k_id].font_size == 1 )last = max_text1;
LvdK 8:422544d24df3 428
LvdK 8:422544d24df3 429 if (last > 0) { // : test on valid fontsize
LvdK 8:422544d24df3 430 a = 0; // : !!! pos 0 !!
LvdK 8:422544d24df3 431 modified = true;
LvdK 8:422544d24df3 432 while ( a <= last )
LvdK 8:422544d24df3 433 { ch = string_received[char_pntr];
LvdK 8:422544d24df3 434 if (ch == '*') break; // : do not include * in text
LvdK 8:422544d24df3 435 SELKEY_MAINTEXT[k_id].text[a] = ch;
LvdK 8:422544d24df3 436 a++;
LvdK 8:422544d24df3 437 char_pntr++;
LvdK 8:422544d24df3 438 }
LvdK 8:422544d24df3 439 SELKEY_MAINTEXT[k_id].text[a] = '\0'; // : mark end of text
LvdK 8:422544d24df3 440 }
LvdK 8:422544d24df3 441
LvdK 8:422544d24df3 442 if ( modified == true ) {
LvdK 8:422544d24df3 443 Key_Maintext_Update = k_id; // : set keynumber whose main text was updated
LvdK 8:422544d24df3 444
LvdK 8:422544d24df3 445 }
LvdK 8:422544d24df3 446
LvdK 8:422544d24df3 447 // ----------------------- Debug only -----------------------------------------------------------------
LvdK 8:422544d24df3 448 //SERIAL_DEBUG.printf("KTX decoded key nr is : %d\r\n\n",k_id ); // show key nr
LvdK 8:422544d24df3 449 //SERIAL_DEBUG.printf("KTX MAINTEXT is : %s\r\n",SELKEY_MAINTEXT[k_id].text ); // show text
LvdK 8:422544d24df3 450 //SERIAL_DEBUG.printf("KTX fontsize is : %d\r\n",SELKEY_MAINTEXT[k_id].font_size ); // show fontsize
LvdK 8:422544d24df3 451 //SERIAL_DEBUG.printf("KTX fontstyle is: %c\r\n",SELKEY_MAINTEXT[k_id].font_style); // show fontstyle
LvdK 8:422544d24df3 452 //SERIAL_DEBUG.printf("KTX R_colour is : %d\r\n",SELKEY_MAINTEXT[k_id].text_RED ); // show textcolour
LvdK 8:422544d24df3 453 //SERIAL_DEBUG.printf("KTX G_colour is : %d\r\n",SELKEY_MAINTEXT[k_id].text_GREEN ); // show textcolour
LvdK 8:422544d24df3 454 //SERIAL_DEBUG.printf("KTX B_colour is : %d\r\n",SELKEY_MAINTEXT[k_id].text_BLUE ); // show textcolour
LvdK 8:422544d24df3 455 //----------------------------------------------------------------------------------------------------
LvdK 8:422544d24df3 456 }
LvdK 8:422544d24df3 457
LvdK 8:422544d24df3 458 else if ( ch == 'S' && k_id < max_keys ) // : text type = SUB text and keyID valid
LvdK 8:422544d24df3 459 { // Read font size 0 - 9:
LvdK 8:422544d24df3 460 char_pntr = comma[3] + 1; // : set char pointer to char after comma 3
LvdK 8:422544d24df3 461 size = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 462 // Test if size is valid:
LvdK 8:422544d24df3 463 if ( size == 0 || size == 1 ) {
LvdK 8:422544d24df3 464 SELKEY_SUBTEXT[k_id].font_size = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 465 modified = true;
LvdK 8:422544d24df3 466 }
LvdK 8:422544d24df3 467 // Read line font style:
LvdK 8:422544d24df3 468 char_pntr = comma[4] + 1; // : set char pointer to char after comma 4
LvdK 8:422544d24df3 469 ch = string_received[char_pntr];
LvdK 8:422544d24df3 470 if (ch == fstyle_1 || ch == fstyle_2 ) {
LvdK 8:422544d24df3 471 SELKEY_SUBTEXT[k_id].font_style = ch;
LvdK 8:422544d24df3 472 modified = true;
LvdK 8:422544d24df3 473 }
LvdK 8:422544d24df3 474 // Read RGB line colour:
LvdK 8:422544d24df3 475 char_pntr = comma[5] + 1; // : set char pointer to char after comma 5
LvdK 8:422544d24df3 476 colour = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 477 if ( colour >= 0 && colour <= max_col_nr ) {
LvdK 8:422544d24df3 478 SELKEY_SUBTEXT[k_id].text_RED = colour;
LvdK 8:422544d24df3 479 modified = true;
LvdK 8:422544d24df3 480 }
LvdK 8:422544d24df3 481 char_pntr = comma[6] + 1; // : set char pointer to char after comma 6
LvdK 8:422544d24df3 482 colour = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 483 if ( colour >= 0 && colour <= max_col_nr ) {
LvdK 8:422544d24df3 484 SELKEY_SUBTEXT[k_id].text_GREEN = colour;
LvdK 8:422544d24df3 485 modified = true;
LvdK 8:422544d24df3 486 }
LvdK 8:422544d24df3 487 char_pntr = comma[7] + 1; // : set char pointer to char after comma 7
LvdK 8:422544d24df3 488 colour = atoi(&string_received[char_pntr]);
LvdK 8:422544d24df3 489 if ( colour >= 0 && colour <= max_col_nr ) {
LvdK 8:422544d24df3 490 SELKEY_SUBTEXT[k_id].text_BLUE = colour;
LvdK 8:422544d24df3 491 modified = true;
LvdK 8:422544d24df3 492 }
LvdK 8:422544d24df3 493 // Read textfield :
LvdK 8:422544d24df3 494 char_pntr = comma[8] + 1; // : set char pointer to first char of textfield
LvdK 8:422544d24df3 495 last = 0;
LvdK 8:422544d24df3 496 // read font size to determine last possible position:
LvdK 8:422544d24df3 497 if ( SELKEY_SUBTEXT[k_id].font_size == 0 )last = max_text0;
LvdK 8:422544d24df3 498 else if ( SELKEY_SUBTEXT[k_id].font_size == 1 )last = max_text1;
LvdK 8:422544d24df3 499
LvdK 8:422544d24df3 500 if (last > 0) { // : test on valid fontsize
LvdK 8:422544d24df3 501 a = 0; // : !!! pos 0 !!
LvdK 8:422544d24df3 502 modified = true;
LvdK 8:422544d24df3 503 while ( a <= last )
LvdK 8:422544d24df3 504 { ch = string_received[char_pntr];
LvdK 8:422544d24df3 505 if (ch == '*') break; // : do not include * in text
LvdK 8:422544d24df3 506 SELKEY_SUBTEXT[k_id].text[a] = ch;
LvdK 8:422544d24df3 507 a++;
LvdK 8:422544d24df3 508 char_pntr++;
LvdK 8:422544d24df3 509 }
LvdK 8:422544d24df3 510 SELKEY_SUBTEXT[k_id].text[a] = '\0'; // : mark end of text
LvdK 8:422544d24df3 511 }
LvdK 8:422544d24df3 512
LvdK 8:422544d24df3 513 if ( modified == true ) {
LvdK 8:422544d24df3 514 Key_Subtext_Update = k_id; // : set keynumber whose sub text was updated
LvdK 8:422544d24df3 515 }
LvdK 8:422544d24df3 516
LvdK 8:422544d24df3 517 // ------------------ Debug only ----------------------------------------------------------
LvdK 8:422544d24df3 518 //SERIAL_DEBUG.printf("KTX key nr is : %d\r\n",k_id ); // show key nr
LvdK 8:422544d24df3 519 //SERIAL_DEBUG.printf("KTX SUBTEXT is : %s\r\n",SELKEY_SUBTEXT[k_id].text ); // show text
LvdK 8:422544d24df3 520 //SERIAL_DEBUG.printf("KTX fontsize is : %d\r\n",SELKEY_SUBTEXT[k_id].font_size ); // show fontsize
LvdK 8:422544d24df3 521 //SERIAL_DEBUG.printf("KTX fontstyle is: %c\r\n",SELKEY_SUBTEXT[k_id].font_style); // show fontstyle
LvdK 8:422544d24df3 522 //SERIAL_DEBUG.printf("KTX R_colour is : %d\r\n",SELKEY_SUBTEXT[k_id].text_RED ); // show textcolour
LvdK 8:422544d24df3 523 //SERIAL_DEBUG.printf("KTX G_colour is : %d\r\n",SELKEY_SUBTEXT[k_id].text_GREEN ); // show textcolour
LvdK 8:422544d24df3 524 //SERIAL_DEBUG.printf("KTX B_colour is : %d\r\n",SELKEY_SUBTEXT[k_id].text_BLUE ); // show textcolour
LvdK 8:422544d24df3 525 // -----------------------------------------------------------------------------------------
LvdK 8:422544d24df3 526 }
LvdK 8:422544d24df3 527 break;
LvdK 8:422544d24df3 528 }
LvdK 8:422544d24df3 529
LvdK 9:1e117310b481 530 case 10: // FAI command, FAIL indicator control CDU
LvdK 9:1e117310b481 531 {
LvdK 9:1e117310b481 532 // Get indicator status:
LvdK 9:1e117310b481 533 char_pntr = comma[1] + 1; // : set char pointer to char after comma 1
LvdK 9:1e117310b481 534 if (string_received[char_pntr] == '0' || string_received[char_pntr] == '1')
LvdK 9:1e117310b481 535 { CDU_STATUS.fail_indicator = atoi(&string_received[char_pntr]);
LvdK 9:1e117310b481 536 CDU_Status_Update = 1;
LvdK 9:1e117310b481 537 }
LvdK 9:1e117310b481 538 break;
LvdK 9:1e117310b481 539 }
LvdK 9:1e117310b481 540
LvdK 9:1e117310b481 541 case 11: // DPY command, DSPY indicator control CDU
LvdK 9:1e117310b481 542 {
LvdK 9:1e117310b481 543 // Get indicator status:
LvdK 9:1e117310b481 544 char_pntr = comma[1] + 1; // : set char pointer to char after comma 1
LvdK 9:1e117310b481 545 if (string_received[char_pntr] == '0' || string_received[char_pntr] == '1')
LvdK 9:1e117310b481 546 { CDU_STATUS.dspy_indicator = atoi(&string_received[char_pntr]);
LvdK 9:1e117310b481 547 CDU_Status_Update = 1;
LvdK 9:1e117310b481 548 }
LvdK 9:1e117310b481 549 break;
LvdK 9:1e117310b481 550 }
LvdK 9:1e117310b481 551
LvdK 9:1e117310b481 552 case 12: // OFS command, OFST indicator control CDU
LvdK 9:1e117310b481 553 {
LvdK 9:1e117310b481 554 // Get indicator status:
LvdK 9:1e117310b481 555 char_pntr = comma[1] + 1; // : set char pointer to char after comma 1
LvdK 9:1e117310b481 556 if (string_received[char_pntr] == '0' || string_received[char_pntr] == '1')
LvdK 9:1e117310b481 557 { CDU_STATUS.ofst_indicator = atoi(&string_received[char_pntr]);
LvdK 9:1e117310b481 558 CDU_Status_Update = 1;
LvdK 9:1e117310b481 559 }
LvdK 9:1e117310b481 560 break;
LvdK 9:1e117310b481 561 }
LvdK 9:1e117310b481 562
LvdK 8:422544d24df3 563 default:
LvdK 8:422544d24df3 564 {
LvdK 8:422544d24df3 565 // unknown commandnumber !
LvdK 8:422544d24df3 566 break;
LvdK 8:422544d24df3 567 }
LvdK 8:422544d24df3 568 }
LvdK 8:422544d24df3 569
LvdK 8:422544d24df3 570 CDU_OS.SetEvent(FS_DATA_EVENT,CDU_DSP_CSS_TASK_ID); // : set event for CDU screen update task
LvdK 8:422544d24df3 571 }
LvdK 8:422544d24df3 572
LvdK 8:422544d24df3 573
LvdK 8:422544d24df3 574
LvdK 8:422544d24df3 575