#ifndef GRAPHIK_H_INCLUDED
#define GRAPHIK_H_INCLUDED

// Special Libs

#include "defines.h"
#include "tm_stm32f4_ili9341.h"
#include "tm_stm32f4_delay.h"
#include "tm_stm32f4_rng.h"
#include "tm_stm32f4_rtc.h"
#include "tm_stm32f4_bmp180.h"
#include "tm_stm32f4_general.h"
#include "tm_stm32f4_disco.h"
#include "tm_stm32f4_gpio.h"

/* LCD settings */
#define ILI9341_WIDTH       240
#define ILI9341_HEIGHT      320

// Transformiert Koordinaten auf 0,0 bezogen auf linke, untere Ecke
#define TransX(x)           (x)
#define TransY(y)           (ILI9341_WIDTH - (y))

#define XPOS_MAX            320
#define YPOS_MAX            240

// Grafikdefinitionen fuer Geometrien von Objekten
#define GRID_XMAX           300
#define GRID_XOFFS          0                           // X 0/0-Position des Koordinatensystems
#define GRID_YOFFS          122                         // Y 0/0-Position des Koordinatensystems
#define GRID_HOEHE          (YPOS_MAX - GRID_YOFFS- 32) // Hoehe des Koordinatensystems [px]
#define GRID_LINES          8
#define GRID_BLOCK_ABSTAND  3                           // Abstand zwischen den Balken [px]
#define GRID_BLOCK_BREITE   ((GRID_XMAX - HISTORY_MAX_IDX * GRID_BLOCK_ABSTAND) / HISTORY_MAX_IDX)   // Breite eines Balkens
#define GRID_FACTOR         1.0                        // Hoehenfaktor für 3/4 Fuellung bei Maximalwert

// Defintionen für Temperatur Skala
#define TEMP_XSIZE          232                         // Laenge der Skala
#define TEMP_YSIZE          21                          // Breite der Skala
#define TEMP_X0             2                           // Linke abs. X Koordinate der Skala
#define TEMP_Y0             24                          // Linke abs. Y Koordinate der Skala
#define TEMP_X1             (TEMP_X0 + TEMP_XSIZE)      // Rechte abs. X Koordinate der Skala
#define TEMP_Y1             (TEMP_Y0 + TEMP_YSIZE)      // Rechte abs. Y Koordinate der Skala
#define MIN_TEMP            10.0                        // Kleinste Temperatur links
#define MAX_TEMP            35.0                        // Maximale Raumtemperatur
#define TEMP_COLOR          ILI9341_COLOR_BLUE

// Defintionen für Barometer Skala
#define PRES_XSIZE          232                         // Laenge der Skala
#define PRES_YSIZE          21                          // Breite der Skala
#define PRES_X0             2                           // Linke abs. X Koordinate der Skala
#define PRES_Y0             74                          // Linke abs. Y Koordinate der Skala
#define PRES_X1             (PRES_X0 + PRES_XSIZE)      // Rechte abs. X Koordinate der Skala
#define PRES_Y1             (PRES_Y0 + PRES_YSIZE)      // Rechte abs. Y Koordinate der Skala
#define PRES_COLOR          ILI9341_COLOR_MAGENTA
#define MIN_PRES            800                         // Absolute Grenzen im Flachland
#define MAX_PRES            1150
#define P_DELTA             5                           // Bei Skalenüberschreitung +-5 mbar addieren

// Andere Einstellungen

#define PRESSURE_AVG_ONLINE                           // Beschriftung auf der Mittelwertslinie
#define PRESSURE_DOT_ON_BAR                             // Punkt über aktuellem Wert
#define PRESSURE_DRAW_AVG
#define PRESSURE_24H_LINES
#define DISPLAY_CUTOFF_AT_NIGHT

// Arbeitswerte die im Batterie NV Ram liegen

// Prototypen
void gfx_Wettervorhersage();
void gfx_DrawTemperature();
void gfx_UpdateHistory();
void gfx_DrawPressure();
void gfx_DrawHistory();
void gfx_DrawDateTime();
void gfx_FreezeHistory();
void gfx_DrawTextInfo();
uint8_t gfx_DrawRegression();
void gfx_HochTiefDruckgebiet();

#endif /* GRAPHIK_H_INCLUDED */
