This is a part of the Kinetiszer project.

Dependencies:   inc

Dependents:   kinetisizer

Committer:
Clemo
Date:
Tue Oct 28 20:09:12 2014 +0000
Revision:
1:8ae4ab73ca6a
Parent:
0:cb80470434eb
First publication (untested)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Clemo 0:cb80470434eb 1 /*
Clemo 0:cb80470434eb 2 * @brief User interface
Clemo 0:cb80470434eb 3 *
Clemo 0:cb80470434eb 4 * @note
Clemo 0:cb80470434eb 5 * Copyright (C) Elektor, 2014
Clemo 0:cb80470434eb 6 * All rights reserved.
Clemo 0:cb80470434eb 7 *
Clemo 0:cb80470434eb 8 * @par
Clemo 0:cb80470434eb 9 * This software is supplied "AS IS" without any warranties of any kind,
Clemo 0:cb80470434eb 10 * and Elektor and its licensor disclaim any and all warranties, express
Clemo 0:cb80470434eb 11 * or implied, including all implied warranties of merchantability,
Clemo 0:cb80470434eb 12 * fitness for a particular purpose and non-infringement of intellectual
Clemo 0:cb80470434eb 13 * property rights. Elektor assumes no responsibility or liability for
Clemo 0:cb80470434eb 14 * the use of the software, conveys no license or rights under any patent,
Clemo 0:cb80470434eb 15 * copyright, mask work right, or any other intellectual property rights in
Clemo 0:cb80470434eb 16 * or to any products. Elektor reserves the right to make changes in the
Clemo 0:cb80470434eb 17 * software without notification. Elektor also makes no representation or
Clemo 0:cb80470434eb 18 * warranty that such application will be suitable for the specified use
Clemo 0:cb80470434eb 19 * without further testing or modification.
Clemo 0:cb80470434eb 20 *
Clemo 0:cb80470434eb 21 * @par
Clemo 0:cb80470434eb 22 * Permission to use, copy, modify, and distribute this software and its
Clemo 0:cb80470434eb 23 * documentation is hereby granted, under Elektor's and its licensor's
Clemo 0:cb80470434eb 24 * relevant copyrights in the software, without fee. This copyright,
Clemo 0:cb80470434eb 25 * permission, and disclaimer notice must appear in all copies of this code.
Clemo 0:cb80470434eb 26 */
Clemo 0:cb80470434eb 27
Clemo 0:cb80470434eb 28 #include "lcd.h"
Clemo 0:cb80470434eb 29 #include "atmegatron.h"
Clemo 0:cb80470434eb 30 #include "board.h"
Clemo 0:cb80470434eb 31
Clemo 0:cb80470434eb 32
Clemo 0:cb80470434eb 33 #define FUNCTION_VALUE_OFFSET (13)
Clemo 0:cb80470434eb 34
Clemo 0:cb80470434eb 35
Clemo 0:cb80470434eb 36 uint8_t display_page = (uint8_t)-1;
Clemo 0:cb80470434eb 37 boolean display_page_changed = false;
Clemo 0:cb80470434eb 38
Clemo 0:cb80470434eb 39
Clemo 0:cb80470434eb 40 const char *functions_str[FUNC_MAX][2] =
Clemo 0:cb80470434eb 41 {
Clemo 0:cb80470434eb 42 { "Waveform bank ", "" },
Clemo 0:cb80470434eb 43 { "Filter ", "(norming)" },
Clemo 0:cb80470434eb 44 { "Env1 attack", "Inverted" },
Clemo 0:cb80470434eb 45 { "Env1 dec/rel", "Inverted" },
Clemo 0:cb80470434eb 46 { "Env1 sustain", "Inverted" },
Clemo 0:cb80470434eb 47 { "Env2 attack", "SysEx write" },
Clemo 0:cb80470434eb 48 { "Env2 decay", "SysEx read" },
Clemo 0:cb80470434eb 49 { "Env2 sustain", "User wave" },
Clemo 0:cb80470434eb 50 { "Env2 release", "SysEx bank" },
Clemo 0:cb80470434eb 51 { "LFO shape ", "(inv)" },
Clemo 0:cb80470434eb 52 { "LFO rate ", "" },
Clemo 0:cb80470434eb 53 { "Arpeggio ", "(pp)" },
Clemo 0:cb80470434eb 54 { "Arpeggio rate", "" },
Clemo 0:cb80470434eb 55 { "Portamento", "Proportional" },
Clemo 0:cb80470434eb 56 { "Crusher ", "pre-filter" },
Clemo 0:cb80470434eb 57 { "Patch number", "Empty" },
Clemo 0:cb80470434eb 58 };
Clemo 0:cb80470434eb 59
Clemo 0:cb80470434eb 60
Clemo 0:cb80470434eb 61 const char *wave_str[FUNC_MAX][2] =
Clemo 0:cb80470434eb 62 {
Clemo 0:cb80470434eb 63 { "Pure square", "Metallic 1" },
Clemo 0:cb80470434eb 64 { "Octave square", "Metallic 2" },
Clemo 0:cb80470434eb 65 { "Square fifths", "Metallic 3" },
Clemo 0:cb80470434eb 66 { "RP2A07 square ", "Metallic 4" },
Clemo 0:cb80470434eb 67 { "Pure saw", "Vocal 1" },
Clemo 0:cb80470434eb 68 { "Buzz saw", "Vocal 2" },
Clemo 0:cb80470434eb 69 { "Saw fifths", "Vocal 3" },
Clemo 0:cb80470434eb 70 { "Octave saw", "Brass" },
Clemo 0:cb80470434eb 71 { "Subsine + square", "Reed organ" },
Clemo 0:cb80470434eb 72 { "Pure sine", "Electric piano" },
Clemo 0:cb80470434eb 73 { "PPG sine", "Reed" },
Clemo 0:cb80470434eb 74 { "Warped sine ", "Resonant saw" },
Clemo 0:cb80470434eb 75 { "CZ101 pulse", "Bell" },
Clemo 0:cb80470434eb 76 { "Bassoon", "Chord" },
Clemo 0:cb80470434eb 77 { "Bass", "Overtones" },
Clemo 0:cb80470434eb 78 { "Noise", "Saw thirds" },
Clemo 0:cb80470434eb 79 };
Clemo 0:cb80470434eb 80
Clemo 0:cb80470434eb 81
Clemo 0:cb80470434eb 82 const char *filter_str[FUNC_MAX] =
Clemo 0:cb80470434eb 83 {
Clemo 0:cb80470434eb 84 "Bypassed",
Clemo 0:cb80470434eb 85 "Low pass",
Clemo 0:cb80470434eb 86 "High pass",
Clemo 0:cb80470434eb 87 "Band pass",
Clemo 0:cb80470434eb 88 "Notch",
Clemo 0:cb80470434eb 89 "Param EQ 10 dB",
Clemo 0:cb80470434eb 90 "Param EQ 30 dB",
Clemo 0:cb80470434eb 91 "Param EQ 100 dB",
Clemo 0:cb80470434eb 92 "LO shelf 10 dB",
Clemo 0:cb80470434eb 93 "LO shelf 30 dB",
Clemo 0:cb80470434eb 94 "HI shelf 10 dB",
Clemo 0:cb80470434eb 95 "HI shelf 30 dB",
Clemo 0:cb80470434eb 96 "Butter LP (no Q)",
Clemo 0:cb80470434eb 97 "Butter HP (no Q)",
Clemo 0:cb80470434eb 98 "Bessel LP (no Q)",
Clemo 0:cb80470434eb 99 "Bessel HP (no Q)",
Clemo 0:cb80470434eb 100 };
Clemo 0:cb80470434eb 101
Clemo 0:cb80470434eb 102
Clemo 0:cb80470434eb 103 const char *lfo_str[FUNC_MAX] =
Clemo 0:cb80470434eb 104 {
Clemo 0:cb80470434eb 105 "Sine",
Clemo 0:cb80470434eb 106 "Triangle",
Clemo 0:cb80470434eb 107 "Ramp down (lin)",
Clemo 0:cb80470434eb 108 "Ramp up (exp)",
Clemo 0:cb80470434eb 109 "Sine + 3rd",
Clemo 0:cb80470434eb 110 "Pulse 5%",
Clemo 0:cb80470434eb 111 "Pulse 25%",
Clemo 0:cb80470434eb 112 "Pulse 50%",
Clemo 0:cb80470434eb 113 "Pulse 75%",
Clemo 0:cb80470434eb 114 "Pulse 95%",
Clemo 0:cb80470434eb 115 "Ramp up & hold",
Clemo 0:cb80470434eb 116 "Hold & ramp down",
Clemo 0:cb80470434eb 117 "Duh dugga",
Clemo 0:cb80470434eb 118 "Dugga duh",
Clemo 0:cb80470434eb 119 "Noise-like",
Clemo 0:cb80470434eb 120 "DC",
Clemo 0:cb80470434eb 121 };
Clemo 0:cb80470434eb 122
Clemo 0:cb80470434eb 123
Clemo 0:cb80470434eb 124 const char *arp_str[FUNC_MAX] =
Clemo 0:cb80470434eb 125 {
Clemo 0:cb80470434eb 126 "Off",
Clemo 0:cb80470434eb 127 "Up",
Clemo 0:cb80470434eb 128 "Down",
Clemo 0:cb80470434eb 129 "Octave",
Clemo 0:cb80470434eb 130 "Fifths",
Clemo 0:cb80470434eb 131 "Skip one up",
Clemo 0:cb80470434eb 132 "Skip one down",
Clemo 0:cb80470434eb 133 "I feel love",
Clemo 0:cb80470434eb 134 "Horton",
Clemo 0:cb80470434eb 135 "Etheridge",
Clemo 0:cb80470434eb 136 "Meads",
Clemo 0:cb80470434eb 137 "Palmer",
Clemo 0:cb80470434eb 138 "gwEm 1",
Clemo 0:cb80470434eb 139 "gwEm 2",
Clemo 0:cb80470434eb 140 "Triplet up",
Clemo 0:cb80470434eb 141 "Robyn",
Clemo 0:cb80470434eb 142 };
Clemo 0:cb80470434eb 143
Clemo 0:cb80470434eb 144 const char *rate_str[FUNC_MAX] =
Clemo 0:cb80470434eb 145 {
Clemo 0:cb80470434eb 146 "4",
Clemo 0:cb80470434eb 147 "2",
Clemo 0:cb80470434eb 148 "1",
Clemo 0:cb80470434eb 149 "3/4",
Clemo 0:cb80470434eb 150 "2/3",
Clemo 0:cb80470434eb 151 "1/2",
Clemo 0:cb80470434eb 152 "3/8",
Clemo 0:cb80470434eb 153 "1/3",
Clemo 0:cb80470434eb 154 "1/4",
Clemo 0:cb80470434eb 155 "3/16",
Clemo 0:cb80470434eb 156 "1/8",
Clemo 0:cb80470434eb 157 "3/32",
Clemo 0:cb80470434eb 158 "1/16",
Clemo 0:cb80470434eb 159 "3/64",
Clemo 0:cb80470434eb 160 "1/32",
Clemo 0:cb80470434eb 161 "1/64",
Clemo 0:cb80470434eb 162 };
Clemo 0:cb80470434eb 163
Clemo 0:cb80470434eb 164
Clemo 0:cb80470434eb 165 const char *crusher_str[FUNC_MAX] =
Clemo 0:cb80470434eb 166 {
Clemo 0:cb80470434eb 167 "Off",
Clemo 0:cb80470434eb 168 "3 bit",
Clemo 0:cb80470434eb 169 "2 bit",
Clemo 0:cb80470434eb 170 "1 bit",
Clemo 0:cb80470434eb 171 "4 bit, SR/2",
Clemo 0:cb80470434eb 172 "3 bit, SR/2",
Clemo 0:cb80470434eb 173 "2 bit, SR/2",
Clemo 0:cb80470434eb 174 "1 bit, SR/2",
Clemo 0:cb80470434eb 175 "4 bit, SR/4",
Clemo 0:cb80470434eb 176 "3 bit, SR/4",
Clemo 0:cb80470434eb 177 "2 bit, SR/4",
Clemo 0:cb80470434eb 178 "1 bit, SR/4",
Clemo 0:cb80470434eb 179 "4 bit, SR/8",
Clemo 0:cb80470434eb 180 "3 bit, SR/8",
Clemo 0:cb80470434eb 181 "2 bit, SR/8",
Clemo 0:cb80470434eb 182 "1 bit, SR/8",
Clemo 0:cb80470434eb 183 };
Clemo 0:cb80470434eb 184
Clemo 0:cb80470434eb 185
Clemo 0:cb80470434eb 186 /*const char *controls_str[CTRL_MAX][2] =
Clemo 0:cb80470434eb 187 {
Clemo 0:cb80470434eb 188 // Digital controls (potentiometers)
Clemo 0:cb80470434eb 189 { "Filt cutoff", "Filt cutoff" },
Clemo 0:cb80470434eb 190 { "Filter Q", "Filter Q" },
Clemo 0:cb80470434eb 191 { "Filter env", "Pitch env" },
Clemo 0:cb80470434eb 192 { "Filter LFO", "Pitch LFO" },
Clemo 0:cb80470434eb 193 { "Amp LFO", "PW LFO" },
Clemo 0:cb80470434eb 194 { "Distortion", "Phase LFO" },
Clemo 0:cb80470434eb 195 };*/
Clemo 0:cb80470434eb 196
Clemo 0:cb80470434eb 197
Clemo 0:cb80470434eb 198 void display_init(void)
Clemo 0:cb80470434eb 199 {
Clemo 0:cb80470434eb 200 // Setup LCD.
Clemo 0:cb80470434eb 201 lcd_init();
Clemo 0:cb80470434eb 202 display_page_set(PAGE_SPLASH);
Clemo 0:cb80470434eb 203 }
Clemo 0:cb80470434eb 204
Clemo 0:cb80470434eb 205
Clemo 0:cb80470434eb 206 void display_print_value(uint8_t line, uint8_t position, int value, boolean ignore_sign)
Clemo 0:cb80470434eb 207 {
Clemo 0:cb80470434eb 208 int scale = 100;
Clemo 0:cb80470434eb 209
Clemo 0:cb80470434eb 210 lcd_clear_to_eol(line,position);
Clemo 0:cb80470434eb 211 if (ignore_sign==false)
Clemo 0:cb80470434eb 212 {
Clemo 0:cb80470434eb 213 if (value<0)
Clemo 0:cb80470434eb 214 {
Clemo 0:cb80470434eb 215 lcd_putc('-');
Clemo 0:cb80470434eb 216 value = -value;
Clemo 0:cb80470434eb 217 }
Clemo 0:cb80470434eb 218 else lcd_putc(' ');
Clemo 0:cb80470434eb 219 }
Clemo 0:cb80470434eb 220
Clemo 0:cb80470434eb 221 if (value<100)
Clemo 0:cb80470434eb 222 {
Clemo 0:cb80470434eb 223 lcd_putc(' ');
Clemo 0:cb80470434eb 224 scale = 10;
Clemo 0:cb80470434eb 225 }
Clemo 0:cb80470434eb 226 if (value<10)
Clemo 0:cb80470434eb 227 {
Clemo 0:cb80470434eb 228 lcd_putc(' ');
Clemo 0:cb80470434eb 229 scale = 1;
Clemo 0:cb80470434eb 230 }
Clemo 0:cb80470434eb 231
Clemo 0:cb80470434eb 232 do
Clemo 0:cb80470434eb 233 {
Clemo 0:cb80470434eb 234 int temp = value/scale;
Clemo 0:cb80470434eb 235 lcd_putc(temp+'0');
Clemo 0:cb80470434eb 236 value -= temp*scale;
Clemo 0:cb80470434eb 237 scale /= 10;
Clemo 0:cb80470434eb 238 }
Clemo 0:cb80470434eb 239 while (scale>0);
Clemo 0:cb80470434eb 240 }
Clemo 0:cb80470434eb 241
Clemo 0:cb80470434eb 242
Clemo 0:cb80470434eb 243 void display_page_splash(void)
Clemo 0:cb80470434eb 244 {
Clemo 0:cb80470434eb 245 lcd_clear();
Clemo 0:cb80470434eb 246 lcd_font(ST7032_FUNC_HEIGHT_DOUBLE);
Clemo 0:cb80470434eb 247 lcd_puts("J2B Synthesizer");
Clemo 0:cb80470434eb 248 SysTick_Delay(1500);
Clemo 0:cb80470434eb 249 lcd_font(ST7032_FUNC_HEIGHT_NORMAL);
Clemo 0:cb80470434eb 250 display_page_set(PAGE_FUNCTION);
Clemo 0:cb80470434eb 251 }
Clemo 0:cb80470434eb 252
Clemo 0:cb80470434eb 253
Clemo 0:cb80470434eb 254 void display_page_function(void)
Clemo 0:cb80470434eb 255 {
Clemo 0:cb80470434eb 256 uint8_t function = Hardware_Get_Function();
Clemo 0:cb80470434eb 257 boolean shift = Hard_Get_Shift(function);
Clemo 0:cb80470434eb 258 uint8_t value = Hardware_Get_Value(function);
Clemo 0:cb80470434eb 259
Clemo 0:cb80470434eb 260 lcd_clear();
Clemo 0:cb80470434eb 261 if (function>=FUNC_MAX)
Clemo 0:cb80470434eb 262 {
Clemo 0:cb80470434eb 263 lcd_puts((char*)"undefined");
Clemo 0:cb80470434eb 264 }
Clemo 0:cb80470434eb 265 else
Clemo 0:cb80470434eb 266 {
Clemo 0:cb80470434eb 267 lcd_puts((char*)functions_str[function][0]);
Clemo 0:cb80470434eb 268 switch (function)
Clemo 0:cb80470434eb 269 {
Clemo 0:cb80470434eb 270 case FUNC_WAVE:
Clemo 0:cb80470434eb 271 if (shift==GREEN) lcd_putc('2');
Clemo 0:cb80470434eb 272 else lcd_putc('1');
Clemo 0:cb80470434eb 273 lcd_cursor(1,0);
Clemo 0:cb80470434eb 274 lcd_puts((char*)wave_str[value][shift]);
Clemo 0:cb80470434eb 275 break;
Clemo 0:cb80470434eb 276
Clemo 0:cb80470434eb 277 case FUNC_FILT:
Clemo 0:cb80470434eb 278 if (shift==GREEN) lcd_puts((char*)functions_str[function][1]);
Clemo 0:cb80470434eb 279 lcd_cursor(1,0);
Clemo 0:cb80470434eb 280 lcd_puts((char*)filter_str[value]);
Clemo 0:cb80470434eb 281 break;
Clemo 0:cb80470434eb 282
Clemo 0:cb80470434eb 283 case FUNC_LFOTYPE:
Clemo 0:cb80470434eb 284 if (shift==GREEN) lcd_puts((char*)functions_str[function][1]);
Clemo 0:cb80470434eb 285 lcd_cursor(1,0);
Clemo 0:cb80470434eb 286 lcd_puts((char*)lfo_str[value]);
Clemo 0:cb80470434eb 287 break;
Clemo 0:cb80470434eb 288
Clemo 0:cb80470434eb 289 case FUNC_LFOSPEED:
Clemo 0:cb80470434eb 290 case FUNC_ARPSPEED:
Clemo 0:cb80470434eb 291 if (shift==GREEN) lcd_puts((char*)functions_str[function][1]);
Clemo 0:cb80470434eb 292 lcd_cursor(1,0);
Clemo 0:cb80470434eb 293 lcd_puts((char*)rate_str[value]);
Clemo 0:cb80470434eb 294 break;
Clemo 0:cb80470434eb 295
Clemo 0:cb80470434eb 296 case FUNC_ARPTYPE:
Clemo 0:cb80470434eb 297 if (shift==GREEN) lcd_puts((char*)functions_str[function][1]);
Clemo 0:cb80470434eb 298 lcd_cursor(1,0);
Clemo 0:cb80470434eb 299 lcd_puts((char*)arp_str[value]);
Clemo 0:cb80470434eb 300 break;
Clemo 0:cb80470434eb 301
Clemo 0:cb80470434eb 302 case FUNC_BITCRUSH:
Clemo 0:cb80470434eb 303 if (shift==GREEN) lcd_puts("(pre)");
Clemo 0:cb80470434eb 304 else lcd_puts("(post)");
Clemo 0:cb80470434eb 305 lcd_cursor(1,0);
Clemo 0:cb80470434eb 306 lcd_puts((char*)crusher_str[value]);
Clemo 0:cb80470434eb 307 break;
Clemo 0:cb80470434eb 308
Clemo 0:cb80470434eb 309 case FUNC_MEM:
Clemo 0:cb80470434eb 310 {
Clemo 0:cb80470434eb 311 uint8_t buffer[MEM_PATCHSIZE];
Clemo 0:cb80470434eb 312 display_print_value(0,FUNCTION_VALUE_OFFSET,value+1,true);
Clemo 0:cb80470434eb 313 if (Memory_Load_Patch(buffer,value*MEM_PATCHSIZE)==false)
Clemo 0:cb80470434eb 314 {
Clemo 0:cb80470434eb 315 lcd_cursor(1,0);
Clemo 0:cb80470434eb 316 lcd_puts((char*)functions_str[function][1]);
Clemo 0:cb80470434eb 317 }
Clemo 0:cb80470434eb 318 break;
Clemo 0:cb80470434eb 319 }
Clemo 0:cb80470434eb 320
Clemo 0:cb80470434eb 321 default:
Clemo 0:cb80470434eb 322 display_print_value(0,FUNCTION_VALUE_OFFSET,value,true);
Clemo 0:cb80470434eb 323 if (shift==GREEN)
Clemo 0:cb80470434eb 324 {
Clemo 0:cb80470434eb 325 lcd_cursor(1,0);
Clemo 0:cb80470434eb 326 lcd_puts((char*)functions_str[function][1]);
Clemo 0:cb80470434eb 327 }
Clemo 0:cb80470434eb 328 }
Clemo 0:cb80470434eb 329 }
Clemo 0:cb80470434eb 330 }
Clemo 0:cb80470434eb 331
Clemo 0:cb80470434eb 332
Clemo 0:cb80470434eb 333 extern uint8_t encoder_to_ctrl[8];
Clemo 0:cb80470434eb 334
Clemo 0:cb80470434eb 335 void display_page_ctrl(void)
Clemo 0:cb80470434eb 336 {
Clemo 0:cb80470434eb 337 uint8_t i, column, value, dec;
Clemo 0:cb80470434eb 338 uint8_t shift = Hardware_Get_Ctrl_Shift();
Clemo 0:cb80470434eb 339
Clemo 0:cb80470434eb 340 lcd_clear();
Clemo 0:cb80470434eb 341
Clemo 0:cb80470434eb 342 for (i=0; i<6; i++)
Clemo 0:cb80470434eb 343 {
Clemo 0:cb80470434eb 344 column = 3*(encoder_to_ctrl[i+2]-2);
Clemo 0:cb80470434eb 345 value = Hardware_Get_Ctrl(shift,i);
Clemo 0:cb80470434eb 346 if ((i==CTRL_AMP || i==CTRL_FX) && shift!=0)
Clemo 0:cb80470434eb 347 {
Clemo 0:cb80470434eb 348 lcd_cursor(1,column-1);
Clemo 0:cb80470434eb 349 value >>= 3;
Clemo 0:cb80470434eb 350 dec = value/10;
Clemo 0:cb80470434eb 351 if (dec>0)
Clemo 0:cb80470434eb 352 {
Clemo 0:cb80470434eb 353 value -= 10*dec;
Clemo 0:cb80470434eb 354 lcd_putc(dec+'0');
Clemo 0:cb80470434eb 355 }
Clemo 0:cb80470434eb 356 else lcd_putc(' ');
Clemo 0:cb80470434eb 357 lcd_putc(value+'0');
Clemo 0:cb80470434eb 358 }
Clemo 0:cb80470434eb 359 else if (i==CTRL_FX && shift==0)
Clemo 0:cb80470434eb 360 {
Clemo 0:cb80470434eb 361 lcd_cursor(1,column);
Clemo 0:cb80470434eb 362 lcd_putc((value>>5)+'0');
Clemo 0:cb80470434eb 363 }
Clemo 0:cb80470434eb 364 else
Clemo 0:cb80470434eb 365 {
Clemo 0:cb80470434eb 366 lcd_bar_graph(column,value,255);
Clemo 0:cb80470434eb 367 }
Clemo 0:cb80470434eb 368 }
Clemo 0:cb80470434eb 369 }
Clemo 0:cb80470434eb 370
Clemo 0:cb80470434eb 371
Clemo 0:cb80470434eb 372 boolean display_page_set(uint8_t page)
Clemo 0:cb80470434eb 373 {
Clemo 0:cb80470434eb 374 display_page_changed = display_page!=page? true : false;
Clemo 0:cb80470434eb 375 display_page = page;
Clemo 0:cb80470434eb 376 return display_page_changed;
Clemo 0:cb80470434eb 377 }
Clemo 0:cb80470434eb 378
Clemo 0:cb80470434eb 379
Clemo 0:cb80470434eb 380 uint8_t display_page_get(void)
Clemo 0:cb80470434eb 381 {
Clemo 0:cb80470434eb 382 return display_page;
Clemo 0:cb80470434eb 383 }
Clemo 0:cb80470434eb 384
Clemo 0:cb80470434eb 385
Clemo 0:cb80470434eb 386 void display_invalidate(void)
Clemo 0:cb80470434eb 387 {
Clemo 0:cb80470434eb 388 display_page_changed = true;
Clemo 0:cb80470434eb 389 }
Clemo 0:cb80470434eb 390
Clemo 0:cb80470434eb 391
Clemo 0:cb80470434eb 392 void display_draw(boolean force_redraw)
Clemo 0:cb80470434eb 393 {
Clemo 0:cb80470434eb 394 if (display_page_changed==true || force_redraw==true)
Clemo 0:cb80470434eb 395 {
Clemo 0:cb80470434eb 396 display_page_changed = false;
Clemo 0:cb80470434eb 397 switch (display_page)
Clemo 0:cb80470434eb 398 {
Clemo 0:cb80470434eb 399 case PAGE_SPLASH:
Clemo 0:cb80470434eb 400 display_page_splash();
Clemo 0:cb80470434eb 401 break;
Clemo 0:cb80470434eb 402
Clemo 0:cb80470434eb 403 case PAGE_FUNCTION:
Clemo 0:cb80470434eb 404 display_page_function();
Clemo 0:cb80470434eb 405 break;
Clemo 0:cb80470434eb 406
Clemo 0:cb80470434eb 407 case PAGE_CTRL:
Clemo 0:cb80470434eb 408 display_page_ctrl();
Clemo 0:cb80470434eb 409 break;
Clemo 0:cb80470434eb 410 }
Clemo 0:cb80470434eb 411 }
Clemo 0:cb80470434eb 412 }