New work version with additional functions

Dependencies:   4DGL-UC ConfigFile MODSERIAL mbed mbos

Fork of CDU_Mbed_35 by Engravity-CDU

Committer:
WillemBraat
Date:
Wed Oct 08 14:14:52 2014 +0000
Revision:
20:2d6ac4577e68
Parent:
14:5767d651d624
New release with additional new functions.
; * File handling for config files
; * CDU setup & test screens
; * External power monitoring

Who changed what in which revision?

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