This is a part of the Kinetiszer project.
user_interface.c@1:8ae4ab73ca6a, 2014-10-28 (annotated)
- 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?
User | Revision | Line number | New 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 | } |