Files @ 7828d6c855c2
Branch filter:

Location: protofusion-esp32-template/main/display_gui.c - annotation

Ethan Zonca
Seperate display init from actual ui
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
//
// display_gui: display elements onscreen 
//

#include "display_gui.h"
#include "display.h"
#include "esp_lvgl_port.h"
#include "esp_err.h"
#include "esp_log.h"
#include "esp_check.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"




static lv_obj_t *ui_Screen1;
static lv_obj_t *ui_redsquare;

static lv_obj_t *meter;
static lv_meter_indicator_t *meter_indic1;

static lv_obj_t *ue_img_logo;
static lv_obj_t *esp_img_logo;
static lv_obj_t *label;


static lv_obj_t *ui_Dropdown2;

LV_IMG_DECLARE(ue_logo)
LV_IMG_DECLARE(esp_logo)
LV_IMG_DECLARE(red_square)


void display_gui_homescreen(void)
{

    // Actually create homescreen widgets

    
    display_lock(0);

    label = lv_label_create(lv_scr_act());
    lv_label_set_text(label, "Yup");
    // lv_obj_align_to(label, lv_scr_act(), LV_ALIGN_OUT_BOTTOM_MID, 0, 10);


    // display_slider();
    //Call one at a time to see examples
    display_meter();
    // display_image();
    // display_window();
    //display_dropdown();

    display_unlock();
}













void display_meter()
{
    meter = lv_meter_create(lv_scr_act());
    lv_obj_center(meter);
    lv_obj_set_size(meter, 140, 140);

    /*Remove the circle from the middle*/
    lv_obj_remove_style(meter, NULL, LV_PART_INDICATOR);

    /*Add a scale first*/
    lv_meter_scale_t *scale = lv_meter_add_scale(meter);
    lv_meter_set_scale_ticks(meter, scale, 11, 2, 10, lv_palette_main(LV_PALETTE_GREY));
    lv_meter_set_scale_major_ticks(meter, scale, 1, 2, 15, lv_color_hex3(0xeee), 10);
    lv_meter_set_scale_range(meter, scale, 0, 100, 270, 90);

    /*Add a three arc indicator*/
     meter_indic1 = lv_meter_add_arc(meter, scale, 10, lv_color_hex3(0x00F), 0);
    // lv_meter_indicator_t *indic2 = lv_meter_add_arc(meter, scale, 10, lv_color_hex3(0x0F0), -10);
    // lv_meter_indicator_t *indic3 = lv_meter_add_arc(meter, scale, 10, lv_color_hex3(0xF00), -20);

    /*Create an animation to set the value*/
    /*lv_anim_t a;
    lv_anim_init(&a);
    lv_anim_set_exec_cb(&a, set_value);
    lv_anim_set_values(&a, 0, 100);
    lv_anim_set_repeat_delay(&a, 100);
    lv_anim_set_playback_delay(&a, 2000);
    lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);

    lv_anim_set_time(&a, 2000);
    lv_anim_set_playback_time(&a, 500);
    lv_anim_set_var(&a, indic1);
    lv_anim_start(&a); */

    /*
        lv_anim_set_time(&a, 1000);
        lv_anim_set_playback_time(&a, 1000);
        lv_anim_set_var(&a, indic2);
        lv_anim_start(&a);

        lv_anim_set_time(&a, 1000);
        lv_anim_set_playback_time(&a, 2000);
        lv_anim_set_var(&a, indic3);
        lv_anim_start(&a);
        */
    /* page 3 */
}

static void dropdown_event_handler(lv_event_t *e)
{
    lv_event_code_t code = lv_event_get_code(e);
    lv_obj_t *obj = lv_event_get_target(e);
    if (code == LV_EVENT_VALUE_CHANGED)
    {
        char buf[32];
        lv_dropdown_get_selected_str(obj, buf, sizeof(buf));
        LV_LOG_USER("Option: %s", buf);
    }
}

/**
 * @brief dispaly dropdown is rotated 180 degrees (USB to the right is the orentation)
 *
 */
void display_dropdown()
{
    lv_disp_t *dispp = lv_disp_get_default();
    ui_Dropdown2 = lv_dropdown_create(lv_scr_act());
    lv_dropdown_set_options(ui_Dropdown2, "Apple\n"
                                          "Banana\n"
                                          "Orange\n"
                                          "Melon\n"
                                          "Grape\n"
                                          "Raspberry");
    lv_obj_set_width(ui_Dropdown2, 150);
    lv_obj_set_height(ui_Dropdown2, LV_SIZE_CONTENT); /// 1
    lv_obj_set_x(ui_Dropdown2, 0);
    lv_obj_set_y(ui_Dropdown2, -20);
    lv_obj_set_align(ui_Dropdown2, LV_ALIGN_CENTER);
    lv_obj_add_flag(ui_Dropdown2, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
    lv_obj_add_event_cb(ui_Dropdown2, dropdown_event_handler, LV_EVENT_ALL, NULL);
}

void display_window()
{
    lv_obj_t *win = lv_win_create(lv_scr_act(), 40);
    assert(win);
    lv_win_add_title(win, "test123!");
}

void display_image()
{
    esp_img_logo = lv_img_create(lv_scr_act());
    lv_img_set_src(esp_img_logo, &esp_logo);
    lv_obj_center(esp_img_logo);
}

void display_red_square()
{
    // ui_Screen1 = lv_obj_create(NULL);
    // lv_obj_clear_flag(ui_Screen1, LV_OBJ_FLAG_SCROLLABLE);      /// Flags

    ui_redsquare = lv_img_create(lv_scr_act());
    lv_img_set_src(ui_redsquare, &red_square);
    lv_obj_set_width(ui_redsquare, LV_SIZE_CONTENT);  /// 1
    lv_obj_set_height(ui_redsquare, LV_SIZE_CONTENT); /// 1
    lv_obj_set_align(ui_redsquare, LV_ALIGN_CENTER);
    lv_obj_add_flag(ui_redsquare, LV_OBJ_FLAG_ADV_HITTEST);  /// Flags
    lv_obj_clear_flag(ui_redsquare, LV_OBJ_FLAG_SCROLLABLE); /// Flags
}

static void slider_event_cb(lv_event_t *e);
static lv_obj_t *slider_label;

void display_slider()
{
    lv_disp_t *dispp = lv_disp_get_default();
    /*Create a slider in the center of the display*/
    lv_obj_t *slider = lv_slider_create(lv_scr_act());
    lv_obj_set_x(slider, 0);
    lv_obj_set_y(slider, -40);
    lv_obj_set_align(slider, LV_ALIGN_CENTER);
    lv_obj_add_event_cb(slider, slider_event_cb, LV_EVENT_VALUE_CHANGED, NULL);

    /*Create a label below the slider*/
    slider_label = lv_label_create(lv_scr_act());
    lv_label_set_text(slider_label, "0%");
    lv_obj_align_to(slider_label, slider, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
}




static void slider_event_cb(lv_event_t *e)
{
    lv_obj_t *slider = lv_event_get_target(e);
    char buf[8];
    lv_snprintf(buf, sizeof(buf), "%d%%", (int)lv_slider_get_value(slider));
    lv_label_set_text(slider_label, buf);
    lv_obj_align_to(slider_label, slider, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
}

void get_img_color()
{
    lv_color_t pixel_color = lv_img_buf_get_px_color(&red_square, 50, 50, lv_color_make(0, 0, 0));
    uint32_t c32 = lv_color_to32(pixel_color);
    printf("Pixel color: %lu \n", c32);
}





static void set_value(void *indic, int32_t v)
{
    lv_meter_set_indicator_end_value(meter, indic, v);
}



void display_update_text(char* str)
{
    display_lock(0);
    lv_label_set_text(label, str);
    display_unlock();
}



// make a display task that listens for messages from a queue that change visual elements
uint32_t value = 0;

void display_gui_process(void)
{
    
    display_lock(0);

    set_value(meter_indic1, value);
    
    value = (value + 1) % 100;

    display_unlock();

}