voor willem test

Dependencies:   4DGL MODSERIAL mbed mbos

Committer:
LvdK
Date:
Thu Jul 17 10:09:14 2014 +0000
Revision:
7:6576a287e563
CDU V21

Who changed what in which revision?

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