bakalarka/components/display/display.c

208 lines
5.7 KiB
C
Raw Normal View History

2020-04-05 10:27:20 +00:00
2020-03-29 02:08:36 +00:00
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_freertos_hooks.h"
#include "freertos/semphr.h"
#include "esp_system.h"
#include "driver/gpio.h"
/* Littlevgl specific */
#include "lvgl/lvgl.h"
#include "lvgl_driver.h"
2020-03-30 11:21:12 +00:00
#include "lv_conf.h"
#include "lvgl.h"
#include "display.h"
#include <stdio.h>
#include <string.h>
#include "esp_log.h"
#include "esp_console.h"
#include "argtable3/argtable3.h"
#include "freertos/FreeRTOS.h"
#include "freertos/event_groups.h"
#include "esp_wifi.h"
#include "esp_netif.h"
#include "esp_event.h"
#include "wifi.h"
2020-03-29 02:08:36 +00:00
2020-04-05 10:27:20 +00:00
/*objekty ktorych hodnoty sa mozu menit inymi funkciami*/
2020-03-30 11:21:12 +00:00
static lv_obj_t* win;
static lv_obj_t* table;
static lv_obj_t* label_bottom;
2020-04-05 10:27:20 +00:00
//ulozena instancia esp_netif objektu v tomto pripade potrebna kvoli zobrazeniu ip adresy na displej
extern esp_netif_t *sta_netif;
2020-03-29 02:08:36 +00:00
2020-03-31 16:12:53 +00:00
2020-03-29 02:08:36 +00:00
static void IRAM_ATTR lv_tick_task(void *arg);
2020-04-05 10:27:20 +00:00
//vytvorenie sablony zobrazenej na displeji
2020-03-30 11:21:12 +00:00
static lv_obj_t * status_create(void);
2020-04-05 10:27:20 +00:00
//doplnenie hodnot do tabulky
2020-03-30 11:21:12 +00:00
static void fill_the_table();
2020-03-31 16:12:53 +00:00
2020-03-30 11:21:12 +00:00
2020-03-29 02:08:36 +00:00
static void IRAM_ATTR lv_tick_task(void *arg) {
(void) arg;
lv_tick_inc(portTICK_RATE_MS);
}
//Creates a semaphore to handle concurrent call to lvgl stuff
//If you wish to call *any* lvgl function from other threads/tasks
//you should lock on the very same semaphore!
SemaphoreHandle_t xGuiSemaphore;
2020-03-30 11:21:12 +00:00
void guiTask(void* parameter) {
struct ca_status buff = *(struct ca_status*)parameter;
2020-03-29 02:08:36 +00:00
xGuiSemaphore = xSemaphoreCreateMutex();
lv_init();
lvgl_driver_init();
static lv_color_t buf1[DISP_BUF_SIZE];
static lv_color_t buf2[DISP_BUF_SIZE];
static lv_disp_buf_t disp_buf;
lv_disp_buf_init(&disp_buf, buf1, buf2, DISP_BUF_SIZE);
lv_disp_drv_t disp_drv;
lv_disp_drv_init(&disp_drv);
disp_drv.flush_cb = disp_driver_flush;
disp_drv.buffer = &disp_buf;
lv_disp_drv_register(&disp_drv);
2020-03-31 16:12:53 +00:00
2020-03-29 02:08:36 +00:00
const esp_timer_create_args_t periodic_timer_args = {
.callback = &lv_tick_task,
/* name is optional, but may help identify the timer when debugging */
.name = "periodic_gui"
};
esp_timer_handle_t periodic_timer;
ESP_ERROR_CHECK(esp_timer_create(&periodic_timer_args, &periodic_timer));
//On ESP32 it's better to create a periodic task instead of esp_register_freertos_tick_hook
ESP_ERROR_CHECK(esp_timer_start_periodic(periodic_timer, 10*1000)); //10ms (expressed as microseconds)
2020-03-31 16:12:53 +00:00
2020-03-30 11:21:12 +00:00
status_create();
2020-03-29 02:08:36 +00:00
while (1) {
2020-03-30 11:21:12 +00:00
vTaskDelay(10);
2020-03-29 02:08:36 +00:00
//Try to lock the semaphore, if success, call lvgl stuff
if (xSemaphoreTake(xGuiSemaphore, (TickType_t)10) == pdTRUE) {
lv_task_handler();
xSemaphoreGive(xGuiSemaphore);
2020-04-05 10:27:20 +00:00
//aktualizovanie hodnot v tabulke
2020-03-30 11:21:12 +00:00
fill_the_table(buff);
2020-03-29 02:08:36 +00:00
}
2020-03-30 11:21:12 +00:00
2020-03-29 02:08:36 +00:00
}
//A task should NEVER return
vTaskDelete(NULL);
}
2020-03-30 11:21:12 +00:00
lv_obj_t * status_create(void){
2020-03-31 16:12:53 +00:00
/*Priradenie objektu na hlavny displej
/ Nastavenie veľkosti objektu na cely displej
*/
2020-03-30 11:21:12 +00:00
static lv_style_t style_bg;
lv_style_copy(&style_bg,&lv_style_plain);
style_bg.body.main_color = lv_color_make(211,211,211);
win = lv_obj_create(lv_scr_act(),NULL);
lv_obj_set_size(win,LV_HOR_RES,LV_VER_RES);
lv_obj_set_style(win,&style_bg);
2020-03-31 16:12:53 +00:00
/*Priradenie objektov do hlavneho objektu*/
2020-03-30 11:21:12 +00:00
static lv_style_t title;
lv_style_copy(&title,&lv_style_transp);
title.text.color = LV_COLOR_BLACK;
lv_obj_t* label = lv_label_create(win,NULL);
lv_obj_set_style(label,&title);
lv_label_set_align(label,LV_LABEL_ALIGN_CENTER);
lv_label_set_text(label,"Certificate Authority on ESP32");
label_bottom = lv_label_create(win,NULL);
lv_obj_set_style(label_bottom,&title);
lv_label_set_align(label_bottom,LV_LABEL_ALIGN_CENTER);
lv_label_set_text(label_bottom,"Certificate Authority on ESP22222");
lv_obj_align(label_bottom, NULL, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
2020-03-31 16:12:53 +00:00
/*Vytvorenie tabulky a dosadenie hodnot*/
2020-03-30 11:21:12 +00:00
static lv_style_t style_cell1;
lv_style_copy(&style_cell1, &lv_style_plain);
style_cell1.body.border.width = 1;
style_cell1.body.border.color = LV_COLOR_BLACK;
style_cell1.body.main_color = LV_COLOR_SILVER;
style_cell1.body.grad_color = LV_COLOR_SILVER;
table = lv_table_create(win,NULL);
lv_table_set_style(table,LV_TABLE_STYLE_CELL1,&style_cell1);
lv_table_set_row_cnt(table,4);
lv_table_set_col_cnt(table,2);
lv_obj_align(table, NULL, LV_ALIGN_IN_LEFT_MID, 0, 0);
lv_table_set_col_width(table,0,(LV_HOR_RES-5)/2);
lv_table_set_col_width(table,1,(LV_HOR_RES-15)/2);
lv_table_set_cell_value(table,0,0,"WIFI");
lv_table_set_cell_value(table,1,0,"Webserver");
lv_table_set_cell_value(table,2,0,"Certificates");
lv_table_set_cell_value(table,3,0,"Initialized");
return win;
}
2020-03-31 16:12:53 +00:00
/*Funkcia pre aktualizovanie hodnot v tabulke*/
/*NIE JE DOKONCENA*/
2020-03-30 11:21:12 +00:00
void fill_the_table(struct ca_status buff){
esp_netif_ip_info_t ip_info;
esp_netif_get_ip_info(sta_netif,&ip_info);
char buffer[17];
esp_ip4addr_ntoa(&ip_info.ip,buffer,17);
lv_label_set_text(label_bottom,buffer);
if (buff.wifi == true)
{
lv_table_set_cell_value(table,0,1,"YES");
}else
{
lv_table_set_cell_value(table,0,1,"OFF");
}
if (buff.webserver == true)
{
lv_table_set_cell_value(table,1,1,"YES");
}else
{
lv_table_set_cell_value(table,1,1,"OFF");
}
if (buff.init == true)
{
lv_table_set_cell_value(table,3,1,"YES");
}else
{
lv_table_set_cell_value(table,3,1,"NO");
lv_table_set_cell_value(table,2,1,"0");
}
}