Multi-Volume. Select Media for LVGL (#21344)

This commit is contained in:
Victor Oliveira
2021-04-13 19:34:19 -03:00
committed by GitHub
parent a5f0075a60
commit 138340ee99
29 changed files with 546 additions and 279 deletions

View File

@ -148,7 +148,7 @@ static void lv_kb_event_cb(lv_obj_t *kb, lv_event_t event) {
public_buf_l[6] = 0x00;
raw_send_to_wifi((uint8_t*)public_buf_l, 6);
last_disp_state = KEY_BOARD_UI;
last_disp_state = KEYBOARD_UI;
lv_clear_keyboard();
wifi_tips_type = TIPS_TYPE_JOINING;
lv_draw_wifi_tips();
@ -216,7 +216,7 @@ static void lv_kb_event_cb(lv_obj_t *kb, lv_event_t event) {
}
void lv_draw_keyboard() {
scr = lv_screen_create(KEY_BOARD_UI, "");
scr = lv_screen_create(KEYBOARD_UI, "");
// Create styles for the keyboard
static lv_style_t rel_style, pr_style;

View File

@ -0,0 +1,73 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#include "../../../../inc/MarlinConfigPre.h"
#if BOTH(HAS_TFT_LVGL_UI, MULTI_VOLUME)
#include "draw_ui.h"
#include <lv_conf.h>
#include "../../../../inc/MarlinConfig.h"
#include "../../../../sd/cardreader.h"
extern lv_group_t *g;
static lv_obj_t *scr;
enum {
ID_T_USB_DISK = 1,
ID_T_SD_DISK,
ID_T_RETURN
};
#if ENABLED(MKS_TEST)
extern uint8_t curent_disp_ui;
#endif
static void event_handler(lv_obj_t *obj, lv_event_t event) {
if (event != LV_EVENT_RELEASED) return;
lv_clear_media_select();
switch (obj->mks_obj_id) {
case ID_T_USB_DISK: card.changeMedia(&card.media_usbFlashDrive); break;
case ID_T_SD_DISK: card.changeMedia(&card.media_sd_spi); break;
case ID_T_RETURN:
TERN_(MKS_TEST, curent_disp_ui = 1);
lv_draw_ready_print();
return;
}
lv_draw_print_file();
}
void lv_draw_media_select() {
scr = lv_screen_create(MEDIA_SELECT_UI);
lv_big_button_create(scr, "F:/bmp_sd.bin", media_select_menu.sd_disk, INTERVAL_V, titleHeight, event_handler, ID_T_SD_DISK);
lv_big_button_create(scr, "F:/bmp_usb_disk.bin", media_select_menu.usb_disk, BTN_X_PIXEL + INTERVAL_V * 2, titleHeight, event_handler, ID_T_USB_DISK);
lv_big_button_create(scr, "F:/bmp_return.bin", common_menu.text_back, BTN_X_PIXEL * 3 + INTERVAL_V * 4, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_T_RETURN);
}
void lv_clear_media_select() {
#if HAS_ROTARY_ENCODER
if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
#endif
lv_obj_del(scr);
}
#endif // HAS_TFT_LVGL_UI

View File

@ -0,0 +1,33 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
#ifdef __cplusplus
extern "C" { /* C-declarations for C++ */
#endif
extern void lv_draw_media_select();
extern void lv_clear_media_select();
#ifdef __cplusplus
} /* C-declarations for C++ */
#endif

View File

@ -177,7 +177,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) {
}
else {
lv_clear_print_file();
lv_draw_ready_print();
TERN(MULTI_VOLUME, lv_draw_media_select(), lv_draw_ready_print());
}
}
else {
@ -248,6 +248,7 @@ static char test_public_buf_l[40];
void disp_gcode_icon(uint8_t file_num) {
uint8_t i;
// TODO: set current media title?!
scr = lv_screen_create(PRINT_FILE_UI, "");
// Create image buttons

View File

@ -73,7 +73,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) {
case ID_INFO_EXT: uiCfg.curTempType = 0; lv_draw_preHeat(); break;
case ID_INFO_BED: uiCfg.curTempType = 1; lv_draw_preHeat(); break;
case ID_INFO_FAN: lv_draw_fan(); break;
case ID_PRINT: lv_draw_print_file(); break;
case ID_PRINT: TERN(MULTI_VOLUME, lv_draw_media_select(), lv_draw_print_file()); break;
}
}

View File

@ -447,111 +447,63 @@ char *getDispText(int index) {
ZERO(public_buf_l);
switch (disp_state_stack._disp_state[index]) {
case PRINT_READY_UI:
strcpy(public_buf_l, main_menu.title);
break;
case PRINT_FILE_UI:
strcpy(public_buf_l, file_menu.title);
break;
case PRINT_READY_UI: strcpy(public_buf_l, main_menu.title); break;
case PRINT_FILE_UI: strcpy(public_buf_l, file_menu.title); break;
case PRINTING_UI:
if (disp_state_stack._disp_state[disp_state_stack._disp_index] == PRINTING_UI
#ifndef TFT35
|| disp_state_stack._disp_state[disp_state_stack._disp_index] == OPERATE_UI
|| disp_state_stack._disp_state[disp_state_stack._disp_index] == PAUSE_UI
#endif
) strcpy(public_buf_l, common_menu.print_special_title);
else strcpy(public_buf_l, printing_menu.title);
break;
case MOVE_MOTOR_UI:
strcpy(public_buf_l, move_menu.title);
switch (disp_state_stack._disp_state[disp_state_stack._disp_index]) {
IF_DISABLED(TFT35, case OPERATE_UI: case PAUSE_UI:)
case PRINTING_UI: strcpy(public_buf_l, common_menu.print_special_title); break;
default: strcpy(public_buf_l, printing_menu.title); break;
}
break;
case MOVE_MOTOR_UI: strcpy(public_buf_l, move_menu.title); break;
case OPERATE_UI:
if (disp_state_stack._disp_state[disp_state_stack._disp_index] == PRINTING_UI
#ifndef TFT35
|| disp_state_stack._disp_state[disp_state_stack._disp_index] == OPERATE_UI
|| disp_state_stack._disp_state[disp_state_stack._disp_index] == PAUSE_UI
#endif
) strcpy(public_buf_l, common_menu.operate_special_title);
else strcpy(public_buf_l, operation_menu.title);
switch (disp_state_stack._disp_state[disp_state_stack._disp_index]) {
IF_DISABLED(TFT35, case OPERATE_UI: case PAUSE_UI:)
case PRINTING_UI: strcpy(public_buf_l, common_menu.operate_special_title); break;
default: strcpy(public_buf_l, operation_menu.title); break;
}
break;
case PAUSE_UI:
if (disp_state_stack._disp_state[disp_state_stack._disp_index] == PRINTING_UI
|| disp_state_stack._disp_state[disp_state_stack._disp_index] == OPERATE_UI
|| disp_state_stack._disp_state[disp_state_stack._disp_index] == PAUSE_UI
) strcpy(public_buf_l, common_menu.pause_special_title);
else strcpy(public_buf_l, pause_menu.title);
break;
case EXTRUSION_UI:
strcpy(public_buf_l, extrude_menu.title);
break;
case CHANGE_SPEED_UI:
strcpy(public_buf_l, speed_menu.title);
break;
case FAN_UI:
strcpy(public_buf_l, fan_menu.title);
switch (disp_state_stack._disp_state[disp_state_stack._disp_index]) {
case OPERATE_UI:
case PAUSE_UI:
case PRINTING_UI: strcpy(public_buf_l, common_menu.pause_special_title); break;
default: strcpy(public_buf_l, pause_menu.title); break;
}
break;
case EXTRUSION_UI: strcpy(public_buf_l, extrude_menu.title); break;
case CHANGE_SPEED_UI: strcpy(public_buf_l, speed_menu.title); break;
case FAN_UI: strcpy(public_buf_l, fan_menu.title); break;
case PRE_HEAT_UI:
if ((disp_state_stack._disp_state[disp_state_stack._disp_index - 1] == OPERATE_UI))
strcpy(public_buf_l, preheat_menu.adjust_title);
else strcpy(public_buf_l, preheat_menu.title);
break;
case SET_UI:
strcpy(public_buf_l, set_menu.title);
break;
case ZERO_UI:
strcpy(public_buf_l, home_menu.title);
break;
case SPRAYER_UI: break;
case MACHINE_UI: break;
case LANGUAGE_UI:
strcpy(public_buf_l, language_menu.title);
break;
case ABOUT_UI:
strcpy(public_buf_l, about_menu.title);
break;
case LOG_UI: break;
case DISK_UI:
strcpy(public_buf_l, filesys_menu.title);
break;
case DIALOG_UI:
strcpy(public_buf_l, common_menu.dialog_confirm_title);
break;
case WIFI_UI:
strcpy(public_buf_l, wifi_menu.title);
switch (disp_state_stack._disp_state[disp_state_stack._disp_index]) {
case OPERATE_UI: strcpy(public_buf_l, preheat_menu.adjust_title);
default: strcpy(public_buf_l, preheat_menu.title); break;
}
break;
case SET_UI: strcpy(public_buf_l, set_menu.title); break;
case ZERO_UI: strcpy(public_buf_l, home_menu.title); break;
case SPRAYER_UI: break;
case MACHINE_UI: break;
case LANGUAGE_UI: strcpy(public_buf_l, language_menu.title); break;
case ABOUT_UI: strcpy(public_buf_l, about_menu.title); break;
case LOG_UI: break;
case DISK_UI: strcpy(public_buf_l, filesys_menu.title); break;
case DIALOG_UI: strcpy(public_buf_l, common_menu.dialog_confirm_title); break;
case WIFI_UI: strcpy(public_buf_l, wifi_menu.title); break;
case MORE_UI:
case PRINT_MORE_UI:
strcpy(public_buf_l, more_menu.title);
break;
case FILAMENTCHANGE_UI:
strcpy(public_buf_l, filament_menu.title);
break;
case PRINT_MORE_UI: strcpy(public_buf_l, more_menu.title); break;
case FILAMENTCHANGE_UI: strcpy(public_buf_l, filament_menu.title); break;
case LEVELING_UI:
case MESHLEVELING_UI:
strcpy(public_buf_l, leveling_menu.title);
break;
case BIND_UI:
strcpy(public_buf_l, cloud_menu.title);
break;
case TOOL_UI:
strcpy(public_buf_l, tool_menu.title);
break;
case WIFI_LIST_UI:
#if ENABLED(MKS_WIFI_MODULE)
strcpy(public_buf_l, list_menu.title);
break;
#endif
case MACHINE_PARA_UI:
strcpy(public_buf_l, MachinePara_menu.title);
break;
case BABY_STEP_UI:
strcpy(public_buf_l, operation_menu.babystep);
break;
case EEPROM_SETTINGS_UI:
strcpy(public_buf_l, eeprom_menu.title);
break;
case MESHLEVELING_UI: strcpy(public_buf_l, leveling_menu.title); break;
case BIND_UI: strcpy(public_buf_l, cloud_menu.title); break;
case TOOL_UI: strcpy(public_buf_l, tool_menu.title); break;
case WIFI_LIST_UI: TERN_(MKS_WIFI_MODULE, strcpy(public_buf_l, list_menu.title)); break;
case MACHINE_PARA_UI: strcpy(public_buf_l, MachinePara_menu.title); break;
case BABY_STEP_UI: strcpy(public_buf_l, operation_menu.babystep); break;
case EEPROM_SETTINGS_UI: strcpy(public_buf_l, eeprom_menu.title); break;
case MEDIA_SELECT_UI: strcpy(public_buf_l, media_select_menu.title); break;
default: break;
}
@ -828,11 +780,9 @@ void GUI_RefreshPage() {
}
break;
case OPERATE_UI:
break;
case OPERATE_UI: break;
case PAUSE_UI:
break;
case PAUSE_UI: break;
case FAN_UI:
if (temps_update_flag) {
@ -841,8 +791,7 @@ void GUI_RefreshPage() {
}
break;
case MOVE_MOTOR_UI:
break;
case MOVE_MOTOR_UI: break;
#if ENABLED(MKS_WIFI_MODULE)
case WIFI_UI:
@ -852,10 +801,9 @@ void GUI_RefreshPage() {
}
break;
case BIND_UI:
refresh_bind_ui();
break;
case BIND_UI: refresh_bind_ui(); break;
#endif
case FILAMENTCHANGE_UI:
if (temps_update_flag) {
temps_update_flag = false;
@ -866,10 +814,8 @@ void GUI_RefreshPage() {
filament_dialog_handle();
TERN_(MKS_WIFI_MODULE, wifi_scan_handle());
break;
case MESHLEVELING_UI:
break;
case HARDWARE_TEST_UI:
break;
case MESHLEVELING_UI: break;
case HARDWARE_TEST_UI: break;
case WIFI_LIST_UI:
#if ENABLED(MKS_WIFI_MODULE)
if (printing_rate_update_flag) {
@ -878,8 +824,8 @@ void GUI_RefreshPage() {
}
#endif
break;
case KEY_BOARD_UI:
break;
case KEYBOARD_UI: break;
#if ENABLED(MKS_WIFI_MODULE)
case WIFI_TIPS_UI:
switch (wifi_tips_type) {
@ -932,6 +878,7 @@ void GUI_RefreshPage() {
disp_z_offset_value();
}
break;
default: break;
}
@ -982,7 +929,7 @@ void clear_cur_ui() {
#if ENABLED(MKS_WIFI_MODULE)
case WIFI_LIST_UI: lv_clear_wifi_list(); break;
#endif
case KEY_BOARD_UI: lv_clear_keyboard(); break;
case KEYBOARD_UI: lv_clear_keyboard(); break;
#if ENABLED(MKS_WIFI_MODULE)
case WIFI_TIPS_UI: lv_clear_wifi_tips(); break;
#endif
@ -1013,9 +960,9 @@ void clear_cur_ui() {
case NUMBER_KEY_UI: lv_clear_number_key(); break;
case BABY_STEP_UI: lv_clear_baby_stepping(); break;
case PAUSE_POS_UI: lv_clear_pause_position(); break;
#if HAS_TRINAMIC_CONFIG
case TMC_CURRENT_UI: lv_clear_tmc_current_settings(); break;
#endif
#if HAS_TRINAMIC_CONFIG
case TMC_CURRENT_UI: lv_clear_tmc_current_settings(); break;
#endif
case EEPROM_SETTINGS_UI: lv_clear_eeprom_settings(); break;
#if HAS_STEALTHCHOP
case TMC_MODE_UI: lv_clear_tmc_step_mode_settings(); break;
@ -1032,6 +979,9 @@ void clear_cur_ui() {
#if ENABLED(TOUCH_SCREEN_CALIBRATION)
case TOUCH_CALIBRATION_UI: lv_clear_touch_calibration_screen(); break;
#endif
#if ENABLED(MULTI_VOLUME)
case MEDIA_SELECT_UI: lv_clear_media_select(); break;
#endif
default: break;
}
}
@ -1087,7 +1037,7 @@ void draw_return_ui() {
#if ENABLED(MKS_WIFI_MODULE)
case WIFI_LIST_UI: lv_draw_wifi_list(); break;
#endif
case KEY_BOARD_UI: lv_draw_keyboard(); break;
case KEYBOARD_UI: lv_draw_keyboard(); break;
#if ENABLED(MKS_WIFI_MODULE)
case WIFI_TIPS_UI: lv_draw_wifi_tips(); break;
#endif

View File

@ -76,6 +76,7 @@
#include "draw_homing_sensitivity_settings.h"
#include "draw_baby_stepping.h"
#include "draw_keyboard.h"
#include "draw_media_select.h"
#include "draw_encoder_settings.h"
#include "../../../../inc/MarlinConfigPre.h"
@ -289,7 +290,7 @@ typedef enum {
TOOL_UI,
HARDWARE_TEST_UI,
WIFI_LIST_UI,
KEY_BOARD_UI,
KEYBOARD_UI,
WIFI_TIPS_UI,
MACHINE_PARA_UI,
MACHINE_SETTINGS_UI,
@ -327,6 +328,7 @@ typedef enum {
ENCODER_SETTINGS_UI,
TOUCH_CALIBRATION_UI,
GCODE_UI,
MEDIA_SELECT_UI,
} DISP_STATE;
typedef struct {

View File

@ -197,6 +197,13 @@ static const char assets[][LONG_FILENAME_LENGTH] = {
"bmp_cloud.bin",
#endif
#if ENABLED(MULTI_VOLUME)
"bmp_usb_disk.bin",
// "bmp_usb_disk_sel.bin",
"bmp_sd.bin",
// "bmp_sd_sel.bin",
#endif
// Babystep screen
"bmp_baby_move0_01.bin",
"bmp_baby_move0_05.bin",

View File

@ -540,6 +540,7 @@
#define USB_DRIVE_BACK_EN "< Back"
#define FILE_PAGES_EN "%d/%d"
#define FILE_NEXT_PAGE_EN "Next Page"
#define MEDIA_SELECT_TITLE_EN "Select Media"
//BUILD PLATE
#define PLATE_TITLE_EN "Build Plate"

View File

@ -56,6 +56,7 @@ tool_menu_def tool_menu;
MachinePara_menu_def MachinePara_menu;
pause_msg_def pause_msg_menu;
eeprom_def eeprom_menu;
media_select_menu_def media_select_menu;
machine_common_def machine_menu;
void machine_setting_disp() {
@ -821,6 +822,10 @@ void disp_language_init() {
filament_menu.stat_temp = TEXT_VALUE;
media_select_menu.title = MEDIA_SELECT_TITLE_EN;
media_select_menu.sd_disk = SD_CARD_TITLE_EN;
media_select_menu.usb_disk = USB_DRIVE_TITLE_EN;
machine_menu.key_0 = KEYBOARD_KEY0_EN;
machine_menu.key_1 = KEYBOARD_KEY1_EN;
machine_menu.key_2 = KEYBOARD_KEY2_EN;

View File

@ -706,6 +706,14 @@ typedef struct tool_menu_disp {
extern tool_menu_def tool_menu;
typedef struct media_select_menu_disp {
const char *title;
const char *sd_disk;
const char *usb_disk;
} media_select_menu_def;
extern media_select_menu_def media_select_menu;
typedef struct MachinePara_menu_disp {
const char *title;
const char *MachineSetting;

View File

@ -1142,7 +1142,7 @@ static void wifi_list_msg_handle(uint8_t * msg, uint16_t msgLen) {
int8_t valid_name_num;
if (msgLen <= 0) return;
if (disp_state == KEY_BOARD_UI) return;
if (disp_state == KEYBOARD_UI) return;
wifi_list.getNameNum = msg[0];