Add TFT_LVGL_UI support (#18438)

This commit is contained in:
Victor Oliveira 2020-07-01 03:30:24 -03:00 committed by GitHub
parent 39105384ba
commit e5bc9d31cc
Signed by: GitHub
GPG key ID: 4AEE18F83AFDEB23
39 changed files with 1564 additions and 1437 deletions

View file

@ -2135,9 +2135,12 @@
//#define FSMC_GRAPHICAL_TFT //#define FSMC_GRAPHICAL_TFT
// //
// TFT Little VGL UI // TFT LVGL UI
// //
//#define TFT_LITTLE_VGL_UI // Default MKS icons and fonts: https://git.io/JJvzK
// Copy mks_pic and mks_font folders to the root of your SD
//
//#define TFT_LVGL_UI
//============================================================================= //=============================================================================
//============================ Other Controllers ============================ //============================ Other Controllers ============================

View file

@ -291,7 +291,7 @@ uint32_t LCD_IO_ReadData(uint16_t RegValue, uint8_t ReadSize) {
return uint32_t(data); return uint32_t(data);
} }
#if ENABLED(LCD_USE_DMA_FSMC) #ifdef LCD_USE_DMA_FSMC
void LCD_IO_WriteMultiple(uint16_t color, uint32_t count) { void LCD_IO_WriteMultiple(uint16_t color, uint32_t count) {
while (count > 0) { while (count > 0) {

View file

@ -59,7 +59,7 @@
#include "gcode/parser.h" #include "gcode/parser.h"
#include "gcode/queue.h" #include "gcode/queue.h"
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#include "lvgl.h" #include "lvgl.h"
#include "lcd/extui/lib/mks_ui/tft_lvgl_configuration.h" #include "lcd/extui/lib/mks_ui/tft_lvgl_configuration.h"
#include "lcd/extui/lib/mks_ui/draw_ui.h" #include "lcd/extui/lib/mks_ui/draw_ui.h"
@ -743,7 +743,7 @@ void idle(TERN_(ADVANCED_PAUSE_FEATURE, bool no_stepper_sleep/*=false*/)) {
// Direct Stepping // Direct Stepping
TERN_(DIRECT_STEPPING, page_manager.write_responses()); TERN_(DIRECT_STEPPING, page_manager.write_responses());
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
LV_TASK_HANDLER(); LV_TASK_HANDLER();
#endif #endif
} }
@ -1180,7 +1180,8 @@ void setup() {
SETUP_RUN(page_manager.init()); SETUP_RUN(page_manager.init());
#endif #endif
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
if (!card.isMounted()) SETUP_RUN(card.mount()); // Mount SD to load graphics and fonts
SETUP_RUN(tft_lvgl_init()); SETUP_RUN(tft_lvgl_init());
#endif #endif
@ -1216,7 +1217,7 @@ void loop() {
endstops.event_handler(); endstops.event_handler();
TERN_(TFT_LITTLE_VGL_UI, printer_state_polling()); TERN_(TFT_LVGL_UI, printer_state_polling());
} while (ENABLED(__AVR__)); // Loop forever on slower (AVR) boards } while (ENABLED(__AVR__)); // Loop forever on slower (AVR) boards
} }

View file

@ -101,39 +101,41 @@ void XPT2046::init() {
#include "../../lcd/ultralcd.h" // For EN_C bit mask #include "../../lcd/ultralcd.h" // For EN_C bit mask
uint8_t XPT2046::read_buttons() { uint8_t XPT2046::read_buttons() {
int16_t tsoffsets[4] = { 0 }; #ifdef HAS_SPI_LCD
int16_t tsoffsets[4] = { 0 };
if (tsoffsets[0] + tsoffsets[1] == 0) { if (tsoffsets[0] + tsoffsets[1] == 0) {
// Not yet set, so use defines as fallback... // Not yet set, so use defines as fallback...
tsoffsets[0] = XPT2046_X_CALIBRATION; tsoffsets[0] = XPT2046_X_CALIBRATION;
tsoffsets[1] = XPT2046_X_OFFSET; tsoffsets[1] = XPT2046_X_OFFSET;
tsoffsets[2] = XPT2046_Y_CALIBRATION; tsoffsets[2] = XPT2046_Y_CALIBRATION;
tsoffsets[3] = XPT2046_Y_OFFSET; tsoffsets[3] = XPT2046_Y_OFFSET;
} }
// We rely on XPT2046 compatible mode to ADS7843, hence no Z1 and Z2 measurements possible. // We rely on XPT2046 compatible mode to ADS7843, hence no Z1 and Z2 measurements possible.
if (!isTouched()) return 0; if (!isTouched()) return 0;
const uint16_t x = uint16_t(((uint32_t(getInTouch(XPT2046_X))) * tsoffsets[0]) >> 16) + tsoffsets[1], const uint16_t x = uint16_t(((uint32_t(getInTouch(XPT2046_X))) * tsoffsets[0]) >> 16) + tsoffsets[1],
y = uint16_t(((uint32_t(getInTouch(XPT2046_Y))) * tsoffsets[2]) >> 16) + tsoffsets[3]; y = uint16_t(((uint32_t(getInTouch(XPT2046_Y))) * tsoffsets[2]) >> 16) + tsoffsets[3];
if (!isTouched()) return 0; // Fingers must still be on the TS for a valid read. if (!isTouched()) return 0; // Fingers must still be on the TS for a valid read.
// Touch within the button area simulates an encoder button // Touch within the button area simulates an encoder button
if (y > BUTTON_AREA_TOP && y < BUTTON_AREA_BOT) if (y > BUTTON_AREA_TOP && y < BUTTON_AREA_BOT)
return WITHIN(x, 14, 77) ? EN_D return WITHIN(x, 14, 77) ? EN_D
: WITHIN(x, 90, 153) ? EN_A : WITHIN(x, 90, 153) ? EN_A
: WITHIN(x, 166, 229) ? EN_B : WITHIN(x, 166, 229) ? EN_B
: WITHIN(x, 242, 305) ? EN_C : WITHIN(x, 242, 305) ? EN_C
: 0; : 0;
if (x > TOUCH_SCREEN_WIDTH || !WITHIN(y, SCREEN_START_TOP, SCREEN_START_TOP + SCREEN_HEIGHT)) return 0; if (x > TOUCH_SCREEN_WIDTH || !WITHIN(y, SCREEN_START_TOP, SCREEN_START_TOP + SCREEN_HEIGHT)) return 0;
// Column and row above BUTTON_AREA_TOP // Column and row above BUTTON_AREA_TOP
int8_t col = (x - (SCREEN_START_LEFT)) * (LCD_WIDTH) / (TOUCHABLE_X_WIDTH), int8_t col = (x - (SCREEN_START_LEFT)) * (LCD_WIDTH) / (TOUCHABLE_X_WIDTH),
row = (y - (SCREEN_START_TOP)) * (LCD_HEIGHT) / (TOUCHABLE_Y_HEIGHT); row = (y - (SCREEN_START_TOP)) * (LCD_HEIGHT) / (TOUCHABLE_Y_HEIGHT);
// Send the touch to the UI (which will simulate the encoder wheel) // Send the touch to the UI (which will simulate the encoder wheel)
MarlinUI::screen_click(row, col, x, y); MarlinUI::screen_click(row, col, x, y);
#endif
return 0; return 0;
} }

View file

@ -64,7 +64,7 @@
#include <string.h> #include <string.h>
#if ENABLED(LCD_USE_DMA_FSMC) #ifdef LCD_USE_DMA_FSMC
extern void LCD_IO_WriteReg(uint16_t Reg); extern void LCD_IO_WriteReg(uint16_t Reg);
extern void LCD_IO_WriteData(uint16_t RegValue); extern void LCD_IO_WriteData(uint16_t RegValue);
extern void LCD_IO_WriteSequence(uint16_t *data, uint16_t length); extern void LCD_IO_WriteSequence(uint16_t *data, uint16_t length);

View file

@ -22,7 +22,7 @@
#include "../../../../inc/MarlinConfigPre.h" #include "../../../../inc/MarlinConfigPre.h"
#if 1 // ENABLED(SPI_FLASH) #if 1 // ENABLED(SPI_FLASH)
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#include <SPI.h> #include <SPI.h>
#include "../../../../inc/MarlinConfig.h" #include "../../../../inc/MarlinConfig.h"
@ -391,5 +391,5 @@ void ext_FLASH::SPI_FLASH_BufferRead(uint8_t* pBuffer, uint32_t ReadAddr, uint16
void ext_FLASH::lv_pic_read(uint8_t *P_Rbuff, uint32_t addr, uint32_t size) {SPI_FLASH_BufferRead((uint8_t *)P_Rbuff, addr, size);} void ext_FLASH::lv_pic_read(uint8_t *P_Rbuff, uint32_t addr, uint32_t size) {SPI_FLASH_BufferRead((uint8_t *)P_Rbuff, addr, size);}
#endif // TFT_LITTLE_VGL_UI #endif // TFT_LVGL_UI
#endif // 1 ... SPI_FLASH #endif // 1 ... SPI_FLASH

View file

@ -21,7 +21,7 @@
*/ */
#include "../../../../inc/MarlinConfigPre.h" #include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#include "lv_conf.h" #include "lv_conf.h"
#include "draw_ui.h" #include "draw_ui.h"
@ -99,29 +99,28 @@ void lv_draw_about(void) {
fw_version = lv_label_create(scr, NULL); fw_version = lv_label_create(scr, NULL);
lv_obj_set_style(fw_version, &tft_style_lable_rel); lv_obj_set_style(fw_version, &tft_style_lable_rel);
lv_label_set_text(fw_version, "Version: V_2.0.5.3"); lv_label_set_text(fw_version, SHORT_BUILD_VERSION);
lv_obj_align(fw_version, NULL, LV_ALIGN_CENTER, 0, -60); lv_obj_align(fw_version, NULL, LV_ALIGN_CENTER, 0, -60);
fw_type = lv_label_create(scr, NULL); fw_type = lv_label_create(scr, NULL);
lv_obj_set_style(fw_type, &tft_style_lable_rel); lv_obj_set_style(fw_type, &tft_style_lable_rel);
#if (MOTHERBOARD == BOARD_MKS_ROBIN_PRO) lv_label_set_text(fw_type,
lv_label_set_text(fw_type, "Firmware: Robin_Pro35"); #if MB(MKS_ROBIN_PRO)
#elif (MOTHERBOARD == BOARD_MKS_ROBIN_NANO) "Firmware: Robin_Pro35"
lv_label_set_text(fw_type, "Firmware: Robin_Nano35"); #elif MB(MKS_ROBIN_NANO)
#endif "Firmware: Robin_Nano35"
#else
CUSTOM_MACHINE_NAME
#endif
);
lv_obj_align(fw_type, NULL, LV_ALIGN_CENTER, 0, -20); lv_obj_align(fw_type, NULL, LV_ALIGN_CENTER, 0, -20);
board = lv_label_create(scr, NULL); board = lv_label_create(scr, NULL);
lv_obj_set_style(board, &tft_style_lable_rel); lv_obj_set_style(board, &tft_style_lable_rel);
#if (MOTHERBOARD == BOARD_MKS_ROBIN_PRO) lv_label_set_text(board, "Board: " BOARD_INFO_NAME);
lv_label_set_text(board, "Board: MKS Robin pro");
#elif (MOTHERBOARD == BOARD_MKS_ROBIN_NANO)
lv_label_set_text(board, "Board: MKS Robin nano");
#endif
lv_obj_align(board, NULL, LV_ALIGN_CENTER, 0, 20); lv_obj_align(board, NULL, LV_ALIGN_CENTER, 0, 20);
} }
void lv_clear_about() { lv_obj_del(scr); } void lv_clear_about() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI #endif // TFT_LVGL_UI

View file

@ -21,7 +21,7 @@
*/ */
#include "../../../../inc/MarlinConfigPre.h" #include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#include "lv_conf.h" #include "lv_conf.h"
#include "draw_ui.h" #include "draw_ui.h"
@ -310,13 +310,13 @@ void disp_print_speed() {
void disp_speed_type() { void disp_speed_type() {
switch (speedType) { switch (speedType) {
case 1: case 1:
lv_obj_set_event_cb_mks(buttonExt, event_handler, ID_C_EXT, "bmp_Extruct_speed_sel.bin", 0); lv_obj_set_event_cb_mks(buttonExt, event_handler, ID_C_EXT, "bmp_extruct_sel.bin", 0);
lv_obj_set_event_cb_mks(buttonMov, event_handler, ID_C_MOVE, "bmp_Mov_speed.bin", 0); lv_obj_set_event_cb_mks(buttonMov, event_handler, ID_C_MOVE, "bmp_mov_changespeed.bin", 0);
break; break;
default: default:
lv_obj_set_event_cb_mks(buttonExt, event_handler, ID_C_EXT, "bmp_Extruct_speed.bin", 0); lv_obj_set_event_cb_mks(buttonExt, event_handler, ID_C_EXT, "bmp_Extruct.bin", 0);
lv_obj_set_event_cb_mks(buttonMov, event_handler, ID_C_MOVE, "bmp_Mov_speed_sel.bin", 0); lv_obj_set_event_cb_mks(buttonMov, event_handler, ID_C_MOVE, "bmp_mov_sel.bin", 0);
break; break;
} }
lv_obj_refresh_ext_draw_pad(buttonExt); lv_obj_refresh_ext_draw_pad(buttonExt);
@ -333,4 +333,4 @@ void disp_speed_type() {
void lv_clear_change_speed() { lv_obj_del(scr); } void lv_clear_change_speed() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI #endif // TFT_LVGL_UI

View file

@ -26,7 +26,7 @@
#include "../../../../inc/MarlinConfigPre.h" #include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#include "lv_conf.h" #include "lv_conf.h"
#include "draw_ui.h" #include "draw_ui.h"
@ -61,7 +61,9 @@ static void btn_ok_event_cb(lv_obj_t * btn, lv_event_t event) {
} }
else if (event == LV_EVENT_RELEASED) { else if (event == LV_EVENT_RELEASED) {
if (DialogType == DIALOG_TYPE_PRINT_FILE) { if (DialogType == DIALOG_TYPE_PRINT_FILE) {
preview_gcode_prehandle(list_file.file_name[sel_id]); #if HAS_GCODE_PREVIEW
preview_gcode_prehandle(list_file.file_name[sel_id]);
#endif
reset_print_time(); reset_print_time();
start_print_time(); start_print_time();
@ -202,7 +204,7 @@ void lv_draw_dialog(uint8_t type) {
style_btn_rel.body.shadow.type = LV_SHADOW_BOTTOM; style_btn_rel.body.shadow.type = LV_SHADOW_BOTTOM;
style_btn_rel.body.radius = LV_RADIUS_CIRCLE; style_btn_rel.body.radius = LV_RADIUS_CIRCLE;
style_btn_rel.text.color = lv_color_hex3(0xDEF); style_btn_rel.text.color = lv_color_hex3(0xDEF);
style_btn_rel.text.font = &gb2312_puhui32; style_btn_rel.text.font = &lv_font_roboto_22;
static lv_style_t style_btn_pr; // A variable to store the pressed style static lv_style_t style_btn_pr; // A variable to store the pressed style
lv_style_copy(&style_btn_pr, &style_btn_rel); // Initialize from the released style lv_style_copy(&style_btn_pr, &style_btn_rel); // Initialize from the released style
@ -211,7 +213,7 @@ void lv_draw_dialog(uint8_t type) {
style_btn_pr.body.grad_color = lv_color_hex3(0x24A); style_btn_pr.body.grad_color = lv_color_hex3(0x24A);
style_btn_pr.body.shadow.width = 2; style_btn_pr.body.shadow.width = 2;
style_btn_pr.text.color = lv_color_hex3(0xBCD); style_btn_pr.text.color = lv_color_hex3(0xBCD);
style_btn_pr.text.font = &gb2312_puhui32; style_btn_pr.text.font = &lv_font_roboto_22;
lv_obj_t * labelDialog = lv_label_create(scr, NULL); lv_obj_t * labelDialog = lv_label_create(scr, NULL);
lv_obj_set_style(labelDialog, &tft_style_lable_rel); lv_obj_set_style(labelDialog, &tft_style_lable_rel);
@ -340,4 +342,4 @@ void lv_draw_dialog(uint8_t type) {
void lv_clear_dialog() { lv_obj_del(scr); } void lv_clear_dialog() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI #endif // TFT_LVGL_UI

View file

@ -21,7 +21,7 @@
*/ */
#include "../../../../inc/MarlinConfigPre.h" #include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#include "lv_conf.h" #include "lv_conf.h"
#include "draw_ui.h" #include "draw_ui.h"
@ -81,4 +81,4 @@ void lv_draw_error_message(PGM_P const msg) {
void lv_clear_error_message() { lv_obj_del(scr); } void lv_clear_error_message() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI #endif // TFT_LVGL_UI

View file

@ -21,7 +21,7 @@
*/ */
#include "../../../../inc/MarlinConfigPre.h" #include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#include "lv_conf.h" #include "lv_conf.h"
#include "draw_ui.h" #include "draw_ui.h"
@ -375,4 +375,4 @@ void disp_ext_step() {
void lv_clear_extrusion() { lv_obj_del(scr); } void lv_clear_extrusion() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI #endif // TFT_LVGL_UI

View file

@ -21,7 +21,7 @@
*/ */
#include "../../../../inc/MarlinConfigPre.h" #include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#include "../../../../MarlinCore.h" #include "../../../../MarlinCore.h"
#include "lv_conf.h" #include "lv_conf.h"
@ -244,4 +244,4 @@ void disp_fan_value() {
void lv_clear_fan() { lv_obj_del(scr); } void lv_clear_fan() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI #endif // TFT_LVGL_UI

View file

@ -21,7 +21,7 @@
*/ */
#include "../../../../inc/MarlinConfigPre.h" #include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#include "../../../../MarlinCore.h" #include "../../../../MarlinCore.h"
#include "draw_ready_print.h" #include "draw_ready_print.h"
@ -190,13 +190,13 @@ void lv_draw_home(void) {
lv_imgbtn_set_style(buttonHomeZ, LV_BTN_STATE_PR, &tft_style_lable_pre); lv_imgbtn_set_style(buttonHomeZ, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonHomeZ, LV_BTN_STATE_REL, &tft_style_lable_rel); lv_imgbtn_set_style(buttonHomeZ, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonOffAll, event_handler, ID_H_OFF_ALL, "bmp_Motor_off.bin", 0); lv_obj_set_event_cb_mks(buttonOffAll, event_handler, ID_H_OFF_ALL, "bmp_manual_off.bin", 0);
lv_imgbtn_set_src(buttonOffAll, LV_BTN_STATE_REL, &bmp_pic); lv_imgbtn_set_src(buttonOffAll, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonOffAll, LV_BTN_STATE_PR, &bmp_pic); lv_imgbtn_set_src(buttonOffAll, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonOffAll, LV_BTN_STATE_PR, &tft_style_lable_pre); lv_imgbtn_set_style(buttonOffAll, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonOffAll, LV_BTN_STATE_REL, &tft_style_lable_rel); lv_imgbtn_set_style(buttonOffAll, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonOffXY, event_handler, ID_H_OFF_XY, "bmp_Motor_off.bin", 0); lv_obj_set_event_cb_mks(buttonOffXY, event_handler, ID_H_OFF_XY, "bmp_manual_off.bin", 0);
lv_imgbtn_set_src(buttonOffXY, LV_BTN_STATE_REL, &bmp_pic); lv_imgbtn_set_src(buttonOffXY, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonOffXY, LV_BTN_STATE_PR, &bmp_pic); lv_imgbtn_set_src(buttonOffXY, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonOffXY, LV_BTN_STATE_PR, &tft_style_lable_pre); lv_imgbtn_set_style(buttonOffXY, LV_BTN_STATE_PR, &tft_style_lable_pre);
@ -280,4 +280,4 @@ void lv_draw_home(void) {
void lv_clear_home() { lv_obj_del(scr); } void lv_clear_home() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI #endif // TFT_LVGL_UI

View file

@ -21,7 +21,7 @@
*/ */
#include "../../../../inc/MarlinConfigPre.h" #include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#include "lv_conf.h" #include "lv_conf.h"
#include "draw_ui.h" #include "draw_ui.h"
@ -61,7 +61,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
} }
else if (event == LV_EVENT_RELEASED) { else if (event == LV_EVENT_RELEASED) {
disp_language(gCfgItems.language, UNSELECTED); disp_language(gCfgItems.language, UNSELECTED);
lv_obj_set_event_cb_mks(buttonCN, event_handler, ID_CN, "bmp_Simple_cn_sel.bin", 0); lv_obj_set_event_cb_mks(buttonCN, event_handler, ID_CN, "bmp_simplified_cn_sel.bin", 0);
gCfgItems.language = LANG_SIMPLE_CHINESE; gCfgItems.language = LANG_SIMPLE_CHINESE;
gCfg_to_spiFlah(); gCfg_to_spiFlah();
disp_language_init(); disp_language_init();
@ -73,7 +73,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
} }
else if (event == LV_EVENT_RELEASED) { else if (event == LV_EVENT_RELEASED) {
disp_language(gCfgItems.language, UNSELECTED); disp_language(gCfgItems.language, UNSELECTED);
lv_obj_set_event_cb_mks(buttonT_CN, event_handler, ID_T_CN, "bmp_Tradition_cn_sel.bin", 0); lv_obj_set_event_cb_mks(buttonT_CN, event_handler, ID_T_CN, "bmp_traditional_cn_sel.bin", 0);
gCfgItems.language = LANG_COMPLEX_CHINESE; gCfgItems.language = LANG_COMPLEX_CHINESE;
gCfg_to_spiFlah(); gCfg_to_spiFlah();
disp_language_init(); disp_language_init();
@ -258,14 +258,14 @@ void lv_draw_language(void) {
buttonBack = lv_imgbtn_create(scr, NULL); buttonBack = lv_imgbtn_create(scr, NULL);
lv_obj_set_event_cb_mks(buttonCN, event_handler, ID_CN, "bmp_Simple_cn.bin", 0); lv_obj_set_event_cb_mks(buttonCN, event_handler, ID_CN, "bmp_simplified_cn.bin", 0);
lv_imgbtn_set_src(buttonCN, LV_BTN_STATE_REL, &bmp_pic); lv_imgbtn_set_src(buttonCN, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonCN, LV_BTN_STATE_PR, &bmp_pic); lv_imgbtn_set_src(buttonCN, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonCN, LV_BTN_STATE_PR, &tft_style_lable_pre); lv_imgbtn_set_style(buttonCN, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonCN, LV_BTN_STATE_REL, &tft_style_lable_rel); lv_imgbtn_set_style(buttonCN, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_clear_protect(buttonCN, LV_PROTECT_FOLLOW); lv_obj_clear_protect(buttonCN, LV_PROTECT_FOLLOW);
#if 1 #if 1
lv_obj_set_event_cb_mks(buttonT_CN, event_handler, ID_T_CN, "bmp_Tradition_cn.bin", 0); lv_obj_set_event_cb_mks(buttonT_CN, event_handler, ID_T_CN, "bmp_traditional_cn.bin", 0);
lv_imgbtn_set_src(buttonT_CN, LV_BTN_STATE_REL, &bmp_pic); lv_imgbtn_set_src(buttonT_CN, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonT_CN, LV_BTN_STATE_PR, &bmp_pic); lv_imgbtn_set_src(buttonT_CN, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonT_CN, LV_BTN_STATE_PR, &tft_style_lable_pre); lv_imgbtn_set_style(buttonT_CN, LV_BTN_STATE_PR, &tft_style_lable_pre);
@ -367,4 +367,4 @@ void lv_draw_language(void) {
void lv_clear_language() { lv_obj_del(scr); } void lv_clear_language() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI #endif // TFT_LVGL_UI

View file

@ -21,7 +21,7 @@
*/ */
#include "../../../../inc/MarlinConfigPre.h" #include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#include "../../../../MarlinCore.h" #include "../../../../MarlinCore.h"
#include "lv_conf.h" #include "lv_conf.h"
@ -281,4 +281,4 @@ void lv_draw_manualLevel(void) {
void lv_clear_manualLevel() { lv_obj_del(scr); } void lv_clear_manualLevel() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI #endif // TFT_LVGL_UI

View file

@ -21,7 +21,7 @@
*/ */
#include "../../../../inc/MarlinConfigPre.h" #include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#include "../../../../MarlinCore.h" #include "../../../../MarlinCore.h"
#include "lv_conf.h" #include "lv_conf.h"
@ -326,4 +326,4 @@ void disp_move_dist() {
void lv_clear_move_motor() { lv_obj_del(scr); } void lv_clear_move_motor() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI #endif // TFT_LVGL_UI

View file

@ -21,7 +21,7 @@
*/ */
#include "../../../../inc/MarlinConfigPre.h" #include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#include "lv_conf.h" #include "lv_conf.h"
#include "draw_ui.h" #include "draw_ui.h"
@ -116,7 +116,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
else if (event == LV_EVENT_RELEASED) { else if (event == LV_EVENT_RELEASED) {
if (gCfgItems.finish_power_off == 1) { if (gCfgItems.finish_power_off == 1) {
gCfgItems.finish_power_off = 0; gCfgItems.finish_power_off = 0;
lv_obj_set_event_cb_mks(obj, event_handler, ID_O_POWER_OFF, "bmp_Mamual.bin", 0); lv_obj_set_event_cb_mks(obj, event_handler, ID_O_POWER_OFF, "bmp_manual_off.bin", 0); //dindt find bmp_Mamual...
lv_label_set_text(label_PowerOff, printing_more_menu.manual); lv_label_set_text(label_PowerOff, printing_more_menu.manual);
lv_obj_align(label_PowerOff, buttonPowerOff, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET); lv_obj_align(label_PowerOff, buttonPowerOff, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_obj_refresh_ext_draw_pad(label_PowerOff); lv_obj_refresh_ext_draw_pad(label_PowerOff);
@ -124,7 +124,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
} }
else { else {
gCfgItems.finish_power_off = 1; gCfgItems.finish_power_off = 1;
lv_obj_set_event_cb_mks(obj, event_handler, ID_O_POWER_OFF, "bmp_Auto.bin", 0); lv_obj_set_event_cb_mks(obj, event_handler, ID_O_POWER_OFF, "bmp_auto_off.bin", 0);
lv_label_set_text(label_PowerOff, printing_more_menu.auto_close); lv_label_set_text(label_PowerOff, printing_more_menu.auto_close);
lv_obj_align(label_PowerOff, buttonPowerOff, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET); lv_obj_align(label_PowerOff, buttonPowerOff, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_obj_refresh_ext_draw_pad(label_PowerOff); lv_obj_refresh_ext_draw_pad(label_PowerOff);
@ -218,9 +218,9 @@ void lv_draw_opration(void) {
lv_imgbtn_set_style(buttonMove, LV_BTN_STATE_REL, &tft_style_lable_rel); lv_imgbtn_set_style(buttonMove, LV_BTN_STATE_REL, &tft_style_lable_rel);
} }
if (gCfgItems.finish_power_off == 1) if (gCfgItems.finish_power_off == 1)
lv_obj_set_event_cb_mks(buttonPowerOff, event_handler, ID_O_POWER_OFF, "bmp_Auto.bin", 0); lv_obj_set_event_cb_mks(buttonPowerOff, event_handler, ID_O_POWER_OFF, "bmp_auto_off.bin", 0);
else else
lv_obj_set_event_cb_mks(buttonPowerOff, event_handler, ID_O_POWER_OFF, "bmp_Mamual.bin", 0); lv_obj_set_event_cb_mks(buttonPowerOff, event_handler, ID_O_POWER_OFF, "bmp_manual_off.bin", 0);
lv_imgbtn_set_src(buttonPowerOff, LV_BTN_STATE_REL, &bmp_pic); lv_imgbtn_set_src(buttonPowerOff, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonPowerOff, LV_BTN_STATE_PR, &bmp_pic); lv_imgbtn_set_src(buttonPowerOff, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonPowerOff, LV_BTN_STATE_PR, &tft_style_lable_pre); lv_imgbtn_set_style(buttonPowerOff, LV_BTN_STATE_PR, &tft_style_lable_pre);
@ -319,4 +319,4 @@ void lv_draw_opration(void) {
void lv_clear_opration() { lv_obj_del(scr); } void lv_clear_opration() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI #endif // TFT_LVGL_UI

View file

@ -21,7 +21,7 @@
*/ */
#include "../../../../inc/MarlinConfigPre.h" #include "../../../../inc/MarlinConfigPre.h"
#if BOTH(TFT_LITTLE_VGL_UI, ADVANCED_PAUSE_FEATURE) #if BOTH(TFT_LVGL_UI, ADVANCED_PAUSE_FEATURE)
#include "draw_ui.h" #include "draw_ui.h"
#include "lv_conf.h" #include "lv_conf.h"
@ -52,4 +52,4 @@ void lv_draw_pause_message(const PauseMessage msg) {
} }
} }
#endif // TFT_LITTLE_VGL_UI && ADVANCED_PAUSE_FEATURE #endif // TFT_LVGL_UI && ADVANCED_PAUSE_FEATURE

View file

@ -21,7 +21,7 @@
*/ */
#include "../../../../inc/MarlinConfigPre.h" #include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#include "lv_conf.h" #include "lv_conf.h"
#include "draw_ui.h" #include "draw_ui.h"
@ -389,4 +389,4 @@ void disp_step_heat() {
void lv_clear_preHeat() { lv_obj_del(scr); } void lv_clear_preHeat() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI #endif // TFT_LVGL_UI

View file

@ -21,7 +21,7 @@
*/ */
#include "../../../../inc/MarlinConfigPre.h" #include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#include "../../../../MarlinCore.h" #include "../../../../MarlinCore.h"
#include "lv_conf.h" #include "lv_conf.h"
@ -324,7 +324,7 @@ void disp_gcode_icon(uint8_t file_num) {
lv_imgbtn_set_style(buttonPageDown, LV_BTN_STATE_PR, &tft_style_lable_pre); lv_imgbtn_set_style(buttonPageDown, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonPageDown, LV_BTN_STATE_REL, &tft_style_lable_rel); lv_imgbtn_set_style(buttonPageDown, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_P_RETURN, "bmp_Back.bin", 0); lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_P_RETURN, "bmp_Return.bin", 0);
lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic_117x92); lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic_117x92);
lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic_117x92); lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic_117x92);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_lable_pre); lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_lable_pre);
@ -445,21 +445,9 @@ void disp_gcode_icon(uint8_t file_num) {
void lv_open_gcode_file(char *path) { void lv_open_gcode_file(char *path) {
#if ENABLED(SDSUPPORT) #if ENABLED(SDSUPPORT)
//uint32_t read;
uint32_t *ps4;
int pre_sread_cnt;
char *cur_name; char *cur_name;
cur_name = strrchr(path, '/'); cur_name = strrchr(path, '/');
card.openFileRead(cur_name); card.openFileRead(cur_name);
card.read(public_buf, 512);
ps4 = (uint32_t *)strstr((char *)public_buf, ";simage:");
if (ps4) {
pre_sread_cnt = (uint32_t)ps4 - (uint32_t)((uint32_t *)(&public_buf[0]));
card.setIndex(pre_sread_cnt + 8);
}
#endif #endif
} }
@ -480,30 +468,64 @@ int ascii2dec_test(char *ascii) {
return result; return result;
} }
void lv_gcode_file_read(uint8_t *data_buf) { void lv_gcode_file_read(uint8_t *data_buf)
#if ENABLED(SDSUPPORT) {
uint16_t i = 0, j = 0, k = 0; #if ENABLED (SDSUPPORT)
//uint32_t read; uint16_t i=0,j=0,k=0;
uint16_t row_1 = 0; uint16_t row_1=0;
bool ignore_start = true;
char temp_test[200]; char temp_test[200];
volatile uint16_t *p_index;
while (1) { memset(public_buf, 0, 200);
card.read(temp_test, 200);
for (i = 0; i < 200;) { while(card.isFileOpen())
public_buf[row_1 * 200 + 100 * k + j] = (char)(ascii2dec_test(&temp_test[i]) << 4 | ascii2dec_test(&temp_test[i + 1])); {
j++; if (ignore_start) card.read(temp_test, 8); //line start -> ignore
i += 2; card.read(temp_test, 200); //data
} //\r;;gimage: we got the bit img, so stop here
k++; if (temp_test[1] == ';') {
j = 0; card.closefile();
if (k >= 2) {
k = 0;
card.read(temp_test, 9);
break; break;
} }
for(i=0;i<200;) {
public_buf[row_1*200+100*k+j] = (char)(ascii2dec_test(&temp_test[i])<<4|ascii2dec_test(&temp_test[i+1]));
j++;
i+=2;
}
uint16_t c = card.get();
//check if we have more data or finished the line (CR)
if (c == '\r') {
break;
}
card.setIndex(card.getIndex());
k++;
j=0;
ignore_start = false;
} }
memcpy(data_buf, public_buf, 200); #if ENABLED(SPI_GRAPHICAL_TFT)
#endif for(i=0;i<200;)
{
p_index = (uint16_t *)(&public_buf[i]);
//Color = (*p_index >> 8);
//*p_index = Color | ((*p_index & 0xff) << 8);
i+=2;
if(*p_index == 0x0000)*p_index=LV_COLOR_BACKGROUND.full;
}
#else
for(i=0;i<200;)
{
p_index = (uint16_t *)(&public_buf[i]);
//Color = (*p_index >> 8);
//*p_index = Color | ((*p_index & 0xff) << 8);
i+=2;
if(*p_index == 0x0000)*p_index=LV_COLOR_BACKGROUND.full; // 0x18C3; //
}
#endif
memcpy(data_buf,public_buf,200);
#endif
} }
void lv_close_gcode_file() {TERN_(SDSUPPORT, card.closefile());} void lv_close_gcode_file() {TERN_(SDSUPPORT, card.closefile());}
@ -592,4 +614,4 @@ void cutFileName(char *path, int len, int bytePerLine, char *outStr) {
void lv_clear_print_file() { lv_obj_del(scr); } void lv_clear_print_file() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI #endif // TFT_LVGL_UI

View file

@ -21,7 +21,7 @@
*/ */
#include "../../../../inc/MarlinConfigPre.h" #include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#include "lv_conf.h" #include "lv_conf.h"
#include "draw_ui.h" #include "draw_ui.h"
@ -308,13 +308,13 @@ void lv_draw_printing(void) {
lv_label_set_text(labelPause, printing_menu.pause); lv_label_set_text(labelPause, printing_menu.pause);
else else
lv_label_set_text(labelPause, printing_menu.resume); lv_label_set_text(labelPause, printing_menu.resume);
lv_obj_align(labelPause, buttonPause, LV_ALIGN_CENTER, 30, 0); lv_obj_align(labelPause, buttonPause, LV_ALIGN_CENTER, 20, 0);
lv_label_set_text(labelStop, printing_menu.stop); lv_label_set_text(labelStop, printing_menu.stop);
lv_obj_align(labelStop, buttonStop, LV_ALIGN_CENTER, 30, 0); lv_obj_align(labelStop, buttonStop, LV_ALIGN_CENTER, 20, 0);
lv_label_set_text(labelOperat, printing_menu.option); lv_label_set_text(labelOperat, printing_menu.option);
lv_obj_align(labelOperat, buttonOperat, LV_ALIGN_CENTER, 30, 0); lv_obj_align(labelOperat, buttonOperat, LV_ALIGN_CENTER, 20, 0);
} }
lv_style_copy(&lv_bar_style_indic, &lv_style_pretty_color); lv_style_copy(&lv_bar_style_indic, &lv_style_pretty_color);
@ -440,4 +440,4 @@ void setProBarRate() {
void lv_clear_printing() { lv_obj_del(scr); } void lv_clear_printing() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI #endif // TFT_LVGL_UI

View file

@ -21,7 +21,7 @@
*/ */
#include "../../../../inc/MarlinConfigPre.h" #include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#include "draw_ready_print.h" #include "draw_ready_print.h"
#include "draw_tool.h" #include "draw_tool.h"
@ -260,7 +260,7 @@ void lv_draw_ready_print(void) {
buttonTool = lv_imgbtn_create(scr, NULL); buttonTool = lv_imgbtn_create(scr, NULL);
buttonSet = lv_imgbtn_create(scr, NULL); buttonSet = lv_imgbtn_create(scr, NULL);
lv_obj_set_event_cb_mks(buttonPrint, event_handler, ID_PRINT, "bmp_Print.bin", 0); lv_obj_set_event_cb_mks(buttonPrint, event_handler, ID_PRINT, "bmp_printing.bin", 0);
//lv_imgbtn_set_src_mks(buttonPrint, LV_BTN_STATE_REL, &bmp_pic,(uint8_t *)"bmp_printing.bin"); //lv_imgbtn_set_src_mks(buttonPrint, LV_BTN_STATE_REL, &bmp_pic,(uint8_t *)"bmp_printing.bin");
lv_imgbtn_set_src(buttonPrint, LV_BTN_STATE_REL, &bmp_pic); lv_imgbtn_set_src(buttonPrint, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonPrint, LV_BTN_STATE_PR, &bmp_pic); lv_imgbtn_set_src(buttonPrint, LV_BTN_STATE_PR, &bmp_pic);
@ -316,4 +316,4 @@ void lv_draw_ready_print(void) {
void lv_clear_ready_print() { lv_obj_del(scr); } void lv_clear_ready_print() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI #endif // TFT_LVGL_UI

View file

@ -21,7 +21,7 @@
*/ */
#include "../../../../inc/MarlinConfigPre.h" #include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#include "../../../../MarlinCore.h" #include "../../../../MarlinCore.h"
#include "draw_ready_print.h" #include "draw_ready_print.h"
@ -33,6 +33,7 @@
//#include "../lvgl/src/lv_core/lv_refr.h" //#include "../lvgl/src/lv_core/lv_refr.h"
#include "draw_ui.h" #include "draw_ui.h"
#include "../../../../gcode/queue.h" #include "../../../../gcode/queue.h"
#include "pic_manager.h"
static lv_obj_t * scr; static lv_obj_t * scr;
@ -110,7 +111,10 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
void lv_draw_set(void) { void lv_draw_set(void) {
lv_obj_t *buttonFan, *buttonAbout; lv_obj_t *buttonFan, *buttonAbout;
lv_obj_t *buMotorOff, *buttonLanguage, *buttonBack; lv_obj_t *buMotorOff, *buttonBack;
#if HAS_LANG_SELECT_SCREEN
lv_obj_t *buttonLanguage;
#endif
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != SET_UI) { if (disp_state_stack._disp_state[disp_state_stack._disp_index] != SET_UI) {
disp_state_stack._disp_index++; disp_state_stack._disp_index++;
@ -141,7 +145,9 @@ void lv_draw_set(void) {
buttonAbout = lv_imgbtn_create(scr, NULL); buttonAbout = lv_imgbtn_create(scr, NULL);
//buttonContinue = lv_imgbtn_create(scr, NULL); //buttonContinue = lv_imgbtn_create(scr, NULL);
buMotorOff = lv_imgbtn_create(scr, NULL); buMotorOff = lv_imgbtn_create(scr, NULL);
buttonLanguage = lv_imgbtn_create(scr, NULL); #if HAS_LANG_SELECT_SCREEN
buttonLanguage = lv_imgbtn_create(scr, NULL);
#endif
buttonBack = lv_imgbtn_create(scr, NULL); buttonBack = lv_imgbtn_create(scr, NULL);
@ -170,20 +176,22 @@ void lv_draw_set(void) {
//lv_imgbtn_set_style(buttonContinue, LV_BTN_STATE_PR, &tft_style_lable_pre); //lv_imgbtn_set_style(buttonContinue, LV_BTN_STATE_PR, &tft_style_lable_pre);
//lv_imgbtn_set_style(buttonContinue, LV_BTN_STATE_REL, &tft_style_lable_rel); //lv_imgbtn_set_style(buttonContinue, LV_BTN_STATE_REL, &tft_style_lable_rel);
#if HAS_SUICIDE #if HAS_SUICIDE
lv_obj_set_event_cb_mks(buMotorOff, event_handler, ID_S_MOTOR_OFF, "bmp_Mamual.bin", 0); lv_obj_set_event_cb_mks(buMotorOff, event_handler, ID_S_MOTOR_OFF, "bmp_manual_off.bin", 0);
#else #else
lv_obj_set_event_cb_mks(buMotorOff, event_handler, ID_S_MOTOR_OFF, "bmp_Motor_off.bin", 0); lv_obj_set_event_cb_mks(buMotorOff, event_handler, ID_S_MOTOR_OFF, "bmp_manual_off.bin", 0);
#endif #endif
lv_imgbtn_set_src(buMotorOff, LV_BTN_STATE_REL, &bmp_pic); lv_imgbtn_set_src(buMotorOff, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buMotorOff, LV_BTN_STATE_PR, &bmp_pic); lv_imgbtn_set_src(buMotorOff, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buMotorOff, LV_BTN_STATE_PR, &tft_style_lable_pre); lv_imgbtn_set_style(buMotorOff, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buMotorOff, LV_BTN_STATE_REL, &tft_style_lable_rel); lv_imgbtn_set_style(buMotorOff, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonLanguage, event_handler, ID_S_LANGUAGE, "bmp_Language.bin", 0); #if HAS_LANG_SELECT_SCREEN
lv_imgbtn_set_src(buttonLanguage, LV_BTN_STATE_REL, &bmp_pic); lv_obj_set_event_cb_mks(buttonLanguage, event_handler, ID_S_LANGUAGE, "bmp_Language.bin", 0);
lv_imgbtn_set_src(buttonLanguage, LV_BTN_STATE_PR, &bmp_pic); lv_imgbtn_set_src(buttonLanguage, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_style(buttonLanguage, LV_BTN_STATE_PR, &tft_style_lable_pre); lv_imgbtn_set_src(buttonLanguage, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonLanguage, LV_BTN_STATE_REL, &tft_style_lable_rel); lv_imgbtn_set_style(buttonLanguage, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonLanguage, LV_BTN_STATE_REL, &tft_style_lable_rel);
#endif
lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_S_RETURN, "bmp_Return.bin", 0); lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_S_RETURN, "bmp_Return.bin", 0);
lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic); lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic);
@ -205,7 +213,9 @@ void lv_draw_set(void) {
lv_obj_set_pos(buttonAbout, BTN_X_PIXEL * 2 + INTERVAL_V * 3, titleHeight); lv_obj_set_pos(buttonAbout, BTN_X_PIXEL * 2 + INTERVAL_V * 3, titleHeight);
//lv_obj_set_pos(buttonContinue,BTN_X_PIXEL*3+INTERVAL_V*4,titleHeight); //lv_obj_set_pos(buttonContinue,BTN_X_PIXEL*3+INTERVAL_V*4,titleHeight);
lv_obj_set_pos(buMotorOff, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight); lv_obj_set_pos(buMotorOff, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight);
lv_obj_set_pos(buttonLanguage, INTERVAL_V, titleHeight); #if HAS_LANG_SELECT_SCREEN
lv_obj_set_pos(buttonLanguage, INTERVAL_V, titleHeight);
#endif
lv_obj_set_pos(buttonBack, BTN_X_PIXEL * 3 + INTERVAL_V * 4, BTN_Y_PIXEL + INTERVAL_H + titleHeight); lv_obj_set_pos(buttonBack, BTN_X_PIXEL * 3 + INTERVAL_V * 4, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
/*Create a label on the Image button*/ /*Create a label on the Image button*/
@ -214,7 +224,9 @@ void lv_draw_set(void) {
lv_btn_set_layout(buttonAbout, LV_LAYOUT_OFF); lv_btn_set_layout(buttonAbout, LV_LAYOUT_OFF);
//lv_btn_set_layout(buttonContinue, LV_LAYOUT_OFF); //lv_btn_set_layout(buttonContinue, LV_LAYOUT_OFF);
lv_btn_set_layout(buMotorOff, LV_LAYOUT_OFF); lv_btn_set_layout(buMotorOff, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonLanguage, LV_LAYOUT_OFF); #if HAS_LANG_SELECT_SCREEN
lv_btn_set_layout(buttonLanguage, LV_LAYOUT_OFF);
#endif
lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF); lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
//lv_obj_t * labelWifi= lv_label_create(buttonWifi, NULL); //lv_obj_t * labelWifi= lv_label_create(buttonWifi, NULL);
@ -222,7 +234,9 @@ void lv_draw_set(void) {
lv_obj_t * label_About = lv_label_create(buttonAbout, NULL); lv_obj_t * label_About = lv_label_create(buttonAbout, NULL);
//lv_obj_t * label_Continue = lv_label_create(buttonContinue, NULL); //lv_obj_t * label_Continue = lv_label_create(buttonContinue, NULL);
lv_obj_t * label_MotorOff = lv_label_create(buMotorOff, NULL); lv_obj_t * label_MotorOff = lv_label_create(buMotorOff, NULL);
lv_obj_t * label_Language = lv_label_create(buttonLanguage, NULL); #if HAS_LANG_SELECT_SCREEN
lv_obj_t * label_Language = lv_label_create(buttonLanguage, NULL);
#endif
lv_obj_t * label_Back = lv_label_create(buttonBack, NULL); lv_obj_t * label_Back = lv_label_create(buttonBack, NULL);
@ -245,8 +259,10 @@ void lv_draw_set(void) {
#endif #endif
lv_obj_align(label_MotorOff, buMotorOff, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET); lv_obj_align(label_MotorOff, buMotorOff, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(label_Language, set_menu.language); #if HAS_LANG_SELECT_SCREEN
lv_obj_align(label_Language, buttonLanguage, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET); lv_label_set_text(label_Language, set_menu.language);
lv_obj_align(label_Language, buttonLanguage, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
#endif
lv_label_set_text(label_Back, common_menu.text_back); lv_label_set_text(label_Back, common_menu.text_back);
lv_obj_align(label_Back, buttonBack, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET); lv_obj_align(label_Back, buttonBack, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
@ -255,4 +271,4 @@ void lv_draw_set(void) {
void lv_clear_set() { lv_obj_del(scr); } void lv_clear_set() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI #endif // TFT_LVGL_UI

View file

@ -21,7 +21,7 @@
*/ */
#include "../../../../inc/MarlinConfigPre.h" #include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#include "lv_conf.h" #include "lv_conf.h"
#include "draw_ui.h" #include "draw_ui.h"
@ -267,4 +267,4 @@ void lv_draw_tool(void) {
void lv_clear_tool() { lv_obj_del(scr); } void lv_clear_tool() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI #endif // TFT_LVGL_UI

View file

@ -21,11 +21,10 @@
*/ */
#include "../../../../inc/MarlinConfigPre.h" #include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#include "W25Qxx.h" #include "W25Qxx.h"
#include "tft_lvgl_configuration.h" #include "tft_lvgl_configuration.h"
#include "pic_manager.h"
#include <SPI.h> #include <SPI.h>
@ -38,6 +37,8 @@
#include "../../../../module/motion.h" #include "../../../../module/motion.h"
#include "../../../../module/planner.h" #include "../../../../module/planner.h"
#include "pic_manager.h"
#if ENABLED(POWER_LOSS_RECOVERY) #if ENABLED(POWER_LOSS_RECOVERY)
#include "../../../../feature/powerloss.h" #include "../../../../feature/powerloss.h"
#endif #endif
@ -73,7 +74,33 @@ extern void LCD_IO_WriteData(uint16_t RegValue);
void gCfgItems_init() { void gCfgItems_init() {
gCfgItems.multiple_language = MULTI_LANGUAGE_ENABLE; gCfgItems.multiple_language = MULTI_LANGUAGE_ENABLE;
gCfgItems.language = LANG_ENGLISH; #if 1 //LCD_LANGUAGE == en
gCfgItems.language = LANG_ENGLISH;
#elif LCD_LANGUAGE == zh_CN
gCfgItems.language = LANG_SIMPLE_CHINESE;
#elif LCD_LANGUAGE == zh_TW
gCfgItems.language = LANG_COMPLEX_CHINESE;
#elif LCD_LANGUAGE == jp_kana
gCfgItems.language = LANG_JAPAN;
#elif LCD_LANGUAGE == de
gCfgItems.language = LANG_GERMAN;
#elif LCD_LANGUAGE == fr
gCfgItems.language = LANG_FRENCH;
#elif LCD_LANGUAGE == ru
gCfgItems.language = LANG_RUSSIAN;
#elif LCD_LANGUAGE == ko_KR
gCfgItems.language = LANG_KOREAN;
#elif LCD_LANGUAGE == tr
gCfgItems.language = LANG_TURKISH;
#elif LCD_LANGUAGE == es
gCfgItems.language = LANG_SPANISH;
#elif LCD_LANGUAGE == el
gCfgItems.language = LANG_GREEK;
#elif LCD_LANGUAGE == it
gCfgItems.language = LANG_ITALY;
#elif LCD_LANGUAGE == pt
gCfgItems.language = LANG_PORTUGUESE;
#endif
gCfgItems.leveling_mode = 0; gCfgItems.leveling_mode = 0;
gCfgItems.from_flash_pic = 0; gCfgItems.from_flash_pic = 0;
gCfgItems.curFilesize = 0; gCfgItems.curFilesize = 0;
@ -139,8 +166,13 @@ void tft_style_init() {
tft_style_lable_rel.body.grad_color = LV_COLOR_BACKGROUND; tft_style_lable_rel.body.grad_color = LV_COLOR_BACKGROUND;
tft_style_lable_rel.text.color = LV_COLOR_TEXT; tft_style_lable_rel.text.color = LV_COLOR_TEXT;
tft_style_lable_rel.text.sel_color = LV_COLOR_TEXT; tft_style_lable_rel.text.sel_color = LV_COLOR_TEXT;
tft_style_lable_pre.text.font = &gb2312_puhui32; #if HAS_SPI_FLASH_FONT
tft_style_lable_rel.text.font = &gb2312_puhui32; tft_style_lable_pre.text.font = &gb2312_puhui32;
tft_style_lable_rel.text.font = &gb2312_puhui32;
#else
tft_style_lable_pre.text.font = LV_FONT_DEFAULT;
tft_style_lable_rel.text.font = LV_FONT_DEFAULT;
#endif
tft_style_lable_pre.line.width = 0; tft_style_lable_pre.line.width = 0;
tft_style_lable_rel.line.width = 0; tft_style_lable_rel.line.width = 0;
tft_style_lable_pre.text.letter_space = 0; tft_style_lable_pre.text.letter_space = 0;
@ -325,6 +357,9 @@ char *creat_title_text() {
return public_buf_m; return public_buf_m;
} }
#if HAS_GCODE_PREVIEW
uint32_t gPicturePreviewStart = 0;
void preview_gcode_prehandle(char *path) { void preview_gcode_prehandle(char *path) {
#if ENABLED(SDSUPPORT) #if ENABLED(SDSUPPORT)
//uint8_t re; //uint8_t re;
@ -333,6 +368,7 @@ void preview_gcode_prehandle(char *path) {
uint32_t *p1; uint32_t *p1;
char *cur_name; char *cur_name;
gPicturePreviewStart = 0;
cur_name = strrchr(path, '/'); cur_name = strrchr(path, '/');
card.openFileRead(cur_name); card.openFileRead(cur_name);
card.read(public_buf, 512); card.read(public_buf, 512);
@ -369,7 +405,24 @@ void gcode_preview(char *path, int xpos_pixel, int ypos_pixel) {
cur_name = strrchr(path, '/'); cur_name = strrchr(path, '/');
card.openFileRead(cur_name); card.openFileRead(cur_name);
card.setIndex((PREVIEW_LITTLE_PIC_SIZE + To_pre_view) + size * row + 8); if (gPicturePreviewStart <= 0) {
while (1) {
uint32_t br = card.read(public_buf, 400);
uint32_t* p1 = (uint32_t *)strstr((char *)public_buf, ";gimage:");
if (p1) {
gPicturePreviewStart += (uint32_t)p1 - (uint32_t)((uint32_t *)(&public_buf[0]));
break;
}
else {
gPicturePreviewStart += br;
}
if (br < 400) break;
}
}
// SERIAL_ECHOLNPAIR("gPicturePreviewStart: ", gPicturePreviewStart, " PREVIEW_LITTLE_PIC_SIZE: ", PREVIEW_LITTLE_PIC_SIZE);
card.setIndex((gPicturePreviewStart + To_pre_view) + size * row + 8);
#if ENABLED(SPI_GRAPHICAL_TFT) #if ENABLED(SPI_GRAPHICAL_TFT)
SPI_TFT.spi_init(SPI_FULL_SPEED); SPI_TFT.spi_init(SPI_FULL_SPEED);
//SPI_TFT.SetCursor(0,0); //SPI_TFT.SetCursor(0,0);
@ -417,14 +470,16 @@ void gcode_preview(char *path, int xpos_pixel, int ypos_pixel) {
#else #else
for (i = 0; i < 400;) { for (i = 0; i < 400;) {
p_index = (uint16_t *)(&bmp_public_buf[i]); p_index = (uint16_t *)(&bmp_public_buf[i]);
//if (*p_index == 0x0000)*p_index=gCfgItems.preview_bk_color; if (*p_index == 0x0000)*p_index=LV_COLOR_BACKGROUND.full; //gCfgItems.preview_bk_color;
LCD_IO_WriteData(*p_index); LCD_IO_WriteData(*p_index);
i += 2; i += 2;
} }
#endif #endif
W25QXX.init(SPI_QUARTER_SPEED); #if HAS_BAK_VIEW_IN_FLASH
if (row < 20) W25QXX.SPI_FLASH_SectorErase(BAK_VIEW_ADDR_TFT35 + row * 4096); W25QXX.init(SPI_QUARTER_SPEED);
W25QXX.SPI_FLASH_BufferWrite(bmp_public_buf, BAK_VIEW_ADDR_TFT35 + row * 400, 400); if (row < 20) W25QXX.SPI_FLASH_SectorErase(BAK_VIEW_ADDR_TFT35 + row * 4096);
W25QXX.SPI_FLASH_BufferWrite(bmp_public_buf, BAK_VIEW_ADDR_TFT35 + row * 400, 400);
#endif
row++; row++;
if (row >= 200) { if (row >= 200) {
size = 809; size = 809;
@ -489,15 +544,19 @@ void Draw_default_preview(int xpos_pixel, int ypos_pixel, uint8_t sel) {
int x_off = 0, y_off = 0; int x_off = 0, y_off = 0;
int _y; int _y;
uint16_t *p_index; uint16_t *p_index;
int i, j; int i;
uint16_t temp_p, Color; uint16_t temp_p;
for (index = 0; index < 10; index++) { // 200*200 for (index = 0; index < 10; index++) { // 200*200
if (sel == 1) flash_view_Read(bmp_public_buf, 8000); //20k #if HAS_BAK_VIEW_IN_FLASH
//memset(bmp_public_buf,0x1f,8000); if (sel == 1) flash_view_Read(bmp_public_buf, 8000); //20k
else
//memset(bmp_public_buf,0x1f,8000); //memset(bmp_public_buf,0x1f,8000);
default_view_Read(bmp_public_buf, 8000); //20k else
//memset(bmp_public_buf,0x1f,8000);
default_view_Read(bmp_public_buf, DEFAULT_VIEW_MAX_SIZE / 10); //20k
#else
default_view_Read(bmp_public_buf, DEFAULT_VIEW_MAX_SIZE / 10); //20k
#endif
i = 0; i = 0;
#if ENABLED(SPI_GRAPHICAL_TFT) #if ENABLED(SPI_GRAPHICAL_TFT)
@ -534,6 +593,7 @@ void Draw_default_preview(int xpos_pixel, int ypos_pixel, uint8_t sel) {
else { else {
p_index = (uint16_t *)(&bmp_public_buf[i]); p_index = (uint16_t *)(&bmp_public_buf[i]);
} }
if (*p_index == 0x0000)*p_index=LV_COLOR_BACKGROUND.full; //gCfgItems.preview_bk_color;
LCD_IO_WriteData(*p_index); LCD_IO_WriteData(*p_index);
i += 2; i += 2;
} }
@ -547,15 +607,20 @@ void Draw_default_preview(int xpos_pixel, int ypos_pixel, uint8_t sel) {
void disp_pre_gcode(int xpos_pixel, int ypos_pixel) { void disp_pre_gcode(int xpos_pixel, int ypos_pixel) {
if (gcode_preview_over == 1) gcode_preview(list_file.file_name[sel_id], xpos_pixel, ypos_pixel); if (gcode_preview_over == 1) gcode_preview(list_file.file_name[sel_id], xpos_pixel, ypos_pixel);
if (flash_preview_begin == 1) { #if HAS_BAK_VIEW_IN_FLASH
flash_preview_begin = 0; if (flash_preview_begin == 1) {
Draw_default_preview(xpos_pixel, ypos_pixel, 1); flash_preview_begin = 0;
} Draw_default_preview(xpos_pixel, ypos_pixel, 1);
if (default_preview_flg == 1) { }
Draw_default_preview(xpos_pixel, ypos_pixel, 0); #endif
default_preview_flg = 0; #if HAS_GCODE_DEFAULT_VIEW_IN_FLASH
} if (default_preview_flg == 1) {
Draw_default_preview(xpos_pixel, ypos_pixel, 0);
default_preview_flg = 0;
}
#endif
} }
#endif
void print_time_run() { void print_time_run() {
static uint8_t lastSec = 0; static uint8_t lastSec = 0;
@ -1175,9 +1240,11 @@ void LV_TASK_HANDLER() {
//lv_tick_inc(1); //lv_tick_inc(1);
lv_task_handler(); lv_task_handler();
TERN_(MKS_TEST, mks_test()); TERN_(MKS_TEST, mks_test());
disp_pre_gcode(2, 36); #if HAS_GCODE_PREVIEW
disp_pre_gcode(2, 36);
#endif
GUI_RefreshPage(); GUI_RefreshPage();
//sd_detection(); //sd_detection();
} }
#endif // TFT_LITTLE_VGL_UI #endif // TFT_LVGL_UI

View file

@ -28,6 +28,11 @@ extern "C" { /* C-declarations for C++ */
#include <stdint.h> #include <stdint.h>
#include <string.h> #include <string.h>
#include "lvgl.h" #include "lvgl.h"
//the colors of the last MKS Ui
#undef LV_COLOR_BACKGROUND
#define LV_COLOR_BACKGROUND LV_COLOR_MAKE(0x1A, 0x1A, 0x1A) //LV_COLOR_MAKE(0x00, 0x00, 0x00)
#include "tft_multi_language.h" #include "tft_multi_language.h"
#include "draw_ready_print.h" #include "draw_ready_print.h"
#include "draw_language.h" #include "draw_language.h"
@ -214,7 +219,9 @@ extern void tft_style_init();
extern char *creat_title_text(void); extern char *creat_title_text(void);
extern void preview_gcode_prehandle(char *path); extern void preview_gcode_prehandle(char *path);
extern void update_spi_flash(); extern void update_spi_flash();
extern void disp_pre_gcode(int xpos_pixel, int ypos_pixel); #if HAS_GCODE_PREVIEW
extern void disp_pre_gcode(int xpos_pixel, int ypos_pixel);
#endif
extern void GUI_RefreshPage(); extern void GUI_RefreshPage();
extern void clear_cur_ui(); extern void clear_cur_ui();
extern void draw_return_ui(); extern void draw_return_ui();

View file

@ -21,12 +21,14 @@
*/ */
#include "../../../../inc/MarlinConfigPre.h" #include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#include "../../../../MarlinCore.h" #include "../../../../MarlinCore.h"
#include "lvgl.h" #include "lvgl.h"
#include "pic_manager.h" #include "pic_manager.h"
#if HAS_SPI_FLASH_FONT
typedef struct { typedef struct {
uint16_t min; uint16_t min;
uint16_t max; uint16_t max;
@ -108,4 +110,6 @@ void init_gb2312_font() {
gb2312_puhui32.base_line = 0; gb2312_puhui32.base_line = 0;
} }
#endif // TFT_LITTLE_VGL_UI #endif // HAS_SPI_FLASH_FONT
#endif // TFT_LVGL_UI

View file

@ -21,19 +21,20 @@
*/ */
#include "../../../../inc/MarlinConfigPre.h" #include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#include "tft_lvgl_configuration.h" #include "tft_lvgl_configuration.h"
#include "lvgl.h" #include "lvgl.h"
#include "draw_ready_print.h" #include "draw_ready_print.h"
#include "W25Qxx.h" #include "W25Qxx.h"
#include "pic_manager.h"
#include "mks_hardware_test.h" #include "mks_hardware_test.h"
#include "../../../../MarlinCore.h" #include "../../../../MarlinCore.h"
#include "../../../../module/temperature.h" #include "../../../../module/temperature.h"
#include "../../../../feature/touch/xpt2046.h" #include "../../../../feature/touch/xpt2046.h"
#include "pic_manager.h"
#if ENABLED(MKS_TEST) #if ENABLED(MKS_TEST)
extern uint8_t curent_disp_ui; extern uint8_t curent_disp_ui;
@ -591,4 +592,4 @@ void disp_font_update() {
disp_string(120, 150, "FONT Updating...", 0xFFFF, 0x0000); disp_string(120, 150, "FONT Updating...", 0xFFFF, 0x0000);
} }
#endif // TFT_LITTLE_VGL_UI #endif // TFT_LVGL_UI

View file

@ -21,11 +21,10 @@
*/ */
#include "../../../../inc/MarlinConfigPre.h" #include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#include "../../../../MarlinCore.h" #include "../../../../MarlinCore.h"
//#include "type_define.h"
#include "string.h" #include "string.h"
#include "pic_manager.h" #include "pic_manager.h"
@ -34,10 +33,6 @@
#include "draw_ready_print.h" #include "draw_ready_print.h"
#include "mks_hardware_test.h" #include "mks_hardware_test.h"
//#include "gui.h"
//#include "spi_flash.h"
//uint8_t DMA_ERRO_FLAG;
extern uint16_t DeviceCode; extern uint16_t DeviceCode;
extern unsigned char bmp_public_buf[17 * 1024]; extern unsigned char bmp_public_buf[17 * 1024];
@ -45,7 +40,158 @@ extern unsigned char bmp_public_buf[17 * 1024];
extern char *createFilename(char * const buffer, const dir_t &p); extern char *createFilename(char * const buffer, const dir_t &p);
#endif #endif
/*void SPI_FLASH_BufferRead(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t NumByteToRead) {}*/ static char assets[][30] = {
//homing screen
"bmp_Zero.bin",
"bmp_zeroX.bin",
"bmp_zeroY.bin",
"bmp_zeroZ.bin",
"bmp_manual_off.bin",
//tool screen
"bmp_PreHeat.bin",
"bmp_Extruct.bin",
"bmp_Mov.bin",
// "bmp_Zero.bin",
"bmp_Leveling.bin",
//fan screen
"bmp_Add.bin",
"bmp_Dec.bin",
"bmp_Speed255.bin",
"bmp_Speed127.bin",
"bmp_Speed0.bin",
//preheat screen
// "bmp_Add.bin",
// "bmp_Dec.bin",
"bmp_Speed0.bin",
// "bmp_Extru2.bin",
// "bmp_Extru1.bin",
"bmp_Bed.bin",
"bmp_Step1_degree.bin",
"bmp_Step5_degree.bin",
"bmp_Step10_degree.bin",
//extrusion screen
"bmp_In.bin",
"bmp_Out.bin",
"bmp_Extru1.bin",
#if EXTRUDERS > 1
"bmp_Extru2.bin",
#endif
"bmp_Speed_high.bin",
"bmp_Speed_slow.bin",
"bmp_Speed_normal.bin",
"bmp_Step1_mm.bin",
"bmp_Step5_mm.bin",
"bmp_Step10_mm.bin",
//select file screen
"bmp_pageUp.bin",
"bmp_pageDown.bin",
//"bmp_Back.bin", //TODO: why two back buttons? Why not just one? (return / back)
"bmp_Dir.bin",
"bmp_File.bin",
//move motor screen
//TODO: 6 equal icons, just in diffenct rotation... it may be optimized too
"bmp_xAdd.bin",
"bmp_xDec.bin",
"bmp_yAdd.bin",
"bmp_yDec.bin",
"bmp_zAdd.bin",
"bmp_zDec.bin",
"bmp_Step_move0_1.bin",
"bmp_Step_move1.bin",
"bmp_Step_move10.bin",
//operation screen
"bmp_auto_off.bin",
"bmp_Speed.bin",
//"bmp_Mamual.bin", //TODO: didn't find it.. changed to bmp_manual_off.bin
"bmp_Fan.bin",
//"bmp_PreHeat.bin",
//"bmp_Extruct.bin",
// "bmp_Mov.bin",
//change speed screen
"bmp_Step1_percent.bin",
"bmp_Step5_percent.bin",
"bmp_Step10_percent.bin",
"bmp_extruct_sel.bin",
"bmp_mov_changespeed.bin",
// "bmp_extrude_opr.bin", equal to "bmp_Extruct.bin"
"bmp_mov_sel.bin",
//printing screen
"bmp_Pause.bin",
"bmp_Resume.bin",
"bmp_Stop.bin",
"bmp_Ext1_state.bin",
#if EXTRUDERS > 1
"bmp_Ext2_state.bin",
#endif
"bmp_Bed_state.bin",
"bmp_Fan_state.bin",
"bmp_Time_state.bin",
"bmp_Zpos_state.bin",
"bmp_Operate.bin",
//manual leval screen (only if disabled auto level)
#if DISABLED(AUTO_BED_LEVELING_BILINEAR)
"bmp_Leveling1.bin",
"bmp_Leveling2.bin",
"bmp_Leveling3.bin",
"bmp_Leveling4.bin",
"bmp_Leveling5.bin",
#endif
//lang select screen
#if HAS_LANG_SELECT_SCREEN
"bmp_Language.bin",
"bmp_simplified_cn.bin",
"bmp_simplified_cn_sel.bin",
"bmp_traditional_cn.bin",
"bmp_traditional_cn_sel.bin",
"bmp_English.bin",
"bmp_English_sel.bin",
"bmp_Russian.bin",
"bmp_Russian_sel.bin",
"bmp_Spanish.bin",
"bmp_Spanish_sel.bin",
"bmp_French.bin",
"bmp_French_sel.bin",
"bmp_Italy.bin",
"bmp_Italy_sel.bin",
#endif //HAS_LANG_SELECT_SCREEN
//gcode preview
#if HAS_GCODE_DEFAULT_VIEW_IN_FLASH
"bmp_preview.bin",
#endif
//settings screen
"bmp_About.bin",
//"bmp_Language.bin",
//"bmp_Fan.bin",
//"bmp_manual_off.bin",
//start screen
"bmp_printing.bin",
"bmp_Set.bin",
"bmp_Tool.bin",
//base icons
"bmp_Return.bin"
};
#if HAS_SPI_FLASH_FONT
static char fonts[][50] = {
"GBK16.bin",
"UNIGBK.bin",
};
#endif
uint32_t lv_get_pic_addr(uint8_t *Pname) { uint32_t lv_get_pic_addr(uint8_t *Pname) {
uint8_t Pic_cnt; uint8_t Pic_cnt;
@ -54,21 +200,22 @@ uint32_t lv_get_pic_addr(uint8_t *Pname) {
uint32_t tmp_cnt = 0; uint32_t tmp_cnt = 0;
uint32_t addr = 0; uint32_t addr = 0;
#if ENABLED(MARLIN_DEV_MODE)
SERIAL_ECHOLNPAIR("Getting picture SPI Flash Address: ", (const char*)Pname);
#endif
W25QXX.init(SPI_QUARTER_SPEED); W25QXX.init(SPI_QUARTER_SPEED);
W25QXX.SPI_FLASH_BufferRead(&Pic_cnt, PIC_COUNTER_ADDR, 1); W25QXX.SPI_FLASH_BufferRead(&Pic_cnt, PIC_COUNTER_ADDR, 1);
if (Pic_cnt == 0xff) if (Pic_cnt == 0xFF) Pic_cnt = 0;
Pic_cnt = 0;
for (i = 0; i < Pic_cnt; i++) { for (i = 0; i < Pic_cnt; i++) {
j = 0; j = 0;
do do {
{
W25QXX.SPI_FLASH_BufferRead(&PIC.name[j], PIC_NAME_ADDR + tmp_cnt, 1); W25QXX.SPI_FLASH_BufferRead(&PIC.name[j], PIC_NAME_ADDR + tmp_cnt, 1);
tmp_cnt++; tmp_cnt++;
}while (PIC.name[j++] != '\0'); } while (PIC.name[j++] != '\0');
if ((strcmp((char*)Pname, (char*)PIC.name)) == 0) {
if ((strcasecmp((char*)Pname, (char*)PIC.name)) == 0) {
if ((DeviceCode == 0x9488) || (DeviceCode == 0x5761)) if ((DeviceCode == 0x9488) || (DeviceCode == 0x5761))
addr = PIC_DATA_ADDR_TFT35 + i * PER_PIC_MAX_SPACE_TFT35; addr = PIC_DATA_ADDR_TFT35 + i * PER_PIC_MAX_SPACE_TFT35;
else else
@ -86,111 +233,40 @@ const char *bakPath = "bak_pic";
const char *fontPath = "mks_font"; const char *fontPath = "mks_font";
const char *bakFont = "bak_font"; const char *bakFont = "bak_font";
#if 1
void spiFlashErase_PIC() { void spiFlashErase_PIC() {
#if 1 volatile uint32_t pic_sectorcnt = 0;
volatile uint32_t pic_sectorcnt = 0; for (pic_sectorcnt = 0; pic_sectorcnt < TERN(MKS_TEST, 2, PIC_SIZE_xM * 1024 / 64); pic_sectorcnt++)
W25QXX.SPI_FLASH_BlockErase(PICINFOADDR + pic_sectorcnt * 64 * 1024);
//LCD_Clear(BACK_COLOR);
//LCD_DisplayString(90,80,"SPI Flash");
//LCD_DisplayString(120,90,"PIC Erasing...");
if ((DeviceCode == 0x9488) || (DeviceCode == 0x5761)) {
//LCD_ShowString(180,100,200,24,24,"SPI Flash");
//LCD_ShowString(170,130,200,24,24,"PIC Erasing...");
}
else {
//LCD_ShowString(100,90,200,24,24,"SPI Flash");
//LCD_ShowString(100,120,200,24,24,"PIC Erasing...");
}
#if ENABLED(MKS_TEST)
for (pic_sectorcnt = 0; pic_sectorcnt < 2; pic_sectorcnt++)
W25QXX.SPI_FLASH_BlockErase(PICINFOADDR + pic_sectorcnt * 64 * 1024);
#else
for (pic_sectorcnt = 0; pic_sectorcnt < PIC_SIZE_xM * 1024 / 64; pic_sectorcnt++)
W25QXX.SPI_FLASH_BlockErase(PICINFOADDR + pic_sectorcnt * 64 * 1024);
#endif
/*
FLASH_Unlock();
spiFlashEraseFlag = SPI_FLASH_ERASE_FLAG_DATA;
FLASH_ProgramHalfWord(SPI_FLASH_ERASE_FLAG_ADDR,spiFlashEraseFlag);
FLASH_Lock();
*/
#if 0
if (DeviceCode == 0x9488)
LCD_ShowString(170, 130, 200, 24, 24, "PIC Erase Done");
else
LCD_ShowString(100, 120, 200, 24, 24, "PIC Erase Done");
#endif
//spiFlashEraseFlag = 1;
#endif
} }
void spiFlashErase_FONT() { #if HAS_SPI_FLASH_FONT
volatile uint32_t Font_sectorcnt = 0; void spiFlashErase_FONT() {
volatile uint32_t Font_sectorcnt = 0;
//LCD_Clear(BACK_COLOR); for (Font_sectorcnt = 0; Font_sectorcnt < FONT_SIZE_xM * 1024 / 64; Font_sectorcnt++)
if ((DeviceCode == 0x9488) || (DeviceCode == 0x5761)) { W25QXX.SPI_FLASH_BlockErase(FONTINFOADDR + Font_sectorcnt * 64 * 1024);
//LCD_ShowString(180,100,200,24,24,"SPI Flash");
//LCD_ShowString(170,130,200,24,24,"FONT Erasing...");
} }
else { #endif
//LCD_ShowString(100,90,200,24,24,"SPI Flash");
//LCD_ShowString(90,120,200,24,24,"FONT Erasing...");
}
for (Font_sectorcnt = 0; Font_sectorcnt < FONT_SIZE_xM * 1024 / 64; Font_sectorcnt++)
W25QXX.SPI_FLASH_BlockErase(FONTINFOADDR + Font_sectorcnt * 64 * 1024);
/*
FLASH_Unlock();
spiFlashEraseFlag = SPI_FLASH_ERASE_FLAG_DATA;
FLASH_ProgramHalfWord(SPI_FLASH_ERASE_FLAG_ADDR,spiFlashEraseFlag);
FLASH_Lock();
*/
#if 0
if (DeviceCode == 0x9488)
LCD_ShowString(170, 130, 200, 24, 24, "FONT Erase Done");
else
LCD_ShowString(90, 120, 200, 24, 24, "FONT Erase Done");
//LCD_DisplayString(120,90,"FONT Erase Done");
#endif
//spiFlashEraseFlag = 1;
}
uint32_t LogoWrite_Addroffset = 0; uint32_t LogoWrite_Addroffset = 0;
uint8_t Pic_Logo_Write(uint8_t *LogoName, uint8_t *Logo_Wbuff, uint32_t LogoWriteSize) { uint8_t Pic_Logo_Write(uint8_t *LogoName, uint8_t *Logo_Wbuff, uint32_t LogoWriteSize) {
//uint16_t n;
uint32_t i;
uint8_t temp1;
static uint32_t logo_maxsize;
if (LogoWriteSize <= 0) return 0; if (LogoWriteSize <= 0) return 0;
W25QXX.SPI_FLASH_BufferWrite(Logo_Wbuff, PIC_LOGO_ADDR + LogoWrite_Addroffset, LogoWriteSize); W25QXX.SPI_FLASH_BufferWrite(Logo_Wbuff, PIC_LOGO_ADDR + LogoWrite_Addroffset, LogoWriteSize);
for (i = 0; i < LogoWriteSize; i++) { for (uint32_t i = 0; i < LogoWriteSize; i++) {
uint8_t temp1;
W25QXX.SPI_FLASH_BufferRead(&temp1, PIC_LOGO_ADDR + LogoWrite_Addroffset + i, 1); W25QXX.SPI_FLASH_BufferRead(&temp1, PIC_LOGO_ADDR + LogoWrite_Addroffset + i, 1);
if (*(Logo_Wbuff + i) != temp1) return 0; if (*(Logo_Wbuff + i) != temp1) return 0;
} }
LogoWrite_Addroffset += LogoWriteSize; LogoWrite_Addroffset += LogoWriteSize;
if ((DeviceCode == 0x9488) || (DeviceCode == 0x5761)) const uint32_t logo_maxsize = DeviceCode == 0x9488 || DeviceCode == 0x5761 ? LOGO_MAX_SIZE_TFT35 : LOGO_MAX_SIZE_TFT32;
logo_maxsize = LOGO_MAX_SIZE_TFT35; if (LogoWrite_Addroffset >= logo_maxsize) LogoWrite_Addroffset = 0;
else
logo_maxsize = LOGO_MAX_SIZE_TFT32;
if (LogoWrite_Addroffset >= logo_maxsize)
LogoWrite_Addroffset = 0;
return 1; return 1;
} }
uint32_t TitleLogoWrite_Addroffset = 0; uint32_t TitleLogoWrite_Addroffset = 0;
uint8_t Pic_TitleLogo_Write(uint8_t *TitleLogoName, uint8_t *TitleLogo_Wbuff, uint32_t TitleLogoWriteSize) { uint8_t Pic_TitleLogo_Write(uint8_t *TitleLogoName, uint8_t *TitleLogo_Wbuff, uint32_t TitleLogoWriteSize) {
//uint32_t i;
//uint8_t temp1;
if (TitleLogoWriteSize <= 0) if (TitleLogoWriteSize <= 0)
return 0; return 0;
if ((DeviceCode == 0x9488) || (DeviceCode == 0x5761)) if ((DeviceCode == 0x9488) || (DeviceCode == 0x5761))
@ -216,18 +292,11 @@ uint32_t Pic_Info_Write(uint8_t *P_name, uint32_t P_size) {
uint32_t Pic_SaveAddr; uint32_t Pic_SaveAddr;
uint32_t Pic_SizeSaveAddr; uint32_t Pic_SizeSaveAddr;
uint32_t Pic_NameSaveAddr; uint32_t Pic_NameSaveAddr;
//uint8_t temp;
uint8_t Pname_temp; uint8_t Pname_temp;
uint32_t i, j; uint32_t i, j;
uint32_t name_len = 0; uint32_t name_len = 0;
uint32_t SaveName_len = 0; uint32_t SaveName_len = 0;
union union32 size_tmp; union union32 size_tmp;
//union union32 size1;
//uint8_t Pn[PIC_NAME_MAX_LEN];
//uint8_t cnt_temp;
//uint16_t n0;
//uint32_t Name_saveAddr = 0;
//uint8_t pic_position;
W25QXX.SPI_FLASH_BufferRead(&pic_counter, PIC_COUNTER_ADDR, 1); W25QXX.SPI_FLASH_BufferRead(&pic_counter, PIC_COUNTER_ADDR, 1);
@ -266,386 +335,182 @@ uint32_t Pic_Info_Write(uint8_t *P_name, uint32_t P_size) {
uint8_t public_buf[512]; uint8_t public_buf[512];
//uint8_t public_buf_test[512]; #if ENABLED(SDSUPPORT)
#if ENABLED(SDSUPPORT)
void UpdatePic() {
//int r;
//unsigned char *p;
//char rootPath[10]={0};
char *fn;
unsigned char logoFlag;
uint16_t pbr;
uint32_t pfileSize;
uint32_t Pic_Write_Addr;
/*----------------------------------*/
// FILINFO fno; static void dosName2LongName(const char dosName[11], char* longName) {
//DIR dir; uint8_t j = 0;
//char tmp[30]; LOOP_L_N(i, 11) {
#if 0//_USE_LFN if (i == 8) longName[j++] = '.';
static char lfn[_MAX_LFN + 1]; if (dosName[i] == '\0' || dosName[i] == ' ') continue;
finfo.lfname = lfn; longName[j++] = dosName[i];
finfo.lfsize = sizeof(lfn);
#endif
//SdFile curDir;
//if (f_opendir(&dirs, picPath) == FR_OK)
//card.cd(picPath);
//const uint16_t fileCnt = card.get_num_Files();
//SdFile *curDir;
//SdFile dir;
//dir.open(picPath, O_READ);
//const char * const fname = card.diveToFile(true, curDir, picPath);
//if (!fname) return;
SdFile dir, root = card.getroot();
if (dir.open(&root, picPath, O_RDONLY)) {
disp_pic_update();
spiFlashErase_PIC();
dir_t d;
while (dir.readDir(&d, card.longFilename) > 0) {
#if 1
/*
if (power_det == 0) {
PW_DET_ON;
power_det=0;
}
SPI_FLASH_Init();
*/
//for (uint16_t i = 0; i < fileCnt; i++) {
//res = f_readdir(&dirs, &finfo);
//card.getfilename_sorted(i);
if (card.longFilename[0] == 0)
break;
/*if ( card.filename[0] == '.')
continue;
*/
if (card.longFilename[0] == '.')
continue;
fn = card.longFilename;
/*if ((finfo.lfname[0] == 0) || (finfo.lfname == 0))
fn = finfo.fname;
else
fn = finfo.lfname;*/
/* if (fno.fattrib & AM_DIR)
{
continue;
}
else */
//{
//if ((strstr(fn, ".gco")) || (strstr(fn, ".GCO")) || (fno.fattrib & AM_DIR))
if (strstr(fn, ".bin")) {
if (strstr(fn, "_logo"))
logoFlag = 1;
else if (strstr(fn, "_titlelogo"))
logoFlag = 2;
else if (strstr(fn, "_preview"))
logoFlag = 3;
else
logoFlag = 0;
//public_buf[0] = '\0';
//strcat(public_buf, picPath);
//strcat(public_buf, "/");
char dosFilename[FILENAME_LENGTH];
createFilename(dosFilename, d);
//strcat(public_buf, dosFilename);
SdFile file;
if (file.open(&dir, dosFilename, O_READ)) {
#if 1
/*LCD_Clear(BACK_COLOR);
if ((DeviceCode==0x9488)||(DeviceCode==0x5761)) {
LCD_ShowString(170,100,200,24,24,(u8 *)fn);
LCD_ShowString(180,130,200,24,24,"Updating...");
}
else {
LCD_ShowString(90,90,200,24,24,(u8 *)fn);
LCD_ShowString(90,120,200,24,24,"Updating...");
}
*/
if (logoFlag == 1) {
while (1) {
pbr = file.read(public_buf, BMP_WRITE_BUF_LEN);
Pic_Logo_Write((uint8_t *)fn, public_buf, pbr); //
if (pbr < BMP_WRITE_BUF_LEN) break;
}
}
else if (logoFlag == 2) {
while (1) {
pbr = file.read(public_buf, BMP_WRITE_BUF_LEN);
Pic_TitleLogo_Write((uint8_t *)fn, public_buf, pbr); //
if (pbr < BMP_WRITE_BUF_LEN) break;
}
}
else if (logoFlag == 3) {
while (1)
{
pbr = file.read(public_buf, BMP_WRITE_BUF_LEN);
default_view_Write(public_buf, pbr); //
if (pbr < BMP_WRITE_BUF_LEN) break;
}
}
else {
pfileSize = file.fileSize();
Pic_Write_Addr = Pic_Info_Write((uint8_t *)fn, pfileSize);
//uint32_t addr_test = Pic_Write_Addr;
//memset(bmp_public_buf, 0xff, BMP_WRITE_BUF_LEN);
while (1)
{
pbr = file.read(public_buf, BMP_WRITE_BUF_LEN);
W25QXX.SPI_FLASH_BufferWrite(public_buf, Pic_Write_Addr, pbr);
Pic_Write_Addr += pbr;
if (pbr < BMP_WRITE_BUF_LEN) break;
}
//W25QXX.SPI_FLASH_BufferRead(public_buf_test,addr_test,BMP_WRITE_BUF_LEN);
}
/*--------------read test--------------------*/
/*
BufferSet(picBuffer, 0xff, PICTURE_MAX_SIZE);
if (logoFlag == 0)
{
PicMsg_Init();
Pic_Read(fn,picBuffer);
}
else
Pic_Logo_Read(fn,picBuffer,PICTURE_MAX_SIZE);
*/
/*--------------read test--------------------*/
file.close();
#endif
}
}
//}
//}
/*
LCD_Clear(LCD_COLOR_BLACK);
//LCD_ShowString(110,100,200,24,24,"Complete");
LCD_DisplayString(110,80,"Complete");
delay(0xfffff);
*/
//r = f_chdir("/");
#if 1
//SdFile dir, root = card.getroot();
/*if (dir.open(&root, bakPath, O_RDONLY))
{
dir.remove();
}*/
//r = f_rename(picPath, bakPath);
//update_flag_ok = 1;
#endif
#endif
} }
dir.rename(&root, bakPath); longName[j] = '\0';
} }
}
void UpdatePic() {
char *fn;
unsigned char logoFlag;
uint16_t pbr;
uint32_t pfileSize;
uint32_t totalSizeLoaded = 0;
uint32_t Pic_Write_Addr;
void spi_flash_read_test() {W25QXX.SPI_FLASH_BufferRead(public_buf, UNIGBK_FLASH_ADDR, BMP_WRITE_BUF_LEN);} SdFile dir, root = card.getroot();
if (dir.open(&root, picPath, O_RDONLY)) {
void UpdateFont() { disp_pic_update();
//int r; spiFlashErase_PIC();
//unsigned char *p;
//char rootPath[10]={0};
char *fn;
//unsigned char logoFlag;
uint16_t pbr;
uint32_t flashaddr = 0;
//uint32_t pfileSize;
//uint32_t Pic_Write_Addr;
/*----------------------------------*/
// FILINFO fno; dir_t d;
//DIR dir; while (dir.readDir(&d, card.longFilename) > 0) {
//char tmp[30]; // if we dont get a long name, but gets a short one, try it
#if 0//_USE_LFN if (card.longFilename[0] == 0 && d.name[0] != 0) {
static char lfn[_MAX_LFN + 1]; dosName2LongName((const char*)d.name, card.longFilename);
finfo.lfname = lfn;
finfo.lfsize = sizeof(lfn);
#endif
//SdFile curDir;
//if (f_opendir(&dirs, picPath) == FR_OK)
//card.cd(picPath);
//const uint16_t fileCnt = card.get_num_Files();
//SdFile *curDir;
//SdFile dir;
//dir.open(picPath, O_READ);
//const char * const fname = card.diveToFile(true, curDir, picPath);
//if (!fname) return;
SdFile dir, root = card.getroot();
if (dir.open(&root, fontPath, O_RDONLY)) {
disp_font_update();
spiFlashErase_FONT();
dir_t d;
while (dir.readDir(&d, card.longFilename) > 0)
{
#if 1
/*if (power_det == 0)
{
PW_DET_ON;
power_det=0;
} }
SPI_FLASH_Init();*/
//for (uint16_t i = 0; i < fileCnt; i++)
//{
//res = f_readdir(&dirs, &finfo);
//card.getfilename_sorted(i);
if (card.longFilename[0] == 0) if (card.longFilename[0] == 0)
break; continue;
/*if ( card.filename[0] == '.')
continue;
*/
if (card.longFilename[0] == '.') if (card.longFilename[0] == '.')
continue; continue;
fn = card.longFilename; uint8_t a = -1;
for(a = 0; a < COUNT(assets); a++) {
/*if ((finfo.lfname[0] == 0) || (finfo.lfname == 0)) if (strcasecmp(assets[a], card.longFilename) == 0) {
fn = finfo.fname; break;
else }
fn = finfo.lfname;*/
/* if (fno.fattrib & AM_DIR)
{
continue;
} }
else */ if (a < 0 || a >= COUNT(assets)) continue;
//{
//if ((strstr(fn, ".gco")) || (strstr(fn, ".GCO")) || (fno.fattrib & AM_DIR))
if (strstr(fn, ".bin")) {
char dosFilename[FILENAME_LENGTH];
createFilename(dosFilename, d);
//strcat(public_buf, dosFilename);
SdFile file; fn = assets[a];
if (file.open(&dir, dosFilename, O_READ)) { char dosFilename[FILENAME_LENGTH];
createFilename(dosFilename, d);
#if 1 SdFile file;
/*LCD_Clear(BACK_COLOR); if (!file.open(&dir, dosFilename, O_READ)) {
#if ENABLED(MARLIN_DEV_MODE)
SERIAL_ECHOLNPAIR("Error opening Asset: ", fn);
#endif
continue;
}
if (strstr(fn, "_logo"))
logoFlag = 1;
else if (strstr(fn, "_titlelogo"))
logoFlag = 2;
else if (strstr(fn, "_preview"))
logoFlag = 3;
else
logoFlag = 0;
pfileSize = file.fileSize();
totalSizeLoaded += pfileSize;
if (logoFlag == 1) {
while (1) {
pbr = file.read(public_buf, BMP_WRITE_BUF_LEN);
Pic_Logo_Write((uint8_t *)fn, public_buf, pbr); //
if (pbr < BMP_WRITE_BUF_LEN)
break;
}
}
else if (logoFlag == 2) {
while (1) {
pbr = file.read(public_buf, BMP_WRITE_BUF_LEN);
Pic_TitleLogo_Write((uint8_t *)fn, public_buf, pbr); //
if (pbr < BMP_WRITE_BUF_LEN)
break;
}
}
else if (logoFlag == 3) {
while (1) {
pbr = file.read(public_buf, BMP_WRITE_BUF_LEN);
default_view_Write(public_buf, pbr); //
if (pbr < BMP_WRITE_BUF_LEN)
break;
}
}
else {
Pic_Write_Addr = Pic_Info_Write((uint8_t *)fn, pfileSize);
while (1) {
pbr = file.read(public_buf, BMP_WRITE_BUF_LEN);
W25QXX.SPI_FLASH_BufferWrite(public_buf, Pic_Write_Addr, pbr);
Pic_Write_Addr += pbr;
if (pbr < BMP_WRITE_BUF_LEN)
break;
}
}
#if ENABLED(MARLIN_DEV_MODE)
SERIAL_ECHOLNPAIR("Asset added: ", fn);
#endif
file.close();
}
dir.rename(&root, bakPath);
}
dir.close();
#if ENABLED(MARLIN_DEV_MODE)
uint8_t pic_counter = 0;
W25QXX.SPI_FLASH_BufferRead(&pic_counter, PIC_COUNTER_ADDR, 1);
SERIAL_ECHOLNPAIR("Total assets loaded: ", pic_counter, ", Total size: ", totalSizeLoaded);
#endif
}
#if HAS_SPI_FLASH_FONT
void spi_flash_read_test() { W25QXX.SPI_FLASH_BufferRead(public_buf, UNIGBK_FLASH_ADDR, BMP_WRITE_BUF_LEN); }
void UpdateFont() {
char *fn;
uint16_t pbr;
uint32_t flashaddr = 0;
SdFile dir, root = card.getroot();
if (dir.open(&root, fontPath, O_RDONLY)) {
disp_font_update();
spiFlashErase_FONT();
dir_t d;
while (dir.readDir(&d, card.longFilename) > 0) {
if (card.longFilename[0] == 0)
break;
if (card.longFilename[0] == '.')
continue;
fn = card.longFilename;
if (strstr(fn, ".bin")) {
char dosFilename[FILENAME_LENGTH];
createFilename(dosFilename, d);
//strcat(public_buf, dosFilename);
SdFile file;
if (file.open(&dir, dosFilename, O_READ)) {
if ((DeviceCode==0x9488)||(DeviceCode==0x5761))
{
LCD_ShowString(170,100,200,24,24,(u8 *)fn);
LCD_ShowString(180,130,200,24,24,"Updating...");
}
else
{
LCD_ShowString(90,90,200,24,24,(u8 *)fn);
LCD_ShowString(90,120,200,24,24,"Updating...");
}
*/
flashaddr = UNIGBK_FLASH_ADDR; flashaddr = UNIGBK_FLASH_ADDR;
pbr = 0; pbr = 0;
while (1) while (1) {
{
flashaddr += pbr; flashaddr += pbr;
pbr = file.read(public_buf, BMP_WRITE_BUF_LEN); pbr = file.read(public_buf, BMP_WRITE_BUF_LEN);
W25QXX.SPI_FLASH_BufferWrite(public_buf, flashaddr, pbr); W25QXX.SPI_FLASH_BufferWrite(public_buf, flashaddr, pbr);
//W25QXX.SPI_FLASH_BufferRead(public_buf_test,flashaddr,pbr);
/*if (UNIGBKFlag == 1)
{
fontrate = (uint16_t)(((float)(flashaddr - UNIGBK_FLASH_ADDR)/(float)(psrc.fsize))*100);
}
else
{
fontrate = (uint16_t)(((float)(flashaddr - GBK_FLASH_ADDR)/(float)(psrc.fsize))*100);
}
if (fontrate > 99) fontrate=99;
if (fontrate < 10)
{
fontString[0] = fontrate%10 + 0x30;
fontString[1] = '%';
fontString[2] = '\0';
}
else
{
fontString[0] = fontrate/10 + 0x30;
fontString[1] = fontrate%10 + 0x30;
fontString[2] = '%';
fontString[3] = '\0';
}*/
//LCD_DisplayString(140,130,fontString);
if ((DeviceCode == 0x9488) || (DeviceCode == 0x5761)) {
//LCD_ShowString(200,160,200,24,24,fontString);
}
else {
//LCD_ShowString(140,150,200,24,24,fontString);
}
if (pbr < BMP_WRITE_BUF_LEN) break; if (pbr < BMP_WRITE_BUF_LEN) break;
} }
/*--------------read test--------------------*/
/*
BufferSet(picBuffer, 0xff, PICTURE_MAX_SIZE);
if (logoFlag == 0)
{
PicMsg_Init();
Pic_Read(fn,picBuffer);
}
else
Pic_Logo_Read(fn,picBuffer,PICTURE_MAX_SIZE);
*/
/*--------------read test--------------------*/
file.close(); file.close();
#endif }
} }
} }
//}
//}
/*
LCD_Clear(LCD_COLOR_BLACK);
//LCD_ShowString(110,100,200,24,24,"Complete");
LCD_DisplayString(110,80,"Complete");
delay(0xfffff);
*/
//r = f_chdir("/");
#if 1
//SdFile dir, root = card.getroot();
/*if (dir.open(&root, bakPath, O_RDONLY))
{
dir.remove();
}*/
dir.rename(&root, bakFont);
//r = f_rename(picPath, bakPath);
dir.rename(&root, bakFont);
//update_flag_ok = 1; dir.close();
#endif }
#endif
} }
}
}
#endif // SDSUPPORT
#endif #endif // HAS_SPI_FLASH_FONT
#if 1 #endif // SDSUPPORT
void Pic_Read(uint8_t *Pname, uint8_t *P_Rbuff) { void Pic_Read(uint8_t *Pname, uint8_t *P_Rbuff) {
uint8_t i, j; uint8_t i, j;
@ -653,30 +518,21 @@ void Pic_Read(uint8_t *Pname, uint8_t *P_Rbuff) {
uint32_t tmp_cnt = 0; uint32_t tmp_cnt = 0;
PIC_MSG PIC; PIC_MSG PIC;
//void SPI_FLASH_BufferRead(u8* pBuffer, u32 ReadAddr, u16 NumByteToRead);
W25QXX.SPI_FLASH_BufferRead(&Pic_cnt, PIC_COUNTER_ADDR, 1); W25QXX.SPI_FLASH_BufferRead(&Pic_cnt, PIC_COUNTER_ADDR, 1);
if (Pic_cnt == 0xff) if (Pic_cnt == 0xff)
Pic_cnt = 0; Pic_cnt = 0;
for (i = 0; i < Pic_cnt; i++) { for (i = 0; i < Pic_cnt; i++) {
//pic name
j = 0; j = 0;
do do {
{
W25QXX.SPI_FLASH_BufferRead(&PIC.name[j], PIC_NAME_ADDR + tmp_cnt, 1); W25QXX.SPI_FLASH_BufferRead(&PIC.name[j], PIC_NAME_ADDR + tmp_cnt, 1);
tmp_cnt++; tmp_cnt++;
}while (PIC.name[j++] != '\0'); } while (PIC.name[j++] != '\0');
//pic size //pic size
W25QXX.SPI_FLASH_BufferRead(PIC.size.bytes, PIC_SIZE_ADDR + i * 4, 4); W25QXX.SPI_FLASH_BufferRead(PIC.size.bytes, PIC_SIZE_ADDR + i * 4, 4);
if ((strcmp((char*)Pname, (char*)PIC.name)) == 0) { if ((strcmp((char*)Pname, (char*)PIC.name)) == 0) {
W25QXX.SPI_FLASH_BufferRead((uint8_t *)P_Rbuff, PIC_DATA_ADDR_TFT35 + i * PER_PIC_MAX_SPACE_TFT35, PIC.size.dwords); W25QXX.SPI_FLASH_BufferRead((uint8_t *)P_Rbuff, PIC_DATA_ADDR_TFT35 + i * PER_PIC_MAX_SPACE_TFT35, PIC.size.dwords);
/*if (DMA_ERRO_FLAG)
{
DMA_ERRO_FLAG = 0;
SPI_FLASH_BufferRead((uint8_t *)P_Rbuff,PIC_DATA_ADDR+i*PER_PIC_MAX_SPACE,PIC.size.dwords);
}*/
break; break;
} }
} }
@ -685,41 +541,34 @@ void Pic_Read(uint8_t *Pname, uint8_t *P_Rbuff) {
void lv_pic_test(uint8_t *P_Rbuff, uint32_t addr, uint32_t size) { void lv_pic_test(uint8_t *P_Rbuff, uint32_t addr, uint32_t size) {
W25QXX.init(SPI_QUARTER_SPEED); W25QXX.init(SPI_QUARTER_SPEED);
W25QXX.SPI_FLASH_BufferRead((uint8_t *)P_Rbuff, addr, size); W25QXX.SPI_FLASH_BufferRead((uint8_t *)P_Rbuff, addr, size);
/*if (DMA_ERRO_FLAG) {
DMA_ERRO_FLAG = 0;
SPI_FLASH_BufferRead((uint8_t *)P_Rbuff,addr,size);
}*/
}
void get_spi_flash_data(const char *rec_buf, int addr, int size) {
W25QXX.init(SPI_QUARTER_SPEED);
W25QXX.SPI_FLASH_BufferRead((uint8_t *)rec_buf, UNIGBK_FLASH_ADDR + addr, size);
} }
#if HAS_SPI_FLASH_FONT
void get_spi_flash_data(const char *rec_buf, int addr, int size) {
W25QXX.init(SPI_QUARTER_SPEED);
W25QXX.SPI_FLASH_BufferRead((uint8_t *)rec_buf, UNIGBK_FLASH_ADDR + addr, size);
}
#endif #endif
#if 1 uint32_t logo_addroffset = 0;
void Pic_Logo_Read(uint8_t *LogoName, uint8_t *Logo_Rbuff, uint32_t LogoReadsize) {
W25QXX.SPI_FLASH_BufferRead(Logo_Rbuff, PIC_LOGO_ADDR + logo_addroffset, LogoReadsize);
logo_addroffset += LogoReadsize;
if (logo_addroffset >= LOGO_MAX_SIZE_TFT35)
logo_addroffset = 0;
}
uint32_t logo_addroffset = 0; uint32_t default_view_addroffset = 0;
void Pic_Logo_Read(uint8_t *LogoName, uint8_t *Logo_Rbuff, uint32_t LogoReadsize) { void default_view_Read(uint8_t *default_view_Rbuff, uint32_t default_view_Readsize) {
W25QXX.SPI_FLASH_BufferRead(Logo_Rbuff, PIC_LOGO_ADDR + logo_addroffset, LogoReadsize); W25QXX.init(SPI_QUARTER_SPEED);
logo_addroffset += LogoReadsize;
if (logo_addroffset >= LOGO_MAX_SIZE_TFT35)
logo_addroffset = 0;
}
uint32_t default_view_addroffset = 0; W25QXX.SPI_FLASH_BufferRead(default_view_Rbuff, DEFAULT_VIEW_ADDR_TFT35 + default_view_addroffset, default_view_Readsize);
void default_view_Read(uint8_t *default_view_Rbuff, uint32_t default_view_Readsize) { default_view_addroffset += default_view_Readsize;
W25QXX.init(SPI_QUARTER_SPEED); if (default_view_addroffset >= DEFAULT_VIEW_MAX_SIZE)
default_view_addroffset = 0;
W25QXX.SPI_FLASH_BufferRead(default_view_Rbuff, DEFAULT_VIEW_ADDR_TFT35 + default_view_addroffset + 4, default_view_Readsize); }
default_view_addroffset += default_view_Readsize;
if (default_view_addroffset >= DEFAULT_VIEW_MAX_SIZE)
default_view_addroffset = 0;
}
#if HAS_BAK_VIEW_IN_FLASH
uint32_t flash_view_addroffset = 0; uint32_t flash_view_addroffset = 0;
void flash_view_Read(uint8_t *flash_view_Rbuff, uint32_t flash_view_Readsize) { void flash_view_Read(uint8_t *flash_view_Rbuff, uint32_t flash_view_Readsize) {
W25QXX.init(SPI_QUARTER_SPEED); W25QXX.init(SPI_QUARTER_SPEED);
@ -728,9 +577,7 @@ void get_spi_flash_data(const char *rec_buf, int addr, int size) {
flash_view_addroffset += flash_view_Readsize; flash_view_addroffset += flash_view_Readsize;
if (flash_view_addroffset >= FLASH_VIEW_MAX_SIZE) if (flash_view_addroffset >= FLASH_VIEW_MAX_SIZE)
flash_view_addroffset = 0; flash_view_addroffset = 0;
} }
#endif #endif
#endif // TFT_LITTLE_VGL_UI #endif // TFT_LVGL_UI

View file

@ -29,21 +29,61 @@ extern "C" { /* C-declarations for C++ */
#include <string.h> #include <string.h>
#include "lvgl.h" #include "lvgl.h"
#if 1 #include "../../inc/MarlinConfigPre.h"
#define PIC_MAX_CN 100 // Maximum number of pictures #ifndef HAS_SPI_FLASH_FONT
#define PIC_NAME_MAX_LEN 50 // Picture name maximum length #define HAS_SPI_FLASH_FONT 0 //disabled until fix the font load code
#endif
#ifndef HAS_GCODE_PREVIEW
#define HAS_GCODE_PREVIEW 1
#endif
#ifndef HAS_LANG_SELECT_SCREEN
#define HAS_LANG_SELECT_SCREEN 0
#endif
#ifndef HAS_BAK_VIEW_IN_FLASH
#define HAS_BAK_VIEW_IN_FLASH 1
#endif
#ifndef HAS_GCODE_DEFAULT_VIEW_IN_FLASH
#define HAS_GCODE_DEFAULT_VIEW_IN_FLASH 1
#endif
#ifndef SPI_FLASH_SIZE
#define SPI_FLASH_SIZE 0x1000000 // 16MB
#endif
#define LOGO_MAX_SIZE_TFT35 (300*1024) #define PIC_MAX_CN 100 // Maximum number of pictures
#define LOGO_MAX_SIZE_TFT32 (150*1024) #define PIC_NAME_MAX_LEN 50 // Picture name maximum length
#define TITLELOGO_MAX_SIZE (150*1024) // Little logo maximum
#define DEFAULT_VIEW_MAX_SIZE (200*200*2)
#define FLASH_VIEW_MAX_SIZE (200*200*2)
#define PER_PIC_MAX_SPACE_TFT35 (32*1024) #define LOGO_MAX_SIZE_TFT35 (300*1024)
#define PER_PIC_MAX_SPACE_TFT32 (16*1024) #define LOGO_MAX_SIZE_TFT32 (150*1024)
#define PER_FONT_MAX_SPACE (16*1024) #define TITLELOGO_MAX_SIZE (150*1024) // Little logo maximum
#define DEFAULT_VIEW_MAX_SIZE (200*200*2)
#define FLASH_VIEW_MAX_SIZE (200*200*2)
#define PER_PIC_MAX_SPACE_TFT35 (32*1024)
#define PER_PIC_MAX_SPACE_TFT32 (16*1024)
#define PER_FONT_MAX_SPACE (16*1024)
#if SPI_FLASH_SIZE == 0x200000
//pic
//Robin_pro pic addr
#define PIC_NAME_ADDR 0x001000 // Pic information addr
#define PIC_SIZE_ADDR 0x001800 // Pic size information addr
#define PIC_COUNTER_ADDR 0x002000 // Pic total number
#define PER_PIC_SAVE_ADDR 0x000000 // Storage address of each picture
#define PIC_LOGO_ADDR 0x000000 // Logo addr
#define PIC_DATA_ADDR 0x003000 //
// TFT35
#define DEFAULT_VIEW_ADDR_TFT35 0x1ea070
#define BAK_VIEW_ADDR_TFT35 (DEFAULT_VIEW_ADDR_TFT35+90*1024)
#define PIC_ICON_LOGO_ADDR_TFT35 (BAK_VIEW_ADDR_TFT35+80*1024)
#define PIC_DATA_ADDR_TFT35 0x003000 // (PIC_ICON_LOGO_ADDR_TFT35+350*1024) //0xC5800
#define PIC_DATA_ADDR_TFT32 0x00F000
#define PIC_ICON_LOGO_ADDR_TFT32 0x5D8000
#define PIC_OTHER_SIZE_ADDR_TFT32 0x5EE000
#else
//pic //pic
//Robin_pro pic addr //Robin_pro pic addr
#define PIC_NAME_ADDR 0x003000 // Pic information addr #define PIC_NAME_ADDR 0x003000 // Pic information addr
@ -51,13 +91,13 @@ extern "C" { /* C-declarations for C++ */
#define PIC_COUNTER_ADDR 0x008000 // Pic total number #define PIC_COUNTER_ADDR 0x008000 // Pic total number
#define PER_PIC_SAVE_ADDR 0x009000 // Storage address of each picture #define PER_PIC_SAVE_ADDR 0x009000 // Storage address of each picture
#define PIC_LOGO_ADDR 0x00A000 // Logo addr #define PIC_LOGO_ADDR 0x00A000 // Logo addr
//#define PIC_DATA_ADDR 0x02F000 // //#define PIC_DATA_ADDR 0x02F000 //
// TFT35 // TFT35
#define DEFAULT_VIEW_ADDR_TFT35 0XC5800 #define DEFAULT_VIEW_ADDR_TFT35 0xC5800
#define BAK_VIEW_ADDR_TFT35 (DEFAULT_VIEW_ADDR_TFT35+90*1024) #define BAK_VIEW_ADDR_TFT35 (DEFAULT_VIEW_ADDR_TFT35+90*1024)
#define PIC_ICON_LOGO_ADDR_TFT35 (BAK_VIEW_ADDR_TFT35+80*1024) #define PIC_ICON_LOGO_ADDR_TFT35 (BAK_VIEW_ADDR_TFT35+80*1024)
#define PIC_DATA_ADDR_TFT35 (PIC_ICON_LOGO_ADDR_TFT35+350*1024)//0XC5800 #define PIC_DATA_ADDR_TFT35 (PIC_ICON_LOGO_ADDR_TFT35+350*1024) //0xC5800
// TFT32 // TFT32
#define PIC_DATA_ADDR_TFT32 0x02F000 #define PIC_DATA_ADDR_TFT32 0x02F000
@ -69,48 +109,37 @@ extern "C" { /* C-declarations for C++ */
#define UNIGBK_FLASH_ADDR (FONTINFOADDR+4096) // 4*1024 #define UNIGBK_FLASH_ADDR (FONTINFOADDR+4096) // 4*1024
#define GBK_FLASH_ADDR (UNIGBK_FLASH_ADDR+180224) // 176*1024 #define GBK_FLASH_ADDR (UNIGBK_FLASH_ADDR+180224) // 176*1024
// Flash flag
#define FLASH_INF_VALID_FLAG 0xAA558761
// SD card information first addr
#define VAR_INF_ADDR 0x000000
union union32 {
uint8_t bytes[4];
uint32_t dwords;
};
// pic information
struct pic_msg {
uint8_t name[PIC_NAME_MAX_LEN];
union union32 size;
};
typedef struct pic_msg PIC_MSG;
#define BMP_WRITE_BUF_LEN 512
#define PICINFOADDR 0
#define PIC_SIZE_xM 6
#define FONT_SIZE_xM 2
//extern void PicMsg_Init(void);
extern void Pic_Read(uint8_t *Pname, uint8_t *P_Rbuff);
//extern void bindBmpFileData(const uint8_t **pBuf, uint8_t *pName);
//extern void Pic_Logo_Read(uint8_t *LogoName,uint8_t *Logo_Rbuff,uint32_t LogoReadsize);
//extern void default_view_Read(uint8_t *default_view_Rbuff,uint32_t default_view_Readsize);
//extern void flash_view_Read(uint8_t *flash_view_Rbuff,uint32_t flash_view_Readsize);
//extern void lv_Pic_Read(uint8_t *Pname,uint8_t *P_Rbuff,uint32_t addr,uint32_t size);
extern void lv_pic_test(uint8_t *P_Rbuff, uint32_t addr, uint32_t size);
#endif #endif
// Flash flag
#define FLASH_INF_VALID_FLAG 0xAA558761
// SD card information first addr
#define VAR_INF_ADDR 0x000000
union union32 {
uint8_t bytes[4];
uint32_t dwords;
};
// pic information
struct pic_msg {
uint8_t name[PIC_NAME_MAX_LEN];
union union32 size;
};
typedef struct pic_msg PIC_MSG;
#define BMP_WRITE_BUF_LEN 512
#define PICINFOADDR 0
#define PIC_SIZE_xM 6
#define FONT_SIZE_xM 2
extern void Pic_Read(uint8_t *Pname, uint8_t *P_Rbuff);
extern void lv_pic_test(uint8_t *P_Rbuff, uint32_t addr, uint32_t size);
extern uint32_t lv_get_pic_addr(uint8_t *Pname); extern uint32_t lv_get_pic_addr(uint8_t *Pname);
extern void get_spi_flash_data(const char *rec_buf, int offset, int size); extern void get_spi_flash_data(const char *rec_buf, int offset, int size);
//extern void SPI_FLASH_BufferRead(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t NumByteToRead);
extern void spi_flash_read_test(); extern void spi_flash_read_test();
extern void default_view_Read(uint8_t *default_view_Rbuff, uint32_t default_view_Readsize); extern void default_view_Read(uint8_t *default_view_Rbuff, uint32_t default_view_Readsize);
extern void flash_view_Read(uint8_t *flash_view_Rbuff, uint32_t flash_view_Readsize); extern void flash_view_Read(uint8_t *flash_view_Rbuff, uint32_t flash_view_Readsize);

View file

@ -21,7 +21,7 @@
*/ */
#include "../../../../inc/MarlinConfigPre.h" #include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#include "../../../../MarlinCore.h" #include "../../../../MarlinCore.h"
@ -215,4 +215,4 @@
} }
} }
#endif // TFT_LITTLE_VGL_UI #endif // TFT_LVGL_UI

View file

@ -22,7 +22,7 @@
#include "../../../../inc/MarlinConfig.h" #include "../../../../inc/MarlinConfig.h"
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#if defined(ARDUINO_ARCH_STM32F1) && PIN_EXISTS(FSMC_CS) // FSMC on 100/144 pins SoCs #if defined(ARDUINO_ARCH_STM32F1) && PIN_EXISTS(FSMC_CS) // FSMC on 100/144 pins SoCs
@ -230,7 +230,7 @@
return uint32_t(data); return uint32_t(data);
} }
#if ENABLED(LCD_USE_DMA_FSMC) #ifdef LCD_USE_DMA_FSMC
void LCD_IO_WriteMultiple(uint16_t color, uint32_t count) { void LCD_IO_WriteMultiple(uint16_t color, uint32_t count) {
while (count > 0) { while (count > 0) {
@ -270,4 +270,4 @@
#endif // LCD_USE_DMA_FSMC #endif // LCD_USE_DMA_FSMC
#endif // ARDUINO_ARCH_STM32F1 && FSMC_CS_PIN #endif // ARDUINO_ARCH_STM32F1 && FSMC_CS_PIN
#endif // TFT_LITTLE_VGL_UI #endif // TFT_LVGL_UI

View file

@ -27,765 +27,751 @@
#include "../../../../inc/MarlinConfigPre.h" #include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#include "../../../../MarlinCore.h" #include "../../../../MarlinCore.h"
#include "tft_lvgl_configuration.h" #include "tft_lvgl_configuration.h"
#include "lvgl.h" #include "lvgl.h"
#include "../../../../feature/touch/xpt2046.h" #include "../../../../feature/touch/xpt2046.h"
#include "draw_ready_print.h" #include "draw_ready_print.h"
#include "W25Qxx.h" #include "W25Qxx.h"
#include "pic_manager.h" #include "pic_manager.h"
#include "mks_hardware_test.h" #include "mks_hardware_test.h"
#include "draw_ui.h" #include "draw_ui.h"
#if ENABLED(POWER_LOSS_RECOVERY) #if ENABLED(POWER_LOSS_RECOVERY)
#include "../../../../feature/powerloss.h" #include "../../../../feature/powerloss.h"
#endif #endif
#include <SPI.h> #include <SPI.h>
#if ENABLED(SPI_GRAPHICAL_TFT) #if ENABLED(SPI_GRAPHICAL_TFT)
#include "SPI_TFT.h" #include "SPI_TFT.h"
#endif #endif
//#include "../../Configuration.h" extern void LCD_IO_Init(uint8_t cs, uint8_t rs);
//#include "../../src/core/macros.h" extern void LCD_IO_WriteData(uint16_t RegValue);
extern void LCD_IO_WriteReg(uint16_t Reg);
extern void LCD_IO_Init(uint8_t cs, uint8_t rs); extern void LCD_IO_WriteSequence(uint16_t *data, uint16_t length);
extern void LCD_IO_WriteData(uint16_t RegValue); extern void LCD_IO_WriteMultiple(uint16_t color, uint32_t count);
extern void LCD_IO_WriteReg(uint16_t Reg);
extern void LCD_IO_WriteMultiple(uint16_t color, uint32_t count);
#if HAS_SPI_FLASH_FONT
extern void init_gb2312_font(); extern void init_gb2312_font();
#endif
static lv_disp_buf_t disp_buf; static lv_disp_buf_t disp_buf;
//static lv_color_t buf[LV_HOR_RES_MAX * 18]; #if ENABLED(SDSUPPORT)
//static lv_color_t buf[10*5]; extern void UpdatePic();
//extern lv_obj_t * scr; #if HAS_SPI_FLASH_FONT
#if ENABLED(SDSUPPORT)
extern void UpdatePic();
extern void UpdateFont(); extern void UpdateFont();
#endif #endif
uint16_t DeviceCode = 0x9488; #endif
extern uint8_t sel_id; uint16_t DeviceCode = 0x9488;
extern uint8_t sel_id;
#define SetCs #define SetCs
#define ClrCs #define ClrCs
#define HDP 799//Horizontal Display Period //** #define HDP 799 // Horizontal Display Period
#define HT 1000//Horizontal Total #define HT 1000 // Horizontal Total
#define HPS 51//LLINE Pulse Start Position #define HPS 51 // LLINE Pulse Start Position
#define LPS 3 // Horizontal Display Period Start Position #define LPS 3 // Horizontal Display Period Start Position
#define HPW 8 // LLINE Pulse Width #define HPW 8 // LLINE Pulse Width
#define VDP 479//Vertical Display Period #define VDP 479 // Vertical Display Period
#define VT 530//Vertical Total #define VT 530 // Vertical Total
#define VPS 24// LFRAME Pulse Start Position #define VPS 24 // LFRAME Pulse Start Position
#define FPS 23//Vertical Display Period Start Positio #define FPS 23 // Vertical Display Period Start Positio
#define VPW 3 // LFRAME Pulse Width //** #define VPW 3 // LFRAME Pulse Width
#define MAX_HZ_POSX HDP+1 #define MAX_HZ_POSX HDP+1
#define MAX_HZ_POSY VDP+1 #define MAX_HZ_POSY VDP+1
extern uint8_t gcode_preview_over, flash_preview_begin, default_preview_flg; extern uint8_t gcode_preview_over, flash_preview_begin, default_preview_flg;
void SysTick_Callback() { void SysTick_Callback() {
lv_tick_inc(1); lv_tick_inc(1);
print_time_count(); print_time_count();
} }
void tft_set_cursor(uint16_t x, uint16_t y) { void tft_set_cursor(uint16_t x, uint16_t y) {
#if 0 LCD_IO_WriteReg(0x002A);
if (DeviceCode == 0x8989) { LCD_IO_WriteData(x >> 8);
LCD_WriteReg(0x004E, y); //行 LCD_IO_WriteData(x & 0x00FF);
LCD_WriteReg(0x004F, x); //列 LCD_IO_WriteData(x >> 8);
} LCD_IO_WriteData(x & 0x00FF);
else if ((DeviceCode == 0x9919)) { //ILI9488_WriteData(0x01);
LCD_WriteReg(0x004E, x); // 行 //ILI9488_WriteData(0xDF);
LCD_WriteReg(0x004F, y); // 列 LCD_IO_WriteReg(0x002B);
} LCD_IO_WriteData(y >> 8);
else if ((DeviceCode == 0x5761)) { //SSD1963 LCD_IO_WriteData(y & 0x00FF);
LCD_WrtReg(0x002A); LCD_IO_WriteData(y >> 8);
LCD_WrtRAM(x >> 8); LCD_IO_WriteData(y & 0x00FF);
LCD_WrtRAM(x & 0x00FF); //ILI9488_WriteData(0x01);
LCD_WrtRAM(HDP >> 8); //ILI9488_WriteData(0x3F);
LCD_WrtRAM(HDP & 0x00FF); }
LCD_WrtReg(0x002B);
LCD_WrtRAM(y >> 8);
LCD_WrtRAM(y & 0x00FF);
LCD_WrtRAM(VDP >> 8);
LCD_WrtRAM(VDP & 0x00FF);
}
else if (DeviceCode == 0x9488) {
ILI9488_WriteCmd(0x002A);
ILI9488_WriteData(x >> 8);
ILI9488_WriteData(x & 0x00FF);
ILI9488_WriteData(x >> 8);
ILI9488_WriteData(x & 0x00FF);
//ILI9488_WriteData(0x01);
//ILI9488_WriteData(0xDF);
ILI9488_WriteCmd(0x002B);
ILI9488_WriteData(y >> 8);
ILI9488_WriteData(y & 0x00FF);
ILI9488_WriteData(y >> 8);
ILI9488_WriteData(y & 0x00FF);
//ILI9488_WriteData(0x01);
//ILI9488_WriteData(0x3F);
}
else {
LCD_WriteReg(0x0020, y); // 行
LCD_WriteReg(0x0021, 0x13f - x); // 列
}
#else // if 0
LCD_IO_WriteReg(0x002A);
LCD_IO_WriteData(x >> 8);
LCD_IO_WriteData(x & 0x00FF);
LCD_IO_WriteData(x >> 8);
LCD_IO_WriteData(x & 0x00FF);
//ILI9488_WriteData(0x01);
//ILI9488_WriteData(0xDF);
LCD_IO_WriteReg(0x002B);
LCD_IO_WriteData(y >> 8);
LCD_IO_WriteData(y & 0x00FF);
LCD_IO_WriteData(y >> 8);
LCD_IO_WriteData(y & 0x00FF);
//ILI9488_WriteData(0x01);
//ILI9488_WriteData(0x3F);
#endif // if 0
}
void LCD_WriteRAM_Prepare(void) { void LCD_WriteRAM_Prepare(void) {
#if 0 #if 0
if ((DeviceCode == 0x9325) || (DeviceCode == 0x9328) || (DeviceCode == 0x8989)) { if ((DeviceCode == 0x9325) || (DeviceCode == 0x9328) || (DeviceCode == 0x8989)) {
ClrCs
LCD->LCD_REG = R34;
SetCs
}
else {
LCD_WrtReg(0x002C);
}
#else
LCD_IO_WriteReg(0x002C);
#endif
}
void tft_set_point(uint16_t x, uint16_t y, uint16_t point) {
//if (DeviceCode == 0x9488) {
if ((x > 480) || (y > 320)) return;
//}
//**if ( (x>320)||(y>240) ) return;
tft_set_cursor(x, y); /*设置光标位置*/
LCD_WriteRAM_Prepare(); /* 开始写入GRAM*/
//LCD_WriteRAM(point);
LCD_IO_WriteData(point);
}
void LCD_WriteReg(uint16_t LCD_Reg, uint16_t LCD_RegValue) {
/* Write 16-bit Index, then Write Reg */
ClrCs ClrCs
LCD_IO_WriteReg(LCD_Reg); LCD->LCD_REG = R34;
/* Write 16-bit Reg */
LCD_IO_WriteData(LCD_RegValue);
SetCs SetCs
} }
else {
void ili9320_SetWindows(uint16_t StartX, uint16_t StartY, uint16_t width, uint16_t heigh) { LCD_WrtReg(0x002C);
uint16_t s_h, s_l, e_h, e_l;
uint16_t xEnd, yEnd;
xEnd = StartX + width;
yEnd = StartY + heigh - 1;
if (DeviceCode == 0x8989) {
/*LCD_WriteReg(0x0044, (StartX & 0xFF) | (xEnd << 8));
LCD_WriteReg(0x0045, StartY);
LCD_WriteReg(0x0046, yEnd);*/
LCD_WriteReg(0x0044, (StartY & 0xFF) | (yEnd << 8));
LCD_WriteReg(0x0045, StartX);
LCD_WriteReg(0x0046, xEnd);
}
else if (DeviceCode == 0x9488) {
s_h = (StartX >> 8) & 0x00ff;
s_l = StartX & 0x00ff;
e_h = ((StartX + width - 1) >> 8) & 0x00ff;
e_l = (StartX + width - 1) & 0x00ff;
LCD_IO_WriteReg(0x002A);
LCD_IO_WriteData(s_h);
LCD_IO_WriteData(s_l);
LCD_IO_WriteData(e_h);
LCD_IO_WriteData(e_l);
s_h = (StartY >> 8) & 0x00ff;
s_l = StartY & 0x00ff;
e_h = ((StartY + heigh - 1) >> 8) & 0x00ff;
e_l = (StartY + heigh - 1) & 0x00ff;
LCD_IO_WriteReg(0x002B);
LCD_IO_WriteData(s_h);
LCD_IO_WriteData(s_l);
LCD_IO_WriteData(e_h);
LCD_IO_WriteData(e_l);
}
else if ((DeviceCode == 0x9325) || (DeviceCode == 0x9328) || (DeviceCode == 0x1505)) {
/* LCD_WriteReg(0x0050, StartX);
LCD_WriteReg(0x0052, StartY);
LCD_WriteReg(0x0051, xEnd);
LCD_WriteReg(0x0053, yEnd);*/
LCD_WriteReg(0x0050, StartY); //Specify the start/end positions of the window address in the horizontal direction by an address unit
LCD_WriteReg(0x0051, yEnd); //Specify the start positions of the window address in the vertical direction by an address unit
LCD_WriteReg(0x0052, 320 - xEnd);
LCD_WriteReg(0x0053, 320 - StartX - 1); //Specify the end positions of the window address in the vertical direction by an address unit
}
else {
s_h = (StartX >> 8) & 0xFF;
s_l = StartX & 0xFF;
e_h = ((StartX + width - 1) >> 8) & 0xFF;
e_l = (StartX + width - 1) & 0xFF;
LCD_IO_WriteReg(0x2A);
LCD_IO_WriteData(s_h);
LCD_IO_WriteData(s_l);
LCD_IO_WriteData(e_h);
LCD_IO_WriteData(e_l);
s_h = (StartY >> 8) & 0xFF;
s_l = StartY & 0xFF;
e_h = ((StartY + heigh - 1) >> 8) & 0xFF;
e_l = (StartY + heigh - 1) & 0xFF;
LCD_IO_WriteReg(0x2B);
LCD_IO_WriteData(s_h);
LCD_IO_WriteData(s_l);
LCD_IO_WriteData(e_h);
LCD_IO_WriteData(e_l);
}
} }
#else
LCD_IO_WriteReg(0x002C);
#endif
}
void LCD_Clear(uint16_t Color) { void tft_set_point(uint16_t x, uint16_t y, uint16_t point) {
uint32_t index = 0; //if (DeviceCode == 0x9488) {
unsigned int count; if ((x > 480) || (y > 320)) return;
//}
//**if ( (x>320)||(y>240) ) return;
tft_set_cursor(x, y); /*设置光标位置*/
if (DeviceCode == 0x9488) { LCD_WriteRAM_Prepare(); /* 开始写入GRAM*/
tft_set_cursor(0, 0); //LCD_WriteRAM(point);
ili9320_SetWindows(0, 0, 480, 320); LCD_IO_WriteData(point);
LCD_WriteRAM_Prepare(); }
//index = (160*480);
for (index = 0; index < 320 * 480; index++) void LCD_WriteReg(uint16_t LCD_Reg, uint16_t LCD_RegValue) {
LCD_IO_WriteData(Color); /* Write 16-bit Index, then Write Reg */
//LCD_IO_WriteMultiple(Color, (480*320)); ClrCs
//while(index --) LCD_IO_WriteData(Color); LCD_IO_WriteReg(LCD_Reg);
} /* Write 16-bit Reg */
else if (DeviceCode == 0x5761) { LCD_IO_WriteData(LCD_RegValue);
LCD_IO_WriteReg(0x002a); SetCs
LCD_IO_WriteData(0); }
LCD_IO_WriteData(0);
LCD_IO_WriteData(HDP >> 8); void ili9320_SetWindows(uint16_t StartX, uint16_t StartY, uint16_t width, uint16_t heigh) {
LCD_IO_WriteData(HDP & 0x00ff); uint16_t s_h, s_l, e_h, e_l;
LCD_IO_WriteReg(0x002b); uint16_t xEnd, yEnd;
LCD_IO_WriteData(0); xEnd = StartX + width;
LCD_IO_WriteData(0); yEnd = StartY + heigh - 1;
LCD_IO_WriteData(VDP >> 8); if (DeviceCode == 0x8989) {
LCD_IO_WriteData(VDP & 0x00ff); /*LCD_WriteReg(0x0044, (StartX & 0xFF) | (xEnd << 8));
LCD_IO_WriteReg(0x002c); LCD_WriteReg(0x0045, StartY);
LCD_IO_WriteReg(0x002c); LCD_WriteReg(0x0046, yEnd);*/
for (count = 0; count < (HDP + 1) * (VDP + 1); count++) LCD_WriteReg(0x0044, (StartY & 0xFF) | (yEnd << 8));
LCD_IO_WriteData(Color); LCD_WriteReg(0x0045, StartX);
} LCD_WriteReg(0x0046, xEnd);
else {
tft_set_cursor(0, 0);
LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
for (index = 0; index < 76800; index++)
LCD_IO_WriteData(Color);
}
} }
else if (DeviceCode == 0x9488) {
s_h = (StartX >> 8) & 0x00ff;
s_l = StartX & 0x00ff;
e_h = ((StartX + width - 1) >> 8) & 0x00ff;
e_l = (StartX + width - 1) & 0x00ff;
extern uint16_t ILI9488_ReadRAM(); LCD_IO_WriteReg(0x002A);
LCD_IO_WriteData(s_h);
LCD_IO_WriteData(s_l);
LCD_IO_WriteData(e_h);
LCD_IO_WriteData(e_l);
#if DISABLED(SPI_GRAPHICAL_TFT) s_h = (StartY >> 8) & 0x00ff;
s_l = StartY & 0x00ff;
e_h = ((StartY + heigh - 1) >> 8) & 0x00ff;
e_l = (StartY + heigh - 1) & 0x00ff;
void init_tft() { LCD_IO_WriteReg(0x002B);
uint16_t i; LCD_IO_WriteData(s_h);
//************* Start Initial Sequence **********// LCD_IO_WriteData(s_l);
LCD_IO_WriteData(e_h);
LCD_IO_Init(FSMC_CS_PIN, FSMC_RS_PIN); LCD_IO_WriteData(e_l);
_delay_ms(5);
LCD_IO_WriteReg(0x00D3);
DeviceCode = ILI9488_ReadRAM(); //dummy read
DeviceCode = ILI9488_ReadRAM();
DeviceCode = ILI9488_ReadRAM();
DeviceCode <<= 8;
DeviceCode |= ILI9488_ReadRAM();
if (DeviceCode == 0x9488) {
LCD_IO_WriteReg(0x00E0);
LCD_IO_WriteData(0x0000);
LCD_IO_WriteData(0x0007);
LCD_IO_WriteData(0x000f);
LCD_IO_WriteData(0x000D);
LCD_IO_WriteData(0x001B);
LCD_IO_WriteData(0x000A);
LCD_IO_WriteData(0x003c);
LCD_IO_WriteData(0x0078);
LCD_IO_WriteData(0x004A);
LCD_IO_WriteData(0x0007);
LCD_IO_WriteData(0x000E);
LCD_IO_WriteData(0x0009);
LCD_IO_WriteData(0x001B);
LCD_IO_WriteData(0x001e);
LCD_IO_WriteData(0x000f);
LCD_IO_WriteReg(0x00E1);
LCD_IO_WriteData(0x0000);
LCD_IO_WriteData(0x0022);
LCD_IO_WriteData(0x0024);
LCD_IO_WriteData(0x0006);
LCD_IO_WriteData(0x0012);
LCD_IO_WriteData(0x0007);
LCD_IO_WriteData(0x0036);
LCD_IO_WriteData(0x0047);
LCD_IO_WriteData(0x0047);
LCD_IO_WriteData(0x0006);
LCD_IO_WriteData(0x000a);
LCD_IO_WriteData(0x0007);
LCD_IO_WriteData(0x0030);
LCD_IO_WriteData(0x0037);
LCD_IO_WriteData(0x000f);
LCD_IO_WriteReg(0x00C0);
LCD_IO_WriteData(0x0010);
LCD_IO_WriteData(0x0010);
LCD_IO_WriteReg(0x00C1);
LCD_IO_WriteData(0x0041);
LCD_IO_WriteReg(0x00C5);
LCD_IO_WriteData(0x0000);
LCD_IO_WriteData(0x0022);
LCD_IO_WriteData(0x0080);
LCD_IO_WriteReg(0x0036);
//ILI9488_WriteData(0x0068);
//if (gCfgItems.overturn_180 != 0xEE)
//{
LCD_IO_WriteData(0x0068);
//}
//else
//{
//ILI9488_WriteData(0x00A8);
//}
LCD_IO_WriteReg(0x003A); //Interface Mode Control
LCD_IO_WriteData(0x0055);
LCD_IO_WriteReg(0x00B0); //Interface Mode Control
LCD_IO_WriteData(0x0000);
LCD_IO_WriteReg(0x00B1); //Frame rate 70HZ
LCD_IO_WriteData(0x00B0);
LCD_IO_WriteData(0x0011);
LCD_IO_WriteReg(0x00B4);
LCD_IO_WriteData(0x0002);
LCD_IO_WriteReg(0x00B6); //RGB/MCU Interface Control
LCD_IO_WriteData(0x0002);
LCD_IO_WriteData(0x0042);
LCD_IO_WriteReg(0x00B7);
LCD_IO_WriteData(0x00C6);
//WriteComm(0xBE);
//WriteData(0x00);
//WriteData(0x04);
LCD_IO_WriteReg(0x00E9);
LCD_IO_WriteData(0x0000);
LCD_IO_WriteReg(0x00F7);
LCD_IO_WriteData(0x00A9);
LCD_IO_WriteData(0x0051);
LCD_IO_WriteData(0x002C);
LCD_IO_WriteData(0x0082);
LCD_IO_WriteReg(0x0011);
for (i = 0; i < 65535; i++);
LCD_IO_WriteReg(0x0029);
ili9320_SetWindows(0, 0, 480, 320);
LCD_Clear(0x0000);
OUT_WRITE(LCD_BACKLIGHT_PIN, HIGH);
}
} }
else if ((DeviceCode == 0x9325) || (DeviceCode == 0x9328) || (DeviceCode == 0x1505)) {
/* LCD_WriteReg(0x0050, StartX);
LCD_WriteReg(0x0052, StartY);
LCD_WriteReg(0x0051, xEnd);
LCD_WriteReg(0x0053, yEnd);*/
LCD_WriteReg(0x0050, StartY); //Specify the start/end positions of the window address in the horizontal direction by an address unit
LCD_WriteReg(0x0051, yEnd); //Specify the start positions of the window address in the vertical direction by an address unit
LCD_WriteReg(0x0052, 320 - xEnd);
LCD_WriteReg(0x0053, 320 - StartX - 1); //Specify the end positions of the window address in the vertical direction by an address unit
#endif // if DISABLED(SPI_GRAPHICAL_TFT) }
else {
s_h = (StartX >> 8) & 0xFF;
s_l = StartX & 0xFF;
e_h = ((StartX + width - 1) >> 8) & 0xFF;
e_l = (StartX + width - 1) & 0xFF;
extern uint8_t bmp_public_buf[17 * 1024]; LCD_IO_WriteReg(0x2A);
void tft_lvgl_init() { LCD_IO_WriteData(s_h);
//uint16_t test_id=0; LCD_IO_WriteData(s_l);
W25QXX.init(SPI_QUARTER_SPEED); LCD_IO_WriteData(e_h);
//test_id=W25QXX.W25QXX_ReadID(); LCD_IO_WriteData(e_l);
#if ENABLED(SDSUPPORT)
UpdatePic();
UpdateFont();
#endif
gCfgItems_init(); s_h = (StartY >> 8) & 0xFF;
ui_cfg_init(); s_l = StartY & 0xFF;
disp_language_init(); e_h = ((StartY + heigh - 1) >> 8) & 0xFF;
//spi_flash_read_test(); e_l = (StartY + heigh - 1) & 0xFF;
#if ENABLED(SPI_GRAPHICAL_TFT) LCD_IO_WriteReg(0x2B);
SPI_TFT.spi_init(SPI_FULL_SPEED); LCD_IO_WriteData(s_h);
SPI_TFT.LCD_init(); LCD_IO_WriteData(s_l);
LCD_IO_WriteData(e_h);
LCD_IO_WriteData(e_l);
}
}
void LCD_Clear(uint16_t Color) {
uint32_t index = 0;
unsigned int count;
if (DeviceCode == 0x9488) {
tft_set_cursor(0, 0);
ili9320_SetWindows(0, 0, 480, 320);
LCD_WriteRAM_Prepare();
#ifdef LCD_USE_DMA_FSMC
LCD_IO_WriteMultiple(Color, LCD_FULL_PIXEL_WIDTH * LCD_FULL_PIXEL_HEIGHT);
#else #else
init_tft(); //index = (160*480);
#endif for (index = 0; index < 320 * 480; index++)
LCD_IO_WriteData(Color);
lv_init();
lv_disp_buf_init(&disp_buf, bmp_public_buf, NULL, LV_HOR_RES_MAX * 18); /*Initialize the display buffer*/
lv_disp_drv_t disp_drv; /*Descriptor of a display driver*/
lv_disp_drv_init(&disp_drv); /*Basic initialization*/
disp_drv.flush_cb = my_disp_flush; /*Set your driver function*/
disp_drv.buffer = &disp_buf; /*Assign the buffer to the display*/
lv_disp_drv_register(&disp_drv); /*Finally register the driver*/
lv_indev_drv_t indev_drv;
lv_indev_drv_init(&indev_drv); /*Descriptor of a input device driver*/
indev_drv.type = LV_INDEV_TYPE_POINTER; /*Touch pad is a pointer-like device*/
indev_drv.read_cb = my_touchpad_read; /*Set your driver function*/
lv_indev_drv_register(&indev_drv); /*Finally register the driver*/
systick_attach_callback(SysTick_Callback);
init_gb2312_font();
tft_style_init();
filament_pin_setup();
#if ENABLED(POWER_LOSS_RECOVERY)
if (recovery.valid()) {
if (gCfgItems.from_flash_pic == 1)
flash_preview_begin = 1;
else
default_preview_flg = 1;
uiCfg.print_state = REPRINTING;
memset(public_buf_m, 0, sizeof(public_buf_m));
strncpy(public_buf_m, recovery.info.sd_filename, sizeof(public_buf_m));
card.printLongPath(public_buf_m);
strncpy(list_file.long_name[sel_id], card.longFilename, sizeof(list_file.long_name[sel_id]));
lv_draw_printing();
}
else
#endif
lv_draw_ready_print();
#if ENABLED(MKS_TEST)
Test_GPIO();
#endif #endif
//LCD_IO_WriteMultiple(Color, (480*320));
//while(index --) LCD_IO_WriteData(Color);
} }
else if (DeviceCode == 0x5761) {
#if 0 LCD_IO_WriteReg(0x002a);
void LCD_WriteRAM(uint16_t RGB_Code) { LCD_IO_WriteData(0);
#if 0 LCD_IO_WriteData(0);
ClrCs LCD_IO_WriteData(HDP >> 8);
/* Write 16-bit GRAM Reg */ LCD_IO_WriteData(HDP & 0x00ff);
LCD->LCD_RAM = RGB_Code; LCD_IO_WriteReg(0x002b);
SetCs LCD_IO_WriteData(0);
#else LCD_IO_WriteData(0);
LCD_IO_WriteData(RGB_Code); LCD_IO_WriteData(VDP >> 8);
#endif LCD_IO_WriteData(VDP & 0x00ff);
LCD_IO_WriteReg(0x002c);
LCD_IO_WriteReg(0x002c);
for (count = 0; count < (HDP + 1) * (VDP + 1); count++)
LCD_IO_WriteData(Color);
} }
else {
tft_set_cursor(0, 0);
LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
for (index = 0; index < 76800; index++)
LCD_IO_WriteData(Color);
}
}
extern uint16_t ILI9488_ReadRAM();
#if DISABLED(SPI_GRAPHICAL_TFT)
void init_tft() {
uint16_t i;
//************* Start Initial Sequence **********//
//start lcd pins and dma
#if PIN_EXISTS(LCD_BACKLIGHT)
OUT_WRITE(LCD_BACKLIGHT_PIN, DISABLED(DELAYED_BACKLIGHT_INIT)); // Illuminate after reset or right away
#endif #endif
void my_disp_flush(lv_disp_drv_t * disp, const lv_area_t * area, lv_color_t * color_p) { #if PIN_EXISTS(LCD_RESET)
#if ENABLED(SPI_GRAPHICAL_TFT) // Perform a clean hardware reset with needed delays
OUT_WRITE(LCD_RESET_PIN, LOW);
_delay_ms(5);
WRITE(LCD_RESET_PIN, HIGH);
_delay_ms(5);
#endif
#if PIN_EXISTS(LCD_BACKLIGHT) && ENABLED(DELAYED_BACKLIGHT_INIT)
WRITE(LCD_BACKLIGHT_PIN, HIGH);
#endif
TERN_(HAS_LCD_CONTRAST, refresh_contrast());
#ifdef LCD_USE_DMA_FSMC
dma_init(FSMC_DMA_DEV);
dma_disable(FSMC_DMA_DEV, FSMC_DMA_CHANNEL);
dma_set_priority(FSMC_DMA_DEV, FSMC_DMA_CHANNEL, DMA_PRIORITY_MEDIUM);
#endif
LCD_IO_Init(FSMC_CS_PIN, FSMC_RS_PIN);
_delay_ms(5);
LCD_IO_WriteReg(0x00D3);
DeviceCode = ILI9488_ReadRAM(); //dummy read
DeviceCode = ILI9488_ReadRAM();
DeviceCode = ILI9488_ReadRAM();
DeviceCode <<= 8;
DeviceCode |= ILI9488_ReadRAM();
if (DeviceCode == 0x9488) {
LCD_IO_WriteReg(0x00E0);
LCD_IO_WriteData(0x0000);
LCD_IO_WriteData(0x0007);
LCD_IO_WriteData(0x000f);
LCD_IO_WriteData(0x000D);
LCD_IO_WriteData(0x001B);
LCD_IO_WriteData(0x000A);
LCD_IO_WriteData(0x003c);
LCD_IO_WriteData(0x0078);
LCD_IO_WriteData(0x004A);
LCD_IO_WriteData(0x0007);
LCD_IO_WriteData(0x000E);
LCD_IO_WriteData(0x0009);
LCD_IO_WriteData(0x001B);
LCD_IO_WriteData(0x001e);
LCD_IO_WriteData(0x000f);
LCD_IO_WriteReg(0x00E1);
LCD_IO_WriteData(0x0000);
LCD_IO_WriteData(0x0022);
LCD_IO_WriteData(0x0024);
LCD_IO_WriteData(0x0006);
LCD_IO_WriteData(0x0012);
LCD_IO_WriteData(0x0007);
LCD_IO_WriteData(0x0036);
LCD_IO_WriteData(0x0047);
LCD_IO_WriteData(0x0047);
LCD_IO_WriteData(0x0006);
LCD_IO_WriteData(0x000a);
LCD_IO_WriteData(0x0007);
LCD_IO_WriteData(0x0030);
LCD_IO_WriteData(0x0037);
LCD_IO_WriteData(0x000f);
LCD_IO_WriteReg(0x00C0);
LCD_IO_WriteData(0x0010);
LCD_IO_WriteData(0x0010);
LCD_IO_WriteReg(0x00C1);
LCD_IO_WriteData(0x0041);
LCD_IO_WriteReg(0x00C5);
LCD_IO_WriteData(0x0000);
LCD_IO_WriteData(0x0022);
LCD_IO_WriteData(0x0080);
LCD_IO_WriteReg(0x0036);
//ILI9488_WriteData(0x0068);
//if (gCfgItems.overturn_180 != 0xEE)
//{
LCD_IO_WriteData(0x0068);
//}
//else
//{
//ILI9488_WriteData(0x00A8);
//}
LCD_IO_WriteReg(0x003A); //Interface Mode Control
LCD_IO_WriteData(0x0055);
LCD_IO_WriteReg(0x00B0); //Interface Mode Control
LCD_IO_WriteData(0x0000);
LCD_IO_WriteReg(0x00B1); //Frame rate 70HZ
LCD_IO_WriteData(0x00B0);
LCD_IO_WriteData(0x0011);
LCD_IO_WriteReg(0x00B4);
LCD_IO_WriteData(0x0002);
LCD_IO_WriteReg(0x00B6); //RGB/MCU Interface Control
LCD_IO_WriteData(0x0002);
LCD_IO_WriteData(0x0042);
LCD_IO_WriteReg(0x00B7);
LCD_IO_WriteData(0x00C6);
//WriteComm(0xBE);
//WriteData(0x00);
//WriteData(0x04);
LCD_IO_WriteReg(0x00E9);
LCD_IO_WriteData(0x0000);
LCD_IO_WriteReg(0x00F7);
LCD_IO_WriteData(0x00A9);
LCD_IO_WriteData(0x0051);
LCD_IO_WriteData(0x002C);
LCD_IO_WriteData(0x0082);
LCD_IO_WriteReg(0x0011);
for (i = 0; i < 65535; i++);
LCD_IO_WriteReg(0x0029);
ili9320_SetWindows(0, 0, 480, 320);
LCD_Clear(0x0000);
OUT_WRITE(LCD_BACKLIGHT_PIN, HIGH);
}
}
#endif // if DISABLED(SPI_GRAPHICAL_TFT)
extern uint8_t bmp_public_buf[17 * 1024];
void tft_lvgl_init() {
//uint16_t test_id=0;
W25QXX.init(SPI_QUARTER_SPEED);
//test_id=W25QXX.W25QXX_ReadID();
//init tft first!
#if ENABLED(SPI_GRAPHICAL_TFT)
SPI_TFT.spi_init(SPI_FULL_SPEED);
SPI_TFT.LCD_init();
#else
init_tft();
#endif
#if ENABLED(SDSUPPORT)
UpdatePic();
#if HAS_SPI_FLASH_FONT
UpdateFont();
#endif
#endif
gCfgItems_init();
ui_cfg_init();
disp_language_init();
//spi_flash_read_test();
#if ENABLED(TOUCH_BUTTONS)
touch.init();
#endif
lv_init();
lv_disp_buf_init(&disp_buf, bmp_public_buf, NULL, LV_HOR_RES_MAX * 18); /*Initialize the display buffer*/
lv_disp_drv_t disp_drv; /*Descriptor of a display driver*/
lv_disp_drv_init(&disp_drv); /*Basic initialization*/
disp_drv.flush_cb = my_disp_flush; /*Set your driver function*/
disp_drv.buffer = &disp_buf; /*Assign the buffer to the display*/
lv_disp_drv_register(&disp_drv); /*Finally register the driver*/
lv_indev_drv_t indev_drv;
lv_indev_drv_init(&indev_drv); /*Descriptor of a input device driver*/
indev_drv.type = LV_INDEV_TYPE_POINTER; /*Touch pad is a pointer-like device*/
indev_drv.read_cb = my_touchpad_read; /*Set your driver function*/
lv_indev_drv_register(&indev_drv); /*Finally register the driver*/
systick_attach_callback(SysTick_Callback);
#if HAS_SPI_FLASH_FONT
init_gb2312_font();
#endif
tft_style_init();
filament_pin_setup();
#if ENABLED(POWER_LOSS_RECOVERY)
if (recovery.valid()) {
if (gCfgItems.from_flash_pic == 1)
flash_preview_begin = 1;
else
default_preview_flg = 1;
uiCfg.print_state = REPRINTING;
memset(public_buf_m, 0, sizeof(public_buf_m));
strncpy(public_buf_m, recovery.info.sd_filename, sizeof(public_buf_m));
card.printLongPath(public_buf_m);
strncpy(list_file.long_name[sel_id], card.longFilename, sizeof(list_file.long_name[sel_id]));
lv_draw_printing();
}
else
#endif
lv_draw_ready_print();
#if ENABLED(MKS_TEST)
Test_GPIO();
#endif
}
void my_disp_flush(lv_disp_drv_t * disp, const lv_area_t * area, lv_color_t * color_p) {
#if ENABLED(SPI_GRAPHICAL_TFT)
uint16_t i, width, height;
uint16_t clr_temp;
uint8_t tbuf[480 * 2];
SPI_TFT.spi_init(SPI_FULL_SPEED);
width = area->x2 - area->x1 + 1;
height = area->y2 - area->y1 + 1;
for (int j = 0; j < height; j++) {
SPI_TFT.SetCursor(0, 0);
SPI_TFT.SetWindows((uint16_t)area->x1, (uint16_t)area->y1 + j, width, 1);
SPI_TFT.LCD_WriteRAM_Prepare();
for (i = 0; i < width * 2;) {
clr_temp = (uint16_t)(((uint16_t)color_p->ch.red << 11)
| ((uint16_t)color_p->ch.green << 5)
| ((uint16_t)color_p->ch.blue));
tbuf[i] = clr_temp >> 8;
tbuf[i + 1] = clr_temp;
i += 2;
color_p++;
}
SPI_TFT_CS_L;
SPI_TFT_DC_H;
SPI.dmaSend(tbuf, width * 2, true);
SPI_TFT_CS_H;
}
lv_disp_flush_ready(disp); /* Indicate you are ready with the flushing*/
W25QXX.init(SPI_QUARTER_SPEED);
#else
#if 1
uint16_t i, width, height; uint16_t i, width, height;
uint16_t clr_temp; uint16_t clr_temp;
uint8_t tbuf[480 * 2];
SPI_TFT.spi_init(SPI_FULL_SPEED);
width = area->x2 - area->x1 + 1; width = area->x2 - area->x1 + 1;
height = area->y2 - area->y1 + 1; height = area->y2 - area->y1 + 1;
ili9320_SetWindows((uint16_t)area->x1, (uint16_t)area->y1, width, height);
for (int j = 0; j < height; j++) { LCD_WriteRAM_Prepare();
SPI_TFT.SetCursor(0, 0); for (i = 0; i < width * height - 2; i++) {
SPI_TFT.SetWindows((uint16_t)area->x1, (uint16_t)area->y1 + j, width, 1); clr_temp = (uint16_t)(((uint16_t)color_p->ch.red << 11)
SPI_TFT.LCD_WriteRAM_Prepare(); | ((uint16_t)color_p->ch.green << 5)
| ((uint16_t)color_p->ch.blue));
for (i = 0; i < width * 2;) { LCD_IO_WriteData(clr_temp);
clr_temp = (uint16_t)(((uint16_t)color_p->ch.red << 11) color_p++;
| ((uint16_t)color_p->ch.green << 5)
| ((uint16_t)color_p->ch.blue));
tbuf[i] = clr_temp >> 8;
tbuf[i + 1] = clr_temp;
i += 2;
color_p++;
}
SPI_TFT_CS_L;
SPI_TFT_DC_H;
SPI.dmaSend(tbuf, width * 2, true);
SPI_TFT_CS_H;
} }
lv_disp_flush_ready(disp); /* Indicate you are ready with the flushing*/ lv_disp_flush_ready(disp); /* Indicate you are ready with the flushing*/
W25QXX.init(SPI_QUARTER_SPEED);
#else
#if 1
uint16_t i, width, height;
uint16_t clr_temp;
#if 0
int32_t x, y;
for (y = area->y1; y <= area->y2; y++)
for (x = area->x1; x <= area->x2; x++) {
//set_pixel(x, y, *color_p); /* Put a pixel to the display.*/
clr_temp = (uint16_t)(((uint16_t)color_p->ch.red << 11)
| ((uint16_t)color_p->ch.green << 5)
| ((uint16_t)color_p->ch.blue));
tft_set_point(x, y, clr_temp);
color_p++;
}
#else
width = area->x2 - area->x1 + 1;
height = area->y2 - area->y1 + 1;
//tft_set_cursor((uint16_t)area->x1,(uint16_t)area->y1);
ili9320_SetWindows((uint16_t)area->x1, (uint16_t)area->y1, width, height);
LCD_WriteRAM_Prepare();
for (i = 0; i < width * height; i++) {
clr_temp = (uint16_t)(((uint16_t)color_p->ch.red << 11)
| ((uint16_t)color_p->ch.green << 5)
| ((uint16_t)color_p->ch.blue));
LCD_IO_WriteData(clr_temp);
color_p++;
}
#endif
lv_disp_flush_ready(disp); /* Indicate you are ready with the flushing*/
#endif
#endif // SPI_GRAPHICAL_TFT
}
#define TICK_CYCLE 1
static int32_t touch_time1 = 0;
unsigned int getTickDiff(unsigned int curTick, unsigned int lastTick) {
if (lastTick <= curTick)
return (curTick - lastTick) * TICK_CYCLE;
else
return (0xFFFFFFFF - lastTick + curTick) * TICK_CYCLE;
}
#if ENABLED(SPI_GRAPHICAL_TFT)
#ifndef USE_XPT2046
#define USE_XPT2046 1
#define XPT2046_XY_SWAP 1
#define XPT2046_X_INV 1
#define XPT2046_Y_INV 0
#endif #endif
#endif // SPI_GRAPHICAL_TFT
}
#if USE_XPT2046 #define TICK_CYCLE 1
#define XPT2046_HOR_RES 480
#define XPT2046_VER_RES 320
#define XPT2046_X_MIN 201
#define XPT2046_Y_MIN 164
#define XPT2046_X_MAX 3919
#define XPT2046_Y_MAX 3776
#define XPT2046_AVG 4
#define XPT2046_INV 1
#endif
#else static int32_t touch_time1 = 0;
#ifndef USE_XPT2046 unsigned int getTickDiff(unsigned int curTick, unsigned int lastTick) {
#define USE_XPT2046 1 return TICK_CYCLE * (lastTick <= curTick ? (curTick - lastTick) : (0xFFFFFFFF - lastTick + curTick));
#define XPT2046_XY_SWAP 1 }
#define XPT2046_X_INV 0
#define XPT2046_Y_INV 1
#endif
#if USE_XPT2046 #if ENABLED(SPI_GRAPHICAL_TFT)
#define XPT2046_HOR_RES 480
#define XPT2046_VER_RES 320
#define XPT2046_X_MIN 201
#define XPT2046_Y_MIN 164
#define XPT2046_X_MAX 3919
#define XPT2046_Y_MAX 3776
#define XPT2046_AVG 4
#define XPT2046_INV 0
#endif
#ifndef USE_XPT2046
#define USE_XPT2046 1
#define XPT2046_XY_SWAP 1
#define XPT2046_X_INV 1
#define XPT2046_Y_INV 0
#endif #endif
static void xpt2046_corr(uint16_t *x, uint16_t *y) { #if USE_XPT2046
#if XPT2046_XY_SWAP #define XPT2046_HOR_RES 480
int16_t swap_tmp; #define XPT2046_VER_RES 320
swap_tmp = *x; #define XPT2046_X_MIN 201
*x = *y; #define XPT2046_Y_MIN 164
*y = swap_tmp; #define XPT2046_X_MAX 3919
#endif #define XPT2046_Y_MAX 3776
if ((*x) > XPT2046_X_MIN) (*x) -= XPT2046_X_MIN; else (*x) = 0; #define XPT2046_AVG 4
if ((*y) > XPT2046_Y_MIN) (*y) -= XPT2046_Y_MIN; else (*y) = 0; #define XPT2046_INV 1
(*x) = uint32_t(uint32_t(*x) * XPT2046_HOR_RES) / (XPT2046_X_MAX - XPT2046_X_MIN); #endif
(*y) = uint32_t(uint32_t(*y) * XPT2046_VER_RES) / (XPT2046_Y_MAX - XPT2046_Y_MIN);
#if XPT2046_X_INV
(*x) = XPT2046_HOR_RES - (*x);
#endif
#if XPT2046_Y_INV
(*y) = XPT2046_VER_RES - (*y);
#endif
}
#define times 4 #else
#define CHX 0x90// 0x90
#define CHY 0xD0// 0xD0
int SPI2_ReadWrite2Bytes(void) { #ifndef USE_XPT2046
volatile uint16_t ans = 0; #define USE_XPT2046 1
uint16_t temp = 0; #ifndef XPT2046_XY_SWAP
#define XPT2046_XY_SWAP 1
#endif
#ifndef XPT2046_X_INV
#define XPT2046_X_INV 0
#endif
#ifndef XPT2046_Y_INV
#define XPT2046_Y_INV 1
#endif
#endif
#if USE_XPT2046
#ifndef XPT2046_HOR_RES 480
#define XPT2046_HOR_RES 480
#endif
#ifndef XPT2046_VER_RES
#define XPT2046_VER_RES 320
#endif
#ifndef XPT2046_X_MIN
#define XPT2046_X_MIN 201
#endif
#ifndef XPT2046_Y_MIN
#define XPT2046_Y_MIN 164
#endif
#ifndef XPT2046_X_MAX
#define XPT2046_X_MAX 3919
#endif
#ifndef XPT2046_Y_MAX
#define XPT2046_Y_MAX 3776
#endif
#ifndef XPT2046_AVG
#define XPT2046_AVG 4
#endif
#ifndef XPT2046_INV
#define XPT2046_INV 0
#endif
#endif
#endif
static void xpt2046_corr(uint16_t *x, uint16_t *y) {
#if XPT2046_XY_SWAP
int16_t swap_tmp;
swap_tmp = *x;
*x = *y;
*y = swap_tmp;
#endif
if ((*x) > XPT2046_X_MIN) (*x) -= XPT2046_X_MIN; else (*x) = 0;
if ((*y) > XPT2046_Y_MIN) (*y) -= XPT2046_Y_MIN; else (*y) = 0;
(*x) = uint32_t(uint32_t(*x) * XPT2046_HOR_RES) / (XPT2046_X_MAX - XPT2046_X_MIN);
(*y) = uint32_t(uint32_t(*y) * XPT2046_VER_RES) / (XPT2046_Y_MAX - XPT2046_Y_MIN);
#if XPT2046_X_INV
(*x) = XPT2046_HOR_RES - (*x);
#endif
#if XPT2046_Y_INV
(*y) = XPT2046_VER_RES - (*y);
#endif
}
#define times 4
#define CHX 0x90
#define CHY 0xD0
int SPI2_ReadWrite2Bytes(void) {
volatile uint16_t ans = 0;
uint16_t temp = 0;
#if ENABLED(SPI_GRAPHICAL_TFT)
temp = SPI_TFT.spi_read_write_byte(0xFF);
ans = temp << 8;
temp = SPI_TFT.spi_read_write_byte(0xFF);
ans |= temp;
ans >>= 3;
#else
temp = W25QXX.spi_flash_read_write_byte(0xFF);
ans = temp << 8;
temp = W25QXX.spi_flash_read_write_byte(0xFF);
ans |= temp;
ans >>= 3;
#endif
return ans & 0x0FFF;
}
uint16_t x_addata[times], y_addata[times];
void XPT2046_Rd_Addata(uint16_t *X_Addata, uint16_t *Y_Addata) {
uint16_t i, j, k;
#if ENABLED(SPI_GRAPHICAL_TFT)
SPI_TFT.spi_init(SPI_QUARTER_SPEED);
#endif
for (i = 0; i < times; i++) {
#if ENABLED(SPI_GRAPHICAL_TFT) #if ENABLED(SPI_GRAPHICAL_TFT)
temp = SPI_TFT.spi_read_write_byte(0xFF); OUT_WRITE(TOUCH_CS_PIN, LOW);
ans = temp << 8; SPI_TFT.spi_read_write_byte(CHX);
temp = SPI_TFT.spi_read_write_byte(0xFF); y_addata[i] = SPI2_ReadWrite2Bytes();
ans |= temp; WRITE(TOUCH_CS_PIN, HIGH);
ans >>= 3;
#else
temp = W25QXX.spi_flash_read_write_byte(0xFF);
ans = temp << 8;
temp = W25QXX.spi_flash_read_write_byte(0xFF);
ans |= temp;
ans >>= 3;
#endif
return ans & 0x0FFF;
}
uint16_t x_addata[times], y_addata[times]; OUT_WRITE(TOUCH_CS_PIN, LOW);
void XPT2046_Rd_Addata(uint16_t *X_Addata, uint16_t *Y_Addata) { SPI_TFT.spi_read_write_byte(CHY);
uint16_t i, j, k; x_addata[i] = SPI2_ReadWrite2Bytes();
//int result; WRITE(TOUCH_CS_PIN, HIGH);
//#if ENABLED(TOUCH_BUTTONS) #else // #if ENABLED(TOUCH_BUTTONS)
OUT_WRITE(TOUCH_CS_PIN, LOW);
W25QXX.spi_flash_read_write_byte(CHX);
y_addata[i] = SPI2_ReadWrite2Bytes();
WRITE(TOUCH_CS_PIN, HIGH);
#if ENABLED(SPI_GRAPHICAL_TFT) OUT_WRITE(TOUCH_CS_PIN, LOW);
SPI_TFT.spi_init(SPI_QUARTER_SPEED); W25QXX.spi_flash_read_write_byte(CHY);
x_addata[i] = SPI2_ReadWrite2Bytes();
WRITE(TOUCH_CS_PIN, HIGH);
#endif #endif
for (i = 0; i < times; i++) {
#if ENABLED(SPI_GRAPHICAL_TFT)
OUT_WRITE(TOUCH_CS_PIN, LOW);
SPI_TFT.spi_read_write_byte(CHX);
y_addata[i] = SPI2_ReadWrite2Bytes();
WRITE(TOUCH_CS_PIN, HIGH);
OUT_WRITE(TOUCH_CS_PIN, LOW);
SPI_TFT.spi_read_write_byte(CHY);
x_addata[i] = SPI2_ReadWrite2Bytes();
WRITE(TOUCH_CS_PIN, HIGH);
#else // #if ENABLED(TOUCH_BUTTONS)
OUT_WRITE(TOUCH_CS_PIN, LOW);
W25QXX.spi_flash_read_write_byte(CHX);
y_addata[i] = SPI2_ReadWrite2Bytes();
WRITE(TOUCH_CS_PIN, HIGH);
OUT_WRITE(TOUCH_CS_PIN, LOW);
W25QXX.spi_flash_read_write_byte(CHY);
x_addata[i] = SPI2_ReadWrite2Bytes();
WRITE(TOUCH_CS_PIN, HIGH);
#endif
}
//#endif
//result = x_addata[0];
for (i = 0; i < times; i++)
for (j = i + 1; j < times; j++)
if (x_addata[j] > x_addata[i]) {
k = x_addata[j];
x_addata[j] = x_addata[i];
x_addata[i] = k;
}
if (x_addata[times / 2 - 1] - x_addata[times / 2] > 50) {
*X_Addata = *Y_Addata = 0;
return;
}
*X_Addata = (x_addata[times / 2 - 1] + x_addata[times / 2]) / 2;
//result = y_addata[0];
for (i = 0; i < times; i++)
for (j = i + 1; j < times; j++)
if (y_addata[j] > y_addata[i]) {
k = y_addata[j];
y_addata[j] = y_addata[i];
y_addata[i] = k;
}
if (y_addata[times / 2 - 1] - y_addata[times / 2] > 50) {
*X_Addata = *Y_Addata = 0;
return;
}
*Y_Addata = (y_addata[times / 2 - 1] + y_addata[times / 2]) / 2;
} }
#define ADC_VALID_OFFSET 10 for (i = 0; i < times; i++)
for (j = i + 1; j < times; j++)
uint8_t TOUCH_PressValid(uint16_t _usX, uint16_t _usY) { if (x_addata[j] > x_addata[i]) {
if ((_usX <= ADC_VALID_OFFSET) || (_usY <= ADC_VALID_OFFSET) k = x_addata[j];
|| (_usX >= 4095 - ADC_VALID_OFFSET) || (_usY >= 4095 - ADC_VALID_OFFSET) x_addata[j] = x_addata[i];
) return 0; x_addata[i] = k;
}
return 1; if (x_addata[times / 2 - 1] - x_addata[times / 2] > 50) {
*X_Addata = *Y_Addata = 0;
return;
} }
static lv_coord_t last_x = 0, last_y = 0; *X_Addata = (x_addata[times / 2 - 1] + x_addata[times / 2]) / 2;
bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data) {
#if 1
uint32_t tmpTime, diffTime = 0;
tmpTime = millis(); for (i = 0; i < times; i++)
diffTime = getTickDiff(tmpTime, touch_time1); for (j = i + 1; j < times; j++)
/*Save the state and save the pressed coordinate*/ if (y_addata[j] > y_addata[i]) {
//data->state = TOUCH_PressValid(last_x, last_y) ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL; k = y_addata[j];
//if (data->state == LV_INDEV_STATE_PR) ADS7843_Rd_Addata((u16 *)&last_x, (u16 *)&last_y); y_addata[j] = y_addata[i];
//touchpad_get_xy(&last_x, &last_y); y_addata[i] = k;
/*Save the pressed coordinates and the state*/
if (diffTime > 10) {
XPT2046_Rd_Addata((uint16_t *)&last_x, (uint16_t *)&last_y);
if (TOUCH_PressValid(last_x, last_y)) {
data->state = LV_INDEV_STATE_PR;
/*Set the coordinates (if released use the last pressed coordinates)*/
xpt2046_corr((uint16_t *)&last_x, (uint16_t *)&last_y);
data->point.x = last_x;
data->point.y = last_y;
}
else {
data->state = LV_INDEV_STATE_REL;
}
touch_time1 = tmpTime;
} }
return false; /*Return `false` because we are not buffering and no more data to read*/ if (y_addata[times / 2 - 1] - y_addata[times / 2] > 50) {
#endif *X_Addata = *Y_Addata = 0;
return;
} }
#endif // TFT_LITTLE_VGL_UI *Y_Addata = (y_addata[times / 2 - 1] + y_addata[times / 2]) / 2;
}
#define ADC_VALID_OFFSET 10
uint8_t TOUCH_PressValid(uint16_t _usX, uint16_t _usY) {
if ( (_usX <= ADC_VALID_OFFSET) || (_usY <= ADC_VALID_OFFSET)
|| (_usX >= 4095 - ADC_VALID_OFFSET) || (_usY >= 4095 - ADC_VALID_OFFSET)
) return 0;
return 1;
}
static lv_coord_t last_x = 0, last_y = 0;
bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data) {
uint32_t tmpTime, diffTime = 0;
tmpTime = millis();
diffTime = getTickDiff(tmpTime, touch_time1);
/*Save the state and save the pressed coordinate*/
//data->state = TOUCH_PressValid(last_x, last_y) ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL;
//if (data->state == LV_INDEV_STATE_PR) ADS7843_Rd_Addata((u16 *)&last_x, (u16 *)&last_y);
//touchpad_get_xy(&last_x, &last_y);
/*Save the pressed coordinates and the state*/
if (diffTime > 10) {
//use marlin touch code if enabled
#if ENABLED(TOUCH_BUTTONS)
touch.getTouchPoint(reinterpret_cast<uint16_t&>(last_x), reinterpret_cast<uint16_t&>(last_y));
#else
XPT2046_Rd_Addata((uint16_t *)&last_x, (uint16_t *)&last_y);
#endif
if (TOUCH_PressValid(last_x, last_y)) {
data->state = LV_INDEV_STATE_PR;
/*Set the coordinates (if released use the last pressed coordinates)*/
// SERIAL_ECHOLNPAIR("antes X: ", last_x, ", y: ", last_y);
xpt2046_corr((uint16_t *)&last_x, (uint16_t *)&last_y);
// SERIAL_ECHOLNPAIR("X: ", last_x, ", y: ", last_y);
data->point.x = last_x;
data->point.y = last_y;
last_x = 0;
last_y = 0;
}
else {
data->state = LV_INDEV_STATE_REL;
}
touch_time1 = tmpTime;
}
return false; /*Return `false` because we are not buffering and no more data to read*/
}
#endif // TFT_LVGL_UI

View file

@ -21,7 +21,7 @@
*/ */
#include "../../../../inc/MarlinConfigPre.h" #include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI) #if ENABLED(TFT_LVGL_UI)
#include "../../../../MarlinCore.h" #include "../../../../MarlinCore.h"
@ -1900,4 +1900,4 @@ void disp_language_init() {
} }
} }
#endif // TFT_LITTLE_VGL_UI #endif // TFT_LVGL_UI

View file

@ -541,9 +541,9 @@
#elif MB(CCROBOT_MEEB_3DP) #elif MB(CCROBOT_MEEB_3DP)
#include "stm32f1/pins_CCROBOT_MEEB_3DP.h" // STM32F1 env:STM32F103RC_meeb #include "stm32f1/pins_CCROBOT_MEEB_3DP.h" // STM32F1 env:STM32F103RC_meeb
#elif MB(CHITU3D_V5) #elif MB(CHITU3D_V5)
#include "stm32f1/pins_CHITU3D_V5.h" // STM32F1 env:chitu_f103 env:chitu_v5_gpio_init #include "stm32f1/pins_CHITU3D_V5.h" // STM32F1 env:chitu_f103 env:chitu_v5_gpio_init env:chitu_f103_lvgl
#elif MB(CHITU3D_V6) #elif MB(CHITU3D_V6)
#include "stm32f1/pins_CHITU3D_V6.h" // STM32F1 env:chitu_f103 #include "stm32f1/pins_CHITU3D_V6.h" // STM32F1 env:chitu_f103 env:chitu_f103_lvgl
#elif MB(CREALITY_V4) #elif MB(CREALITY_V4)
#include "stm32f1/pins_CREALITY_V4.h" // STM32F1 env:STM32F103RET6_creality #include "stm32f1/pins_CREALITY_V4.h" // STM32F1 env:STM32F103RET6_creality

View file

@ -142,6 +142,71 @@
#endif #endif
#endif #endif
#define SPI_FLASH_SIZE 0x200000 // 2MB
#if ENABLED(TFT_LVGL_UI)
#define HAS_SPI_FLASH_FONT 0
#define HAS_GCODE_PREVIEW 1
#define HAS_GCODE_DEFAULT_VIEW_IN_FLASH 0
#define HAS_LANG_SELECT_SCREEN 0
#define HAS_BAK_VIEW_IN_FLASH 0
//SPI 2
#define W25QXX_CS_PIN PB12
#define W25QXX_MOSI_PIN PB15
#define W25QXX_MISO_PIN PB14
#define W25QXX_SCK_PIN PB13
#define TOUCH_CS_PIN PB7 // SPI1_NSS
#define TOUCH_SCK_PIN PA5 // SPI1_SCK
#define TOUCH_MISO_PIN PA6 // SPI1_MISO
#define TOUCH_MOSI_PIN PA7 // SPI1_MOSI
// #define TOUCH_INT_PIN PB6
#define SPI_TFT_CS_PIN TOUCH_CS_PIN
#define SPI_TFT_SCK_PIN TOUCH_SCK_PIN
#define SPI_TFT_MISO_PIN TOUCH_MISO_PIN
#define SPI_TFT_MOSI_PIN TOUCH_MOSI_PIN
#define SPI_TFT_DC_PIN PB6
#define SPI_TFT_RST_PIN PF11
#define LCD_RESET_PIN PF11
#define LCD_BACKLIGHT_PIN PD13
#define FSMC_CS_PIN PD7
#define FSMC_RS_PIN PD11
#define LCD_USE_DMA_FSMC // Use DMA transfers to send data to the TFT
#define FSMC_DMA_DEV DMA2
#define FSMC_DMA_CHANNEL DMA_CH5
#define LCD_FULL_PIXEL_WIDTH 480
#define LCD_PIXEL_OFFSET_X 48
#define LCD_FULL_PIXEL_HEIGHT 320
#define LCD_PIXEL_OFFSET_Y 48
#define LCD_PIXEL_HEIGHT 320
#define LCD_PIXEL_WIDTH 480
#define XPT2046_X_CALIBRATION -12316
#define XPT2046_Y_CALIBRATION 8981
#define XPT2046_X_OFFSET 340
#define XPT2046_Y_OFFSET -20
#define USE_XPT2046 1
#define XPT2046_XY_SWAP 0
#define XPT2046_X_INV 1
#define XPT2046_Y_INV 0
#define XPT2046_HOR_RES 480
#define XPT2046_VER_RES 320
#define XPT2046_X_MIN 140
#define XPT2046_Y_MIN 200
#define XPT2046_X_MAX 1900
#define XPT2046_Y_MAX 1900
#define XPT2046_AVG 4
#define XPT2046_INV 0
#endif
// SPI1(PA7)=LCD & SPI3(PB5)=STUFF, are not available // SPI1(PA7)=LCD & SPI3(PB5)=STUFF, are not available
// We nee to use the SPI2 // We nee to use the SPI2
#define ENABLE_SPI2 #define ENABLE_SPI2

View file

@ -147,6 +147,71 @@
#endif #endif
#endif #endif
#define SPI_FLASH_SIZE 0x200000 // 2MB
#if ENABLED(TFT_LVGL_UI)
#define HAS_SPI_FLASH_FONT 0
#define HAS_GCODE_PREVIEW 1
#define HAS_GCODE_DEFAULT_VIEW_IN_FLASH 0
#define HAS_LANG_SELECT_SCREEN 0
#define HAS_BAK_VIEW_IN_FLASH 0
//SPI 2
#define W25QXX_CS_PIN PB12
#define W25QXX_MOSI_PIN PB15
#define W25QXX_MISO_PIN PB14
#define W25QXX_SCK_PIN PB13
#define TOUCH_CS_PIN PB7 // SPI1_NSS
#define TOUCH_SCK_PIN PA5 // SPI1_SCK
#define TOUCH_MISO_PIN PA6 // SPI1_MISO
#define TOUCH_MOSI_PIN PA7 // SPI1_MOSI
// #define TOUCH_INT_PIN PB6
#define SPI_TFT_CS_PIN TOUCH_CS_PIN
#define SPI_TFT_SCK_PIN TOUCH_SCK_PIN
#define SPI_TFT_MISO_PIN TOUCH_MISO_PIN
#define SPI_TFT_MOSI_PIN TOUCH_MOSI_PIN
#define SPI_TFT_DC_PIN PB6
#define SPI_TFT_RST_PIN PF11
#define LCD_RESET_PIN PF11
#define LCD_BACKLIGHT_PIN PD13
#define FSMC_CS_PIN PD7
#define FSMC_RS_PIN PD11
#define LCD_USE_DMA_FSMC // Use DMA transfers to send data to the TFT
#define FSMC_DMA_DEV DMA2
#define FSMC_DMA_CHANNEL DMA_CH5
#define LCD_FULL_PIXEL_WIDTH 480
#define LCD_PIXEL_OFFSET_X 48
#define LCD_FULL_PIXEL_HEIGHT 320
#define LCD_PIXEL_OFFSET_Y 48
#define LCD_PIXEL_HEIGHT 320
#define LCD_PIXEL_WIDTH 480
#define XPT2046_X_CALIBRATION -12316
#define XPT2046_Y_CALIBRATION 8981
#define XPT2046_X_OFFSET 340
#define XPT2046_Y_OFFSET -20
#define USE_XPT2046 1
#define XPT2046_XY_SWAP 0
#define XPT2046_X_INV 1
#define XPT2046_Y_INV 0
#define XPT2046_HOR_RES 480
#define XPT2046_VER_RES 320
#define XPT2046_X_MIN 140
#define XPT2046_Y_MIN 200
#define XPT2046_X_MAX 1900
#define XPT2046_Y_MAX 1900
#define XPT2046_AVG 4
#define XPT2046_INV 0
#endif
// SPI1(PA7)=LCD & SPI3(PB5)=STUFF, are not available // SPI1(PA7)=LCD & SPI3(PB5)=STUFF, are not available
// so SPI2 is required. // so SPI2 is required.
#define ENABLE_SPI2 #define ENABLE_SPI2

View file

@ -231,7 +231,7 @@
#endif // HAS_SPI_LCD #endif // HAS_SPI_LCD
#elif ENABLED(TFT_LITTLE_VGL_UI) #elif ENABLED(TFT_LVGL_UI)
#define FSMC_CS_PIN PD7 // NE4 #define FSMC_CS_PIN PD7 // NE4
#define FSMC_RS_PIN PD11 // A0 #define FSMC_RS_PIN PD11 // A0

View file

@ -267,7 +267,7 @@ build_flags = ${common.build_flags} -std=gnu++17 -Wno-register
build_unflags = -std=gnu++11 build_unflags = -std=gnu++11
src_filter = ${common.default_src_filter} +<src/HAL/SAMD51> src_filter = ${common.default_src_filter} +<src/HAL/SAMD51>
lib_deps = ${common.lib_deps} lib_deps = ${common.lib_deps}
SoftwareSerialM=https://github.com/FYSETC/SoftwareSerialM/archive/master.zip SoftwareSerialM
Adafruit_SPIFlash=https://github.com/adafruit/Adafruit_SPIFlash/archive/master.zip Adafruit_SPIFlash=https://github.com/adafruit/Adafruit_SPIFlash/archive/master.zip
debug_tool = jlink debug_tool = jlink
@ -346,7 +346,7 @@ lib_ignore =
Adafruit NeoPixel Adafruit NeoPixel
SPI SPI
lib_deps = ${common.lib_deps} lib_deps = ${common.lib_deps}
SoftwareSerialM=https://github.com/FYSETC/SoftwareSerialM/archive/master.zip SoftwareSerialM
# #
# STM32F103RC # STM32F103RC
@ -385,7 +385,7 @@ lib_deps =
LiquidTWI2@1.2.7 LiquidTWI2@1.2.7
Adafruit NeoPixel=https://github.com/ccccmagicboy/Adafruit_NeoPixel#meeb_3dp_use Adafruit NeoPixel=https://github.com/ccccmagicboy/Adafruit_NeoPixel#meeb_3dp_use
SailfishLCD=https://github.com/mikeshub/SailfishLCD/archive/master.zip SailfishLCD=https://github.com/mikeshub/SailfishLCD/archive/master.zip
SoftwareSerialM=https://github.com/FYSETC/SoftwareSerialM/archive/master.zip SoftwareSerialM
USBComposite for STM32F1@0.91 USBComposite for STM32F1@0.91
lib_ignore = SPI lib_ignore = SPI
debug_tool = stlink debug_tool = stlink
@ -640,7 +640,7 @@ build_unflags = -std=gnu++11
extra_scripts = buildroot/share/PlatformIO/scripts/mks_robin_nano35.py extra_scripts = buildroot/share/PlatformIO/scripts/mks_robin_nano35.py
src_filter = ${common.default_src_filter} +<src/HAL/STM32F1> src_filter = ${common.default_src_filter} +<src/HAL/STM32F1>
lib_deps = ${common.lib_deps} lib_deps = ${common.lib_deps}
SoftwareSerialM=https://github.com/FYSETC/SoftwareSerialM/archive/master.zip SoftwareSerialM
MKS-LittlevGL=https://github.com/makerbase-mks/MKS-LittlevGL/archive/master.zip MKS-LittlevGL=https://github.com/makerbase-mks/MKS-LittlevGL/archive/master.zip
lib_ignore = Adafruit NeoPixel, SPI lib_ignore = Adafruit NeoPixel, SPI
@ -691,6 +691,17 @@ platform = ${common_stm32f1.platform}
extends = env:chitu_f103 extends = env:chitu_f103
build_flags = ${env:chitu_f103.build_flags} -DCHITU_V5_Z_MIN_BUGFIX build_flags = ${env:chitu_f103.build_flags} -DCHITU_V5_Z_MIN_BUGFIX
#
# Chitu boards like Tronxy X5SA (STM32F103ZET6) using TFT LVGL UI
#
[env:chitu_f103_lvgl]
platform = ${common_stm32f1.platform}
extends = env:chitu_f103
src_filter = ${common.default_src_filter} +<src/HAL/STM32F1>
lib_deps = ${common.lib_deps}
SoftwareSerialM
MKS-LittlevGL=https://github.com/makerbase-mks/MKS-LittlevGL/archive/master.zip
# #
# Creality (STM32F103RET6) # Creality (STM32F103RET6)
# #