Files @ 33512a8a338c
Branch filter:

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

Ethan Zonca
Add OSC library, works!
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
33512a8a338c
7828d6c855c2
7828d6c855c2
33512a8a338c
33512a8a338c
33512a8a338c
33512a8a338c
33512a8a338c
33512a8a338c
33512a8a338c
33512a8a338c
33512a8a338c
33512a8a338c
7828d6c855c2
7828d6c855c2
7828d6c855c2
33512a8a338c
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
7828d6c855c2
33512a8a338c
33512a8a338c
33512a8a338c
33512a8a338c
33512a8a338c
33512a8a338c
33512a8a338c
33512a8a338c
33512a8a338c
33512a8a338c
33512a8a338c
33512a8a338c
33512a8a338c
33512a8a338c
33512a8a338c
33512a8a338c
33512a8a338c
33512a8a338c
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, "Boot Complete");
    // lv_obj_align_to(label, lv_scr_act(), LV_ALIGN_OUT_BOTTOM_MID, 0, 10);

        // 14
        // 20
        // 24
        // 28
        // montserrat


    // lv_obj_set_style_local_text_font(label, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_FONT_MONTSERRAT_28);
    lv_obj_set_style_text_font(label, &lv_font_montserrat_28, LV_PART_MAIN| LV_STATE_DEFAULT);


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

    display_unlock();
}


// TODO: 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();

}















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();
}