embedded_systems
Loading...
Searching...
No Matches
display.c
Go to the documentation of this file.
1
14//Library Include
15#include <stdio.h>
16#include <stdint.h>
17#include <string.h>
18
19//User Include
20#include "display.h"
21#include "main.h"
22#include "tcp.h"
23#include "TCP_HA.h"
24#include "lwip.h"
25
26#include "../../Drivers/BSP/STM32F7508-Discovery/stm32f7508_discovery.h"
27#include "../../Drivers/BSP/STM32F7508-Discovery/stm32f7508_discovery_lcd.h"
28#include "../../Drivers/BSP/STM32F7508-Discovery/stm32f7508_discovery_ts.h"
29#include "configEntitysHA.h"
30
31#include "ui_v1_data.h"
32#include "madByMB_v1_data.h"
33
34//Defines
35
37#define enable_vBgReleased 0
38
40#define screenWidth 480
42#define screenHeight 272
43
45#define bgRecH 136
47#define bgRecW 160
48
49//ARGB(8-8-8-8) ((uint32_t)0xFF808080)
51#define greyColorStartUp ((uint32_t)0xff161616)
52
54#define SCREENSAVER_DELAY 30000
55
56extern uint8_t globalReceive;
57extern LTDC_HandleTypeDef hltdc;
58
59
60//functie declaraties
61static void vDisplayBgPressed(uint16_t, uint16_t);
62static void vBgButton(uint16_t, uint16_t, uint32_t);
63static void prvDisplayPrintText(char []);
64#if enable_vBgReleased
65static void vBgReleased(void);
66#endif
67
68
74//This function will check if the screensaver needs to be on or not.
75//It will disable the screen if no fingers are detected after SCREENSAVER_DELAY
77 static uint32_t ScreensaverStart = SCREENSAVER_DELAY+100;
78 static uint8_t screensaver_status = 0;
79 if(ScreensaverStart < HAL_GetTick() && screensaver_status == 0){
80 //Screen saver on -> display Off
81 HAL_GPIO_WritePin(LCD_DISP_GPIO_PORT, LCD_DISP_PIN, GPIO_PIN_RESET);
82 HAL_GPIO_WritePin(LCD_BL_CTRL_GPIO_PORT, LCD_BL_CTRL_PIN, GPIO_PIN_RESET);
83 screensaver_status = 1;
84 printf("Screensaver: on\n");
85 }
86 TS_StateTypeDef TS_State;
87 BSP_TS_GetState(&TS_State);
88 if(TS_State.touchDetected > 0){
89 //new start value
90 ScreensaverStart = HAL_GetTick() + SCREENSAVER_DELAY;
91 if(screensaver_status == 1){
92 HAL_GPIO_WritePin(LCD_DISP_GPIO_PORT, LCD_DISP_PIN, GPIO_PIN_SET);
93 HAL_Delay(100);
94 HAL_GPIO_WritePin(LCD_BL_CTRL_GPIO_PORT, LCD_BL_CTRL_PIN, GPIO_PIN_SET);
95 screensaver_status = 0;
96 printf("Screensaver: off\n");
97 }
98 }
99}
100
101
108void vDisplayInit(void){
109 BSP_LCD_Init();
110 BSP_LCD_LayerDefaultInit(1, LCD_FB_START_ADDRESS);
111 BSP_LCD_LayerDefaultInit(0, LCD_FB_START_ADDRESS+(480*272*4));
112 /* Enable the LCD */
113 BSP_LCD_DisplayOn();
114 /* Select the LCD Background Layer */
115 BSP_LCD_SelectLayer(0);
116 /* Clear the Background Layer */
117 BSP_LCD_Clear(LCD_COLOR_WHITE);
118 BSP_LCD_SelectLayer(1);
119 /* Clear the foreground Layer */
120 BSP_LCD_Clear(LCD_COLOR_WHITE);
121
122 BSP_TS_Init(480,272);
124
125}
126
127
134 BSP_LCD_SelectLayer(1);
135 BSP_LCD_Clear(greyColorStartUp);
136 WDA_LCD_DrawBitmap(MADEBYMB_SMAL_DATA,(screenWidth-MADEBYMB_SMAL_DATA_X_PIXEL)/2,0,MADEBYMB_SMAL_DATA_X_PIXEL,MADEBYMB_SMAL_DATA_Y_PIXEL,MADEBYMB_SMAL_DATA_FORMAT);
137}
138
139
140
141
148 BSP_LCD_SelectLayer(1);
149 //BSP_LCD_Clear(LCD_COLOR_WHITE); //doet moeilijk na een error van de tcp, om de uit terug te schrijven
150 WDA_LCD_DrawBitmap(UI_V1_DATA, 0,0, UI_V1_DATA_X_PIXEL, UI_V1_DATA_Y_PIXEL, UI_V1_DATA_FORMAT);
151}
152
153
162void vDisplayMessage(char message[]){
163 BSP_LCD_SelectLayer(1);
164 BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
165 prvDisplayPrintText(message);
166}
167
168
176void vDisplayError(char message[]){
177 BSP_LCD_SelectLayer(1);
178 BSP_LCD_SetTextColor(LCD_COLOR_RED);
179 prvDisplayPrintText(message);
180}
181
182
190static void prvDisplayPrintText(char message[]){
191 BSP_LCD_SetBackColor(LCD_COLOR_TRANSPARENT);
192 BSP_LCD_SetFont(&Font12);
193 BSP_LCD_DisplayStringAt(10,screenHeight - 15 , (uint8_t*) message, LEFT_MODE );
194}
195
196
204 //lWip stack verhooght naar 6 om toch zo snel mogelijk al de states op te vragen met max 6 tcp_pcb
205
206 vDisplayMessage("setting up button state");
207 char *entityArray[6] = {
208 entity1,
209 entity2,
210 entity3,
211 entity4,
212 entity5,
213 entity6
214 };
215
216 for(uint8_t i = 1; i <= numberOfEntiys; i++){
217
218 errHaSend(entityArray[i-1],"",i);
219
220 while(globalReceive == 0){
221 MX_LWIP_Process();
222 //printf("Wait on recieve\n");
223 }
224 printf("Init states of button: %d\n",i);
225
226 //globalReceive = 0;
227 }
228}
229
230
240uint16_t usDisplayTouch(TS_StateTypeDef* TS_State ){
241 BSP_TS_GetState(TS_State);
242 if(TS_State->touchDetected >= 1 ){
243 //column1
244 if(TS_State->touchX[0] <= bgRecW){
245 if(TS_State->touchY[0] < bgRecH ){
247 return 1;
248 }
249 else{
251 return 4;
252 }
253 }
254 //column2
255 else if(TS_State->touchX[0] > bgRecW && TS_State->touchX[0] <= (bgRecW * 2)){
256 if(TS_State->touchY[0] < bgRecH ){
258 return 2;
259 }
260 else{
262 return 5;
263 }
264 }
265 //column3
266 else {
267 if(TS_State->touchY[0] < bgRecH ){
269 return 3;
270 }
271 else{
273 return 6;
274 }
275 }
276 }
277
278 return 0;
279}
280
281
291void vDisplayBgButtonState(uint8_t usButtonId, char cState[]){
292 uint32_t ulBgColor;
293
294 if(strcmp(cState,"on") == 0){
295 ulBgColor = LCD_COLOR_ORANGE;
296 }
297 else if(strcmp(cState,"off") == 0){
298 ulBgColor = LCD_COLOR_LIGHTGRAY;
299 }
300 else{
301 ulBgColor = LCD_COLOR_WHITE;
302 }
303
304
305 switch (usButtonId){
306 case 1:
307 vBgButton(0,0,ulBgColor);
308 break;
309 case 2:
310 vBgButton(0,1,ulBgColor);
311 break;
312 case 3:
313 vBgButton(0,2,ulBgColor);
314 break;
315 case 4:
316 vBgButton(1,0,ulBgColor);
317 break;
318 case 5:
319 vBgButton(1,1,ulBgColor);
320 break;
321 case 6:
322 vBgButton(1,2,ulBgColor);
323 break;
324 default:
325 printf("Error button doesn't exist, vDisplayBgButtonState");
326 break;
327 }
328
329}
330
331
344static void vDisplayBgPressed(uint16_t usPosY, uint16_t usPosX){
345 while(!(hltdc.Instance->CDSR & 1<<2)); //wachten op vsync
346 vBgButton(usPosY,usPosX,LCD_COLOR_GRAY);
347}
348
349
350
358//0,0 0,1 ....
359//1,0 1,1 ...
360//uint32_t
361static void vBgButton(uint16_t usPosY, uint16_t usPosX,uint32_t ulColor ){
362 while(!(hltdc.Instance->CDSR & 1<<2)); //wachten op vsync
363 BSP_LCD_SelectLayer(0);
364 BSP_LCD_SetTextColor(ulColor);
365 BSP_LCD_FillRect((usPosX * bgRecW) ,(usPosY * bgRecH),bgRecW,bgRecH);
366}
367
368//Code not used
369#if enable_vBgReleased
370static void vBgReleased(void){
371 BSP_LCD_SelectLayer(0);
372 BSP_LCD_Clear(LCD_COLOR_WHITE);
373}
374#endif
err_t errHaSend(char entity[], char action[], uint16_t usButton)
Stuur boodschap naar server.
Definition TCP_HA.c:389
void vDisplaycCheckScreensaver(void)
Schakelt het display uit na ingestelde tijd ( SCREENSAVER_DELAY)
Definition display.c:76
uint16_t usDisplayTouch(TS_StateTypeDef *TS_State)
Verwerkt de touch actie van de user.
Definition display.c:240
#define greyColorStartUp
Start up color.
Definition display.c:51
static void vDisplayBgPressed(uint16_t, uint16_t)
private Kleur van de achtergrond bij indrukken veranderen
Definition display.c:344
#define bgRecH
Background rectangle Height.
Definition display.c:45
void vDisplayError(char message[])
Display error op het scherm.
Definition display.c:176
static void vBgButton(uint16_t, uint16_t, uint32_t)
Verander de achtergrond van de button.
Definition display.c:361
#define screenWidth
Screen Width.
Definition display.c:40
void vDisplaySetUpButtonStates(void)
Vraagt de status op van iedere knop.
Definition display.c:203
uint8_t globalReceive
Globale variabele voor communicatie tussen twee aparte functies.
Definition main.c:67
#define screenHeight
Screen Height.
Definition display.c:42
void vDisplayMessage(char message[])
Display message op het scherm.
Definition display.c:162
LTDC_HandleTypeDef hltdc
Definition main.c:57
void vDisplayInit(void)
Init display.
Definition display.c:108
void vDisplayBgButtonState(uint8_t usButtonId, char cState[])
Verandert de achtergrond van de knop op basis van de status.
Definition display.c:291
#define SCREENSAVER_DELAY
ScreenSaver delay.
Definition display.c:54
void vDisplayStartUpScreen(void)
Start scherm weergeven.
Definition display.c:133
void vDisplayMainScreen(void)
Display het hoofd scherm met de UI.
Definition display.c:147
static void prvDisplayPrintText(char[])
private functie om de tekst te gaan afdrukken op het scherm
Definition display.c:190
#define bgRecW
Background rectangle Width.
Definition display.c:47