SWO+USB Serial+TouchScreen Demo

Dependencies:   BSP_DISCO_F429ZI LCD_DISCO_F429ZI SWO TS_DISCO_F429ZI USBDEVICE mbed storage_on_flash

Fork of DISCO-F429ZI_LCDTS_demo by ST

Committer:
pierrebizouard
Date:
Tue Mar 20 16:51:40 2018 +0000
Revision:
10:1e21661f4e04
Parent:
9:62df0b9df08d
updated arrays to const

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pierrebizouard 4:86d291139659 1 //#define USB_STM_HAL
pierrebizouard 4:86d291139659 2 //#define DISCO
pierrebizouard 7:9276134bb25e 3 #define LANDSCAPE_MODE
pierrebizouard 4:86d291139659 4
bcostm 0:91c6ab790bd7 5 #include "mbed.h"
pierrebizouard 7:9276134bb25e 6
pierrebizouard 7:9276134bb25e 7
pierrebizouard 7:9276134bb25e 8 #include "SOFBlock.h"
pierrebizouard 7:9276134bb25e 9
pierrebizouard 7:9276134bb25e 10
pierrebizouard 7:9276134bb25e 11 #include "stm32f429i_discovery_sdram.h"
bcostm 0:91c6ab790bd7 12 #include "TS_DISCO_F429ZI.h"
bcostm 0:91c6ab790bd7 13 #include "LCD_DISCO_F429ZI.h"
pierrebizouard 3:9b242573a271 14 #include "USBSerial.h"
pierrebizouard 5:b69870b843f3 15 #include "SWO.h"
pierrebizouard 6:7812b342d945 16 #include "logos.h"
pierrebizouard 7:9276134bb25e 17 #include "SOFBlock.h"
pierrebizouard 7:9276134bb25e 18 #include "ubuntu_font.h"
pierrebizouard 7:9276134bb25e 19
pierrebizouard 7:9276134bb25e 20 #include <cstdlib>
pierrebizouard 6:7812b342d945 21
pierrebizouard 6:7812b342d945 22 //PA3 PA5
pierrebizouard 6:7812b342d945 23 AnalogOut temperature_out(PA_5);
pierrebizouard 6:7812b342d945 24 //PC3
pierrebizouard 6:7812b342d945 25
pierrebizouard 6:7812b342d945 26 //AnalogIn #conflicts with something somewhere
pierrebizouard 6:7812b342d945 27 //SPI PE6 PE5 PE2
bcostm 0:91c6ab790bd7 28
pierrebizouard 4:86d291139659 29 LCD_DISCO_F429ZI lcd;
pierrebizouard 4:86d291139659 30 TS_DISCO_F429ZI ts;
pierrebizouard 6:7812b342d945 31 uint8_t text[30];
pierrebizouard 4:86d291139659 32
pierrebizouard 5:b69870b843f3 33 SWO_Channel swo;
pierrebizouard 6:7812b342d945 34 //USBSerial ser;
pierrebizouard 6:7812b342d945 35
pierrebizouard 6:7812b342d945 36 //AnalogOut temp_setpoint(PA_5);
pierrebizouard 6:7812b342d945 37 //AnalogIn temp_read(PF_4);
bcostm 0:91c6ab790bd7 38
pierrebizouard 7:9276134bb25e 39 //#define DEBUG
pierrebizouard 4:86d291139659 40
pierrebizouard 7:9276134bb25e 41 #define CODE_VERSION_STRING "1.0"
pierrebizouard 6:7812b342d945 42 #define LINE(x) ((x) * (((sFONT *)BSP_LCD_GetFont())->Height))
pierrebizouard 7:9276134bb25e 43
pierrebizouard 7:9276134bb25e 44 #ifdef DEBUG
pierrebizouard 7:9276134bb25e 45 #define TEMP_SET_LINE 0
pierrebizouard 7:9276134bb25e 46 #define CLOSER 0
pierrebizouard 7:9276134bb25e 47 #define TEMP_SET_TEXT LINE(TEMP_SET_LINE)+CLOSER
pierrebizouard 7:9276134bb25e 48 #define TEMP_SET_DISP LINE(TEMP_SET_LINE+1)+CLOSER
pierrebizouard 7:9276134bb25e 49 #define TEMP_READ_TEXT LINE(TEMP_SET_LINE+3)-CLOSER
pierrebizouard 7:9276134bb25e 50 #define TEMP_READ_DISP LINE(TEMP_SET_LINE+4)-CLOSER
pierrebizouard 7:9276134bb25e 51 #define TEMP_TEXT_X 5
pierrebizouard 7:9276134bb25e 52 #define TEMP_DISP_X (TEMP_TEXT_X - 5)
pierrebizouard 7:9276134bb25e 53 #else
pierrebizouard 7:9276134bb25e 54 #define TEMP_SET_LINE 4
pierrebizouard 7:9276134bb25e 55 #define OFFSET 5
pierrebizouard 7:9276134bb25e 56 #define CLOSER 10
pierrebizouard 7:9276134bb25e 57 #define TEMP_SET_TEXT LINE(TEMP_SET_LINE)+CLOSER+OFFSET
pierrebizouard 7:9276134bb25e 58 #define TEMP_SET_DISP LINE(TEMP_SET_LINE+1)+CLOSER+OFFSET
pierrebizouard 7:9276134bb25e 59 #define TEMP_READ_TEXT LINE(TEMP_SET_LINE+3)+CLOSER/2+OFFSET
pierrebizouard 7:9276134bb25e 60 #define TEMP_READ_DISP LINE(TEMP_SET_LINE+4)+CLOSER/2+OFFSET
pierrebizouard 7:9276134bb25e 61 #define TEMP_TEXT_X 32
pierrebizouard 7:9276134bb25e 62 #define TEMP_DISP_X (TEMP_TEXT_X - 5)
pierrebizouard 7:9276134bb25e 63 #endif
pierrebizouard 7:9276134bb25e 64
pierrebizouard 7:9276134bb25e 65
pierrebizouard 6:7812b342d945 66 #define min(x,y) (x>y?y:x)
pierrebizouard 6:7812b342d945 67 #define max(x,y) (x>y?x:y)
pierrebizouard 6:7812b342d945 68
pierrebizouard 7:9276134bb25e 69 #define DEFAULT_LAYER 0
pierrebizouard 7:9276134bb25e 70 #define MIN_TEMP -40.
pierrebizouard 7:9276134bb25e 71 #define MAX_TEMP 20.0
pierrebizouard 7:9276134bb25e 72
pierrebizouard 7:9276134bb25e 73 double temperature_setpoint = -10.0;
pierrebizouard 7:9276134bb25e 74 double last_read_temperature = temperature_setpoint;
pierrebizouard 7:9276134bb25e 75
pierrebizouard 7:9276134bb25e 76 #define MAX_TP_POINTS (320-2*10-2*10)
pierrebizouard 7:9276134bb25e 77 #define DELAY_ACQ 200
pierrebizouard 7:9276134bb25e 78 #define TS_READ_TIME 75
pierrebizouard 7:9276134bb25e 79 #define TEMPERATURE_SLOW_ACCUMULATE 40
pierrebizouard 7:9276134bb25e 80 //(5*10) //10s approx 5*10*200ms
pierrebizouard 7:9276134bb25e 81
pierrebizouard 7:9276134bb25e 82 double temperature_curve_fast[MAX_TP_POINTS];
pierrebizouard 7:9276134bb25e 83 double temperature_curve_slow[MAX_TP_POINTS];
pierrebizouard 7:9276134bb25e 84 int accumulated_slow_temp = 0;
pierrebizouard 7:9276134bb25e 85 double slow_temp_acc = 0.;
pierrebizouard 7:9276134bb25e 86 int temperature_curve_slow_count = 0;
pierrebizouard 7:9276134bb25e 87 int temperature_curve_fast_count = 0;
pierrebizouard 7:9276134bb25e 88 int temperature_curve_fast_index = 0;
pierrebizouard 7:9276134bb25e 89 int temperature_curve_slow_index = 0;
pierrebizouard 7:9276134bb25e 90
pierrebizouard 7:9276134bb25e 91 int last_update_index = -1;
pierrebizouard 7:9276134bb25e 92
pierrebizouard 7:9276134bb25e 93 double eeprom_temperature = 0.0;
pierrebizouard 6:7812b342d945 94
pierrebizouard 6:7812b342d945 95 double pcoefs[] = {-1.10014853, 10.40077476, -70.49071822, 86.20161024};
pierrebizouard 6:7812b342d945 96 double rev_pcoefs[] = {-5.42057541e-08, 5.11915693e-05, -2.13855322e-02, 1.50390471e+00};
pierrebizouard 6:7812b342d945 97
pierrebizouard 6:7812b342d945 98 double polyval(double* coefs, int degree, double value)
pierrebizouard 6:7812b342d945 99 {
pierrebizouard 6:7812b342d945 100 int power = 0;
pierrebizouard 6:7812b342d945 101 int degree_current = degree;
pierrebizouard 6:7812b342d945 102 double value_out = 0;
pierrebizouard 6:7812b342d945 103 do {
pierrebizouard 6:7812b342d945 104 value_out += pow(value, power)*coefs[degree_current];
pierrebizouard 6:7812b342d945 105 degree_current -= 1;
pierrebizouard 6:7812b342d945 106 power += 1;
pierrebizouard 6:7812b342d945 107 } while (power <= degree);
pierrebizouard 6:7812b342d945 108 return value_out;
pierrebizouard 6:7812b342d945 109 }
pierrebizouard 6:7812b342d945 110
pierrebizouard 6:7812b342d945 111 double read_temperature()
pierrebizouard 6:7812b342d945 112 {
pierrebizouard 6:7812b342d945 113 //fixes a bug for repetitve readout failures
pierrebizouard 6:7812b342d945 114 AnalogIn temp_read(PA_3); //PF4 PF5 PF3 PF6 PF8
pierrebizouard 6:7812b342d945 115 double bridge_res = 100e3;
pierrebizouard 6:7812b342d945 116 double bridge_voltage = 3.3;
pierrebizouard 7:9276134bb25e 117 int averaging = 16;
pierrebizouard 7:9276134bb25e 118 double accumulator = 0.;
pierrebizouard 7:9276134bb25e 119 for (int i=0; i<averaging; i++) {
pierrebizouard 7:9276134bb25e 120 accumulator += temp_read.read();
pierrebizouard 7:9276134bb25e 121 }
pierrebizouard 7:9276134bb25e 122 double temp_averaging = accumulator/averaging;
pierrebizouard 7:9276134bb25e 123 double midpoint_voltage = double(temp_averaging*bridge_voltage);
pierrebizouard 6:7812b342d945 124 double rx = (midpoint_voltage / bridge_voltage) * bridge_res / (1 - midpoint_voltage / bridge_voltage);
pierrebizouard 7:9276134bb25e 125 #ifdef DEBUG
pierrebizouard 6:7812b342d945 126 sprintf((char*)text, "TR %lf V ", midpoint_voltage);
pierrebizouard 6:7812b342d945 127 lcd.DisplayStringAt(0, LINE(9), (uint8_t *)&text, LEFT_MODE);
pierrebizouard 7:9276134bb25e 128 #endif
pierrebizouard 6:7812b342d945 129 return polyval(pcoefs, 3, log10(rx/1e3));
pierrebizouard 6:7812b342d945 130 }
pierrebizouard 6:7812b342d945 131
pierrebizouard 6:7812b342d945 132 void write_temperature_setpoint(double temperature)
pierrebizouard 6:7812b342d945 133 {
pierrebizouard 6:7812b342d945 134 double bridge_res = 100e3;
pierrebizouard 6:7812b342d945 135 double bridge_voltage = 3.3;
pierrebizouard 6:7812b342d945 136 double res = pow(10., polyval(rev_pcoefs, 3, temperature))*1e3;
pierrebizouard 6:7812b342d945 137 double voltage = (res/(res+bridge_res) * bridge_voltage);
pierrebizouard 7:9276134bb25e 138 #ifdef DEBUG
pierrebizouard 6:7812b342d945 139 sprintf((char*)text, "SP %4.1lf V ", voltage);
pierrebizouard 6:7812b342d945 140 lcd.DisplayStringAt(0, LINE(8), (uint8_t *)&text, LEFT_MODE);
pierrebizouard 7:9276134bb25e 141 #endif
pierrebizouard 6:7812b342d945 142 temperature_out.write(voltage/bridge_voltage);
pierrebizouard 6:7812b342d945 143 }
pierrebizouard 4:86d291139659 144
pierrebizouard 7:9276134bb25e 145
pierrebizouard 7:9276134bb25e 146
pierrebizouard 7:9276134bb25e 147 #define LCD_REFRESH_RATE 40
pierrebizouard 7:9276134bb25e 148
pierrebizouard 7:9276134bb25e 149 void LCD_Reload_Safe(void)
pierrebizouard 7:9276134bb25e 150 {
pierrebizouard 7:9276134bb25e 151 BSP_LCD_Reload(LTDC_RELOAD_VERTICAL_BLANKING);
pierrebizouard 7:9276134bb25e 152 wait(1./LCD_REFRESH_RATE);
pierrebizouard 7:9276134bb25e 153 }
pierrebizouard 7:9276134bb25e 154
pierrebizouard 7:9276134bb25e 155
pierrebizouard 7:9276134bb25e 156 const uint8_t sector_index = 11;
pierrebizouard 7:9276134bb25e 157 SOFWriter writer;
pierrebizouard 7:9276134bb25e 158 SOFReader reader;
pierrebizouard 7:9276134bb25e 159
pierrebizouard 7:9276134bb25e 160 void check_temperature_storage(void)
pierrebizouard 4:86d291139659 161 {
pierrebizouard 7:9276134bb25e 162 //here could check for data
pierrebizouard 7:9276134bb25e 163 reader.open(sector_index);
pierrebizouard 7:9276134bb25e 164 double temp_backup = *(double *)(reader.get_physical_data_addr()-sizeof(double));
pierrebizouard 7:9276134bb25e 165 reader.close();
pierrebizouard 7:9276134bb25e 166 writer.open(sector_index);
pierrebizouard 7:9276134bb25e 167 if (writer.get_free_size() <= sizeof(double)*1024) { // check available byte
pierrebizouard 7:9276134bb25e 168 SOFBlock::format(sector_index);
pierrebizouard 7:9276134bb25e 169 writer.write_data((uint8_t*)(&temp_backup), sizeof(double));
pierrebizouard 7:9276134bb25e 170 } else {
pierrebizouard 7:9276134bb25e 171 #ifndef NO_WAIT
pierrebizouard 7:9276134bb25e 172 wait(1);
pierrebizouard 7:9276134bb25e 173 #endif
pierrebizouard 7:9276134bb25e 174 }
pierrebizouard 7:9276134bb25e 175 writer.close();
pierrebizouard 7:9276134bb25e 176 }
pierrebizouard 7:9276134bb25e 177
pierrebizouard 7:9276134bb25e 178 void load_temperature_storage(void)
pierrebizouard 7:9276134bb25e 179 {
pierrebizouard 7:9276134bb25e 180 reader.open(sector_index);
pierrebizouard 7:9276134bb25e 181 eeprom_temperature = *(double *)(reader.get_physical_data_addr()-sizeof(double));
pierrebizouard 7:9276134bb25e 182 reader.close();
pierrebizouard 7:9276134bb25e 183
pierrebizouard 7:9276134bb25e 184 if ((eeprom_temperature >= MIN_TEMP) && (eeprom_temperature <= MAX_TEMP))
bcostm 0:91c6ab790bd7 185 {
pierrebizouard 7:9276134bb25e 186 temperature_setpoint = eeprom_temperature;
pierrebizouard 7:9276134bb25e 187 }
pierrebizouard 7:9276134bb25e 188 write_temperature_setpoint(temperature_setpoint);
pierrebizouard 7:9276134bb25e 189
pierrebizouard 7:9276134bb25e 190 }
pierrebizouard 7:9276134bb25e 191
pierrebizouard 7:9276134bb25e 192 void save_temperature_storage(void)
pierrebizouard 7:9276134bb25e 193 {
pierrebizouard 7:9276134bb25e 194 /* write temperature set point */
pierrebizouard 7:9276134bb25e 195 if ((temperature_setpoint != eeprom_temperature) &&
pierrebizouard 7:9276134bb25e 196 (temperature_setpoint < MAX_TEMP) && (temperature_setpoint > MIN_TEMP)) {
pierrebizouard 7:9276134bb25e 197 writer.open(sector_index);
pierrebizouard 7:9276134bb25e 198 writer.write_data((uint8_t*)(&temperature_setpoint), sizeof(double));
pierrebizouard 7:9276134bb25e 199
pierrebizouard 7:9276134bb25e 200 eeprom_temperature = temperature_setpoint;
pierrebizouard 7:9276134bb25e 201 if (writer.get_free_size() <= sizeof(double)+1) { // check available byte
pierrebizouard 7:9276134bb25e 202 SOFBlock::format(sector_index);
pierrebizouard 7:9276134bb25e 203 }
pierrebizouard 7:9276134bb25e 204 writer.close();
pierrebizouard 7:9276134bb25e 205 eeprom_temperature = temperature_setpoint;
bcostm 0:91c6ab790bd7 206 }
pierrebizouard 7:9276134bb25e 207
pierrebizouard 7:9276134bb25e 208 }
pierrebizouard 7:9276134bb25e 209
pierrebizouard 7:9276134bb25e 210 void DrawRectCentered(uint16_t xcenter, uint16_t ycenter, uint16_t width, uint16_t height)
pierrebizouard 7:9276134bb25e 211 {
pierrebizouard 7:9276134bb25e 212 //landscape mode only
pierrebizouard 7:9276134bb25e 213 lcd.FillRect(xcenter+width/2,ycenter-height/2, height, width);
pierrebizouard 7:9276134bb25e 214 }
pierrebizouard 7:9276134bb25e 215
pierrebizouard 7:9276134bb25e 216 void print_layer(int layer)
pierrebizouard 7:9276134bb25e 217 {
pierrebizouard 7:9276134bb25e 218 lcd.SelectLayer(layer);
pierrebizouard 7:9276134bb25e 219 BSP_LCD_SetLayerVisible(layer, ENABLE);
pierrebizouard 7:9276134bb25e 220 sprintf((char*)text, "LAYER %d", layer);
pierrebizouard 7:9276134bb25e 221 lcd.DisplayStringAt(0, LINE(1), (uint8_t *)&text, LEFT_MODE);
pierrebizouard 7:9276134bb25e 222 BSP_LCD_SetLayerVisible(layer, DISABLE);
pierrebizouard 7:9276134bb25e 223 }
pierrebizouard 7:9276134bb25e 224
pierrebizouard 7:9276134bb25e 225 void print_layers()
pierrebizouard 7:9276134bb25e 226 {
pierrebizouard 7:9276134bb25e 227 for (int i=0;i<3;i++)
bcostm 0:91c6ab790bd7 228 {
pierrebizouard 7:9276134bb25e 229 print_layer(i);
bcostm 0:91c6ab790bd7 230 }
pierrebizouard 7:9276134bb25e 231 lcd.SelectLayer(0);
pierrebizouard 7:9276134bb25e 232 BSP_LCD_SetLayerVisible(0, ENABLE);
pierrebizouard 7:9276134bb25e 233
pierrebizouard 7:9276134bb25e 234 }
pierrebizouard 7:9276134bb25e 235
pierrebizouard 7:9276134bb25e 236 void draw_startup_screen(int layer)
pierrebizouard 7:9276134bb25e 237 {
pierrebizouard 7:9276134bb25e 238 lcd.SelectLayer(layer);
pierrebizouard 7:9276134bb25e 239 BSP_LCD_SetLayerVisible_NoReload(layer, ENABLE);
pierrebizouard 7:9276134bb25e 240 LCD_Reload_Safe();
pierrebizouard 7:9276134bb25e 241 lcd.Clear(LCD_COLOR_BLUE);
pierrebizouard 10:1e21661f4e04 242 uint8_t* pBmp = const_cast<uint8_t*>(big_fastlite_logo_68_302);
pierrebizouard 9:62df0b9df08d 243 lcd.DrawBitmap((lcd.GetYSize()-302)/2, (lcd.GetXSize()-68)/2, pBmp);
pierrebizouard 7:9276134bb25e 244 }
pierrebizouard 7:9276134bb25e 245
pierrebizouard 7:9276134bb25e 246 void draw_version_screen(int layer)
pierrebizouard 7:9276134bb25e 247 {
pierrebizouard 7:9276134bb25e 248 lcd.SelectLayer(layer);
pierrebizouard 7:9276134bb25e 249 lcd.SetBackColor(LCD_COLOR_BLUE);
pierrebizouard 7:9276134bb25e 250 lcd.SetTextColor(LCD_COLOR_WHITE);
pierrebizouard 7:9276134bb25e 251 lcd.Clear(LCD_COLOR_BLUE);
pierrebizouard 7:9276134bb25e 252
pierrebizouard 7:9276134bb25e 253 BSP_LCD_SetFont(&UbuntuFont23);
bcostm 0:91c6ab790bd7 254
bcostm 0:91c6ab790bd7 255 lcd.Clear(LCD_COLOR_BLUE);
pierrebizouard 10:1e21661f4e04 256 uint8_t* pBmp = (uint8_t*)(big_fastlite_logo_68_302);
pierrebizouard 9:62df0b9df08d 257 lcd.DrawBitmap((lcd.GetYSize()-302)/2, 0, pBmp);
pierrebizouard 7:9276134bb25e 258
pierrebizouard 7:9276134bb25e 259 sprintf((char*)text, "TEC interface");
pierrebizouard 7:9276134bb25e 260 lcd.DisplayStringAt(5, LINE(0)+70, (uint8_t *)&text, LEFT_MODE);
pierrebizouard 7:9276134bb25e 261 sprintf((char*)text, "Version %s", CODE_VERSION_STRING);
pierrebizouard 7:9276134bb25e 262 lcd.DisplayStringAt(5, LINE(1)+70, (uint8_t *)&text, LEFT_MODE);
pierrebizouard 7:9276134bb25e 263 }
pierrebizouard 7:9276134bb25e 264
pierrebizouard 7:9276134bb25e 265 void fade_screen(int layer, int fade_count, uint32_t color, int dest_layer)
pierrebizouard 7:9276134bb25e 266 {
pierrebizouard 7:9276134bb25e 267 lcd.SelectLayer(layer+1);
pierrebizouard 7:9276134bb25e 268 BSP_LCD_SetTransparency_NoReload(layer+1, 0);
pierrebizouard 7:9276134bb25e 269 BSP_LCD_SetColorKeying_NoReload(layer+1, LCD_COLOR_WHITE);
pierrebizouard 7:9276134bb25e 270 lcd.Clear(color);
pierrebizouard 7:9276134bb25e 271 LCD_Reload_Safe();
pierrebizouard 7:9276134bb25e 272 BSP_LCD_SetLayerVisible_NoReload(layer+1, ENABLE);
pierrebizouard 7:9276134bb25e 273 BSP_LCD_Reload(LTDC_RELOAD_VERTICAL_BLANKING);
pierrebizouard 7:9276134bb25e 274 lcd.SetTextColor(color);
pierrebizouard 7:9276134bb25e 275
pierrebizouard 7:9276134bb25e 276 for (int i=0; i<fade_count; i++)
pierrebizouard 7:9276134bb25e 277 {
pierrebizouard 7:9276134bb25e 278 BSP_LCD_SetTransparency_NoReload(layer+1,255/(fade_count-1)*i); //TRANSPARENCY == ALPHA so 255 is no transparent
pierrebizouard 7:9276134bb25e 279 BSP_LCD_Reload(LTDC_RELOAD_VERTICAL_BLANKING);
pierrebizouard 7:9276134bb25e 280 #ifndef NO_WAIT
pierrebizouard 7:9276134bb25e 281 wait(1./fade_count);
pierrebizouard 7:9276134bb25e 282 #endif
pierrebizouard 7:9276134bb25e 283 }
pierrebizouard 7:9276134bb25e 284
pierrebizouard 7:9276134bb25e 285 BSP_LCD_ResetColorKeying_NoReload(layer+1);
pierrebizouard 7:9276134bb25e 286 BSP_LCD_SetLayerVisible_NoReload(layer+1, DISABLE);
pierrebizouard 7:9276134bb25e 287
pierrebizouard 7:9276134bb25e 288 lcd.SelectLayer(layer);
pierrebizouard 7:9276134bb25e 289 lcd.Clear(color);
pierrebizouard 7:9276134bb25e 290
pierrebizouard 7:9276134bb25e 291 if (layer != dest_layer) {
pierrebizouard 7:9276134bb25e 292 lcd.SelectLayer(dest_layer);
pierrebizouard 7:9276134bb25e 293 lcd.Clear(color);
pierrebizouard 7:9276134bb25e 294 BSP_LCD_SetLayerVisible_NoReload(dest_layer, ENABLE);
pierrebizouard 7:9276134bb25e 295 }
pierrebizouard 7:9276134bb25e 296 LCD_Reload_Safe();
pierrebizouard 7:9276134bb25e 297
pierrebizouard 7:9276134bb25e 298 }
pierrebizouard 7:9276134bb25e 299
pierrebizouard 7:9276134bb25e 300 int curve_y_min_temp = 0;
pierrebizouard 7:9276134bb25e 301 int curve_y_zero_temp = 0;
pierrebizouard 7:9276134bb25e 302 int curve_x_zero_time = 0;
pierrebizouard 7:9276134bb25e 303 int curve_height_x = 0;
pierrebizouard 7:9276134bb25e 304 int curve_width_y = 0;
pierrebizouard 7:9276134bb25e 305 double pixel_temp_f=1.;
pierrebizouard 7:9276134bb25e 306
pierrebizouard 7:9276134bb25e 307 void enable_curve_overlay(int layer, bool set_visible)
pierrebizouard 7:9276134bb25e 308 {
pierrebizouard 7:9276134bb25e 309 if (set_visible) BSP_LCD_SetLayerVisible_NoReload(layer, ENABLE);
pierrebizouard 7:9276134bb25e 310 lcd.SelectLayer(layer);
pierrebizouard 7:9276134bb25e 311 lcd.Clear(LCD_COLOR_TRANSPARENT);
pierrebizouard 7:9276134bb25e 312 BSP_LCD_SetColorKeying_NoReload(layer, LCD_COLOR_TRANSPARENT);
pierrebizouard 7:9276134bb25e 313 if (set_visible) {
pierrebizouard 7:9276134bb25e 314 LCD_Reload_Safe();
pierrebizouard 7:9276134bb25e 315 }
pierrebizouard 7:9276134bb25e 316 }
pierrebizouard 7:9276134bb25e 317
pierrebizouard 7:9276134bb25e 318 void disable_curve_overlay(int layer)
pierrebizouard 7:9276134bb25e 319 {
pierrebizouard 7:9276134bb25e 320 BSP_LCD_SetLayerVisible_NoReload(layer, DISABLE);
pierrebizouard 7:9276134bb25e 321 lcd.SelectLayer(layer);
pierrebizouard 7:9276134bb25e 322 lcd.Clear(LCD_COLOR_TRANSPARENT);
pierrebizouard 7:9276134bb25e 323 BSP_LCD_SetColorKeying_NoReload(layer, LCD_COLOR_TRANSPARENT);
pierrebizouard 7:9276134bb25e 324 LCD_Reload_Safe();
pierrebizouard 7:9276134bb25e 325
pierrebizouard 7:9276134bb25e 326 }
pierrebizouard 7:9276134bb25e 327
pierrebizouard 7:9276134bb25e 328 void clear_curve_overlay(int layer)
pierrebizouard 7:9276134bb25e 329 {
pierrebizouard 7:9276134bb25e 330 lcd.SelectLayer(layer);
pierrebizouard 7:9276134bb25e 331 lcd.Clear(LCD_COLOR_TRANSPARENT);
pierrebizouard 7:9276134bb25e 332 }
pierrebizouard 7:9276134bb25e 333
pierrebizouard 7:9276134bb25e 334 bool update_temperature_read_curve(int layer, int screen, bool clear, bool force_update)
pierrebizouard 7:9276134bb25e 335 {
pierrebizouard 7:9276134bb25e 336 lcd.SelectLayer(layer);
pierrebizouard 7:9276134bb25e 337 int temp_index = 0;
pierrebizouard 7:9276134bb25e 338 int temp_count = 0;
pierrebizouard 7:9276134bb25e 339 double* temp_curve = NULL;
pierrebizouard 7:9276134bb25e 340 uint32_t curve_color = 0;
pierrebizouard 7:9276134bb25e 341
pierrebizouard 7:9276134bb25e 342 if (screen == -1)
pierrebizouard 7:9276134bb25e 343 {
pierrebizouard 7:9276134bb25e 344 temp_index = temperature_curve_fast_index;
pierrebizouard 7:9276134bb25e 345 temp_count = temperature_curve_fast_count;
pierrebizouard 7:9276134bb25e 346 temp_curve = temperature_curve_fast;
pierrebizouard 7:9276134bb25e 347 curve_color = LCD_COLOR_RED;
pierrebizouard 7:9276134bb25e 348 } else {
pierrebizouard 7:9276134bb25e 349 temp_index = temperature_curve_slow_index;
pierrebizouard 7:9276134bb25e 350 temp_count = temperature_curve_slow_count;
pierrebizouard 7:9276134bb25e 351 temp_curve = temperature_curve_slow;
pierrebizouard 7:9276134bb25e 352 curve_color = LCD_COLOR_DARKGREEN;
pierrebizouard 7:9276134bb25e 353 }
pierrebizouard 7:9276134bb25e 354
pierrebizouard 7:9276134bb25e 355 if ((last_update_index == temp_index) && (force_update == false))
pierrebizouard 7:9276134bb25e 356 {
pierrebizouard 7:9276134bb25e 357 return false;
pierrebizouard 7:9276134bb25e 358 } else {
pierrebizouard 7:9276134bb25e 359 last_update_index = temp_index;
pierrebizouard 7:9276134bb25e 360 }
pierrebizouard 7:9276134bb25e 361
pierrebizouard 7:9276134bb25e 362 int start_index = (temp_index-temp_count)%MAX_TP_POINTS;
pierrebizouard 7:9276134bb25e 363 if (start_index < 0) {
pierrebizouard 7:9276134bb25e 364 start_index += MAX_TP_POINTS;
pierrebizouard 7:9276134bb25e 365 }
pierrebizouard 7:9276134bb25e 366 int stop_index = temp_index;
pierrebizouard 7:9276134bb25e 367
pierrebizouard 7:9276134bb25e 368 int prev_y = -1;
pierrebizouard 7:9276134bb25e 369 int py = 0;
pierrebizouard 7:9276134bb25e 370 int px = 0;
pierrebizouard 7:9276134bb25e 371
pierrebizouard 7:9276134bb25e 372 if (temp_count == 0)
pierrebizouard 7:9276134bb25e 373 {
pierrebizouard 7:9276134bb25e 374 return false;
pierrebizouard 7:9276134bb25e 375 }
pierrebizouard 7:9276134bb25e 376
pierrebizouard 7:9276134bb25e 377 if (clear) {
pierrebizouard 7:9276134bb25e 378 clear_curve_overlay(layer);
pierrebizouard 7:9276134bb25e 379 }
pierrebizouard 7:9276134bb25e 380
pierrebizouard 7:9276134bb25e 381 #define LINE_DRAW
pierrebizouard 7:9276134bb25e 382
pierrebizouard 7:9276134bb25e 383 /*
pierrebizouard 7:9276134bb25e 384 lcd.SetTextColor(LCD_COLOR_WHITE);
pierrebizouard 7:9276134bb25e 385 sprintf((char*)text, "U%d %d %d", start_index, stop_index, start_index+MAX_TP_POINTS);
pierrebizouard 7:9276134bb25e 386 lcd.DisplayStringAt(0, LINE(1), (uint8_t *)&text, LEFT_MODE);
pierrebizouard 7:9276134bb25e 387 */
pierrebizouard 7:9276134bb25e 388
pierrebizouard 7:9276134bb25e 389 lcd.SetTextColor(curve_color);
pierrebizouard 7:9276134bb25e 390 int begin = -1;
pierrebizouard 7:9276134bb25e 391 int stop = -1;
pierrebizouard 7:9276134bb25e 392
pierrebizouard 7:9276134bb25e 393 bool two_step = false;
pierrebizouard 7:9276134bb25e 394 if (stop_index <= start_index) {
pierrebizouard 7:9276134bb25e 395 begin = start_index;
pierrebizouard 7:9276134bb25e 396 stop = MAX_TP_POINTS;
pierrebizouard 7:9276134bb25e 397 two_step = true;
pierrebizouard 7:9276134bb25e 398 } else {
pierrebizouard 7:9276134bb25e 399 begin = start_index;
pierrebizouard 7:9276134bb25e 400 stop = stop_index;
pierrebizouard 7:9276134bb25e 401 }
pierrebizouard 7:9276134bb25e 402
pierrebizouard 7:9276134bb25e 403
pierrebizouard 7:9276134bb25e 404 bool draw_done = false;
pierrebizouard 7:9276134bb25e 405 while (draw_done == false)
pierrebizouard 7:9276134bb25e 406 {
pierrebizouard 7:9276134bb25e 407 for (int i=begin; i<stop; i++)
pierrebizouard 7:9276134bb25e 408 {
pierrebizouard 7:9276134bb25e 409 py = curve_y_zero_temp - temp_curve[i]*pixel_temp_f;
pierrebizouard 7:9276134bb25e 410 #ifdef LINE_DRAW
pierrebizouard 7:9276134bb25e 411 if ((prev_y != -1) && (px<curve_width_y) && (py>curve_y_min_temp-curve_height_x) && (py<curve_y_min_temp))
pierrebizouard 7:9276134bb25e 412 {
pierrebizouard 7:9276134bb25e 413 lcd.DrawLine(px-1+curve_x_zero_time, prev_y, px+curve_x_zero_time, py);
pierrebizouard 7:9276134bb25e 414 }
pierrebizouard 7:9276134bb25e 415 prev_y = py;
pierrebizouard 7:9276134bb25e 416 #else
pierrebizouard 7:9276134bb25e 417 if ((px<curve_width_y) && (py>curve_y_min_temp-curve_height_x) && (py<curve_y_min_temp))
pierrebizouard 7:9276134bb25e 418 {
pierrebizouard 7:9276134bb25e 419 lcd.DrawPixel(px+curve_x_zero_time, py, LCD_COLOR_BLACK);
pierrebizouard 7:9276134bb25e 420 }
pierrebizouard 7:9276134bb25e 421 #endif
pierrebizouard 7:9276134bb25e 422 px ++;
pierrebizouard 7:9276134bb25e 423 }
pierrebizouard 7:9276134bb25e 424 if (two_step) {
pierrebizouard 7:9276134bb25e 425 if (begin == 0)
pierrebizouard 7:9276134bb25e 426 {
pierrebizouard 7:9276134bb25e 427 draw_done = true;
pierrebizouard 7:9276134bb25e 428 } else {
pierrebizouard 7:9276134bb25e 429 begin = 0;
pierrebizouard 7:9276134bb25e 430 stop = stop_index;
pierrebizouard 7:9276134bb25e 431 }
pierrebizouard 7:9276134bb25e 432 } else {
pierrebizouard 7:9276134bb25e 433 draw_done = true;
pierrebizouard 7:9276134bb25e 434 }
pierrebizouard 7:9276134bb25e 435 }
pierrebizouard 7:9276134bb25e 436 return true;
pierrebizouard 7:9276134bb25e 437 }
pierrebizouard 7:9276134bb25e 438
pierrebizouard 7:9276134bb25e 439 int plus_x = lcd.GetYSize()*3./4+30;
pierrebizouard 7:9276134bb25e 440 int plus_y = lcd.GetXSize()*1./4+20;
pierrebizouard 7:9276134bb25e 441 int minus_x = lcd.GetYSize()*3./4+30;
pierrebizouard 7:9276134bb25e 442 int minus_y = lcd.GetXSize()*3./4-20;
pierrebizouard 7:9276134bb25e 443 int radius = lcd.GetXSize()/8.;
pierrebizouard 7:9276134bb25e 444
pierrebizouard 7:9276134bb25e 445 char temp_formatting[] = " %4.1lf xC ";
pierrebizouard 7:9276134bb25e 446
pierrebizouard 7:9276134bb25e 447 void update_temperature_read_text()
pierrebizouard 7:9276134bb25e 448 {
pierrebizouard 7:9276134bb25e 449 sprintf((char*)text, temp_formatting, last_read_temperature);
pierrebizouard 7:9276134bb25e 450 lcd.DisplayStringAt(TEMP_DISP_X, TEMP_READ_DISP, (uint8_t *)&text, LEFT_MODE);
pierrebizouard 7:9276134bb25e 451 }
pierrebizouard 7:9276134bb25e 452
pierrebizouard 7:9276134bb25e 453 void draw_regulation_screen(int layer)
pierrebizouard 7:9276134bb25e 454 {
pierrebizouard 7:9276134bb25e 455 temp_formatting[9] = 176;
pierrebizouard 7:9276134bb25e 456
bcostm 0:91c6ab790bd7 457 lcd.SetBackColor(LCD_COLOR_BLUE);
bcostm 0:91c6ab790bd7 458 lcd.SetTextColor(LCD_COLOR_WHITE);
pierrebizouard 7:9276134bb25e 459 lcd.Clear(LCD_COLOR_BLUE);
pierrebizouard 7:9276134bb25e 460
pierrebizouard 7:9276134bb25e 461 BSP_LCD_SetFont(&UbuntuFont23);
bcostm 0:91c6ab790bd7 462
pierrebizouard 6:7812b342d945 463 lcd.DrawCircle(minus_x, minus_y, radius);
pierrebizouard 6:7812b342d945 464 DrawRectCentered(minus_x, minus_y, radius*1.6, 5);
pierrebizouard 6:7812b342d945 465
pierrebizouard 6:7812b342d945 466 lcd.DrawCircle(plus_x, plus_y, radius);
pierrebizouard 6:7812b342d945 467 DrawRectCentered(plus_x, plus_y, radius*1.6, 5);
pierrebizouard 6:7812b342d945 468 DrawRectCentered(plus_x, plus_y, 5, radius*1.6);
pierrebizouard 6:7812b342d945 469
pierrebizouard 7:9276134bb25e 470 //FASTLITE LOGO + LINE
pierrebizouard 7:9276134bb25e 471 DrawRectCentered(lcd.GetYSize()/2, lcd.GetXSize()-6, lcd.GetYSize(), 2);
pierrebizouard 10:1e21661f4e04 472 uint8_t* pBmp = (uint8_t*)(fastlite_logo_landscape_90_20);
pierrebizouard 9:62df0b9df08d 473 lcd.DrawBitmap(lcd.GetYSize()-90, lcd.GetXSize()-20, pBmp);
pierrebizouard 9:62df0b9df08d 474
pierrebizouard 7:9276134bb25e 475
pierrebizouard 7:9276134bb25e 476 //FRINGEEZZ LOGO
pierrebizouard 7:9276134bb25e 477 #ifdef DEBUG
pierrebizouard 10:1e21661f4e04 478 pBmp = (uint8_t*)(fringeezz_logo_landscape_124_49);
pierrebizouard 9:62df0b9df08d 479 lcd.DrawBitmap(0, lcd.GetXSize()-20-49-40, pBmp);
pierrebizouard 7:9276134bb25e 480 #else
pierrebizouard 10:1e21661f4e04 481 pBmp = (uint8_t*)(big_fringezz_logo_91_233);
pierrebizouard 9:62df0b9df08d 482 lcd.DrawBitmap(5, 5, pBmp);
pierrebizouard 7:9276134bb25e 483 #endif
pierrebizouard 7:9276134bb25e 484
pierrebizouard 7:9276134bb25e 485 sprintf((char*)text, "TEC set-up:");
pierrebizouard 7:9276134bb25e 486 lcd.DisplayStringAt(TEMP_TEXT_X, TEMP_SET_TEXT, (uint8_t *)&text, LEFT_MODE);
pierrebizouard 7:9276134bb25e 487 sprintf((char*)text, temp_formatting, temperature_setpoint);
pierrebizouard 7:9276134bb25e 488 lcd.DisplayStringAt(TEMP_DISP_X, TEMP_SET_DISP, (uint8_t *)&text, LEFT_MODE);
pierrebizouard 7:9276134bb25e 489
pierrebizouard 7:9276134bb25e 490 sprintf((char*)text, "TEC temp:");
pierrebizouard 7:9276134bb25e 491 lcd.DisplayStringAt(TEMP_TEXT_X, TEMP_READ_TEXT, (uint8_t *)&text, LEFT_MODE);
pierrebizouard 7:9276134bb25e 492
pierrebizouard 7:9276134bb25e 493 update_temperature_read_text();
pierrebizouard 7:9276134bb25e 494 }
pierrebizouard 7:9276134bb25e 495
pierrebizouard 7:9276134bb25e 496
pierrebizouard 7:9276134bb25e 497
pierrebizouard 7:9276134bb25e 498 void draw_curve_screen(int layer)
pierrebizouard 7:9276134bb25e 499 {
pierrebizouard 7:9276134bb25e 500 lcd.SetBackColor(LCD_COLOR_BLUE);
pierrebizouard 7:9276134bb25e 501 lcd.SetTextColor(LCD_COLOR_WHITE);
pierrebizouard 7:9276134bb25e 502 lcd.Clear(LCD_COLOR_BLUE);
pierrebizouard 7:9276134bb25e 503
pierrebizouard 10:1e21661f4e04 504 uint8_t* pBmp = (uint8_t*)(fringeezz_logo_landscape_124_49);
pierrebizouard 9:62df0b9df08d 505 lcd.DrawBitmap(1, 1, pBmp);
pierrebizouard 7:9276134bb25e 506
pierrebizouard 7:9276134bb25e 507 lcd.SetBackColor(LCD_COLOR_BLUE);
pierrebizouard 7:9276134bb25e 508 lcd.SetTextColor(LCD_COLOR_WHITE);
pierrebizouard 7:9276134bb25e 509 BSP_LCD_SetFont(&Font16);
pierrebizouard 7:9276134bb25e 510 sprintf((char*)text, "TEC temperature");
pierrebizouard 7:9276134bb25e 511 lcd.DisplayStringAt(130, LINE(0)+10, (uint8_t *)&text, LEFT_MODE);
pierrebizouard 7:9276134bb25e 512
pierrebizouard 7:9276134bb25e 513 int margin_y = 10;
pierrebizouard 7:9276134bb25e 514 int margin_x = 21;
pierrebizouard 7:9276134bb25e 515 int offset_x = 15;
pierrebizouard 7:9276134bb25e 516 int offset_y = 10;
pierrebizouard 7:9276134bb25e 517
pierrebizouard 7:9276134bb25e 518 lcd.SetTextColor(LCD_COLOR_BLACK);
pierrebizouard 6:7812b342d945 519
pierrebizouard 7:9276134bb25e 520 int curve_center_y = lcd.GetYSize()/2+offset_y;
pierrebizouard 7:9276134bb25e 521 int curve_center_x = lcd.GetXSize()/2+offset_x;
pierrebizouard 7:9276134bb25e 522 curve_height_x = lcd.GetXSize()-offset_x*2-margin_x*2;
pierrebizouard 7:9276134bb25e 523 curve_width_y = lcd.GetYSize()-offset_y*2-margin_y*2;
pierrebizouard 7:9276134bb25e 524
pierrebizouard 7:9276134bb25e 525 DrawRectCentered(curve_center_y, curve_center_x, curve_width_y, curve_height_x);
pierrebizouard 7:9276134bb25e 526
pierrebizouard 7:9276134bb25e 527 lcd.SetTextColor(LCD_COLOR_WHITE);
pierrebizouard 7:9276134bb25e 528 DrawRectCentered(curve_center_y, curve_center_x, curve_width_y-2, curve_height_x-2);
pierrebizouard 7:9276134bb25e 529
pierrebizouard 7:9276134bb25e 530 int min_temp = -20;
pierrebizouard 7:9276134bb25e 531 int max_temp = 35;
pierrebizouard 7:9276134bb25e 532 int tick_space = 10;
pierrebizouard 7:9276134bb25e 533
pierrebizouard 7:9276134bb25e 534 int delta_temp = max_temp - min_temp;
pierrebizouard 7:9276134bb25e 535 int vticks_pixels = int((curve_height_x-2)*tick_space/delta_temp);
pierrebizouard 7:9276134bb25e 536 double max_temp_f = min_temp + (1.*tick_space*curve_height_x)/vticks_pixels;
pierrebizouard 7:9276134bb25e 537 double delta_temp_f = max_temp - min_temp;
pierrebizouard 7:9276134bb25e 538 pixel_temp_f = curve_height_x/delta_temp;
pierrebizouard 7:9276134bb25e 539 curve_y_min_temp = curve_center_x+curve_height_x/2-1;
pierrebizouard 7:9276134bb25e 540 curve_y_zero_temp = curve_y_min_temp+(1.*min_temp*vticks_pixels/tick_space);
pierrebizouard 7:9276134bb25e 541 curve_x_zero_time = curve_center_y-curve_width_y/2+1;
pierrebizouard 6:7812b342d945 542
pierrebizouard 7:9276134bb25e 543 BSP_LCD_SetFont(&Font12);
pierrebizouard 7:9276134bb25e 544 for (int i=0; i<curve_height_x/vticks_pixels+1; i++)
pierrebizouard 7:9276134bb25e 545 {
pierrebizouard 7:9276134bb25e 546 lcd.SetTextColor(LCD_COLOR_BLACK);
pierrebizouard 7:9276134bb25e 547
pierrebizouard 7:9276134bb25e 548 int vtick_pos = curve_center_x+curve_height_x/2-1-i*(vticks_pixels);
pierrebizouard 7:9276134bb25e 549 int vtick_pos_x = curve_center_y-curve_width_y/2-1;
pierrebizouard 7:9276134bb25e 550 lcd.DrawVLine(vtick_pos_x+5+1, vtick_pos, 5);
pierrebizouard 7:9276134bb25e 551
pierrebizouard 7:9276134bb25e 552 lcd.SetTextColor(LCD_COLOR_WHITE);
pierrebizouard 7:9276134bb25e 553
pierrebizouard 7:9276134bb25e 554 sprintf((char*)text, "%d", min_temp+10*i);
pierrebizouard 7:9276134bb25e 555 lcd.DisplayStringAt(30, vtick_pos-6, (uint8_t *)&text, RIGHT_MODE);
pierrebizouard 7:9276134bb25e 556
pierrebizouard 7:9276134bb25e 557 lcd.SetTextColor(LCD_COLOR_BLACK);
pierrebizouard 7:9276134bb25e 558
pierrebizouard 7:9276134bb25e 559 vtick_pos = curve_center_x+curve_height_x/2-1-i*(vticks_pixels);
pierrebizouard 7:9276134bb25e 560 vtick_pos_x = curve_center_y+curve_width_y/2-1;
pierrebizouard 7:9276134bb25e 561 lcd.DrawVLine(vtick_pos_x+1, vtick_pos, 5);
pierrebizouard 7:9276134bb25e 562
pierrebizouard 7:9276134bb25e 563 }
pierrebizouard 7:9276134bb25e 564
pierrebizouard 7:9276134bb25e 565 lcd.SetTextColor(LCD_COLOR_WHITE);
pierrebizouard 7:9276134bb25e 566 BSP_LCD_SetFont(&UbuntuFont23);
pierrebizouard 7:9276134bb25e 567
pierrebizouard 7:9276134bb25e 568
pierrebizouard 7:9276134bb25e 569 //FASTLITE LOGO + LINE
pierrebizouard 7:9276134bb25e 570 DrawRectCentered(lcd.GetYSize()/2, lcd.GetXSize()-6, lcd.GetYSize(), 2);
pierrebizouard 10:1e21661f4e04 571 pBmp = (uint8_t*)(fastlite_logo_landscape_90_20);
pierrebizouard 9:62df0b9df08d 572 lcd.DrawBitmap(lcd.GetYSize()-90, lcd.GetXSize()-20, pBmp);
pierrebizouard 7:9276134bb25e 573 }
pierrebizouard 6:7812b342d945 574
pierrebizouard 7:9276134bb25e 575 void draw_screens(int screen, int layer)
pierrebizouard 7:9276134bb25e 576 {
pierrebizouard 7:9276134bb25e 577 lcd.SelectLayer(layer);
pierrebizouard 7:9276134bb25e 578 lcd.Clear(LCD_COLOR_BLUE);
pierrebizouard 7:9276134bb25e 579 if ((screen == -1) || (screen == -2))
pierrebizouard 7:9276134bb25e 580 {
pierrebizouard 7:9276134bb25e 581 draw_curve_screen(layer);
pierrebizouard 7:9276134bb25e 582
pierrebizouard 7:9276134bb25e 583 lcd.SetBackColor(LCD_COLOR_BLUE);
pierrebizouard 7:9276134bb25e 584 lcd.SetTextColor(LCD_COLOR_WHITE);
pierrebizouard 7:9276134bb25e 585 BSP_LCD_SetFont(&Font16);
pierrebizouard 7:9276134bb25e 586 if (screen == -1) {
pierrebizouard 7:9276134bb25e 587 sprintf((char*)text, "(%dms)", DELAY_ACQ+TS_READ_TIME);
pierrebizouard 7:9276134bb25e 588 } else {
pierrebizouard 7:9276134bb25e 589 sprintf((char*)text, "(%ds)", (DELAY_ACQ+TS_READ_TIME)*TEMPERATURE_SLOW_ACCUMULATE/1000);
pierrebizouard 7:9276134bb25e 590 }
pierrebizouard 7:9276134bb25e 591 lcd.DisplayStringAt(130, LINE(1)+10, (uint8_t *)&text, LEFT_MODE);
pierrebizouard 7:9276134bb25e 592 } else {
pierrebizouard 7:9276134bb25e 593 if (screen == 0) {
pierrebizouard 7:9276134bb25e 594 draw_regulation_screen(layer);
pierrebizouard 7:9276134bb25e 595 } else if (screen == 1) {
pierrebizouard 7:9276134bb25e 596 draw_version_screen(layer);
pierrebizouard 7:9276134bb25e 597 }
pierrebizouard 7:9276134bb25e 598 }
pierrebizouard 6:7812b342d945 599
pierrebizouard 7:9276134bb25e 600 #ifdef DEBUG
pierrebizouard 7:9276134bb25e 601 lcd.SelectLayer(layer);
pierrebizouard 7:9276134bb25e 602 lcd.SetBackColor(LCD_COLOR_BLUE);
pierrebizouard 7:9276134bb25e 603 lcd.SetTextColor(LCD_COLOR_WHITE);
pierrebizouard 7:9276134bb25e 604 BSP_LCD_SetFont(&UbuntuFont23);
pierrebizouard 7:9276134bb25e 605 sprintf((char*)text, "screen(%d)", screen);
pierrebizouard 7:9276134bb25e 606 lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
pierrebizouard 7:9276134bb25e 607 #endif
pierrebizouard 7:9276134bb25e 608 }
pierrebizouard 7:9276134bb25e 609
pierrebizouard 7:9276134bb25e 610
pierrebizouard 7:9276134bb25e 611 int main()
pierrebizouard 7:9276134bb25e 612 {
pierrebizouard 7:9276134bb25e 613 TS_StateTypeDef TS_State;
pierrebizouard 7:9276134bb25e 614 uint16_t x, y;
pierrebizouard 7:9276134bb25e 615 uint8_t ts_status;
pierrebizouard 7:9276134bb25e 616
pierrebizouard 7:9276134bb25e 617 load_temperature_storage();
pierrebizouard 7:9276134bb25e 618
pierrebizouard 7:9276134bb25e 619 /*initialize lcd*/
pierrebizouard 7:9276134bb25e 620 lcd.SelectLayer(2);
pierrebizouard 7:9276134bb25e 621 BSP_LCD_SetTransparency_NoReload(2, 255);
pierrebizouard 7:9276134bb25e 622 BSP_LCD_ResetColorKeying_NoReload(2);
pierrebizouard 7:9276134bb25e 623 lcd.Clear(LCD_COLOR_BLUE);
pierrebizouard 7:9276134bb25e 624 BSP_LCD_SetLayerVisible_NoReload(2, ENABLE);
pierrebizouard 7:9276134bb25e 625 LCD_Reload_Safe();
pierrebizouard 7:9276134bb25e 626 BSP_LCD_SetFont(&UbuntuFont23);
pierrebizouard 7:9276134bb25e 627
pierrebizouard 7:9276134bb25e 628 lcd.SelectLayer(1);
pierrebizouard 7:9276134bb25e 629 BSP_LCD_SetTransparency_NoReload(1, 255);
pierrebizouard 7:9276134bb25e 630 BSP_LCD_ResetColorKeying_NoReload(1);
pierrebizouard 7:9276134bb25e 631 lcd.Clear(LCD_COLOR_BLUE);
pierrebizouard 7:9276134bb25e 632 BSP_LCD_SetLayerVisible_NoReload(2, DISABLE);
pierrebizouard 7:9276134bb25e 633 BSP_LCD_SetLayerVisible_NoReload(1, ENABLE);
pierrebizouard 7:9276134bb25e 634 LCD_Reload_Safe();
pierrebizouard 7:9276134bb25e 635 lcd.SetTextColor(LCD_COLOR_BLUE);
pierrebizouard 7:9276134bb25e 636 BSP_LCD_SetFont(&UbuntuFont23);
pierrebizouard 7:9276134bb25e 637
pierrebizouard 7:9276134bb25e 638 lcd.SelectLayer(0);
pierrebizouard 7:9276134bb25e 639 BSP_LCD_SetTransparency_NoReload(0, 255);
pierrebizouard 7:9276134bb25e 640 BSP_LCD_ResetColorKeying_NoReload(0);
pierrebizouard 7:9276134bb25e 641 lcd.Clear(LCD_COLOR_BLUE);
pierrebizouard 7:9276134bb25e 642 BSP_LCD_SetLayerVisible_NoReload(1, DISABLE);
pierrebizouard 7:9276134bb25e 643 BSP_LCD_SetLayerVisible_NoReload(0, ENABLE);
pierrebizouard 7:9276134bb25e 644 LCD_Reload_Safe();
pierrebizouard 7:9276134bb25e 645 lcd.SetTextColor(LCD_COLOR_BLUE);
pierrebizouard 7:9276134bb25e 646 BSP_LCD_SetFont(&UbuntuFont23);
pierrebizouard 7:9276134bb25e 647
pierrebizouard 7:9276134bb25e 648 ts_status = ts.Init(lcd.GetXSize(), lcd.GetYSize());
pierrebizouard 7:9276134bb25e 649
pierrebizouard 7:9276134bb25e 650
pierrebizouard 7:9276134bb25e 651 int layer_startup = 0;
pierrebizouard 7:9276134bb25e 652 draw_startup_screen(layer_startup);
pierrebizouard 7:9276134bb25e 653 wait(0.01);
pierrebizouard 7:9276134bb25e 654
pierrebizouard 7:9276134bb25e 655 check_temperature_storage(); /*takes 1s */
pierrebizouard 7:9276134bb25e 656
pierrebizouard 7:9276134bb25e 657 //FADE
pierrebizouard 7:9276134bb25e 658 int fade_count = 30;
pierrebizouard 7:9276134bb25e 659 fade_screen(layer_startup, fade_count, LCD_COLOR_BLUE, DEFAULT_LAYER);
pierrebizouard 7:9276134bb25e 660 //FADE DONE
pierrebizouard 7:9276134bb25e 661
pierrebizouard 7:9276134bb25e 662 #define TOUCH_COUNT 512
pierrebizouard 7:9276134bb25e 663 int touch_history_x[TOUCH_COUNT];
pierrebizouard 7:9276134bb25e 664 int touch_history_y[TOUCH_COUNT];
pierrebizouard 7:9276134bb25e 665 int touch_history_count = 0;
pierrebizouard 7:9276134bb25e 666 bool touch_screen_idle = false;
pierrebizouard 7:9276134bb25e 667 int previous_x = -1;
pierrebizouard 7:9276134bb25e 668 int previous_y = -1;
pierrebizouard 7:9276134bb25e 669 int swipe_pos_x_start = -1;
pierrebizouard 7:9276134bb25e 670
pierrebizouard 7:9276134bb25e 671 int swipe_dir = 0;
pierrebizouard 7:9276134bb25e 672 bool start_swipe = false;
pierrebizouard 7:9276134bb25e 673 int swipe_pos = 0;
pierrebizouard 7:9276134bb25e 674 int selected_screen = 0;
pierrebizouard 7:9276134bb25e 675
pierrebizouard 7:9276134bb25e 676 enable_curve_overlay(DEFAULT_LAYER+1, false);
pierrebizouard 7:9276134bb25e 677 draw_screens(selected_screen, DEFAULT_LAYER);
pierrebizouard 6:7812b342d945 678
pierrebizouard 6:7812b342d945 679 int accel = 1;
pierrebizouard 6:7812b342d945 680 Timer t;
pierrebizouard 6:7812b342d945 681 t.start();
pierrebizouard 7:9276134bb25e 682 Timer idle_time;
pierrebizouard 7:9276134bb25e 683 t.start();
pierrebizouard 7:9276134bb25e 684
pierrebizouard 7:9276134bb25e 685 while (ts_status != TS_OK) {
pierrebizouard 7:9276134bb25e 686 lcd.SelectLayer(DEFAULT_LAYER);
pierrebizouard 7:9276134bb25e 687 lcd.SetTextColor(LCD_COLOR_RED);
pierrebizouard 7:9276134bb25e 688 lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"TOUCH INIT FAIL", LEFT_MODE); /*center mode is broken in landscape for fixing right mode*/
pierrebizouard 7:9276134bb25e 689 lcd.SetTextColor(LCD_COLOR_WHITE);
pierrebizouard 7:9276134bb25e 690 }
pierrebizouard 7:9276134bb25e 691
pierrebizouard 7:9276134bb25e 692 int dest_loc = 0;
pierrebizouard 7:9276134bb25e 693 int swipe_layer = 1;
pierrebizouard 7:9276134bb25e 694 uint32_t swipe_layer_address = LCD_FRAME_BUFFER+(lcd.GetXSize()*lcd.GetYSize()*4)*swipe_layer;
pierrebizouard 7:9276134bb25e 695 int destination_screen = 0 ;
pierrebizouard 6:7812b342d945 696
pierrebizouard 7:9276134bb25e 697 /*
pierrebizouard 7:9276134bb25e 698 int source_layer = 0;
pierrebizouard 7:9276134bb25e 699 int dest_layer = 0;
pierrebizouard 7:9276134bb25e 700 int backup_layer = 0;
pierrebizouard 7:9276134bb25e 701 int backup_loc = 0;
pierrebizouard 7:9276134bb25e 702 */
pierrebizouard 7:9276134bb25e 703 int curve_update = 0;
bcostm 0:91c6ab790bd7 704 while(1)
bcostm 0:91c6ab790bd7 705 {
pierrebizouard 6:7812b342d945 706 ts.GetState(&TS_State);
pierrebizouard 6:7812b342d945 707 //#ifdef TOUCHSCREEN_DEMO
pierrebizouard 7:9276134bb25e 708 if ((TS_State.TouchDetected) && (start_swipe == false))
bcostm 0:91c6ab790bd7 709 {
pierrebizouard 7:9276134bb25e 710 idle_time.reset();
pierrebizouard 7:9276134bb25e 711
bcostm 0:91c6ab790bd7 712 x = TS_State.X;
bcostm 0:91c6ab790bd7 713 y = TS_State.Y;
pierrebizouard 6:7812b342d945 714
pierrebizouard 6:7812b342d945 715 int portrait_x = lcd.GetYSize()-y;
pierrebizouard 6:7812b342d945 716 int portrait_y = x;
pierrebizouard 6:7812b342d945 717
pierrebizouard 6:7812b342d945 718 x = portrait_x;
pierrebizouard 6:7812b342d945 719 y = portrait_y;
pierrebizouard 6:7812b342d945 720
pierrebizouard 7:9276134bb25e 721
pierrebizouard 6:7812b342d945 722
pierrebizouard 6:7812b342d945 723 //sprintf((char*)text, "%d %d %d", minus_dist, plus_dist, radius*radius);
pierrebizouard 6:7812b342d945 724 //lcd.DisplayStringAt(0, LINE(6), (uint8_t *)&text, LEFT_MODE);
pierrebizouard 6:7812b342d945 725
pierrebizouard 7:9276134bb25e 726 if (touch_screen_idle) {
pierrebizouard 7:9276134bb25e 727 touch_screen_idle = false;
pierrebizouard 7:9276134bb25e 728 previous_y = -1;
pierrebizouard 7:9276134bb25e 729 previous_x = -1;
pierrebizouard 7:9276134bb25e 730 }
pierrebizouard 6:7812b342d945 731
pierrebizouard 7:9276134bb25e 732 bool button_pressed = false;
pierrebizouard 7:9276134bb25e 733
pierrebizouard 7:9276134bb25e 734 /* handle buttons */
pierrebizouard 7:9276134bb25e 735 if (selected_screen == 0) /* screen has buttons (regulation screen) */ {
pierrebizouard 7:9276134bb25e 736 int minus_dist = (x-minus_x)*(x-minus_x) + (y-minus_y)*(y-minus_y);
pierrebizouard 7:9276134bb25e 737 int plus_dist = (x-plus_x)*(x-plus_x) + (y-plus_y)*(y-plus_y);
pierrebizouard 7:9276134bb25e 738
pierrebizouard 7:9276134bb25e 739 if (minus_dist <= radius*radius) {
pierrebizouard 7:9276134bb25e 740 button_pressed = true;
pierrebizouard 7:9276134bb25e 741 lcd.SetTextColor(LCD_COLOR_RED);
pierrebizouard 7:9276134bb25e 742 lcd.DrawCircle(minus_x, minus_y, radius);
pierrebizouard 7:9276134bb25e 743 temperature_setpoint = temperature_setpoint - 0.1;
pierrebizouard 7:9276134bb25e 744 sprintf((char*)text, temp_formatting, temperature_setpoint);
pierrebizouard 7:9276134bb25e 745 lcd.DisplayStringAt(TEMP_DISP_X, TEMP_SET_DISP, (uint8_t *)&text, LEFT_MODE);
pierrebizouard 6:7812b342d945 746 write_temperature_setpoint(temperature_setpoint);
pierrebizouard 6:7812b342d945 747 wait(0.1/max(accel/10,1));
pierrebizouard 6:7812b342d945 748 lcd.SetTextColor(LCD_COLOR_WHITE);
pierrebizouard 7:9276134bb25e 749 lcd.DrawCircle(minus_x, minus_y, radius);
pierrebizouard 7:9276134bb25e 750 if (accel < 1000)
pierrebizouard 7:9276134bb25e 751 {
pierrebizouard 7:9276134bb25e 752 accel += 1;
pierrebizouard 7:9276134bb25e 753 }
pierrebizouard 6:7812b342d945 754 } else {
pierrebizouard 7:9276134bb25e 755 if (plus_dist <= radius*radius) {
pierrebizouard 7:9276134bb25e 756 button_pressed = true;
pierrebizouard 7:9276134bb25e 757 lcd.SetTextColor(LCD_COLOR_GREEN);
pierrebizouard 7:9276134bb25e 758 lcd.DrawCircle(plus_x, plus_y, radius);
pierrebizouard 7:9276134bb25e 759 temperature_setpoint = temperature_setpoint + 0.1;
pierrebizouard 7:9276134bb25e 760 sprintf((char*)text, temp_formatting, temperature_setpoint);
pierrebizouard 7:9276134bb25e 761 lcd.DisplayStringAt(TEMP_DISP_X, TEMP_SET_DISP, (uint8_t *)&text, LEFT_MODE);
pierrebizouard 7:9276134bb25e 762 write_temperature_setpoint(temperature_setpoint);
pierrebizouard 7:9276134bb25e 763 wait(0.1/max(accel/10,1));
pierrebizouard 7:9276134bb25e 764 lcd.SetTextColor(LCD_COLOR_WHITE);
pierrebizouard 7:9276134bb25e 765 lcd.DrawCircle(plus_x, plus_y, radius);
pierrebizouard 7:9276134bb25e 766 if (accel < 1000)
pierrebizouard 7:9276134bb25e 767 {
pierrebizouard 7:9276134bb25e 768 accel += 1;
pierrebizouard 7:9276134bb25e 769 }
pierrebizouard 7:9276134bb25e 770 }
pierrebizouard 6:7812b342d945 771 }
pierrebizouard 6:7812b342d945 772 }
pierrebizouard 7:9276134bb25e 773
pierrebizouard 7:9276134bb25e 774 /* handle swipe */
pierrebizouard 7:9276134bb25e 775 if (not button_pressed) {
pierrebizouard 7:9276134bb25e 776 accel = 0;
pierrebizouard 7:9276134bb25e 777 if (start_swipe == false)
pierrebizouard 7:9276134bb25e 778 {
pierrebizouard 7:9276134bb25e 779 if (swipe_pos_x_start == -1)
pierrebizouard 7:9276134bb25e 780 {
pierrebizouard 7:9276134bb25e 781 swipe_pos_x_start = x;
pierrebizouard 7:9276134bb25e 782 } else {
pierrebizouard 7:9276134bb25e 783 if (abs(x - swipe_pos_x_start) > 15) {
pierrebizouard 7:9276134bb25e 784 start_swipe = true;
pierrebizouard 7:9276134bb25e 785 if ((x-swipe_pos_x_start) < 0)
pierrebizouard 7:9276134bb25e 786 {
pierrebizouard 7:9276134bb25e 787 swipe_dir = +1;
pierrebizouard 7:9276134bb25e 788 } else {
pierrebizouard 7:9276134bb25e 789 swipe_dir = -1;
pierrebizouard 7:9276134bb25e 790 }
pierrebizouard 7:9276134bb25e 791 }
pierrebizouard 7:9276134bb25e 792 }
pierrebizouard 7:9276134bb25e 793 } else {
pierrebizouard 7:9276134bb25e 794 /*swipe started do nothing*/
pierrebizouard 7:9276134bb25e 795 }
pierrebizouard 7:9276134bb25e 796 //sprintf((char*)text, "x=%d, px=%d y=%d ", x, swipe_pos_x_start, touch_screen_idle);
pierrebizouard 7:9276134bb25e 797 //lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
pierrebizouard 7:9276134bb25e 798 }
pierrebizouard 7:9276134bb25e 799
pierrebizouard 7:9276134bb25e 800
pierrebizouard 7:9276134bb25e 801 previous_x = x;
pierrebizouard 7:9276134bb25e 802 previous_y = y;
pierrebizouard 6:7812b342d945 803
pierrebizouard 6:7812b342d945 804 #ifdef TOUCH_TEST
pierrebizouard 5:b69870b843f3 805 swo.puts((char*)text);
pierrebizouard 5:b69870b843f3 806 ser.puts((char*)text);
pierrebizouard 6:7812b342d945 807 for (int l=0; l<10; l++) {
pierrebizouard 6:7812b342d945 808 sprintf((char*)text, "l=%d, x=%d y=%d ", l, x, y);
pierrebizouard 6:7812b342d945 809 lcd.DisplayStringAt(0, LINE(l), (uint8_t *)&text, LEFT_MODE);
pierrebizouard 6:7812b342d945 810 }
pierrebizouard 6:7812b342d945 811 #endif
pierrebizouard 6:7812b342d945 812 } else {
pierrebizouard 7:9276134bb25e 813 //no touch
pierrebizouard 7:9276134bb25e 814 if (not touch_screen_idle)
pierrebizouard 7:9276134bb25e 815 {
pierrebizouard 7:9276134bb25e 816 idle_time.start();
pierrebizouard 7:9276134bb25e 817 }
pierrebizouard 7:9276134bb25e 818 if (idle_time.read_ms() >= 100)
pierrebizouard 7:9276134bb25e 819 {
pierrebizouard 7:9276134bb25e 820 touch_history_count = 0;
pierrebizouard 7:9276134bb25e 821 //sprintf((char*)text, "px=%d i=%d ", swipe_pos_x_start, touch_screen_idle);
pierrebizouard 7:9276134bb25e 822 //lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
pierrebizouard 7:9276134bb25e 823
pierrebizouard 7:9276134bb25e 824 if (not touch_screen_idle) {
pierrebizouard 7:9276134bb25e 825 touch_screen_idle = true;
pierrebizouard 7:9276134bb25e 826 swipe_pos_x_start = -1;
pierrebizouard 7:9276134bb25e 827 }
pierrebizouard 7:9276134bb25e 828
pierrebizouard 7:9276134bb25e 829 } else {
pierrebizouard 7:9276134bb25e 830
pierrebizouard 7:9276134bb25e 831 }
pierrebizouard 6:7812b342d945 832 accel = 0;
bcostm 0:91c6ab790bd7 833 }
pierrebizouard 6:7812b342d945 834
pierrebizouard 10:1e21661f4e04 835 if (start_swipe && (((selected_screen == 1) && (swipe_dir == +1)) || ((selected_screen == -2) && (swipe_dir == -1))))
pierrebizouard 7:9276134bb25e 836 {
pierrebizouard 7:9276134bb25e 837 start_swipe = false;
pierrebizouard 7:9276134bb25e 838 }
pierrebizouard 7:9276134bb25e 839
pierrebizouard 7:9276134bb25e 840 if (start_swipe == true)
pierrebizouard 7:9276134bb25e 841 {
pierrebizouard 7:9276134bb25e 842
pierrebizouard 7:9276134bb25e 843 if (swipe_pos >= lcd.GetYSize())
pierrebizouard 7:9276134bb25e 844 {
pierrebizouard 7:9276134bb25e 845 start_swipe = false;
pierrebizouard 7:9276134bb25e 846
pierrebizouard 7:9276134bb25e 847 wait(1./LCD_REFRESH_RATE);
pierrebizouard 7:9276134bb25e 848
pierrebizouard 7:9276134bb25e 849 // swipe occurs to
pierrebizouard 7:9276134bb25e 850
pierrebizouard 7:9276134bb25e 851 // swipe to 0. changes the pointer
pierrebizouard 7:9276134bb25e 852 BSP_LCD_SetLayerAddress_NoReload(swipe_layer, swipe_layer_address);
pierrebizouard 7:9276134bb25e 853
pierrebizouard 7:9276134bb25e 854 //copy current displayed layer to 0
pierrebizouard 7:9276134bb25e 855 if (dest_loc != DEFAULT_LAYER) {
pierrebizouard 7:9276134bb25e 856 BSP_LCD_CopyLayer(dest_loc, DEFAULT_LAYER, 0); //overwrite layer 0 with data displayed
pierrebizouard 7:9276134bb25e 857 }
pierrebizouard 7:9276134bb25e 858
pierrebizouard 7:9276134bb25e 859 if (DEFAULT_LAYER != swipe_layer) {
pierrebizouard 7:9276134bb25e 860 if (swipe_layer == DEFAULT_LAYER+1)
pierrebizouard 7:9276134bb25e 861 {
pierrebizouard 7:9276134bb25e 862 if (destination_screen < 0) /* destination screen has overlay */
pierrebizouard 7:9276134bb25e 863 {
pierrebizouard 7:9276134bb25e 864 /* clear the swipe layer for overlay */
pierrebizouard 7:9276134bb25e 865 /* 0 != 1 */
pierrebizouard 7:9276134bb25e 866 /* this means it goes DOWN */
pierrebizouard 7:9276134bb25e 867 /* swipe layer is 1 */
pierrebizouard 7:9276134bb25e 868 /* swipe layer is pointing to dest_loc */
pierrebizouard 7:9276134bb25e 869 /* dest_loc is copied to layer 0 */
pierrebizouard 7:9276134bb25e 870
pierrebizouard 7:9276134bb25e 871 /* clear_curve_overlay(swipe_layer); this flickers because layer is allready visible */
pierrebizouard 7:9276134bb25e 872 BSP_LCD_SetLayerVisible_NoReload(swipe_layer, ENABLE);
pierrebizouard 7:9276134bb25e 873 curve_update = 0;
pierrebizouard 7:9276134bb25e 874 } else {
pierrebizouard 7:9276134bb25e 875 BSP_LCD_SetLayerVisible_NoReload(swipe_layer, DISABLE);
pierrebizouard 7:9276134bb25e 876 }
pierrebizouard 7:9276134bb25e 877 } else {
pierrebizouard 7:9276134bb25e 878 BSP_LCD_SetLayerVisible_NoReload(swipe_layer, DISABLE);
pierrebizouard 7:9276134bb25e 879 }
pierrebizouard 7:9276134bb25e 880 lcd.SelectLayer(DEFAULT_LAYER);
pierrebizouard 7:9276134bb25e 881 BSP_LCD_SetLayerVisible_NoReload(DEFAULT_LAYER, ENABLE);
pierrebizouard 7:9276134bb25e 882 } else {
pierrebizouard 7:9276134bb25e 883 /* it swipes UP */
pierrebizouard 7:9276134bb25e 884 /* there is a not displayed overlay clear it before */
pierrebizouard 7:9276134bb25e 885 if (destination_screen < 0) /* destination screen has overlay */
pierrebizouard 7:9276134bb25e 886 {
pierrebizouard 7:9276134bb25e 887 /* clear the swipe layer for overlay */
pierrebizouard 7:9276134bb25e 888 /* clear_curve_overlay(DEFAULT_LAYER+1); */
pierrebizouard 7:9276134bb25e 889 BSP_LCD_SetLayerVisible_NoReload(DEFAULT_LAYER+1, ENABLE);
pierrebizouard 7:9276134bb25e 890 /* go from 1 to 0*/
pierrebizouard 7:9276134bb25e 891
pierrebizouard 7:9276134bb25e 892 curve_update = 0;
pierrebizouard 7:9276134bb25e 893 } else {
pierrebizouard 7:9276134bb25e 894 /* should allready be disabled */
pierrebizouard 7:9276134bb25e 895 BSP_LCD_SetLayerVisible_NoReload(DEFAULT_LAYER+1, DISABLE);
pierrebizouard 7:9276134bb25e 896 }
pierrebizouard 7:9276134bb25e 897 }
pierrebizouard 7:9276134bb25e 898 lcd.SelectLayer(DEFAULT_LAYER);
pierrebizouard 7:9276134bb25e 899 wait(1./LCD_REFRESH_RATE);
pierrebizouard 7:9276134bb25e 900 LCD_Reload_Safe();
pierrebizouard 7:9276134bb25e 901
pierrebizouard 7:9276134bb25e 902 //BSP_LCD_Reload(LTDC_RELOAD_IMMEDIATE);
pierrebizouard 7:9276134bb25e 903 selected_screen = destination_screen;
pierrebizouard 7:9276134bb25e 904
pierrebizouard 7:9276134bb25e 905 swipe_pos = 0;
pierrebizouard 7:9276134bb25e 906 swipe_dir = 0;
pierrebizouard 7:9276134bb25e 907 } else {
pierrebizouard 7:9276134bb25e 908 if (swipe_pos == 0) {
pierrebizouard 7:9276134bb25e 909 /* start swipe */
pierrebizouard 7:9276134bb25e 910
pierrebizouard 7:9276134bb25e 911 wait(0.1);
pierrebizouard 7:9276134bb25e 912
pierrebizouard 7:9276134bb25e 913 /* if (selected_screen < 0)
pierrebizouard 7:9276134bb25e 914 {
pierrebizouard 7:9276134bb25e 915 // this would flicker
pierrebizouard 7:9276134bb25e 916 clear_curve_overlay(DEFAULT_LAYER+1); //hide the curve displayed
pierrebizouard 7:9276134bb25e 917 lcd.SelectLayer(DEFAULT_LAYER);
pierrebizouard 7:9276134bb25e 918
pierrebizouard 7:9276134bb25e 919 }
pierrebizouard 7:9276134bb25e 920 */
pierrebizouard 7:9276134bb25e 921
pierrebizouard 7:9276134bb25e 922 dest_loc = 1-swipe_dir;
pierrebizouard 7:9276134bb25e 923 if (dest_loc == 0)
pierrebizouard 7:9276134bb25e 924 {
pierrebizouard 7:9276134bb25e 925 swipe_layer = 1;
pierrebizouard 7:9276134bb25e 926 } else {
pierrebizouard 7:9276134bb25e 927 if (dest_loc == 2)
pierrebizouard 7:9276134bb25e 928 {
pierrebizouard 7:9276134bb25e 929 swipe_layer = 0;
pierrebizouard 7:9276134bb25e 930 dest_loc = 1;
pierrebizouard 7:9276134bb25e 931 } else {
pierrebizouard 7:9276134bb25e 932 start_swipe = false;
pierrebizouard 7:9276134bb25e 933 swipe_pos = 0;
pierrebizouard 7:9276134bb25e 934 swipe_dir = 0;
pierrebizouard 7:9276134bb25e 935 }
pierrebizouard 7:9276134bb25e 936 }
pierrebizouard 7:9276134bb25e 937
pierrebizouard 7:9276134bb25e 938 swipe_layer_address = LCD_FRAME_BUFFER+(lcd.GetXSize()*lcd.GetYSize()*4)*swipe_layer;
pierrebizouard 7:9276134bb25e 939
pierrebizouard 7:9276134bb25e 940 if (swipe_layer == DEFAULT_LAYER) {
pierrebizouard 7:9276134bb25e 941 if (selected_screen < 0) /* selected screen has overlay */ {
pierrebizouard 7:9276134bb25e 942 /* hides overlay */
pierrebizouard 7:9276134bb25e 943 BSP_LCD_SetLayerVisible_NoReload(DEFAULT_LAYER+1, DISABLE);
pierrebizouard 7:9276134bb25e 944 /* update destination display */
pierrebizouard 7:9276134bb25e 945 update_temperature_read_curve(DEFAULT_LAYER, selected_screen, false, true);
pierrebizouard 7:9276134bb25e 946 wait(1./LCD_REFRESH_RATE);
pierrebizouard 7:9276134bb25e 947 /* hides overlay */
pierrebizouard 7:9276134bb25e 948 } else {
pierrebizouard 7:9276134bb25e 949 /* no overlay do nothing */
pierrebizouard 7:9276134bb25e 950 }
pierrebizouard 7:9276134bb25e 951 } else {
pierrebizouard 7:9276134bb25e 952 /* copy visible layer to swipe layer */
pierrebizouard 7:9276134bb25e 953 BSP_LCD_CopyLayer(DEFAULT_LAYER, swipe_layer, 0); //reload backup of layer 0 or save it
pierrebizouard 7:9276134bb25e 954 if (selected_screen < 0) /* selected screen has overlay */ {
pierrebizouard 7:9276134bb25e 955 update_temperature_read_curve(swipe_layer, selected_screen, false, true);
pierrebizouard 7:9276134bb25e 956 }
pierrebizouard 7:9276134bb25e 957 BSP_LCD_SetLayerVisible_NoReload(DEFAULT_LAYER, DISABLE);
pierrebizouard 7:9276134bb25e 958 BSP_LCD_SetLayerVisible_NoReload(swipe_layer, ENABLE);
pierrebizouard 7:9276134bb25e 959 wait(1./LCD_REFRESH_RATE);
pierrebizouard 7:9276134bb25e 960 }
pierrebizouard 7:9276134bb25e 961 LCD_Reload_Safe();
pierrebizouard 7:9276134bb25e 962
pierrebizouard 7:9276134bb25e 963 destination_screen = selected_screen + swipe_dir;
pierrebizouard 7:9276134bb25e 964 //prepare destination screen (destination screen will be 2)
pierrebizouard 7:9276134bb25e 965 //cannot be overwriten by previous command
pierrebizouard 7:9276134bb25e 966
pierrebizouard 7:9276134bb25e 967 draw_screens(destination_screen, dest_loc);
pierrebizouard 7:9276134bb25e 968 /*
pierrebizouard 7:9276134bb25e 969 lcd.SelectLayer(swipe_layer);
pierrebizouard 7:9276134bb25e 970 sprintf((char*)text, "screen(%d)", selected_screen);
pierrebizouard 7:9276134bb25e 971 lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
pierrebizouard 7:9276134bb25e 972 */
pierrebizouard 7:9276134bb25e 973 } else {
pierrebizouard 7:9276134bb25e 974 BSP_LCD_SetLayerAddress(swipe_layer, swipe_layer_address-swipe_dir*lcd.GetXSize()*4*swipe_pos);
pierrebizouard 7:9276134bb25e 975 }
pierrebizouard 7:9276134bb25e 976
pierrebizouard 7:9276134bb25e 977 wait(0.);
pierrebizouard 7:9276134bb25e 978 swipe_pos++;
pierrebizouard 7:9276134bb25e 979 }
pierrebizouard 7:9276134bb25e 980
pierrebizouard 7:9276134bb25e 981 }
pierrebizouard 7:9276134bb25e 982
pierrebizouard 7:9276134bb25e 983 if (t.read_ms() >= DELAY_ACQ and (not start_swipe)) {
pierrebizouard 7:9276134bb25e 984 //read temperature
pierrebizouard 7:9276134bb25e 985 last_read_temperature = read_temperature();
pierrebizouard 7:9276134bb25e 986
pierrebizouard 7:9276134bb25e 987 /* slow buffer */
pierrebizouard 7:9276134bb25e 988 slow_temp_acc = slow_temp_acc + last_read_temperature;
pierrebizouard 7:9276134bb25e 989 if (accumulated_slow_temp == TEMPERATURE_SLOW_ACCUMULATE-1)
pierrebizouard 7:9276134bb25e 990 {
pierrebizouard 7:9276134bb25e 991 temperature_curve_slow[temperature_curve_slow_index]= slow_temp_acc/TEMPERATURE_SLOW_ACCUMULATE;
pierrebizouard 7:9276134bb25e 992 slow_temp_acc = 0.;
pierrebizouard 7:9276134bb25e 993 accumulated_slow_temp = 0;
pierrebizouard 7:9276134bb25e 994 if (temperature_curve_slow_count < MAX_TP_POINTS)
pierrebizouard 7:9276134bb25e 995 {
pierrebizouard 7:9276134bb25e 996 temperature_curve_slow_count++;
pierrebizouard 7:9276134bb25e 997 }
pierrebizouard 7:9276134bb25e 998 temperature_curve_slow_index = (temperature_curve_slow_index+1)%MAX_TP_POINTS;
pierrebizouard 7:9276134bb25e 999 } else {
pierrebizouard 7:9276134bb25e 1000 accumulated_slow_temp++;
pierrebizouard 7:9276134bb25e 1001 }
pierrebizouard 7:9276134bb25e 1002
pierrebizouard 7:9276134bb25e 1003 temperature_curve_fast[temperature_curve_fast_index] = last_read_temperature;
pierrebizouard 7:9276134bb25e 1004 if (temperature_curve_fast_count < MAX_TP_POINTS)
pierrebizouard 7:9276134bb25e 1005 {
pierrebizouard 7:9276134bb25e 1006 temperature_curve_fast_count++;
pierrebizouard 7:9276134bb25e 1007 }
pierrebizouard 7:9276134bb25e 1008 temperature_curve_fast_index = (temperature_curve_fast_index+1)%MAX_TP_POINTS;
pierrebizouard 7:9276134bb25e 1009
pierrebizouard 7:9276134bb25e 1010 if (selected_screen < 0)
pierrebizouard 7:9276134bb25e 1011 {
pierrebizouard 7:9276134bb25e 1012 /* diminish flicker */
pierrebizouard 7:9276134bb25e 1013 bool updated = update_temperature_read_curve(DEFAULT_LAYER+2, selected_screen, true, false);
pierrebizouard 7:9276134bb25e 1014 if (updated)
pierrebizouard 7:9276134bb25e 1015 {
pierrebizouard 7:9276134bb25e 1016 BSP_LCD_CopyLayer(DEFAULT_LAYER+2, DEFAULT_LAYER+1, 0);
pierrebizouard 7:9276134bb25e 1017 //LCD_Reload_Safe();
pierrebizouard 7:9276134bb25e 1018 BSP_LCD_Reload(LTDC_RELOAD_IMMEDIATE);
pierrebizouard 7:9276134bb25e 1019
pierrebizouard 7:9276134bb25e 1020 } else {
pierrebizouard 7:9276134bb25e 1021 lcd.SelectLayer(DEFAULT_LAYER);
pierrebizouard 7:9276134bb25e 1022 }
pierrebizouard 7:9276134bb25e 1023 curve_update = (curve_update+1)%2;
pierrebizouard 7:9276134bb25e 1024 } else {
pierrebizouard 7:9276134bb25e 1025 if (selected_screen == 0) {
pierrebizouard 7:9276134bb25e 1026 update_temperature_read_text();
pierrebizouard 7:9276134bb25e 1027 }
pierrebizouard 7:9276134bb25e 1028 }
pierrebizouard 7:9276134bb25e 1029 save_temperature_storage();
pierrebizouard 7:9276134bb25e 1030
pierrebizouard 7:9276134bb25e 1031
pierrebizouard 7:9276134bb25e 1032 #ifdef DEBUG
pierrebizouard 7:9276134bb25e 1033 reader.open(sector_index);
pierrebizouard 7:9276134bb25e 1034 sprintf((char*)text, "SOF(%d.%p)", reader.get_data_size(), reader.get_physical_data_addr());
pierrebizouard 7:9276134bb25e 1035 lcd.DisplayStringAt(0, LINE(TEMP_SET_LINE+6), (uint8_t *)&text, LEFT_MODE);
pierrebizouard 7:9276134bb25e 1036 reader.close();
pierrebizouard 7:9276134bb25e 1037 #endif
pierrebizouard 7:9276134bb25e 1038
pierrebizouard 6:7812b342d945 1039 t.reset();
pierrebizouard 7:9276134bb25e 1040
pierrebizouard 6:7812b342d945 1041 }
pierrebizouard 6:7812b342d945 1042 //#endif
pierrebizouard 6:7812b342d945 1043
pierrebizouard 6:7812b342d945 1044
bcostm 0:91c6ab790bd7 1045 }
bcostm 0:91c6ab790bd7 1046 }