Add MKS UI (TFT_LITTLE_VGL_UI) (#18071)

This commit is contained in:
makerbase 2020-06-16 10:05:33 +08:00 committed by GitHub
parent 6d571a547c
commit 642112d3eb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
70 changed files with 16162 additions and 10 deletions

View file

@ -2116,10 +2116,20 @@
//
//#define FSMC_GRAPHICAL_TFT
//
// TFT Little VGL UI
//
//#define TFT_LITTLE_VGL_UI
//=============================================================================
//============================ Other Controllers ============================
//=============================================================================
//
// Robin nano v2.0 SPI touch screen
//
//#define SPI_GRAPHICAL_TFT
//
// ADS7843/XPT2046 ADC Touchscreen such as ILI9341 2.8
//

View file

@ -59,6 +59,12 @@
#include "gcode/parser.h"
#include "gcode/queue.h"
#if ENABLED(TFT_LITTLE_VGL_UI)
#include "lvgl.h"
#include "lcd/extui/lib/mks_ui/inc/tft_lvgl_configuration.h"
#include "lcd/extui/lib/mks_ui/inc/draw_ui.h"
#endif
#if ENABLED(DIRECT_STEPPING)
#include "feature/direct_stepping.h"
#endif
@ -726,6 +732,10 @@ void idle(TERN_(ADVANCED_PAUSE_FEATURE, bool no_stepper_sleep/*=false*/)) {
// Direct Stepping
TERN_(DIRECT_STEPPING, page_manager.write_responses());
#if ENABLED(TFT_LITTLE_VGL_UI)
LV_TASK_HANDLER();
#endif
}
/**
@ -1141,6 +1151,10 @@ void setup() {
SETUP_RUN(page_manager.init());
#endif
#if ENABLED(TFT_LITTLE_VGL_UI)
SETUP_RUN(tft_lvgl_init());
#endif
marlin_state = MF_RUNNING;
SETUP_LOG("setup() completed.");
@ -1173,5 +1187,7 @@ void loop() {
endstops.event_handler();
TERN_(TFT_LITTLE_VGL_UI, printer_state_polling());
} while (ENABLED(__AVR__)); // Loop forever on slower (AVR) boards
}

View file

@ -241,6 +241,8 @@
#define DOGLCD
#define IS_ULTIPANEL
#define DELAYED_BACKLIGHT_INIT
#elif ENABLED(SPI_GRAPHICAL_TFT)
#define DELAYED_BACKLIGHT_INIT
#endif
/**

View file

@ -0,0 +1,271 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(SPI_GRAPHICAL_TFT)
#include <SPI.h>
#include "../../../../inc/MarlinConfig.h"
#include "SPI_TFT.h"
TFT SPI_TFT;
#ifndef SPI_TFT_MISO_PIN
#define SPI_TFT_MISO_PIN PA6
#endif
#ifndef SPI_TFT_MOSI_PIN
#define SPI_TFT_MOSI_PIN PA7
#endif
#ifndef SPI_TFT_SCK_PIN
#define SPI_TFT_SCK_PIN PA5
#endif
#ifndef SPI_TFT_CS_PIN
#define SPI_TFT_CS_PIN PD11
#endif
#ifndef SPI_TFT_DC_PIN
#define SPI_TFT_DC_PIN PD10
#endif
#ifndef SPI_TFT_RST_PIN
#define SPI_TFT_RST_PIN PC6
#endif
// use SPI1 for the spi tft.
void TFT::spi_init(uint8_t spiRate) {
SPI_TFT_CS_H;
/**
* STM32F1 APB2 = 72MHz, APB1 = 36MHz, max SPI speed of this MCU if 18Mhz
* STM32F1 has 3 SPI ports, SPI1 in APB2, SPI2/SPI3 in APB1
* so the minimum prescale of SPI1 is DIV4, SPI2/SPI3 is DIV2
*/
uint8_t clock;
switch (spiRate) {
case SPI_FULL_SPEED: clock = SPI_CLOCK_DIV4; break;
case SPI_HALF_SPEED: clock = SPI_CLOCK_DIV4; break;
case SPI_QUARTER_SPEED: clock = SPI_CLOCK_DIV8; break;
case SPI_EIGHTH_SPEED: clock = SPI_CLOCK_DIV16; break;
case SPI_SPEED_5: clock = SPI_CLOCK_DIV32; break;
case SPI_SPEED_6: clock = SPI_CLOCK_DIV64; break;
default: clock = SPI_CLOCK_DIV2; // Default from the SPI library
}
SPI.setModule(1);
SPI.begin();
SPI.setClockDivider(clock);
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE0);
}
uint8_t TFT::spi_Rec() {
uint8_t returnByte = SPI.transfer(ff);
return returnByte;
}
uint8_t TFT::spi_read_write_byte(uint8_t data) {
uint8_t returnByte = SPI.transfer(data);
return returnByte;
}
/**
* @brief Receive a number of bytes from the SPI port to a buffer
*
* @param buf Pointer to starting address of buffer to write to.
* @param nbyte Number of bytes to receive.
* @return Nothing
*
* @details Uses DMA
*/
void TFT::spi_Read(uint8_t* buf, uint16_t nbyte) {SPI.dmaTransfer(0, const_cast<uint8_t*>(buf), nbyte);}
/**
* @brief Send a single byte on SPI port
*
* @param b Byte to send
*
* @details
*/
void TFT::spi_Send(uint8_t b) {SPI.send(b);}
/**
* @brief Write token and then write from 512 byte buffer to SPI (for SD card)
*
* @param buf Pointer with buffer start address
* @return Nothing
*
* @details Use DMA
*/
void TFT::spi_SendBlock(uint8_t token, const uint8_t* buf) {
SPI.send(token);
SPI.dmaSend(const_cast<uint8_t*>(buf), 512);
}
void TFT::LCD_WR_REG(uint8_t cmd) {
SPI_TFT_CS_L;
SPI_TFT_DC_L;
spi_Send(cmd);
SPI_TFT_CS_H;
}
void TFT::LCD_WR_DATA(uint8_t data) {
SPI_TFT_CS_L;
SPI_TFT_DC_H;
spi_Send(data);
SPI_TFT_CS_H;
}
void TFT::LCD_WriteRAM_Prepare() {LCD_WR_REG(0X2C);}
void TFT::SetCursor(uint16_t x, uint16_t y) {
LCD_WR_REG(0x2a);
LCD_WR_DATA(x >> 8);
LCD_WR_DATA(x);
LCD_WR_DATA(x >> 8);
LCD_WR_DATA(x);
LCD_WR_REG(0x2b);
LCD_WR_DATA(y >> 8);
LCD_WR_DATA(y);
LCD_WR_DATA(y >> 8);
LCD_WR_DATA(y);
}
void TFT::SetWindows(uint16_t x, uint16_t y, uint16_t with, uint16_t height) {
LCD_WR_REG(0x2a);
LCD_WR_DATA(x >> 8);
LCD_WR_DATA(x);
LCD_WR_DATA((x + with) >> 8);
LCD_WR_DATA((x + with));
LCD_WR_REG(0x2b);
LCD_WR_DATA(y >> 8);
LCD_WR_DATA(y);
LCD_WR_DATA((y + height) >> 8);
LCD_WR_DATA(y + height);
}
void TFT::LCD_init() {
SPI_TFT_RST_H;
delay(150);
SPI_TFT_RST_L;
delay(150);
SPI_TFT_RST_H;
delay(120);
LCD_WR_REG(0x11);
delay(120);
LCD_WR_REG(0xf0);
LCD_WR_DATA(0xc3);
LCD_WR_REG(0xf0);
LCD_WR_DATA(0x96);
LCD_WR_REG(0x36);
LCD_WR_DATA(0x28);
LCD_WR_REG(0x3A);
LCD_WR_DATA(0x55);
LCD_WR_REG(0xB4);
LCD_WR_DATA(0x01);
LCD_WR_REG(0xB7);
LCD_WR_DATA(0xC6);
LCD_WR_REG(0xe8);
LCD_WR_DATA(0x40);
LCD_WR_DATA(0x8a);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x29);
LCD_WR_DATA(0x19);
LCD_WR_DATA(0xa5);
LCD_WR_DATA(0x33);
LCD_WR_REG(0xc1);
LCD_WR_DATA(0x06);
LCD_WR_REG(0xc2);
LCD_WR_DATA(0xa7);
LCD_WR_REG(0xc5);
LCD_WR_DATA(0x18);
LCD_WR_REG(0xe0); // Positive Voltage Gamma Control
LCD_WR_DATA(0xf0);
LCD_WR_DATA(0x09);
LCD_WR_DATA(0x0b);
LCD_WR_DATA(0x06);
LCD_WR_DATA(0x04);
LCD_WR_DATA(0x15);
LCD_WR_DATA(0x2f);
LCD_WR_DATA(0x54);
LCD_WR_DATA(0x42);
LCD_WR_DATA(0x3c);
LCD_WR_DATA(0x17);
LCD_WR_DATA(0x14);
LCD_WR_DATA(0x18);
LCD_WR_DATA(0x1b);
LCD_WR_REG(0xe1); // Negative Voltage Gamma Control
LCD_WR_DATA(0xf0);
LCD_WR_DATA(0x09);
LCD_WR_DATA(0x0b);
LCD_WR_DATA(0x06);
LCD_WR_DATA(0x04);
LCD_WR_DATA(0x03);
LCD_WR_DATA(0x2d);
LCD_WR_DATA(0x43);
LCD_WR_DATA(0x42);
LCD_WR_DATA(0x3b);
LCD_WR_DATA(0x16);
LCD_WR_DATA(0x14);
LCD_WR_DATA(0x17);
LCD_WR_DATA(0x1b);
LCD_WR_REG(0xf0);
LCD_WR_DATA(0x3c);
LCD_WR_REG(0xf0);
LCD_WR_DATA(0x69);
delay(120); // Delay 120ms
LCD_WR_REG(0x29); // Display ON
LCD_clear(0x0000); //
SPI_TFT_BLK_H;
}
void TFT::LCD_clear(uint16_t color) {
unsigned int i, m;
uint32_t count;
uint8_t tbuf[960];
SetCursor(0, 0);
SetWindows(0, 0, 480 - 1, 320 - 1);
LCD_WriteRAM_Prepare();
SPI_TFT_CS_L;
SPI_TFT_DC_H;
for (i = 0; i < 960;) {
tbuf[i] = color >> 8;
tbuf[i + 1] = color;
i += 2;
}
for (i = 0; i < 320; i++) {
// for(m=0;m<480;m++)
// {
// LCD_WR_DATA(color>>8);
// LCD_WR_DATA(color);
SPI.dmaSend(tbuf, 960, true);
// SPI_TFT_CS_H;
// }
}
SPI_TFT_CS_H;
}
#endif // SPI_GRAPHICAL_TFT

View file

@ -0,0 +1,55 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#pragma once
#include <stdint.h>
#define SPI_TFT_CS_H OUT_WRITE(SPI_TFT_CS_PIN, HIGH)
#define SPI_TFT_CS_L OUT_WRITE(SPI_TFT_CS_PIN, LOW)
#define SPI_TFT_DC_H OUT_WRITE(SPI_TFT_DC_PIN, HIGH)
#define SPI_TFT_DC_L OUT_WRITE(SPI_TFT_DC_PIN, LOW)
#define SPI_TFT_RST_H OUT_WRITE(SPI_TFT_RST_PIN, HIGH)
#define SPI_TFT_RST_L OUT_WRITE(SPI_TFT_RST_PIN, LOW)
#define SPI_TFT_BLK_H OUT_WRITE(LCD_BACKLIGHT_PIN, HIGH)
#define SPI_TFT_BLK_L OUT_WRITE(LCD_BACKLIGHT_PIN, LOW)
class TFT {
public:
void spi_init(uint8_t spiRate);
uint8_t spi_Rec();
uint8_t spi_read_write_byte(uint8_t data);
void spi_Read(uint8_t* buf, uint16_t nbyte);
void spi_Send(uint8_t b);
void spi_SendBlock(uint8_t token, const uint8_t* buf);
void LCD_WR_REG(uint8_t cmd);
void LCD_WR_DATA(uint8_t data);
void SetCursor(uint16_t x, uint16_t y);
void SetWindows(uint16_t x, uint16_t y, uint16_t with, uint16_t height);
void LCD_init();
void LCD_clear(uint16_t color);
void LCD_WriteRAM_Prepare();
};
extern TFT SPI_TFT;

View file

@ -0,0 +1,395 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "../../../../inc/MarlinConfigPre.h"
#if 1 // ENABLED(SPI_FLASH)
#if ENABLED(TFT_LITTLE_VGL_UI)
#include <SPI.h>
#include "../../../../inc/MarlinConfig.h"
#include "W25Qxx.h"
#ifndef SPI_FLASH_MISO_PIN
#define SPI_FLASH_MISO_PIN W25QXX_MISO_PIN
#endif
#ifndef SPI_FLASH_MOSI_PIN
#define SPI_FLASH_MOSI_PIN W25QXX_MOSI_PIN
#endif
#ifndef SPI_FLASH_SCK_PIN
#define SPI_FLASH_SCK_PIN W25QXX_SCK_PIN
#endif
#ifndef SPI_FLASH_CS_PIN
#define SPI_FLASH_CS_PIN W25QXX_CS_PIN
#endif
#define W25QXX_CS_H OUT_WRITE(SPI_FLASH_CS_PIN, HIGH)
#define W25QXX_CS_L OUT_WRITE(SPI_FLASH_CS_PIN, LOW)
ext_FLASH W25QXX;
void ext_FLASH::init(uint8_t spiRate) {
OUT_WRITE(SPI_FLASH_CS_PIN, HIGH);
/**
* STM32F1 APB2 = 72MHz, APB1 = 36MHz, max SPI speed of this MCU if 18Mhz
* STM32F1 has 3 SPI ports, SPI1 in APB2, SPI2/SPI3 in APB1
* so the minimum prescale of SPI1 is DIV4, SPI2/SPI3 is DIV2
*/
#if SPI_DEVICE == 1
#define SPI_CLOCK_MAX SPI_CLOCK_DIV4
#else
#define SPI_CLOCK_MAX SPI_CLOCK_DIV2
#endif
uint8_t clock;
switch (spiRate) {
case SPI_FULL_SPEED: clock = SPI_CLOCK_MAX; break;
case SPI_HALF_SPEED: clock = SPI_CLOCK_DIV4; break;
case SPI_QUARTER_SPEED: clock = SPI_CLOCK_DIV8; break;
case SPI_EIGHTH_SPEED: clock = SPI_CLOCK_DIV16; break;
case SPI_SPEED_5: clock = SPI_CLOCK_DIV32; break;
case SPI_SPEED_6: clock = SPI_CLOCK_DIV64; break;
default: clock = SPI_CLOCK_DIV2;// Default from the SPI library
}
SPI.setModule(SPI_DEVICE);
SPI.begin();
SPI.setClockDivider(clock);
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE0);
}
/**
* @brief Receive a single byte from the SPI port.
*
* @return Byte received
*
* @details
*/
uint8_t ext_FLASH::spi_flash_Rec() {
uint8_t returnByte = SPI.transfer(ff);
return returnByte;
}
uint8_t ext_FLASH::spi_flash_read_write_byte(uint8_t data) {
uint8_t returnByte = SPI.transfer(data);
return returnByte;
}
/**
* @brief Receive a number of bytes from the SPI port to a buffer
*
* @param buf Pointer to starting address of buffer to write to.
* @param nbyte Number of bytes to receive.
* @return Nothing
*
* @details Uses DMA
*/
void ext_FLASH::spi_flash_Read(uint8_t* buf, uint16_t nbyte) { SPI.dmaTransfer(0, const_cast<uint8_t*>(buf), nbyte); }
/**
* @brief Send a single byte on SPI port
*
* @param b Byte to send
*
* @details
*/
void ext_FLASH::spi_flash_Send(uint8_t b) { SPI.send(b); }
/**
* @brief Write token and then write from 512 byte buffer to SPI (for SD card)
*
* @param buf Pointer with buffer start address
* @return Nothing
*
* @details Use DMA
*/
void ext_FLASH::spi_flash_SendBlock(uint8_t token, const uint8_t* buf) {
SPI.send(token);
SPI.dmaSend(const_cast<uint8_t*>(buf), 512);
}
uint16_t ext_FLASH::W25QXX_ReadID(void) {
uint16_t Temp = 0;
W25QXX_CS_L;
spi_flash_Send(0x90);//<2F><><EFBFBD>Ͷ<EFBFBD>ȡID<49><44><EFBFBD><EFBFBD>
spi_flash_Send(0x00);
spi_flash_Send(0x00);
spi_flash_Send(0x00);
Temp |= spi_flash_Rec() << 8;
Temp |= spi_flash_Rec();
W25QXX_CS_H;
return Temp;
}
void ext_FLASH::SPI_FLASH_WriteEnable(void) {
/* Select the FLASH: Chip Select low */
W25QXX_CS_L;
/* Send "Write Enable" instruction */
spi_flash_Send(W25X_WriteEnable);
/* Deselect the FLASH: Chip Select high */
W25QXX_CS_H;
}
/*******************************************************************************
* Function Name : SPI_FLASH_WaitForWriteEnd
* Description : Polls the status of the Write In Progress (WIP) flag in the
* FLASH's status register and loop until write opertaion
* has completed.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void ext_FLASH::SPI_FLASH_WaitForWriteEnd(void) {
uint8_t FLASH_Status = 0;
/* Select the FLASH: Chip Select low */
W25QXX_CS_L;
/* Send "Read Status Register" instruction */
spi_flash_Send(W25X_ReadStatusReg);
/* Loop as long as the memory is busy with a write cycle */
do
/* Send a dummy byte to generate the clock needed by the FLASH
and put the value of the status register in FLASH_Status variable */
FLASH_Status = spi_flash_Rec();
while ((FLASH_Status & WIP_Flag) == 0x01); /* Write in progress */
/* Deselect the FLASH: Chip Select high */
W25QXX_CS_H;
}
void ext_FLASH::SPI_FLASH_SectorErase(uint32_t SectorAddr) {
/* Send write enable instruction */
SPI_FLASH_WriteEnable();
/* Sector Erase */
/* Select the FLASH: Chip Select low */
W25QXX_CS_L;
/* Send Sector Erase instruction */
spi_flash_Send(W25X_SectorErase);
/* Send SectorAddr high nibble address byte */
spi_flash_Send((SectorAddr & 0xFF0000) >> 16);
/* Send SectorAddr medium nibble address byte */
spi_flash_Send((SectorAddr & 0xFF00) >> 8);
/* Send SectorAddr low nibble address byte */
spi_flash_Send(SectorAddr & 0xFF);
/* Deselect the FLASH: Chip Select high */
W25QXX_CS_H;
/* Wait the end of Flash writing */
SPI_FLASH_WaitForWriteEnd();
}
void ext_FLASH::SPI_FLASH_BlockErase(uint32_t BlockAddr) {
SPI_FLASH_WriteEnable();
W25QXX_CS_L;
/* Send Sector Erase instruction */
spi_flash_Send(W25X_BlockErase);
/* Send SectorAddr high nibble address byte */
spi_flash_Send((BlockAddr & 0xFF0000) >> 16);
/* Send SectorAddr medium nibble address byte */
spi_flash_Send((BlockAddr & 0xFF00) >> 8);
/* Send SectorAddr low nibble address byte */
spi_flash_Send(BlockAddr & 0xFF);
W25QXX_CS_H;
SPI_FLASH_WaitForWriteEnd();
}
/*******************************************************************************
* Function Name : SPI_FLASH_BulkErase
* Description : Erases the entire FLASH.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void ext_FLASH::SPI_FLASH_BulkErase(void) {
/* Send write enable instruction */
SPI_FLASH_WriteEnable();
/* Bulk Erase */
/* Select the FLASH: Chip Select low */
W25QXX_CS_L;
/* Send Bulk Erase instruction */
spi_flash_Send(W25X_ChipErase);
/* Deselect the FLASH: Chip Select high */
W25QXX_CS_H;
/* Wait the end of Flash writing */
SPI_FLASH_WaitForWriteEnd();
}
/*******************************************************************************
* Function Name : SPI_FLASH_PageWrite
* Description : Writes more than one byte to the FLASH with a single WRITE
* cycle(Page WRITE sequence). The number of byte can't exceed
* the FLASH page size.
* Input : - pBuffer : pointer to the buffer containing the data to be
* written to the FLASH.
* - WriteAddr : FLASH's internal address to write to.
* - NumByteToWrite : number of bytes to write to the FLASH,
* must be equal or less than "SPI_FLASH_PageSize" value.
* Output : None
* Return : None
*******************************************************************************/
void ext_FLASH::SPI_FLASH_PageWrite(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite) {
/* Enable the write access to the FLASH */
SPI_FLASH_WriteEnable();
/* Select the FLASH: Chip Select low */
W25QXX_CS_L;
/* Send "Write to Memory " instruction */
spi_flash_Send(W25X_PageProgram);
/* Send WriteAddr high nibble address byte to write to */
spi_flash_Send((WriteAddr & 0xFF0000) >> 16);
/* Send WriteAddr medium nibble address byte to write to */
spi_flash_Send((WriteAddr & 0xFF00) >> 8);
/* Send WriteAddr low nibble address byte to write to */
spi_flash_Send(WriteAddr & 0xFF);
NOMORE(NumByteToWrite, SPI_FLASH_PerWritePageSize);
/* while there is data to be written on the FLASH */
while (NumByteToWrite--) {
/* Send the current byte */
spi_flash_Send(*pBuffer);
/* Point on the next byte to be written */
pBuffer++;
}
/* Deselect the FLASH: Chip Select high */
W25QXX_CS_H;
/* Wait the end of Flash writing */
SPI_FLASH_WaitForWriteEnd();
}
/*******************************************************************************
* Function Name : SPI_FLASH_BufferWrite
* Description : Writes block of data to the FLASH. In this function, the
* number of WRITE cycles are reduced, using Page WRITE sequence.
* Input : - pBuffer : pointer to the buffer containing the data to be
* written to the FLASH.
* - WriteAddr : FLASH's internal address to write to.
* - NumByteToWrite : number of bytes to write to the FLASH.
* Output : None
* Return : None
*******************************************************************************/
void ext_FLASH::SPI_FLASH_BufferWrite(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite) {
uint8_t NumOfPage = 0, NumOfSingle = 0, Addr = 0, count = 0, temp = 0;
Addr = WriteAddr % SPI_FLASH_PageSize;
count = SPI_FLASH_PageSize - Addr;
NumOfPage = NumByteToWrite / SPI_FLASH_PageSize;
NumOfSingle = NumByteToWrite % SPI_FLASH_PageSize;
if (Addr == 0) { /* WriteAddr is SPI_FLASH_PageSize aligned */
if (NumOfPage == 0) { /* NumByteToWrite < SPI_FLASH_PageSize */
SPI_FLASH_PageWrite(pBuffer, WriteAddr, NumByteToWrite);
}
else { /* NumByteToWrite > SPI_FLASH_PageSize */
while (NumOfPage--) {
SPI_FLASH_PageWrite(pBuffer, WriteAddr, SPI_FLASH_PageSize);
WriteAddr += SPI_FLASH_PageSize;
pBuffer += SPI_FLASH_PageSize;
}
SPI_FLASH_PageWrite(pBuffer, WriteAddr, NumOfSingle);
}
}
else { /* WriteAddr is not SPI_FLASH_PageSize aligned */
if (NumOfPage == 0) { /* NumByteToWrite < SPI_FLASH_PageSize */
if (NumOfSingle > count) { /* (NumByteToWrite + WriteAddr) > SPI_FLASH_PageSize */
temp = NumOfSingle - count;
SPI_FLASH_PageWrite(pBuffer, WriteAddr, count);
WriteAddr += count;
pBuffer += count;
SPI_FLASH_PageWrite(pBuffer, WriteAddr, temp);
}
else {
SPI_FLASH_PageWrite(pBuffer, WriteAddr, NumByteToWrite);
}
}
else { /* NumByteToWrite > SPI_FLASH_PageSize */
NumByteToWrite -= count;
NumOfPage = NumByteToWrite / SPI_FLASH_PageSize;
NumOfSingle = NumByteToWrite % SPI_FLASH_PageSize;
SPI_FLASH_PageWrite(pBuffer, WriteAddr, count);
WriteAddr += count;
pBuffer += count;
while (NumOfPage--) {
SPI_FLASH_PageWrite(pBuffer, WriteAddr, SPI_FLASH_PageSize);
WriteAddr += SPI_FLASH_PageSize;
pBuffer += SPI_FLASH_PageSize;
}
if (NumOfSingle != 0)
SPI_FLASH_PageWrite(pBuffer, WriteAddr, NumOfSingle);
}
}
}
/*******************************************************************************
* Function Name : SPI_FLASH_BufferRead
* Description : Reads a block of data from the FLASH.
* Input : - pBuffer : pointer to the buffer that receives the data read
* from the FLASH.
* - ReadAddr : FLASH's internal address to read from.
* - NumByteToRead : number of bytes to read from the FLASH.
* Output : None
* Return : None
*******************************************************************************/
void ext_FLASH::SPI_FLASH_BufferRead(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t NumByteToRead) {
/* Select the FLASH: Chip Select low */
W25QXX_CS_L;
/* Send "Read from Memory " instruction */
spi_flash_Send(W25X_ReadData);
/* Send ReadAddr high nibble address byte to read from */
spi_flash_Send((ReadAddr & 0xFF0000) >> 16);
/* Send ReadAddr medium nibble address byte to read from */
spi_flash_Send((ReadAddr & 0xFF00) >> 8);
/* Send ReadAddr low nibble address byte to read from */
spi_flash_Send(ReadAddr & 0xFF);
if (NumByteToRead < 33) {
while (NumByteToRead--) { /* while there is data to be read */
/* Read a byte from the FLASH */
*pBuffer = spi_flash_Rec();
/* Point to the next location where the byte read will be saved */
pBuffer++;
}
}
else {
spi_flash_Read(pBuffer, NumByteToRead);
}
W25QXX_CS_H;
}
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 // 1 ... SPI_FLASH

View file

@ -0,0 +1,127 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#pragma once
//#ifdef __cplusplus
//extern "C" { /* C-declarations for C++ */
//#endif
#include <stdint.h>
#define W25X_WriteEnable 0x06
#define W25X_WriteDisable 0x04
#define W25X_ReadStatusReg 0x05
#define W25X_WriteStatusReg 0x01
#define W25X_ReadData 0x03
#define W25X_FastReadData 0x0B
#define W25X_FastReadDual 0x3B
#define W25X_PageProgram 0x02
#define W25X_BlockErase 0xD8
#define W25X_SectorErase 0x20
#define W25X_ChipErase 0xC7
#define W25X_PowerDown 0xB9
#define W25X_ReleasePowerDown 0xAB
#define W25X_DeviceID 0xAB
#define W25X_ManufactDeviceID 0x90
#define W25X_JedecDeviceID 0x9F
#define WIP_Flag 0x01 /* Write In Progress (WIP) flag */
#define Dummy_Byte 0xA5
#define SPI_FLASH_SectorSize 4096
#define SPI_FLASH_PageSize 256
#define SPI_FLASH_PerWritePageSize 256
#if 0
#define PIC_NAME_MAX_LEN 50
#define LOGO_MAX_SIZE (300*1024)//logo<67><6F><EFBFBD>ֵ
#define TITLELOGO_MAX_SIZE (150*1024)//logo<67><6F><EFBFBD>ֵ
#define DEFAULT_VIEW_MAX_SIZE (200*200*2)
#define FLASH_VIEW_MAX_SIZE (200*200*2)
//ͼƬ
//Robin2<6E><EFBFBD><E6B4A2>ַ
#define PIC_NAME_ADDR 0x003000 //ͼƬ<CDBC><C6AC>Ϣ<EFBFBD><EFBFBD><E6B4A2>ַ<EFBFBD><D6B7>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>
#define PIC_SIZE_ADDR 0x007000 //ͼƬ<CDBC><C6AC>Ϣ<EFBFBD><EFBFBD><E6B4A2>ַ<EFBFBD><D6B7>ͼƬ<CDBC><C6AC>Сֵ
#define PIC_COUNTER_ADDR 0x008000 //ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><E6B4A2>ַ
#define PIC_LOGO_ADDR 0x009000 //ͼƬlogo<67><EFBFBD><E6B4A2>ַ
//#define PIC_DATA_ADDR 0x02f000 //ͼƬ<CDBC><C6AC><EFBFBD>ݴ洢<DDB4><E6B4A2>ַ
#define DEFAULT_VIEW_ADDR 0XC5800
#define BAK_VIEW_ADDR (DEFAULT_VIEW_ADDR+90*1024)
#define PIC_ICON_LOGO_ADDR (BAK_VIEW_ADDR+80*1024)
#define PIC_DATA_ADDR (PIC_ICON_LOGO_ADDR+350*1024) //ͼƬ<CDBC><C6AC><EFBFBD>ݴ洢<DDB4><E6B4A2>ַ//(800*240)
// <20>ֿ<EFBFBD>
#define FONTINFOADDR 0x600000 // 6M<36>Ժ<EFBFBD><D4BA>ַΪ<D6B7>ֿ<EFBFBD>
#define UNIGBK_FLASH_ADDR (FONTINFOADDR+4096) // 4*1024
#define GBK_FLASH_ADDR (UNIGBK_FLASH_ADDR+180224) // 176*1024
#define PER_PIC_MAX_SPACE (32*1024) // Ϊ<>˷<EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⣬ÿ<E2A3AC><C3BF>СͼƬ<CDBC><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4BBAE>Ӧ<EFBFBD><D3A6>ȡ<EFBFBD>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD>4K<34><4B>ֵ
//
union union32 {
uint8_t bytes[4];
uint32_t dwords;
};
// ͼƬ<CDBC><C6AC>Ϣ<EFBFBD><EFBFBD><E1B9B9>
struct pic_msg {
uint8_t name[PIC_NAME_MAX_LEN];
union union32 size;
};
typedef struct pic_msg PIC_MSG;
#endif // if 0
class ext_FLASH {
public:
void init(uint8_t spiRate);
static uint8_t spi_flash_Rec();
static uint8_t spi_flash_read_write_byte(uint8_t data);
static void spi_flash_Read(uint8_t* buf, uint16_t nbyte);
static void spi_flash_Send(uint8_t b);
static void spi_flash_SendBlock(uint8_t token, const uint8_t* buf);
static uint16_t W25QXX_ReadID(void);
static void SPI_FLASH_WriteEnable(void);
static void SPI_FLASH_WaitForWriteEnd(void);
static void SPI_FLASH_SectorErase(uint32_t SectorAddr);
static void SPI_FLASH_BlockErase(uint32_t BlockAddr);
static void SPI_FLASH_BulkErase(void);
static void SPI_FLASH_PageWrite(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite);
static void SPI_FLASH_BufferWrite(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite);
static void SPI_FLASH_BufferRead(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t NumByteToRead);
//uint32_t lv_get_pic_addr(uint8_t *Pname);
void lv_pic_read(uint8_t *P_Rbuff, uint32_t addr, uint32_t size);
};
extern ext_FLASH W25QXX;
//extern uint32_t lv_get_pic_addr(uint8_t *Pname);
//#ifdef __cplusplus
//} /* C-declarations for C++ */
//#endif

View file

@ -0,0 +1,127 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI)
#include "lv_conf.h"
#include "draw_ui.h"
//#include "../lvgl/src/lv_objx/lv_imgbtn.h"
//#include "../lvgl/src/lv_objx/lv_img.h"
//#include "../lvgl/src/lv_core/lv_disp.h"
//#include "../lvgl/src/lv_core/lv_refr.h"
#include "../../../../MarlinCore.h"
#include "../../../../module/temperature.h"
static lv_obj_t * scr;
static lv_obj_t * fw_type, *board, *fw_version;
#define ID_A_RETURN 1
static void event_handler(lv_obj_t * obj, lv_event_t event) {
switch (obj->mks_obj_id) {
case ID_A_RETURN:
if (event == LV_EVENT_CLICKED) {
// do nothing
}
else if (event == LV_EVENT_RELEASED) {
clear_cur_ui();
draw_return_ui();
}
break;
}
}
void lv_draw_about(void) {
lv_obj_t *buttonBack, *label_Back;
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != ABOUT_UI) {
disp_state_stack._disp_index++;
disp_state_stack._disp_state[disp_state_stack._disp_index] = ABOUT_UI;
}
disp_state = ABOUT_UI;
scr = lv_obj_create(NULL, NULL);
lv_obj_set_style(scr, &tft_style_scr);
lv_scr_load(scr);
lv_obj_clean(scr);
lv_obj_t * title = lv_label_create(scr, NULL);
lv_obj_set_style(title, &tft_style_lable_rel);
lv_obj_set_pos(title, TITLE_XPOS, TITLE_YPOS);
lv_label_set_text(title, creat_title_text());
lv_refr_now(lv_refr_get_disp_refreshing());
LV_IMG_DECLARE(bmp_pic);
/*Create an Image button*/
buttonBack = lv_imgbtn_create(scr, NULL);
#if 1
lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_A_RETURN, "bmp_Return.bin", 0);
lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_lable_rel);
#endif
lv_obj_set_pos(buttonBack, BTN_X_PIXEL * 3 + INTERVAL_V * 4, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
/*Create a label on the Image button*/
label_Back = lv_label_create(buttonBack, NULL);
if (gCfgItems.multiple_language != 0) {
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);
}
fw_version = lv_label_create(scr, NULL);
lv_obj_set_style(fw_version, &tft_style_lable_rel);
lv_label_set_text(fw_version, "Version: V_2.0.5.3");
lv_obj_align(fw_version, NULL, LV_ALIGN_CENTER, 0, -60);
fw_type = lv_label_create(scr, NULL);
lv_obj_set_style(fw_type, &tft_style_lable_rel);
#if (MOTHERBOARD == BOARD_MKS_ROBIN_PRO)
lv_label_set_text(fw_type, "Firmware: Robin_Pro35");
#elif (MOTHERBOARD == BOARD_MKS_ROBIN_NANO)
lv_label_set_text(fw_type, "Firmware: Robin_Nano35");
#endif
lv_obj_align(fw_type, NULL, LV_ALIGN_CENTER, 0, -20);
board = lv_label_create(scr, NULL);
lv_obj_set_style(board, &tft_style_lable_rel);
#if (MOTHERBOARD == BOARD_MKS_ROBIN_PRO)
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);
}
void lv_clear_about() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI

View file

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

View file

@ -0,0 +1,336 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI)
#include "lv_conf.h"
#include "draw_ui.h"
//#include "../lvgl/src/lv_objx/lv_imgbtn.h"
//#include "../lvgl/src/lv_objx/lv_img.h"
//#include "../lvgl/src/lv_core/lv_disp.h"
//#include "../lvgl/src/lv_core/lv_refr.h"
#include "../../../../MarlinCore.h"
#include "../../../../module/temperature.h"
#include "../../../../module/planner.h"
static lv_obj_t * scr;
static lv_obj_t * labelStep, *buttonStep, *buttonMov, *buttonExt;
static lv_obj_t * labelMov, *labelExt;
static lv_obj_t * printSpeedText;
#define ID_C_ADD 1
#define ID_C_DEC 2
#define ID_C_MOVE 3
#define ID_C_EXT 4
#define ID_C_STEP 5
#define ID_C_RETURN 6
static uint8_t speedType;
static void event_handler(lv_obj_t * obj, lv_event_t event) {
switch (obj->mks_obj_id) {
case ID_C_ADD:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (speedType == 0) {
if (feedrate_percentage < MAX_EXT_SPEED_PERCENT - uiCfg.stepPrintSpeed)
feedrate_percentage += uiCfg.stepPrintSpeed;
else
feedrate_percentage = MAX_EXT_SPEED_PERCENT;
}
else if (speedType == 1) {
if (planner.flow_percentage[0] < MAX_EXT_SPEED_PERCENT - uiCfg.stepPrintSpeed)
planner.flow_percentage[0] += uiCfg.stepPrintSpeed;
else
planner.flow_percentage[0] = MAX_EXT_SPEED_PERCENT;
//planner.e_factor[0]= planner.flow_percentage[0]*0.01;
//planner.flow_percentage[1] = planner.flow_percentage[0];
//planner.e_factor[1]= planner.flow_percentage[1]*0.01;
planner.refresh_e_factor(0);
if (EXTRUDERS == 2) {
planner.flow_percentage[1] = planner.flow_percentage[0];
planner.refresh_e_factor(1);
}
}
disp_print_speed();
}
break;
case ID_C_DEC:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (speedType == 0) {
if (feedrate_percentage > MIN_EXT_SPEED_PERCENT + uiCfg.stepPrintSpeed)
feedrate_percentage -= uiCfg.stepPrintSpeed;
else
feedrate_percentage = MIN_EXT_SPEED_PERCENT;
}
else if (speedType == 1) {
if (planner.flow_percentage[0] > MIN_EXT_SPEED_PERCENT + uiCfg.stepPrintSpeed)
planner.flow_percentage[0] -= uiCfg.stepPrintSpeed;
else
planner.flow_percentage[0] = MIN_EXT_SPEED_PERCENT;
//planner.e_factor[0]= planner.flow_percentage[0] * 0.01;
//planner.flow_percentage[1] = planner.flow_percentage[0];
//planner.e_factor[1]= planner.flow_percentage[1] * 0.01;
planner.refresh_e_factor(0);
if (EXTRUDERS == 2) {
planner.flow_percentage[1] = planner.flow_percentage[0];
planner.refresh_e_factor(1);
}
}
disp_print_speed();
}
break;
case ID_C_MOVE:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
speedType = 0;
disp_speed_type();
disp_print_speed();
}
break;
case ID_C_EXT:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
speedType = 1;
disp_speed_type();
disp_print_speed();
}
break;
case ID_C_STEP:
if (event == LV_EVENT_CLICKED) {
}
else if (event == LV_EVENT_RELEASED) {
if (uiCfg.stepPrintSpeed == 1)
uiCfg.stepPrintSpeed = 5;
else if (uiCfg.stepPrintSpeed == 5)
uiCfg.stepPrintSpeed = 10;
else
uiCfg.stepPrintSpeed = 1;
disp_speed_step();
}
break;
case ID_C_RETURN:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
clear_cur_ui();
draw_return_ui();
}
break;
}
}
void lv_draw_change_speed(void) {
lv_obj_t *buttonAdd, *buttonDec;
lv_obj_t *buttonBack;
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != CHANGE_SPEED_UI) {
disp_state_stack._disp_index++;
disp_state_stack._disp_state[disp_state_stack._disp_index] = CHANGE_SPEED_UI;
}
disp_state = CHANGE_SPEED_UI;
scr = lv_obj_create(NULL, NULL);
lv_obj_set_style(scr, &tft_style_scr);
lv_scr_load(scr);
lv_obj_clean(scr);
lv_obj_t * title = lv_label_create(scr, NULL);
lv_obj_set_style(title, &tft_style_lable_rel);
lv_obj_set_pos(title, TITLE_XPOS, TITLE_YPOS);
lv_label_set_text(title, creat_title_text());
lv_refr_now(lv_refr_get_disp_refreshing());
LV_IMG_DECLARE(bmp_pic);
/*Create an Image button*/
buttonAdd = lv_imgbtn_create(scr, NULL);
buttonDec = lv_imgbtn_create(scr, NULL);
buttonMov = lv_imgbtn_create(scr, NULL);
buttonExt = lv_imgbtn_create(scr, NULL);
buttonStep = lv_imgbtn_create(scr, NULL);
buttonBack = lv_imgbtn_create(scr, NULL);
lv_obj_set_event_cb_mks(buttonAdd, event_handler, ID_C_ADD, "bmp_Add.bin", 0);
lv_imgbtn_set_src(buttonAdd, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonAdd, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonAdd, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonAdd, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_clear_protect(buttonAdd, LV_PROTECT_FOLLOW);
#if 1
lv_obj_set_event_cb_mks(buttonDec, event_handler, ID_C_DEC, "bmp_Dec.bin", 0);
lv_imgbtn_set_src(buttonDec, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonDec, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonDec, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonDec, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_imgbtn_set_src(buttonMov, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonMov, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonMov, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonMov, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_imgbtn_set_src(buttonExt, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonExt, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonExt, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonExt, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonStep, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonStep, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_C_RETURN, "bmp_Return.bin", 0);
lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_lable_rel);
#endif
lv_obj_set_pos(buttonAdd, INTERVAL_V, titleHeight);
lv_obj_set_pos(buttonDec, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight);
lv_obj_set_pos(buttonMov, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
lv_obj_set_pos(buttonExt, BTN_X_PIXEL + INTERVAL_V * 2, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
lv_obj_set_pos(buttonStep, BTN_X_PIXEL * 2 + INTERVAL_V * 3, 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*/
lv_btn_set_layout(buttonAdd, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonDec, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonMov, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonExt, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonStep, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
lv_obj_t * labelAdd = lv_label_create(buttonAdd, NULL);
lv_obj_t * labelDec = lv_label_create(buttonDec, NULL);
labelMov = lv_label_create(buttonMov, NULL);
labelExt = lv_label_create(buttonExt, NULL);
labelStep = lv_label_create(buttonStep, NULL);
lv_obj_t * label_Back = lv_label_create(buttonBack, NULL);
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(labelAdd, speed_menu.add);
lv_obj_align(labelAdd, buttonAdd, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(labelDec, speed_menu.dec);
lv_obj_align(labelDec, buttonDec, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
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);
}
disp_speed_type();
disp_speed_step();
printSpeedText = lv_label_create(scr, NULL);
lv_obj_set_style(printSpeedText, &tft_style_lable_rel);
disp_print_speed();
}
void disp_speed_step() {
if (uiCfg.stepPrintSpeed == 1)
lv_obj_set_event_cb_mks(buttonStep, event_handler, ID_C_STEP, "bmp_Step1_percent.bin", 0);
else if (uiCfg.stepPrintSpeed == 5)
lv_obj_set_event_cb_mks(buttonStep, event_handler, ID_C_STEP, "bmp_Step5_percent.bin", 0);
else if (uiCfg.stepPrintSpeed == 10)
lv_obj_set_event_cb_mks(buttonStep, event_handler, ID_C_STEP, "bmp_Step10_percent.bin", 0);
if (gCfgItems.multiple_language != 0) {
if (uiCfg.stepPrintSpeed == 1) {
lv_label_set_text(labelStep, speed_menu.step_1percent);
lv_obj_align(labelStep, buttonStep, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
else if (uiCfg.stepPrintSpeed == 5) {
lv_label_set_text(labelStep, speed_menu.step_5percent);
lv_obj_align(labelStep, buttonStep, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
else if (uiCfg.stepPrintSpeed == 10) {
lv_label_set_text(labelStep, speed_menu.step_10percent);
lv_obj_align(labelStep, buttonStep, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
}
}
void disp_print_speed() {
char buf[30] = {0};
public_buf_l[0] = '\0';
if (speedType == 0) { //move
strcat(public_buf_l, speed_menu.move_speed);
strcat(public_buf_l, ": ");
sprintf(buf, "%d%%", feedrate_percentage);
strcat(public_buf_l, buf);
}
else if (speedType == 1) { // e1
strcat(public_buf_l, speed_menu.extrude_speed);
strcat(public_buf_l, ": ");
sprintf(buf, "%d%%", planner.flow_percentage[0]);
strcat(public_buf_l, buf);
}
lv_label_set_text(printSpeedText, public_buf_l);
lv_obj_align(printSpeedText, NULL, LV_ALIGN_CENTER, 0, -65);
}
void disp_speed_type() {
switch (speedType) {
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(buttonMov, event_handler, ID_C_MOVE, "bmp_Mov_speed.bin", 0);
break;
default:
lv_obj_set_event_cb_mks(buttonExt, event_handler, ID_C_EXT, "bmp_Extruct_speed.bin", 0);
lv_obj_set_event_cb_mks(buttonMov, event_handler, ID_C_MOVE, "bmp_Mov_speed_sel.bin", 0);
break;
}
lv_obj_refresh_ext_draw_pad(buttonExt);
lv_obj_refresh_ext_draw_pad(buttonMov);
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(labelMov, speed_menu.move);
lv_obj_align(labelMov, buttonMov, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(labelExt, speed_menu.extrude);
lv_obj_align(labelExt, buttonExt, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
}
void lv_clear_change_speed() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI

View file

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

View file

@ -0,0 +1,343 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/**
* draw_dialog.cpp
*/
#include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI)
#include "lv_conf.h"
#include "draw_ui.h"
//#include "../lvgl/src/lv_objx/lv_imgbtn.h"
//#include "../lvgl/src/lv_objx/lv_img.h"
//#include "../lvgl/src/lv_core/lv_disp.h"
//#include "../lvgl/src/lv_core/lv_refr.h"
#include "../../../../MarlinCore.h"
#include "../../../../sd/cardreader.h"
#include "../../../../gcode/queue.h"
#include "../../../../module/temperature.h"
#include "../../../../module/planner.h"
#if ENABLED(POWER_LOSS_RECOVERY)
#include "../../../../feature/powerloss.h"
#endif
#if ENABLED(PARK_HEAD_ON_PAUSE)
#include "../../../../feature/pause.h"
#endif
static lv_obj_t * scr;
extern uint8_t sel_id;
extern uint8_t once_flag;
extern uint8_t gcode_preview_over;
uint8_t DialogType;
static void btn_ok_event_cb(lv_obj_t * btn, lv_event_t event) {
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (DialogType == DIALOG_TYPE_PRINT_FILE) {
preview_gcode_prehandle(list_file.file_name[sel_id]);
reset_print_time();
start_print_time();
uiCfg.print_state = WORKING;
lv_clear_dialog();
lv_draw_printing();
#if ENABLED(SDSUPPORT)
if (gcode_preview_over != 1) {
char *cur_name;
cur_name = strrchr(list_file.file_name[sel_id], '/');
SdFile file, *curDir;
card.endFilePrint();
const char * const fname = card.diveToFile(true, curDir, cur_name);
if (!fname) return;
if (file.open(curDir, fname, O_READ)) {
gCfgItems.curFilesize = file.fileSize();
file.close();
update_spi_flash();
}
card.openFileRead(cur_name);
if (card.isFileOpen()) {
feedrate_percentage = 100;
//saved_feedrate_percentage = feedrate_percentage;
planner.flow_percentage[0] = 100;
planner.e_factor[0] = planner.flow_percentage[0] * 0.01f;
#if EXTRUDERS == 2
planner.flow_percentage[1] = 100;
planner.e_factor[1] = planner.flow_percentage[1] * 0.01f;
#endif
card.startFileprint();
#if ENABLED(POWER_LOSS_RECOVERY)
recovery.prepare();
#endif
once_flag = 0;
}
}
#endif
}
else if (DialogType == DIALOG_TYPE_STOP) {
stop_print_time();
lv_clear_dialog();
lv_draw_ready_print();
#if ENABLED(SDSUPPORT)
//card.endFilePrint();
//wait_for_heatup = false;
uiCfg.print_state = IDLE;
card.flag.abort_sd_printing = true;
//queue.clear();
//quickstop_stepper();
//print_job_timer.stop();
//thermalManager.disable_all_heaters();
//#if ENABLED(POWER_LOSS_RECOVERY)
//recovery.purge();
//#endif
//queue.enqueue_one_now(PSTR("G91"));
//queue.enqueue_one_now(PSTR("G1 Z10"));
//queue.enqueue_one_now(PSTR("G90"));
//queue.enqueue_one_now(PSTR("G28 X0 Y0"));
//queue.inject_P(PSTR("G91\nG1 Z10\nG90\nG28 X0 Y0\nM84\nM107"));
#endif
}
else if (DialogType == DIALOG_TYPE_FINISH_PRINT) {
clear_cur_ui();
lv_draw_ready_print();
}
#if ENABLED(ADVANCED_PAUSE_FEATURE)
else if (DialogType == DIALOG_PAUSE_MESSAGE_WAITING
|| DialogType == DIALOG_PAUSE_MESSAGE_INSERT
|| DialogType == DIALOG_PAUSE_MESSAGE_HEAT
) {
wait_for_user = false;
}
else if (DialogType == DIALOG_PAUSE_MESSAGE_OPTION) {
pause_menu_response = PAUSE_RESPONSE_EXTRUDE_MORE;
}
else if (DialogType == DIALOG_PAUSE_MESSAGE_RESUME) {
clear_cur_ui();
draw_return_ui();
}
#endif
}
}
static void btn_cancel_event_cb(lv_obj_t * btn, lv_event_t event) {
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (DialogType == DIALOG_PAUSE_MESSAGE_OPTION) {
#if ENABLED(ADVANCED_PAUSE_FEATURE)
pause_menu_response = PAUSE_RESPONSE_RESUME_PRINT;
#endif
}
else {
clear_cur_ui();
draw_return_ui();
}
}
}
void lv_draw_dialog(uint8_t type) {
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != DIALOG_UI) {
disp_state_stack._disp_index++;
disp_state_stack._disp_state[disp_state_stack._disp_index] = DIALOG_UI;
}
disp_state = DIALOG_UI;
DialogType = type;
scr = lv_obj_create(NULL, NULL);
lv_obj_set_style(scr, &tft_style_scr);
lv_scr_load(scr);
lv_obj_clean(scr);
lv_obj_t * title = lv_label_create(scr, NULL);
lv_obj_set_style(title, &tft_style_lable_rel);
lv_obj_set_pos(title, TITLE_XPOS, TITLE_YPOS);
lv_label_set_text(title, creat_title_text());
lv_refr_now(lv_refr_get_disp_refreshing());
//LV_IMG_DECLARE(bmp_pic);
static lv_style_t style_btn_rel; // A variable to store the released style
lv_style_copy(&style_btn_rel, &lv_style_plain); // Initialize from a built-in style
style_btn_rel.body.border.color = lv_color_hex3(0x269);
style_btn_rel.body.border.width = 1;
style_btn_rel.body.main_color = lv_color_hex3(0xADF);
style_btn_rel.body.grad_color = lv_color_hex3(0x46B);
style_btn_rel.body.shadow.width = 4;
style_btn_rel.body.shadow.type = LV_SHADOW_BOTTOM;
style_btn_rel.body.radius = LV_RADIUS_CIRCLE;
style_btn_rel.text.color = lv_color_hex3(0xDEF);
style_btn_rel.text.font = &gb2312_puhui32;
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
style_btn_pr.body.border.color = lv_color_hex3(0x46B);
style_btn_pr.body.main_color = lv_color_hex3(0x8BD);
style_btn_pr.body.grad_color = lv_color_hex3(0x24A);
style_btn_pr.body.shadow.width = 2;
style_btn_pr.text.color = lv_color_hex3(0xBCD);
style_btn_pr.text.font = &gb2312_puhui32;
lv_obj_t * labelDialog = lv_label_create(scr, NULL);
lv_obj_set_style(labelDialog, &tft_style_lable_rel);
if (DialogType == DIALOG_TYPE_FINISH_PRINT || DialogType == DIALOG_PAUSE_MESSAGE_RESUME) {
lv_obj_t * btnOk = lv_btn_create(scr, NULL); // Add a button the current screen
lv_obj_set_pos(btnOk, BTN_OK_X + 90, BTN_OK_Y); // Set its position
lv_obj_set_size(btnOk, 100, 50); // Set its size
lv_obj_set_event_cb(btnOk, btn_ok_event_cb);
lv_btn_set_style(btnOk, LV_BTN_STYLE_REL, &style_btn_rel); // Set the button's released style
lv_btn_set_style(btnOk, LV_BTN_STYLE_PR, &style_btn_pr); // Set the button's pressed style
lv_obj_t * labelOk = lv_label_create(btnOk, NULL); // Add a label to the button
lv_label_set_text(labelOk, print_file_dialog_menu.confirm); // Set the labels text
}
else if (DialogType == DIALOG_PAUSE_MESSAGE_WAITING
|| DialogType == DIALOG_PAUSE_MESSAGE_INSERT
|| DialogType == DIALOG_PAUSE_MESSAGE_HEAT) {
lv_obj_t * btnOk = lv_btn_create(scr, NULL); // Add a button the current screen
lv_obj_set_pos(btnOk, BTN_OK_X + 90, BTN_OK_Y); // Set its position
lv_obj_set_size(btnOk, 100, 50); // Set its size
lv_obj_set_event_cb(btnOk, btn_ok_event_cb);
lv_btn_set_style(btnOk, LV_BTN_STYLE_REL, &style_btn_rel); // Set the button's released style
lv_btn_set_style(btnOk, LV_BTN_STYLE_PR, &style_btn_pr); // Set the button's pressed style
lv_obj_t * labelOk = lv_label_create(btnOk, NULL); // Add a label to the button
lv_label_set_text(labelOk, print_file_dialog_menu.confirm); // Set the labels text
}
else if (DialogType == DIALOG_PAUSE_MESSAGE_PAUSING
|| DialogType == DIALOG_PAUSE_MESSAGE_CHANGING
|| DialogType == DIALOG_PAUSE_MESSAGE_UNLOAD
|| DialogType == DIALOG_PAUSE_MESSAGE_LOAD
|| DialogType == DIALOG_PAUSE_MESSAGE_PURGE
|| DialogType == DIALOG_PAUSE_MESSAGE_RESUME
|| DialogType == DIALOG_PAUSE_MESSAGE_HEATING
) {
// nothing to do
}
else {
lv_obj_t * btnOk = lv_btn_create(scr, NULL); // Add a button the current screen
lv_obj_set_pos(btnOk, BTN_OK_X, BTN_OK_Y); // Set its position
lv_obj_set_size(btnOk, 100, 50); // Set its size
lv_obj_set_event_cb(btnOk, btn_ok_event_cb);
lv_btn_set_style(btnOk, LV_BTN_STYLE_REL, &style_btn_rel); // Set the button's released style
lv_btn_set_style(btnOk, LV_BTN_STYLE_PR, &style_btn_pr); // Set the button's pressed style
lv_obj_t * labelOk = lv_label_create(btnOk, NULL); // Add a label to the button
lv_obj_t * btnCancel = lv_btn_create(scr, NULL); // Add a button the current screen
lv_obj_set_pos(btnCancel, BTN_CANCEL_X, BTN_CANCEL_Y); // Set its position
lv_obj_set_size(btnCancel, 100, 50); // Set its size
lv_obj_set_event_cb(btnCancel, btn_cancel_event_cb);
lv_btn_set_style(btnCancel, LV_BTN_STYLE_REL, &style_btn_rel); // Set the button's released style
lv_btn_set_style(btnCancel, LV_BTN_STYLE_PR, &style_btn_pr); // Set the button's pressed style
lv_obj_t * labelCancel = lv_label_create(btnCancel, NULL); // Add a label to the button
if (DialogType == DIALOG_PAUSE_MESSAGE_OPTION) {
lv_label_set_text(labelOk, pause_msg_menu.purgeMore); // Set the labels text
lv_label_set_text(labelCancel, pause_msg_menu.continuePrint);
}
else {
lv_label_set_text(labelOk, print_file_dialog_menu.confirm); // Set the labels text
lv_label_set_text(labelCancel, print_file_dialog_menu.cancle);
}
}
if (DialogType == DIALOG_TYPE_PRINT_FILE) {
lv_label_set_text(labelDialog, print_file_dialog_menu.print_file);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
lv_obj_t * labelFile = lv_label_create(scr, NULL);
lv_obj_set_style(labelFile, &tft_style_lable_rel);
lv_label_set_text(labelFile, list_file.long_name[sel_id]);
lv_obj_align(labelFile, NULL, LV_ALIGN_CENTER, 0, -60);
}
else if (DialogType == DIALOG_TYPE_STOP) {
lv_label_set_text(labelDialog, print_file_dialog_menu.cancle_print);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
else if (DialogType == DIALOG_TYPE_FINISH_PRINT) {
lv_label_set_text(labelDialog, print_file_dialog_menu.print_finish);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
else if (DialogType == DIALOG_PAUSE_MESSAGE_PAUSING) {
lv_label_set_text(labelDialog, pause_msg_menu.pausing);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
else if (DialogType == DIALOG_PAUSE_MESSAGE_CHANGING) {
lv_label_set_text(labelDialog, pause_msg_menu.changing);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
else if (DialogType == DIALOG_PAUSE_MESSAGE_UNLOAD) {
lv_label_set_text(labelDialog, pause_msg_menu.unload);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
else if (DialogType == DIALOG_PAUSE_MESSAGE_WAITING) {
lv_label_set_text(labelDialog, pause_msg_menu.waiting);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
else if (DialogType == DIALOG_PAUSE_MESSAGE_INSERT) {
lv_label_set_text(labelDialog, pause_msg_menu.insert);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
else if (DialogType == DIALOG_PAUSE_MESSAGE_LOAD) {
lv_label_set_text(labelDialog, pause_msg_menu.load);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
else if (DialogType == DIALOG_PAUSE_MESSAGE_PURGE) {
lv_label_set_text(labelDialog, pause_msg_menu.purge);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
else if (DialogType == DIALOG_PAUSE_MESSAGE_RESUME) {
lv_label_set_text(labelDialog, pause_msg_menu.resume);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
else if (DialogType == DIALOG_PAUSE_MESSAGE_HEAT) {
lv_label_set_text(labelDialog, pause_msg_menu.heat);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
else if (DialogType == DIALOG_PAUSE_MESSAGE_HEATING) {
lv_label_set_text(labelDialog, pause_msg_menu.heating);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
else if (DialogType == DIALOG_PAUSE_MESSAGE_OPTION) {
lv_label_set_text(labelDialog, pause_msg_menu.option);
lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
}
}
void lv_clear_dialog() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI

View file

@ -0,0 +1,79 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#pragma once
#ifdef __cplusplus
extern "C" { /* C-declarations for C++ */
#endif
#define DIALOG_TYPE_STOP 0
#define DIALOG_TYPE_PRINT_FILE 1
#define DIALOG_TYPE_REPRINT_NO_FILE 2
#define DIALOG_TYPE_M80_FAIL 3 //**
#define DIALOG_TYPE_MESSEGE_ERR1 4 //**
#define DIALOG_TYPE_UPDATE_ESP_FIRMARE 5
#define DIALOG_TYPE_UPDATE_ESP_DATA 6
#define DIALOG_TYPE_UPLOAD_FILE 7
#define DIALOG_TYPE_UNBIND 8
#define DIALOG_TYPE_FILAMENT_LOAD_HEAT 9
#define DIALOG_TYPE_FILAMENT_HEAT_LOAD_COMPLETED 10
#define DIALOG_TYPE_FILAMENT_LOADING 11
#define DIALOG_TYPE_FILAMENT_LOAD_COMPLETED 12
#define DIALOG_TYPE_FILAMENT_UNLOAD_HEAT 13
#define DIALOG_TYPE_FILAMENT_HEAT_UNLOAD_COMPLETED 14
#define DIALOG_TYPE_FILAMENT_UNLOADING 15
#define DIALOG_TYPE_FILAMENT_UNLOAD_COMPLETED 16
#define DIALOG_TYPE_FILE_LOADING 17 //**
#define DIALOG_TYPE_FILAMENT_NO_PRESS 18
#define DIALOG_TYPE_FINISH_PRINT 19
#define WIFI_ENABLE_TIPS 20
#define DIALOG_PAUSE_MESSAGE_PAUSING 21
#define DIALOG_PAUSE_MESSAGE_CHANGING 22
#define DIALOG_PAUSE_MESSAGE_UNLOAD 23
#define DIALOG_PAUSE_MESSAGE_WAITING 24
#define DIALOG_PAUSE_MESSAGE_INSERT 25
#define DIALOG_PAUSE_MESSAGE_LOAD 26
#define DIALOG_PAUSE_MESSAGE_PURGE 27
#define DIALOG_PAUSE_MESSAGE_RESUME 28
#define DIALOG_PAUSE_MESSAGE_HEAT 29
#define DIALOG_PAUSE_MESSAGE_HEATING 30
#define DIALOG_PAUSE_MESSAGE_OPTION 31
#define BTN_OK_X 100
#define BTN_OK_Y 180
#define BTN_CANCEL_X 280
#define BTN_CANCEL_Y 180
extern void lv_draw_dialog(uint8_t type);
extern void lv_clear_dialog();
//extern void disp_temp_ready_print();
#ifdef __cplusplus
} /* C-declarations for C++ */
#endif

View file

@ -0,0 +1,84 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI)
#include "lv_conf.h"
#include "draw_ui.h"
#include "tft_lvgl_configuration.h"
#include "mks_hardware_test.h"
//#include "../lvgl/src/lv_objx/lv_imgbtn.h"
//#include "../lvgl/src/lv_objx/lv_img.h"
//#include "../lvgl/src/lv_core/lv_disp.h"
//#include "../lvgl/src/lv_core/lv_refr.h"
#include "../../../../MarlinCore.h"
static lv_obj_t * scr;
void lv_draw_error_message(PGM_P const msg) {
#if 0
static lv_obj_t * message = NULL, *kill_message = NULL, *reset_tips = NULL;
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != ERROR_MESSAGE_UI) {
disp_state_stack._disp_index++;
disp_state_stack._disp_state[disp_state_stack._disp_index] = ERROR_MESSAGE_UI;
}
disp_state = ERROR_MESSAGE_UI;
scr = lv_obj_create(NULL, NULL);
lv_obj_set_style(scr, &tft_style_scr);
lv_scr_load(scr);
lv_obj_clean(scr);
lv_refr_now(lv_refr_get_disp_refreshing());
if (msg) {
message = lv_label_create(scr, NULL);
lv_obj_set_style(message, &tft_style_lable_rel);
lv_label_set_text(message, msg);
lv_obj_align(message, NULL, LV_ALIGN_CENTER, 0, -50);
}
kill_message = lv_label_create(scr, NULL);
lv_obj_set_style(kill_message, &tft_style_lable_rel);
lv_label_set_text(kill_message, "PRINTER HALTED");
lv_obj_align(kill_message, NULL, LV_ALIGN_CENTER, 0, -10);
reset_tips = lv_label_create(scr, NULL);
lv_obj_set_style(reset_tips, &tft_style_lable_rel);
lv_label_set_text(reset_tips, "Please Reset");
lv_obj_align(reset_tips, NULL, LV_ALIGN_CENTER, 0, 30);
lv_task_handler();
#endif
LCD_Clear(0x0000);
if (msg) disp_string((TFT_WIDTH - strlen(msg) * 16) / 2, 100, msg, 0xFFFF, 0x0000);
disp_string((TFT_WIDTH - strlen("PRINTER HALTED") * 16) / 2, 140, "PRINTER HALTED", 0xFFFF, 0x0000);
disp_string((TFT_WIDTH - strlen("Please Reset") * 16) / 2, 180, "Please Reset", 0xFFFF, 0x0000);
}
void lv_clear_error_message() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI

View file

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

View file

@ -0,0 +1,378 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI)
#include "lv_conf.h"
#include "draw_ui.h"
//#include "../lvgl/src/lv_objx/lv_imgbtn.h"
//#include "../lvgl/src/lv_objx/lv_img.h"
//#include "../lvgl/src/lv_core/lv_disp.h"
//#include "../lvgl/src/lv_core/lv_refr.h"
#include "../../../../MarlinCore.h"
#include "../../../../module/temperature.h"
#include "../../../../gcode/queue.h"
static lv_obj_t * scr;
static lv_obj_t * buttoType, *buttonStep, *buttonSpeed;
static lv_obj_t * labelType;
static lv_obj_t * labelStep;
static lv_obj_t * labelSpeed;
static lv_obj_t * tempText;
static lv_obj_t * ExtruText;
#define ID_E_ADD 1
#define ID_E_DEC 2
#define ID_E_TYPE 3
#define ID_E_STEP 4
#define ID_E_SPEED 5
#define ID_E_RETURN 6
static int32_t extructAmount;
static void event_handler(lv_obj_t * obj, lv_event_t event) {
switch (obj->mks_obj_id) {
case ID_E_ADD:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (thermalManager.temp_hotend[uiCfg.curSprayerChoose].celsius >= EXTRUDE_MINTEMP) {
queue.enqueue_one_now(PSTR("G91"));
memset(public_buf_l, 0, sizeof(public_buf_l));
sprintf((char *)public_buf_l, "G1 E%d F%d", uiCfg.extruStep, 60 * uiCfg.extruSpeed);
queue.enqueue_one_now(PSTR(public_buf_l));
queue.enqueue_one_now(PSTR("G90"));
extructAmount += uiCfg.extruStep;
disp_extru_amount();
}
}
break;
case ID_E_DEC:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (thermalManager.temp_hotend[uiCfg.curSprayerChoose].celsius >= EXTRUDE_MINTEMP) {
queue.enqueue_one_now(PSTR("G91"));
memset(public_buf_l, 0, sizeof(public_buf_l));
sprintf((char *)public_buf_l, "G1 E%d F%d", 0 - uiCfg.extruStep, 60 * uiCfg.extruSpeed);
queue.enqueue_one_now(PSTR(public_buf_l));
queue.enqueue_one_now(PSTR("G90"));
extructAmount -= uiCfg.extruStep;
disp_extru_amount();
}
}
break;
case ID_E_TYPE:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (EXTRUDERS == 2) {
if (uiCfg.curSprayerChoose == 0) {
uiCfg.curSprayerChoose = 1;
queue.inject_P(PSTR("T1"));
}
else {
uiCfg.curSprayerChoose = 0;
queue.inject_P(PSTR("T0"));
}
}
else {
uiCfg.curSprayerChoose = 0;
}
extructAmount = 0;
disp_hotend_temp();
disp_ext_type();
disp_extru_amount();
}
break;
case ID_E_STEP:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
switch (abs(uiCfg.extruStep)) {
case 1: uiCfg.extruStep = 5; break;
case 5: uiCfg.extruStep = 10; break;
case 10: uiCfg.extruStep = 1; break;
default: break;
}
disp_ext_step();
}
break;
case ID_E_SPEED:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
switch (uiCfg.extruSpeed) {
case 1: uiCfg.extruSpeed = 10; break;
case 10: uiCfg.extruSpeed = 20; break;
case 20: uiCfg.extruSpeed = 1; break;
default: break;
}
disp_ext_speed();
}
break;
case ID_E_RETURN:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
clear_cur_ui();
draw_return_ui();
}
break;
}
}
void lv_draw_extrusion(void) {
lv_obj_t *buttonAdd, *buttonDec, *buttonBack;
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != EXTRUSION_UI) {
disp_state_stack._disp_index++;
disp_state_stack._disp_state[disp_state_stack._disp_index] = EXTRUSION_UI;
}
disp_state = EXTRUSION_UI;
scr = lv_obj_create(NULL, NULL);
lv_obj_set_style(scr, &tft_style_scr);
lv_scr_load(scr);
lv_obj_clean(scr);
lv_obj_t * title = lv_label_create(scr, NULL);
lv_obj_set_style(title, &tft_style_lable_rel);
lv_obj_set_pos(title, TITLE_XPOS, TITLE_YPOS);
lv_label_set_text(title, creat_title_text());
lv_refr_now(lv_refr_get_disp_refreshing());
LV_IMG_DECLARE(bmp_pic);
/*Create an Image button*/
buttonAdd = lv_imgbtn_create(scr, NULL);
buttonDec = lv_imgbtn_create(scr, NULL);
buttoType = lv_imgbtn_create(scr, NULL);
buttonStep = lv_imgbtn_create(scr, NULL);
buttonSpeed = lv_imgbtn_create(scr, NULL);
buttonBack = lv_imgbtn_create(scr, NULL);
lv_obj_set_event_cb_mks(buttonAdd, event_handler, ID_E_ADD, "bmp_In.bin", 0);
lv_imgbtn_set_src(buttonAdd, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonAdd, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonAdd, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonAdd, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_clear_protect(buttonAdd, LV_PROTECT_FOLLOW);
#if 1
lv_obj_set_event_cb_mks(buttonDec, event_handler, ID_E_DEC, "bmp_Out.bin", 0);
lv_imgbtn_set_src(buttonDec, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonDec, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonDec, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonDec, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_imgbtn_set_src(buttoType, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttoType, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttoType, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttoType, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonStep, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonStep, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_imgbtn_set_src(buttonSpeed, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonSpeed, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonSpeed, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonSpeed, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_E_RETURN, "bmp_Return.bin", 0);
lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_lable_rel);
#endif
lv_obj_set_pos(buttonAdd, INTERVAL_V, titleHeight);
lv_obj_set_pos(buttonDec, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight);
lv_obj_set_pos(buttoType, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
lv_obj_set_pos(buttonStep, BTN_X_PIXEL + INTERVAL_V * 2, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
lv_obj_set_pos(buttonSpeed, BTN_X_PIXEL * 2 + INTERVAL_V * 3, 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*/
lv_btn_set_layout(buttonAdd, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonDec, LV_LAYOUT_OFF);
lv_btn_set_layout(buttoType, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonStep, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonSpeed, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
lv_obj_t * labelAdd = lv_label_create(buttonAdd, NULL);
lv_obj_t * labelDec = lv_label_create(buttonDec, NULL);
labelType = lv_label_create(buttoType, NULL);
labelStep = lv_label_create(buttonStep, NULL);
labelSpeed = lv_label_create(buttonSpeed, NULL);
lv_obj_t * label_Back = lv_label_create(buttonBack, NULL);
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(labelAdd, extrude_menu.in);
lv_obj_align(labelAdd, buttonAdd, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(labelDec, extrude_menu.out);
lv_obj_align(labelDec, buttonDec, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
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);
}
disp_ext_type();
disp_ext_step();
disp_ext_speed();
tempText = lv_label_create(scr, NULL);
lv_obj_set_style(tempText, &tft_style_lable_rel);
disp_hotend_temp();
ExtruText = lv_label_create(scr, NULL);
lv_obj_set_style(ExtruText, &tft_style_lable_rel);
disp_extru_amount();
}
void disp_ext_type() {
if (uiCfg.curSprayerChoose == 1) {
lv_obj_set_event_cb_mks(buttoType, event_handler, ID_E_TYPE, "bmp_Extru2.bin", 0);
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(labelType, extrude_menu.ext2);
lv_obj_align(labelType, buttoType, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
}
else {
lv_obj_set_event_cb_mks(buttoType, event_handler, ID_E_TYPE, "bmp_Extru1.bin", 0);
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(labelType, extrude_menu.ext1);
lv_obj_align(labelType, buttoType, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
}
}
void disp_ext_speed() {
if (uiCfg.extruSpeed == 20)
lv_obj_set_event_cb_mks(buttonSpeed, event_handler, ID_E_SPEED, "bmp_Speed_high.bin", 0);
else if (uiCfg.extruSpeed == 1)
lv_obj_set_event_cb_mks(buttonSpeed, event_handler, ID_E_SPEED, "bmp_Speed_slow.bin", 0);
else
lv_obj_set_event_cb_mks(buttonSpeed, event_handler, ID_E_SPEED, "bmp_Speed_normal.bin", 0);
if (gCfgItems.multiple_language != 0) {
if (uiCfg.extruSpeed == 20) {
lv_label_set_text(labelSpeed, extrude_menu.high);
lv_obj_align(labelSpeed, buttonSpeed, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
else if (uiCfg.extruSpeed == 1) {
lv_label_set_text(labelSpeed, extrude_menu.low);
lv_obj_align(labelSpeed, buttonSpeed, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
else {
lv_label_set_text(labelSpeed, extrude_menu.normal);
lv_obj_align(labelSpeed, buttonSpeed, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
}
}
void disp_hotend_temp() {
char buf[20] = {0};
public_buf_l[0] = '\0';
strcat(public_buf_l, extrude_menu.temper_text);
sprintf(buf, extrude_menu.temp_value, (int)thermalManager.temp_hotend[uiCfg.curSprayerChoose].celsius, (int)thermalManager.temp_hotend[uiCfg.curSprayerChoose].target);
strcat(public_buf_l, buf);
lv_label_set_text(tempText, public_buf_l);
lv_obj_align(tempText, NULL, LV_ALIGN_CENTER, 0, -50);
}
void disp_extru_amount() {
char buf1[10] = {0};
public_buf_l[0] = '\0';
if (extructAmount < 999 && extructAmount > -99) {
sprintf(buf1, extrude_menu.count_value_mm, extructAmount);
if (uiCfg.curSprayerChoose < 1)
strcat(public_buf_l, extrude_menu.ext1);
else
strcat(public_buf_l, extrude_menu.ext2);
strcat(public_buf_l, buf1);
}
else if (extructAmount < 9999 && extructAmount > -999) {
sprintf(buf1, extrude_menu.count_value_cm, extructAmount / 10);
if (uiCfg.curSprayerChoose < 1)
strcat(public_buf_l, extrude_menu.ext1);
else
strcat(public_buf_l, extrude_menu.ext2);
strcat(public_buf_l, buf1);
}
else {
sprintf(buf1, extrude_menu.count_value_m, extructAmount / 1000);
if (uiCfg.curSprayerChoose < 1)
strcat(public_buf_l, extrude_menu.ext1);
else
strcat(public_buf_l, extrude_menu.ext2);
strcat(public_buf_l, buf1);
}
lv_label_set_text(ExtruText, public_buf_l);
lv_obj_align(ExtruText, NULL, LV_ALIGN_CENTER, 0, -75);
}
void disp_ext_step() {
if (uiCfg.extruStep == 1)
lv_obj_set_event_cb_mks(buttonStep, event_handler, ID_E_STEP, "bmp_Step1_mm.bin", 0);
else if (uiCfg.extruStep == 5)
lv_obj_set_event_cb_mks(buttonStep, event_handler, ID_E_STEP, "bmp_Step5_mm.bin", 0);
else if (uiCfg.extruStep == 10)
lv_obj_set_event_cb_mks(buttonStep, event_handler, ID_E_STEP, "bmp_Step10_mm.bin", 0);
if (gCfgItems.multiple_language != 0) {
if (uiCfg.extruStep == 1) {
lv_label_set_text(labelStep, extrude_menu.step_1mm);
lv_obj_align(labelStep, buttonStep, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
else if (uiCfg.extruStep == 5) {
lv_label_set_text(labelStep, extrude_menu.step_5mm);
lv_obj_align(labelStep, buttonStep, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
else if (uiCfg.extruStep == 10) {
lv_label_set_text(labelStep, extrude_menu.step_10mm);
lv_obj_align(labelStep, buttonStep, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
}
}
void lv_clear_extrusion() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI

View file

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

View file

@ -0,0 +1,247 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI)
#include "../../../../MarlinCore.h"
#include "lv_conf.h"
//#include "../lvgl/src/lv_objx/lv_imgbtn.h"
//#include "../lvgl/src/lv_objx/lv_img.h"
//#include "../lvgl/src/lv_core/lv_disp.h"
//#include "../lvgl/src/lv_core/lv_refr.h"
#include "../../../../../Configuration.h"
#include "draw_ui.h"
#include "../../../../module/temperature.h"
#include "../../../../gcode/queue.h"
static lv_obj_t * scr;
static lv_obj_t * fanText;
#define ID_F_ADD 1
#define ID_F_DEC 2
#define ID_F_HIGH 3
#define ID_F_MID 4
#define ID_F_OFF 5
#define ID_F_RETURN 6
static uint8_t fanSpeed;
static void event_handler(lv_obj_t * obj, lv_event_t event) {
switch (obj->mks_obj_id) {
case ID_F_ADD:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (fanSpeed + 1 <= 255) {
fanSpeed++;
memset(public_buf_l, 0, sizeof(public_buf_l));
sprintf(public_buf_l, "M106 S%d", fanSpeed);
queue.enqueue_one_now(PSTR(public_buf_l));
}
}
break;
case ID_F_DEC:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (fanSpeed > 0) {
fanSpeed--;
memset(public_buf_l, 0, sizeof(public_buf_l));
sprintf(public_buf_l, "M106 S%d", fanSpeed);
queue.enqueue_one_now(PSTR(public_buf_l));
}
}
break;
case ID_F_HIGH:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
queue.enqueue_one_now(PSTR("M106 S255"));
}
break;
case ID_F_MID:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
queue.enqueue_one_now(PSTR("M106 S127"));
}
break;
case ID_F_OFF:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
queue.enqueue_one_now(PSTR("M107"));
}
break;
case ID_F_RETURN:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
clear_cur_ui();
draw_return_ui();
}
break;
}
}
void lv_draw_fan(void) {
lv_obj_t *buttonAdd, *buttonDec, *buttonHigh, *buttonMid;
lv_obj_t *buttonOff, *buttonBack;
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != FAN_UI) {
disp_state_stack._disp_index++;
disp_state_stack._disp_state[disp_state_stack._disp_index] = FAN_UI;
}
disp_state = FAN_UI;
scr = lv_obj_create(NULL, NULL);
lv_obj_set_style(scr, &tft_style_scr);
lv_scr_load(scr);
lv_obj_clean(scr);
lv_obj_t * title = lv_label_create(scr, NULL);
lv_obj_set_style(title, &tft_style_lable_rel);
lv_obj_set_pos(title, TITLE_XPOS, TITLE_YPOS);
lv_label_set_text(title, creat_title_text());
lv_refr_now(lv_refr_get_disp_refreshing());
LV_IMG_DECLARE(bmp_pic);
/*Create an Image button*/
buttonAdd = lv_imgbtn_create(scr, NULL);
buttonDec = lv_imgbtn_create(scr, NULL);
buttonHigh = lv_imgbtn_create(scr, NULL);
buttonMid = lv_imgbtn_create(scr, NULL);
buttonOff = lv_imgbtn_create(scr, NULL);
buttonBack = lv_imgbtn_create(scr, NULL);
lv_obj_set_event_cb_mks(buttonAdd, event_handler, ID_F_ADD, "bmp_Add.bin", 0);
lv_imgbtn_set_src(buttonAdd, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonAdd, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonAdd, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonAdd, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_clear_protect(buttonAdd, LV_PROTECT_FOLLOW);
#if 1
lv_obj_set_event_cb_mks(buttonDec, event_handler, ID_F_DEC, "bmp_Dec.bin", 0);
lv_imgbtn_set_src(buttonDec, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonDec, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonDec, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonDec, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonHigh, event_handler, ID_F_HIGH, "bmp_Speed255.bin", 0);
lv_imgbtn_set_src(buttonHigh, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonHigh, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonHigh, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonHigh, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonMid, event_handler, ID_F_MID, "bmp_Speed127.bin", 0);
lv_imgbtn_set_src(buttonMid, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonMid, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonMid, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonMid, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonOff, event_handler, ID_F_OFF, "bmp_Speed0.bin", 0);
lv_imgbtn_set_src(buttonOff, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonOff, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonOff, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonOff, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_F_RETURN, "bmp_Return.bin", 0);
lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_lable_rel);
#endif
lv_obj_set_pos(buttonAdd, INTERVAL_V, titleHeight);
lv_obj_set_pos(buttonDec, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight);
lv_obj_set_pos(buttonHigh, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
lv_obj_set_pos(buttonMid, BTN_X_PIXEL + INTERVAL_V * 2, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
lv_obj_set_pos(buttonOff, BTN_X_PIXEL * 2 + INTERVAL_V * 3, 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*/
lv_btn_set_layout(buttonAdd, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonDec, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonHigh, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonMid, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonOff, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
lv_obj_t * labelAdd = lv_label_create(buttonAdd, NULL);
lv_obj_t * labelDec = lv_label_create(buttonDec, NULL);
lv_obj_t * labelHigh = lv_label_create(buttonHigh, NULL);
lv_obj_t * labelMid = lv_label_create(buttonMid, NULL);
lv_obj_t * labelOff = lv_label_create(buttonOff, NULL);
lv_obj_t * label_Back = lv_label_create(buttonBack, NULL);
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(labelAdd, fan_menu.add);
lv_obj_align(labelAdd, buttonAdd, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(labelDec, fan_menu.dec);
lv_obj_align(labelDec, buttonDec, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(labelHigh, fan_menu.full);
lv_obj_align(labelHigh, buttonHigh, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(labelMid, fan_menu.half);
lv_obj_align(labelMid, buttonMid, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(labelOff, fan_menu.off);
lv_obj_align(labelOff, buttonOff, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
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);
}
fanText = lv_label_create(scr, NULL);
lv_obj_set_style(fanText, &tft_style_lable_rel);
disp_fan_value();
}
void disp_fan_value() {
char buf1[10] = {0};
public_buf_l[0] = '\0';
strcat(public_buf_l, fan_menu.state);
strcat(public_buf_l, ": ");
sprintf(buf1, "%3d", thermalManager.fan_speed[0]);
strcat(public_buf_l, buf1);
lv_label_set_text(fanText, public_buf_l);
lv_obj_align(fanText, NULL, LV_ALIGN_CENTER, 0, -65);
}
void lv_clear_fan() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI

View file

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

View file

@ -0,0 +1,283 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI)
#include "../../../../MarlinCore.h"
#include "draw_ready_print.h"
#include "draw_set.h"
#include "lv_conf.h"
//#include "../lvgl/src/lv_objx/lv_imgbtn.h"
//#include "../lvgl/src/lv_objx/lv_img.h"
//#include "../lvgl/src/lv_core/lv_disp.h"
//#include "../lvgl/src/lv_core/lv_refr.h"
#include "draw_ui.h"
#include "../../../../gcode/queue.h"
static lv_obj_t * scr;
#define ID_H_ALL 1
#define ID_H_X 2
#define ID_H_Y 3
#define ID_H_Z 4
#define ID_H_RETURN 5
#define ID_H_OFF_ALL 6
#define ID_H_OFF_XY 7
static void event_handler(lv_obj_t * obj, lv_event_t event) {
switch (obj->mks_obj_id) {
case ID_H_ALL:
if (event == LV_EVENT_CLICKED) {
}
else if (event == LV_EVENT_RELEASED) {
queue.inject_P(PSTR("G28"));
}
break;
case ID_H_X:
if (event == LV_EVENT_CLICKED) {
}
else if (event == LV_EVENT_RELEASED) {
queue.inject_P(PSTR("G28 X0"));
}
break;
case ID_H_Y:
if (event == LV_EVENT_CLICKED) {
}
else if (event == LV_EVENT_RELEASED) {
queue.inject_P(PSTR("G28 Y0"));
}
break;
case ID_H_Z:
if (event == LV_EVENT_CLICKED) {
}
else if (event == LV_EVENT_RELEASED) {
queue.inject_P(PSTR("G28 Z0"));
}
break;
case ID_H_OFF_ALL:
if (event == LV_EVENT_CLICKED) {
}
else if (event == LV_EVENT_RELEASED) {
queue.inject_P(PSTR("M84"));
}
break;
case ID_H_OFF_XY:
if (event == LV_EVENT_CLICKED) {
}
else if (event == LV_EVENT_RELEASED) {
queue.inject_P(PSTR("M84 X Y"));
}
break;
case ID_H_RETURN:
if (event == LV_EVENT_CLICKED) {
}
else if (event == LV_EVENT_RELEASED) {
lv_obj_del(scr);
lv_draw_tool();
}
break;
}
}
void lv_draw_home(void) {
lv_obj_t *buttonHomeAll, *buttonHomeX, *buttonHomeY, *buttonHomeZ;
lv_obj_t *buttonBack;
lv_obj_t *buttonOffAll, *buttonOffXY;
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != ZERO_UI) {
disp_state_stack._disp_index++;
disp_state_stack._disp_state[disp_state_stack._disp_index] = ZERO_UI;
}
disp_state = ZERO_UI;
scr = lv_obj_create(NULL, NULL);
//static lv_style_t tool_style;
lv_obj_set_style(scr, &tft_style_scr);
lv_scr_load(scr);
lv_obj_clean(scr);
lv_obj_t * title = lv_label_create(scr, NULL);
lv_obj_set_style(title, &tft_style_lable_rel);
lv_obj_set_pos(title, TITLE_XPOS, TITLE_YPOS);
lv_label_set_text(title, creat_title_text());
lv_refr_now(lv_refr_get_disp_refreshing());
LV_IMG_DECLARE(bmp_pic);
/*Create an Image button*/
//buttonWifi = lv_imgbtn_create(scr, NULL);
buttonHomeAll = lv_imgbtn_create(scr, NULL);
buttonHomeX = lv_imgbtn_create(scr, NULL);
//buttonContinue = lv_imgbtn_create(scr, NULL);
buttonHomeY = lv_imgbtn_create(scr, NULL);
buttonHomeZ = lv_imgbtn_create(scr, NULL);
buttonBack = lv_imgbtn_create(scr, NULL);
buttonOffAll = lv_imgbtn_create(scr, NULL);
buttonOffXY = lv_imgbtn_create(scr, NULL);
//lv_obj_set_event_cb_mks(buttonWifi, event_handler,ID_S_WIFI,"bmp_Wifi.bin",0);
//lv_imgbtn_set_src(buttonWifi, LV_BTN_STATE_REL, &bmp_pic);
//lv_imgbtn_set_src(buttonWifi, LV_BTN_STATE_PR, &bmp_pic);
//lv_imgbtn_set_style(buttonWifi, LV_BTN_STATE_PR, &tft_style_lable_pre);
//lv_imgbtn_set_style(buttonWifi, LV_BTN_STATE_REL, &tft_style_lable_rel);
//lv_obj_clear_protect(buttonWifi, LV_PROTECT_FOLLOW);
#if 1
lv_obj_set_event_cb_mks(buttonHomeAll, event_handler, ID_H_ALL, "bmp_Zero.bin", 0);
lv_imgbtn_set_src(buttonHomeAll, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonHomeAll, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonHomeAll, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonHomeAll, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonHomeX, event_handler, ID_H_X, "bmp_zeroX.bin", 0);
lv_imgbtn_set_src(buttonHomeX, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonHomeX, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonHomeX, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonHomeX, LV_BTN_STATE_REL, &tft_style_lable_rel);
//lv_obj_set_event_cb_mks(buttonContinue, event_handler,ID_S_CONTINUE,"bmp_Breakpoint.bin",0);
//lv_imgbtn_set_src(buttonContinue, LV_BTN_STATE_REL, &bmp_pic);
//lv_imgbtn_set_src(buttonContinue, LV_BTN_STATE_PR, &bmp_pic);
//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_obj_set_event_cb_mks(buttonHomeY, event_handler, ID_H_Y, "bmp_zeroY.bin", 0);
lv_imgbtn_set_src(buttonHomeY, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonHomeY, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonHomeY, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonHomeY, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonHomeZ, event_handler, ID_H_Z, "bmp_zeroZ.bin", 0);
lv_imgbtn_set_src(buttonHomeZ, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonHomeZ, LV_BTN_STATE_PR, &bmp_pic);
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_obj_set_event_cb_mks(buttonOffAll, event_handler, ID_H_OFF_ALL, "bmp_Motor_off.bin", 0);
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_style(buttonOffAll, LV_BTN_STATE_PR, &tft_style_lable_pre);
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_imgbtn_set_src(buttonOffXY, LV_BTN_STATE_REL, &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_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_H_RETURN, "bmp_Return.bin", 0);
lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_lable_rel);
#endif
/*lv_obj_set_pos(buttonWifi,INTERVAL_V,titleHeight);
lv_obj_set_pos(buttonFan,BTN_X_PIXEL+INTERVAL_V*2,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(buMotorOff,INTERVAL_V, BTN_Y_PIXEL+INTERVAL_H+titleHeight);
lv_obj_set_pos(buttonLanguage,BTN_X_PIXEL+INTERVAL_V*2,BTN_Y_PIXEL+INTERVAL_H+titleHeight);
lv_obj_set_pos(buttonBack,BTN_X_PIXEL*3+INTERVAL_V*4, BTN_Y_PIXEL+INTERVAL_H+titleHeight);*/
//lv_obj_set_pos(buttonWifi,INTERVAL_V,titleHeight);
lv_obj_set_pos(buttonHomeX, BTN_X_PIXEL + INTERVAL_V * 2, titleHeight);
lv_obj_set_pos(buttonHomeY, 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(buttonHomeZ, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight);
lv_obj_set_pos(buttonHomeAll, INTERVAL_V, titleHeight);
lv_obj_set_pos(buttonOffAll, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
lv_obj_set_pos(buttonOffXY, BTN_X_PIXEL + INTERVAL_V * 2, 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*/
//lv_btn_set_layout(buttonWifi, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonHomeAll, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonHomeX, LV_LAYOUT_OFF);
//lv_btn_set_layout(buttonContinue, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonHomeY, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonHomeZ, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonOffAll, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonOffXY, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
//lv_obj_t * labelWifi= lv_label_create(buttonWifi, NULL);
lv_obj_t * labelHomeAll = lv_label_create(buttonHomeAll, NULL);
lv_obj_t * labelHomeX = lv_label_create(buttonHomeX, NULL);
//lv_obj_t * label_Continue = lv_label_create(buttonContinue, NULL);
lv_obj_t * labelHomeY = lv_label_create(buttonHomeY, NULL);
lv_obj_t * labelHomeZ = lv_label_create(buttonHomeZ, NULL);
lv_obj_t * labelOffAll = lv_label_create(buttonOffAll, NULL);
lv_obj_t * labelOffXY = lv_label_create(buttonOffXY, NULL);
lv_obj_t * label_Back = lv_label_create(buttonBack, NULL);
if (gCfgItems.multiple_language != 0) {
//lv_label_set_text(labelWifi, set_menu.wifi);
//lv_obj_align(labelWifi, buttonWifi, LV_ALIGN_IN_BOTTOM_MID,0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(labelHomeAll, home_menu.home_all);
lv_obj_align(labelHomeAll, buttonHomeAll, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(labelHomeX, home_menu.home_x);
lv_obj_align(labelHomeX, buttonHomeX, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
//lv_label_set_text(label_Continue, set_menu.breakpoint);
//lv_obj_align(label_Continue, buttonContinue, LV_ALIGN_IN_BOTTOM_MID,0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(labelHomeY, home_menu.home_y);
lv_obj_align(labelHomeY, buttonHomeY, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(labelHomeZ, home_menu.home_z);
lv_obj_align(labelHomeZ, buttonHomeZ, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(labelOffAll, set_menu.motoroff);
lv_obj_align(labelOffAll, buttonOffAll, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(labelOffXY, set_menu.motoroffXY);
lv_obj_align(labelOffXY, buttonOffXY, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
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);
}
}
void lv_clear_home() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI

View file

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

View file

@ -0,0 +1,370 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI)
#include "lv_conf.h"
#include "draw_ui.h"
//#include "../lvgl/src/lv_objx/lv_imgbtn.h"
//#include "../lvgl/src/lv_objx/lv_img.h"
//#include "../lvgl/src/lv_core/lv_disp.h"
//#include "../lvgl/src/lv_core/lv_refr.h"
#include "../../../../MarlinCore.h"
#include <string.h>
//static lv_obj_t *buttonMoveZ,*buttonTest,*buttonZ0,*buttonStop,*buttonReturn;
#define ID_CN 1
#define ID_T_CN 2
#define ID_EN 3
#define ID_RU 4
#define ID_ES 5
#define ID_FR 6
#define ID_IT 7
#define ID_L_RETURN 8
#define SELECTED 1
#define UNSELECTED 0
static void disp_language(uint8_t language, uint8_t state);
static lv_obj_t * scr;
static lv_obj_t *buttonCN, *buttonT_CN, *buttonEN, *buttonRU;
static lv_obj_t *buttonES, *buttonFR, *buttonIT, *buttonBack;
static void event_handler(lv_obj_t * obj, lv_event_t event) {
switch (obj->mks_obj_id) {
case ID_CN:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
disp_language(gCfgItems.language, UNSELECTED);
lv_obj_set_event_cb_mks(buttonCN, event_handler, ID_CN, "bmp_Simple_cn_sel.bin", 0);
gCfgItems.language = LANG_SIMPLE_CHINESE;
gCfg_to_spiFlah();
disp_language_init();
}
break;
case ID_T_CN:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
disp_language(gCfgItems.language, UNSELECTED);
lv_obj_set_event_cb_mks(buttonT_CN, event_handler, ID_T_CN, "bmp_Tradition_cn_sel.bin", 0);
gCfgItems.language = LANG_COMPLEX_CHINESE;
gCfg_to_spiFlah();
disp_language_init();
}
break;
case ID_EN:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
disp_language(gCfgItems.language, UNSELECTED);
lv_obj_set_event_cb_mks(buttonEN, event_handler, ID_EN, "bmp_English_sel.bin", 0);
gCfgItems.language = LANG_ENGLISH;
gCfg_to_spiFlah();
disp_language_init();
}
break;
case ID_RU:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
disp_language(gCfgItems.language, UNSELECTED);
lv_obj_set_event_cb_mks(buttonRU, event_handler, ID_RU, "bmp_Russian_sel.bin", 0);
gCfgItems.language = LANG_RUSSIAN;
gCfg_to_spiFlah();
disp_language_init();
}
break;
case ID_ES:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
disp_language(gCfgItems.language, UNSELECTED);
lv_obj_set_event_cb_mks(buttonES, event_handler, ID_ES, "bmp_Spanish_sel.bin", 0);
gCfgItems.language = LANG_SPANISH;
gCfg_to_spiFlah();
disp_language_init();
}
break;
case ID_FR:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
disp_language(gCfgItems.language, UNSELECTED);
lv_obj_set_event_cb_mks(buttonFR, event_handler, ID_FR, "bmp_French_sel.bin", 0);
gCfgItems.language = LANG_FRENCH;
gCfg_to_spiFlah();
disp_language_init();
}
break;
case ID_IT:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
disp_language(gCfgItems.language, UNSELECTED);
lv_obj_set_event_cb_mks(buttonIT, event_handler, ID_FR, "bmp_Italy_sel.bin", 0);
gCfgItems.language = LANG_ITALY;
gCfg_to_spiFlah();
disp_language_init();
}
break;
case ID_L_RETURN:
if (event == LV_EVENT_CLICKED) {
}
else if (event == LV_EVENT_RELEASED) {
buttonCN = NULL;
buttonT_CN = NULL;
buttonEN = NULL;
buttonRU = NULL;
buttonES = NULL;
buttonFR = NULL;
buttonFR = NULL;
buttonIT = NULL;
buttonBack = NULL;
lv_obj_del(scr);
lv_draw_set();
}
break;
}
}
static void disp_language(uint8_t language, uint8_t state) {
uint16_t id;
lv_obj_t *obj;
public_buf_l[0] = '\0';
switch (language) {
case LANG_SIMPLE_CHINESE:
id = ID_CN;
strcat(public_buf_l, "bmp_Simple_cn");
obj = buttonCN;
break;
case LANG_COMPLEX_CHINESE:
id = ID_T_CN;
strcat(public_buf_l, "bmp_Tradition_cn");
obj = buttonT_CN;
break;
case LANG_ENGLISH:
id = ID_EN;
strcat(public_buf_l, "bmp_English");
obj = buttonEN;
break;
case LANG_RUSSIAN:
id = ID_RU;
strcat(public_buf_l, "bmp_Russian");
obj = buttonRU;
break;
case LANG_SPANISH:
id = ID_ES;
strcat(public_buf_l, "bmp_Spanish");
obj = buttonES;
break;
case LANG_FRENCH:
id = ID_FR;
strcat(public_buf_l, "bmp_French");
obj = buttonFR;
break;
case LANG_ITALY:
id = ID_IT;
strcat(public_buf_l, "bmp_Italy");
obj = buttonIT;
break;
default:
id = ID_CN;
strcat(public_buf_l, "bmp_Simple_cn");
obj = buttonCN;
break;
}
if (state == SELECTED) strcat(public_buf_l, "_sel.bin");
else strcat(public_buf_l, ".bin");
lv_obj_set_event_cb_mks(obj, event_handler, id, public_buf_l, 0);
if (state == UNSELECTED) lv_obj_refresh_ext_draw_pad(obj);
}
void lv_draw_language(void) {
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != LANGUAGE_UI) {
disp_state_stack._disp_index++;
disp_state_stack._disp_state[disp_state_stack._disp_index] = LANGUAGE_UI;
}
disp_state = LANGUAGE_UI;
scr = lv_obj_create(NULL, NULL);
//static lv_style_t tool_style;
lv_obj_set_style(scr, &tft_style_scr);
lv_scr_load(scr);
lv_obj_clean(scr);
lv_obj_t * title = lv_label_create(scr, NULL);
lv_obj_set_style(title, &tft_style_lable_rel);
lv_obj_set_pos(title, TITLE_XPOS, TITLE_YPOS);
lv_label_set_text(title, creat_title_text());
lv_refr_now(lv_refr_get_disp_refreshing());
LV_IMG_DECLARE(bmp_pic);
/*Create an Image button*/
buttonCN = lv_imgbtn_create(scr, NULL);
buttonT_CN = lv_imgbtn_create(scr, NULL);
buttonEN = lv_imgbtn_create(scr, NULL);
buttonRU = lv_imgbtn_create(scr, NULL);
buttonES = lv_imgbtn_create(scr, NULL);
buttonFR = lv_imgbtn_create(scr, NULL);
buttonIT = 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_imgbtn_set_src(buttonCN, LV_BTN_STATE_REL, &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_REL, &tft_style_lable_rel);
lv_obj_clear_protect(buttonCN, LV_PROTECT_FOLLOW);
#if 1
lv_obj_set_event_cb_mks(buttonT_CN, event_handler, ID_T_CN, "bmp_Tradition_cn.bin", 0);
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_style(buttonT_CN, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonT_CN, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonEN, event_handler, ID_EN, "bmp_English.bin", 0);
lv_imgbtn_set_src(buttonEN, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonEN, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonEN, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonEN, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonRU, event_handler, ID_RU, "bmp_Russian.bin", 0);
lv_imgbtn_set_src(buttonRU, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonRU, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonRU, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonRU, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonES, event_handler, ID_ES, "bmp_Spanish.bin", 0);
lv_imgbtn_set_src(buttonES, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonES, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonES, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonES, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonFR, event_handler, ID_FR, "bmp_French.bin", 0);
lv_imgbtn_set_src(buttonFR, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonFR, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonFR, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonFR, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonIT, event_handler, ID_IT, "bmp_Italy.bin", 0);
lv_imgbtn_set_src(buttonIT, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonIT, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonIT, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonIT, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_L_RETURN, "bmp_Return.bin", 0);
lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_lable_rel);
#endif
lv_obj_set_pos(buttonCN, INTERVAL_V, titleHeight);
lv_obj_set_pos(buttonT_CN, BTN_X_PIXEL + INTERVAL_V * 2, titleHeight);
lv_obj_set_pos(buttonEN, BTN_X_PIXEL * 2 + INTERVAL_V * 3, titleHeight);
lv_obj_set_pos(buttonRU, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight);
lv_obj_set_pos(buttonES, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
lv_obj_set_pos(buttonFR, BTN_X_PIXEL + INTERVAL_V * 2, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
lv_obj_set_pos(buttonIT, BTN_X_PIXEL * 2 + INTERVAL_V * 3, 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*/
lv_btn_set_layout(buttonCN, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonT_CN, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonEN, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonRU, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonES, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonFR, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonIT, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
lv_obj_t * label_CN = lv_label_create(buttonCN, NULL);
lv_obj_t * label_T_CN = lv_label_create(buttonT_CN, NULL);
lv_obj_t * label_EN = lv_label_create(buttonEN, NULL);
lv_obj_t * label_RU = lv_label_create(buttonRU, NULL);
lv_obj_t * label_ES = lv_label_create(buttonES, NULL);
lv_obj_t * label_FR = lv_label_create(buttonFR, NULL);
lv_obj_t * label_IT = lv_label_create(buttonIT, NULL);
lv_obj_t * label_Back = lv_label_create(buttonBack, NULL);
disp_language(gCfgItems.language, SELECTED);
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(label_CN, language_menu.chinese_s);
lv_obj_align(label_CN, buttonCN, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(label_T_CN, language_menu.chinese_t);
lv_obj_align(label_T_CN, buttonT_CN, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(label_EN, language_menu.english);
lv_obj_align(label_EN, buttonEN, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(label_RU, language_menu.russian);
lv_obj_align(label_RU, buttonRU, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(label_ES, language_menu.spanish);
lv_obj_align(label_ES, buttonES, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(label_FR, language_menu.french);
lv_obj_align(label_FR, buttonFR, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(label_IT, language_menu.italy);
lv_obj_align(label_IT, buttonIT, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
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);
}
}
void lv_clear_language() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI

View file

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

View file

@ -0,0 +1,284 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI)
#include "../../../../MarlinCore.h"
#include "lv_conf.h"
//#include "../lvgl/src/lv_objx/lv_imgbtn.h"
//#include "../lvgl/src/lv_objx/lv_img.h"
//#include "../lvgl/src/lv_core/lv_disp.h"
//#include "../lvgl/src/lv_core/lv_refr.h"
#include "draw_ui.h"
#include "../../../../gcode/queue.h"
//static lv_obj_t *buttonMoveZ,*buttonTest,*buttonZ0,*buttonStop,*buttonReturn;
static lv_obj_t * scr;
#define ID_M_POINT1 1
#define ID_M_POINT2 2
#define ID_M_POINT3 3
#define ID_M_POINT4 4
#define ID_M_POINT5 5
#define ID_MANUAL_RETURN 6
static void event_handler(lv_obj_t * obj, lv_event_t event) {
switch (obj->mks_obj_id) {
case ID_M_POINT1:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (queue.length == 0) {
if (uiCfg.leveling_first_time) {
queue.enqueue_one_P(PSTR("G28"));
uiCfg.leveling_first_time = 0;
}
queue.enqueue_one_P(PSTR("G1 Z10"));
memset(public_buf_l, 0, sizeof(public_buf_l));
sprintf(public_buf_l, "G1 X%d Y%d", X_MIN_POS + 30, Y_MIN_POS + 30);
queue.enqueue_one_P(PSTR(public_buf_l));
queue.enqueue_one_P(PSTR("G1 Z0"));
}
}
break;
case ID_M_POINT2:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (queue.length == 0) {
if (uiCfg.leveling_first_time) {
queue.enqueue_one_P(PSTR("G28"));
uiCfg.leveling_first_time = 0;
}
queue.enqueue_one_P(PSTR("G1 Z10"));
memset(public_buf_l, 0, sizeof(public_buf_l));
sprintf(public_buf_l, "G1 X%d Y%d", X_MAX_POS - 30, Y_MIN_POS + 30);
queue.enqueue_one_P(PSTR(public_buf_l));
queue.enqueue_one_P(PSTR("G1 Z0"));
}
}
break;
case ID_M_POINT3:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (queue.length == 0) {
if (uiCfg.leveling_first_time) {
queue.enqueue_one_P(PSTR("G28"));
uiCfg.leveling_first_time = 0;
}
queue.enqueue_one_P(PSTR("G1 Z10"));
memset(public_buf_l, 0, sizeof(public_buf_l));
sprintf(public_buf_l, "G1 X%d Y%d", X_MAX_POS - 30, Y_MAX_POS - 30);
queue.enqueue_one_P(PSTR(public_buf_l));
queue.enqueue_one_P(PSTR("G1 Z0"));
}
}
break;
case ID_M_POINT4:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (queue.length == 0) {
if (uiCfg.leveling_first_time) {
queue.enqueue_one_P(PSTR("G28"));
uiCfg.leveling_first_time = 0;
}
queue.enqueue_one_P(PSTR("G1 Z10"));
memset(public_buf_l, 0, sizeof(public_buf_l));
sprintf(public_buf_l, "G1 X%d Y%d", X_MIN_POS + 30, Y_MAX_POS - 30);
queue.enqueue_one_P(PSTR(public_buf_l));
queue.enqueue_one_P(PSTR("G1 Z0"));
}
}
break;
case ID_M_POINT5:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (queue.length == 0) {
if (uiCfg.leveling_first_time) {
queue.enqueue_one_P(PSTR("G28"));
uiCfg.leveling_first_time = 0;
}
queue.enqueue_one_P(PSTR("G1 Z10"));
memset(public_buf_l, 0, sizeof(public_buf_l));
sprintf(public_buf_l, "G1 X%d Y%d", X_BED_SIZE / 2, Y_BED_SIZE / 2);
queue.enqueue_one_P(PSTR(public_buf_l));
queue.enqueue_one_P(PSTR("G1 Z0"));
}
}
break;
case ID_MANUAL_RETURN:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
lv_clear_manualLevel();
lv_draw_tool();
}
break;
}
}
void lv_draw_manualLevel(void) {
lv_obj_t *buttonPoint1, *buttonPoint2, *buttonPoint3, *buttonPoint4, *buttonPoint5;
lv_obj_t *buttonBack;
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != LEVELING_UI) {
disp_state_stack._disp_index++;
disp_state_stack._disp_state[disp_state_stack._disp_index] = LEVELING_UI;
}
disp_state = LEVELING_UI;
scr = lv_obj_create(NULL, NULL);
//static lv_style_t tool_style;
lv_obj_set_style(scr, &tft_style_scr);
lv_scr_load(scr);
lv_obj_clean(scr);
lv_obj_t * title = lv_label_create(scr, NULL);
lv_obj_set_style(title, &tft_style_lable_rel);
lv_obj_set_pos(title, TITLE_XPOS, TITLE_YPOS);
lv_label_set_text(title, creat_title_text());
lv_refr_now(lv_refr_get_disp_refreshing());
LV_IMG_DECLARE(bmp_pic);
/*Create an Image button*/
buttonPoint1 = lv_imgbtn_create(scr, NULL);
buttonPoint2 = lv_imgbtn_create(scr, NULL);
buttonPoint3 = lv_imgbtn_create(scr, NULL);
buttonPoint4 = lv_imgbtn_create(scr, NULL);
buttonPoint5 = lv_imgbtn_create(scr, NULL);
buttonBack = lv_imgbtn_create(scr, NULL);
lv_obj_set_event_cb_mks(buttonPoint1, event_handler, ID_M_POINT1, "bmp_Leveling1.bin", 0);
lv_imgbtn_set_src(buttonPoint1, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonPoint1, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonPoint1, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonPoint1, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_clear_protect(buttonPoint1, LV_PROTECT_FOLLOW);
#if 1
lv_obj_set_event_cb_mks(buttonPoint2, event_handler, ID_M_POINT2, "bmp_Leveling2.bin", 0);
lv_imgbtn_set_src(buttonPoint2, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonPoint2, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonPoint2, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonPoint2, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonPoint3, event_handler, ID_M_POINT3, "bmp_Leveling3.bin", 0);
lv_imgbtn_set_src(buttonPoint3, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonPoint3, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonPoint3, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonPoint3, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonPoint4, event_handler, ID_M_POINT4, "bmp_Leveling4.bin", 0);
lv_imgbtn_set_src(buttonPoint4, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonPoint4, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonPoint4, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonPoint4, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonPoint5, event_handler, ID_M_POINT5, "bmp_Leveling5.bin", 0);
lv_imgbtn_set_src(buttonPoint5, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonPoint5, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonPoint5, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonPoint5, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_MANUAL_RETURN, "bmp_Return.bin", 0);
lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_lable_rel);
#endif
lv_obj_set_pos(buttonPoint1, INTERVAL_V, titleHeight);
lv_obj_set_pos(buttonPoint2, BTN_X_PIXEL + INTERVAL_V * 2, titleHeight);
lv_obj_set_pos(buttonPoint3, BTN_X_PIXEL * 2 + INTERVAL_V * 3, titleHeight);
lv_obj_set_pos(buttonPoint4, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight);
lv_obj_set_pos(buttonPoint5, INTERVAL_V, 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*/
lv_btn_set_layout(buttonPoint1, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonPoint2, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonPoint3, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonPoint4, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonPoint5, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
lv_obj_t * label_Point1 = lv_label_create(buttonPoint1, NULL);
lv_obj_t * label_Point2 = lv_label_create(buttonPoint2, NULL);
lv_obj_t * label_Point3 = lv_label_create(buttonPoint3, NULL);
lv_obj_t * label_Point4 = lv_label_create(buttonPoint4, NULL);
lv_obj_t * label_Point5 = lv_label_create(buttonPoint5, NULL);
lv_obj_t * label_Back = lv_label_create(buttonBack, NULL);
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(label_Point1, leveling_menu.position1);
lv_obj_align(label_Point1, buttonPoint1, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(label_Point2, leveling_menu.position2);
lv_obj_align(label_Point2, buttonPoint2, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(label_Point3, leveling_menu.position3);
lv_obj_align(label_Point3, buttonPoint3, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(label_Point4, leveling_menu.position4);
lv_obj_align(label_Point4, buttonPoint4, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(label_Point5, leveling_menu.position5);
lv_obj_align(label_Point5, buttonPoint5, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
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);
}
}
void lv_clear_manualLevel() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI

View file

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

View file

@ -0,0 +1,329 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI)
#include "../../../../MarlinCore.h"
#include "lv_conf.h"
//#include "../lvgl/src/lv_objx/lv_imgbtn.h"
//#include "../lvgl/src/lv_objx/lv_img.h"
//#include "../lvgl/src/lv_core/lv_disp.h"
//#include "../lvgl/src/lv_core/lv_refr.h"
#include "draw_ui.h"
#include "../../../../gcode/queue.h"
static lv_obj_t * scr;
static lv_obj_t * labelV, *buttonV;
#define ID_M_X_P 1
#define ID_M_X_N 2
#define ID_M_Y_P 3
#define ID_M_Y_N 4
#define ID_M_Z_P 5
#define ID_M_Z_N 6
#define ID_M_STEP 7
#define ID_M_RETURN 8
static void event_handler(lv_obj_t * obj, lv_event_t event) {
switch (obj->mks_obj_id) {
case ID_M_X_P:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (queue.length <= (BUFSIZE - 3)) {
memset(public_buf_l, 0, sizeof(public_buf_l));
queue.enqueue_one_P(PSTR("G91"));
sprintf(public_buf_l, "G1 X%3.1f F%d", uiCfg.move_dist, uiCfg.moveSpeed);
queue.enqueue_one_P(PSTR(public_buf_l));
queue.enqueue_one_P(PSTR("G90"));
}
}
break;
case ID_M_X_N:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (queue.length <= (BUFSIZE - 3)) {
memset(public_buf_l, 0, sizeof(public_buf_l));
queue.enqueue_one_now(PSTR("G91"));
sprintf(public_buf_l, "G1 X-%3.1f F%d", uiCfg.move_dist, uiCfg.moveSpeed);
queue.enqueue_one_now(PSTR(public_buf_l));
queue.enqueue_one_now(PSTR("G90"));
}
}
break;
case ID_M_Y_P:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (queue.length <= (BUFSIZE - 3)) {
memset(public_buf_l, 0, sizeof(public_buf_l));
queue.enqueue_one_now(PSTR("G91"));
sprintf(public_buf_l, "G1 Y%3.1f F%d", uiCfg.move_dist, uiCfg.moveSpeed);
queue.enqueue_one_now(PSTR(public_buf_l));
queue.enqueue_one_now(PSTR("G90"));
}
}
break;
case ID_M_Y_N:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (queue.length <= (BUFSIZE - 3)) {
memset(public_buf_l, 0, sizeof(public_buf_l));
queue.enqueue_one_now(PSTR("G91"));
sprintf(public_buf_l, "G1 Y-%3.1f F%d", uiCfg.move_dist, uiCfg.moveSpeed);
queue.enqueue_one_now(PSTR(public_buf_l));
queue.enqueue_one_now(PSTR("G90"));
}
}
break;
case ID_M_Z_P:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (queue.length <= (BUFSIZE - 3)) {
memset(public_buf_l, 0, sizeof(public_buf_l));
queue.enqueue_one_now(PSTR("G91"));
sprintf(public_buf_l, "G1 Z%3.1f F%d", uiCfg.move_dist, uiCfg.moveSpeed);
queue.enqueue_one_now(PSTR(public_buf_l));
queue.enqueue_one_now(PSTR("G90"));
}
}
break;
case ID_M_Z_N:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (queue.length <= (BUFSIZE - 3)) {
memset(public_buf_l, 0, sizeof(public_buf_l));
queue.enqueue_one_now(PSTR("G91"));
sprintf(public_buf_l, "G1 Z-%3.1f F%d", uiCfg.move_dist, uiCfg.moveSpeed);
queue.enqueue_one_now(PSTR(public_buf_l));
queue.enqueue_one_now(PSTR("G90"));
}
}
break;
case ID_M_STEP:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (abs(10 * (int)uiCfg.move_dist) == 100)
uiCfg.move_dist = 0.1;
else
uiCfg.move_dist *= (float)10;
disp_move_dist();
}
break;
case ID_M_RETURN:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
clear_cur_ui();
draw_return_ui();
}
break;
}
}
void lv_draw_move_motor(void) {
lv_obj_t *buttonXI, *buttonXD, *buttonYI, *buttonYD;
lv_obj_t *buttonZI, *buttonZD, *buttonBack;
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != MOVE_MOTOR_UI) {
disp_state_stack._disp_index++;
disp_state_stack._disp_state[disp_state_stack._disp_index] = MOVE_MOTOR_UI;
}
disp_state = MOVE_MOTOR_UI;
scr = lv_obj_create(NULL, NULL);
lv_obj_set_style(scr, &tft_style_scr);
lv_scr_load(scr);
lv_obj_clean(scr);
lv_obj_t * title = lv_label_create(scr, NULL);
lv_obj_set_style(title, &tft_style_lable_rel);
lv_obj_set_pos(title, TITLE_XPOS, TITLE_YPOS);
lv_label_set_text(title, creat_title_text());
lv_refr_now(lv_refr_get_disp_refreshing());
LV_IMG_DECLARE(bmp_pic);
/*Create an Image button*/
buttonXI = lv_imgbtn_create(scr, NULL);
buttonXD = lv_imgbtn_create(scr, NULL);
buttonYI = lv_imgbtn_create(scr, NULL);
buttonYD = lv_imgbtn_create(scr, NULL);
buttonZI = lv_imgbtn_create(scr, NULL);
buttonZD = lv_imgbtn_create(scr, NULL);
buttonV = lv_imgbtn_create(scr, NULL);
buttonBack = lv_imgbtn_create(scr, NULL);
lv_obj_set_event_cb_mks(buttonXI, event_handler, ID_M_X_P, "bmp_xAdd.bin", 0);
lv_imgbtn_set_src(buttonXI, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonXI, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonXI, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonXI, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_clear_protect(buttonXI, LV_PROTECT_FOLLOW);
#if 1
lv_obj_set_event_cb_mks(buttonXD, event_handler, ID_M_X_N, "bmp_xDec.bin", 0);
lv_imgbtn_set_src(buttonXD, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonXD, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonXD, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonXD, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonYI, event_handler, ID_M_Y_P, "bmp_yAdd.bin", 0);
lv_imgbtn_set_src(buttonYI, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonYI, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonYI, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonYI, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonYD, event_handler, ID_M_Y_N, "bmp_yDec.bin", 0);
lv_imgbtn_set_src(buttonYD, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonYD, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonYD, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonYD, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonZI, event_handler, ID_M_Z_P, "bmp_zAdd.bin", 0);
lv_imgbtn_set_src(buttonZI, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonZI, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonZI, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonZI, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonZD, event_handler, ID_M_Z_N, "bmp_zDec.bin", 0);
lv_imgbtn_set_src(buttonZD, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonZD, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonZD, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonZD, LV_BTN_STATE_REL, &tft_style_lable_rel);
//lv_obj_set_event_cb_mks(buttonV, event_handler,ID_T_MORE,"bmp_More.bin",0);
lv_imgbtn_set_src(buttonV, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonV, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonV, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonV, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_M_RETURN, "bmp_Return.bin", 0);
lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_lable_rel);
#endif
lv_obj_set_pos(buttonXI, INTERVAL_V, titleHeight);
lv_obj_set_pos(buttonYI, BTN_X_PIXEL + INTERVAL_V * 2, titleHeight);
lv_obj_set_pos(buttonZI, BTN_X_PIXEL * 2 + INTERVAL_V * 3, titleHeight);
lv_obj_set_pos(buttonV, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight);
lv_obj_set_pos(buttonXD, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
lv_obj_set_pos(buttonYD, BTN_X_PIXEL + INTERVAL_V * 2, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
lv_obj_set_pos(buttonZD, BTN_X_PIXEL * 2 + INTERVAL_V * 3, 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*/
lv_btn_set_layout(buttonXI, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonXD, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonYI, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonYD, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonZI, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonZD, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonV, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
lv_obj_t * labelXI = lv_label_create(buttonXI, NULL);
lv_obj_t * labelXD = lv_label_create(buttonXD, NULL);
lv_obj_t * labelYI = lv_label_create(buttonYI, NULL);
lv_obj_t * labelYD = lv_label_create(buttonYD, NULL);
lv_obj_t * labelZI = lv_label_create(buttonZI, NULL);
lv_obj_t * labelZD = lv_label_create(buttonZD, NULL);
labelV = lv_label_create(buttonV, NULL);
lv_obj_t * label_Back = lv_label_create(buttonBack, NULL);
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(labelXI, move_menu.x_add);
lv_obj_align(labelXI, buttonXI, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(labelXD, move_menu.x_dec);
lv_obj_align(labelXD, buttonXD, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(labelYI, move_menu.y_add);
lv_obj_align(labelYI, buttonYI, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(labelYD, move_menu.y_dec);
lv_obj_align(labelYD, buttonYD, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(labelZI, move_menu.z_add);
lv_obj_align(labelZI, buttonZI, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(labelZD, move_menu.z_dec);
lv_obj_align(labelZD, buttonZD, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
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);
}
disp_move_dist();
}
void disp_move_dist() {
//char buf[30] = {0};
if ((int)(10 * uiCfg.move_dist) == 1)
lv_obj_set_event_cb_mks(buttonV, event_handler, ID_M_STEP, "bmp_Step_move0_1.bin", 0);
else if ((int)(10 * uiCfg.move_dist) == 10)
lv_obj_set_event_cb_mks(buttonV, event_handler, ID_M_STEP, "bmp_Step_move1.bin", 0);
else if ((int)(10 * uiCfg.move_dist) == 100)
lv_obj_set_event_cb_mks(buttonV, event_handler, ID_M_STEP, "bmp_Step_move10.bin", 0);
if (gCfgItems.multiple_language != 0) {
if ((int)(10 * uiCfg.move_dist) == 1) {
lv_label_set_text(labelV, move_menu.step_01mm);
lv_obj_align(labelV, buttonV, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
else if ((int)(10 * uiCfg.move_dist) == 10) {
lv_label_set_text(labelV, move_menu.step_1mm);
lv_obj_align(labelV, buttonV, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
else if ((int)(10 * uiCfg.move_dist) == 100) {
lv_label_set_text(labelV, move_menu.step_10mm);
lv_obj_align(labelV, buttonV, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
}
}
void lv_clear_move_motor() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI

View file

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

View file

@ -0,0 +1,322 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI)
#include "lv_conf.h"
#include "draw_ui.h"
//#include "../lvgl/src/lv_objx/lv_imgbtn.h"
//#include "../lvgl/src/lv_objx/lv_img.h"
//#include "../lvgl/src/lv_core/lv_disp.h"
//#include "../lvgl/src/lv_core/lv_refr.h"
#include "../../../../MarlinCore.h"
static lv_obj_t * scr;
#define ID_O_PRE_HEAT 1
#define ID_O_EXTRUCT 2
#define ID_O_MOV 3
#define ID_O_FILAMENT 4
#define ID_O_SPEED 5
#define ID_O_RETURN 6
#define ID_O_FAN 7
#define ID_O_POWER_OFF 8
static lv_obj_t *label_PowerOff;
static lv_obj_t *buttonPowerOff;
static void event_handler(lv_obj_t * obj, lv_event_t event) {
switch (obj->mks_obj_id) {
case ID_O_PRE_HEAT:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
lv_clear_opration();
lv_draw_preHeat();
}
break;
case ID_O_EXTRUCT:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
lv_clear_opration();
lv_draw_extrusion();
}
break;
case ID_O_MOV:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
lv_clear_opration();
lv_draw_move_motor();
}
break;
case ID_O_FILAMENT:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
}
break;
case ID_O_FAN:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
lv_clear_opration();
lv_draw_fan();
}
break;
case ID_O_SPEED:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
lv_clear_opration();
lv_draw_change_speed();
}
break;
case ID_O_RETURN:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
clear_cur_ui();
draw_return_ui();
}
break;
case ID_O_POWER_OFF:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (gCfgItems.finish_power_off == 1) {
gCfgItems.finish_power_off = 0;
lv_obj_set_event_cb_mks(obj, event_handler, ID_O_POWER_OFF, "bmp_Mamual.bin", 0);
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_refresh_ext_draw_pad(label_PowerOff);
update_spi_flash();
}
else {
gCfgItems.finish_power_off = 1;
lv_obj_set_event_cb_mks(obj, event_handler, ID_O_POWER_OFF, "bmp_Auto.bin", 0);
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_refresh_ext_draw_pad(label_PowerOff);
update_spi_flash();
}
}
break;
}
}
void lv_draw_opration(void) {
lv_obj_t *buttonPreHeat, *buttonExtrusion, *buttonSpeed;
lv_obj_t *buttonBack, *buttonFan;
lv_obj_t *labelPreHeat, *labelExtrusion;
lv_obj_t *label_Back, *label_Speed, *label_Fan;
lv_obj_t *buttonMove = NULL, *label_Move = NULL;
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != OPERATE_UI) {
disp_state_stack._disp_index++;
disp_state_stack._disp_state[disp_state_stack._disp_index] = OPERATE_UI;
}
disp_state = OPERATE_UI;
scr = lv_obj_create(NULL, NULL);
lv_obj_set_style(scr, &tft_style_scr);
lv_scr_load(scr);
lv_obj_clean(scr);
lv_obj_t * title = lv_label_create(scr, NULL);
lv_obj_set_style(title, &tft_style_lable_rel);
lv_obj_set_pos(title, TITLE_XPOS, TITLE_YPOS);
lv_label_set_text(title, creat_title_text());
lv_refr_now(lv_refr_get_disp_refreshing());
LV_IMG_DECLARE(bmp_pic);
/*Create an Image button*/
buttonPreHeat = lv_imgbtn_create(scr, NULL);
buttonExtrusion = lv_imgbtn_create(scr, NULL);
buttonFan = lv_imgbtn_create(scr, NULL);
buttonSpeed = lv_imgbtn_create(scr, NULL);
if (uiCfg.print_state != WORKING)
//buttonFilament = lv_imgbtn_create(scr, NULL);
//else
buttonMove = lv_imgbtn_create(scr, NULL);
buttonPowerOff = lv_imgbtn_create(scr, NULL);
buttonBack = lv_imgbtn_create(scr, NULL);
lv_obj_set_event_cb_mks(buttonPreHeat, event_handler, ID_O_PRE_HEAT, "bmp_PreHeat.bin", 0);
lv_imgbtn_set_src(buttonPreHeat, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonPreHeat, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonPreHeat, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonPreHeat, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_clear_protect(buttonPreHeat, LV_PROTECT_FOLLOW);
#if 1
lv_obj_set_event_cb_mks(buttonExtrusion, event_handler, ID_O_EXTRUCT, "bmp_Extruct.bin", 0);
lv_imgbtn_set_src(buttonExtrusion, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonExtrusion, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonExtrusion, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonExtrusion, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonFan, event_handler, ID_O_FAN, "bmp_Fan.bin", 0);
lv_imgbtn_set_src(buttonFan, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonFan, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonFan, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonFan, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonSpeed, event_handler, ID_O_SPEED, "bmp_Speed.bin", 0);
lv_imgbtn_set_src(buttonSpeed, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonSpeed, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonSpeed, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonSpeed, LV_BTN_STATE_REL, &tft_style_lable_rel);
if (uiCfg.print_state != WORKING) {
/*{
lv_obj_set_event_cb_mks(buttonFilament, event_handler,ID_O_FILAMENT,"bmp_Filamentchange.bin",0);
lv_imgbtn_set_src(buttonFilament, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonFilament, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonFilament, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonFilament, LV_BTN_STATE_REL, &tft_style_lable_rel);
}
else*/
lv_obj_set_event_cb_mks(buttonMove, event_handler, ID_O_MOV, "bmp_Mov.bin", 0);
lv_imgbtn_set_src(buttonMove, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonMove, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonMove, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonMove, LV_BTN_STATE_REL, &tft_style_lable_rel);
}
if (gCfgItems.finish_power_off == 1)
lv_obj_set_event_cb_mks(buttonPowerOff, event_handler, ID_O_POWER_OFF, "bmp_Auto.bin", 0);
else
lv_obj_set_event_cb_mks(buttonPowerOff, event_handler, ID_O_POWER_OFF, "bmp_Mamual.bin", 0);
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_style(buttonPowerOff, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonPowerOff, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_O_RETURN, "bmp_Return.bin", 0);
lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_lable_rel);
#endif
lv_obj_set_pos(buttonPreHeat, INTERVAL_V, titleHeight);
lv_obj_set_pos(buttonExtrusion, BTN_X_PIXEL + INTERVAL_V * 2, titleHeight);
lv_obj_set_pos(buttonFan, BTN_X_PIXEL * 2 + INTERVAL_V * 3, titleHeight);
lv_obj_set_pos(buttonSpeed, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight);
if (uiCfg.print_state != WORKING) {
/*{
lv_obj_set_pos(buttonFilament,INTERVAL_V,BTN_Y_PIXEL+INTERVAL_H+titleHeight);
}
else*/
lv_obj_set_pos(buttonMove, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
lv_obj_set_pos(buttonPowerOff, BTN_X_PIXEL + INTERVAL_V * 2, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
}
else {
lv_obj_set_pos(buttonPowerOff, INTERVAL_V, 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*/
lv_btn_set_layout(buttonPreHeat, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonExtrusion, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonFan, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonSpeed, LV_LAYOUT_OFF);
if (uiCfg.print_state != WORKING)
/*{
lv_btn_set_layout(buttonFilament, LV_LAYOUT_OFF);
}
else*/
lv_btn_set_layout(buttonMove, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonPowerOff, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
labelPreHeat = lv_label_create(buttonPreHeat, NULL);
labelExtrusion = lv_label_create(buttonExtrusion, NULL);
label_Fan = lv_label_create(buttonFan, NULL);
label_Speed = lv_label_create(buttonSpeed, NULL);
if (uiCfg.print_state != WORKING)
/*{
label_Filament = lv_label_create(buttonFilament, NULL);
}
else*/
label_Move = lv_label_create(buttonMove, NULL);
label_PowerOff = lv_label_create(buttonPowerOff, NULL);
label_Back = lv_label_create(buttonBack, NULL);
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(labelPreHeat, operation_menu.temp);
lv_obj_align(labelPreHeat, buttonPreHeat, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(labelExtrusion, operation_menu.extr);
lv_obj_align(labelExtrusion, buttonExtrusion, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(label_Fan, operation_menu.fan);
lv_obj_align(label_Fan, buttonFan, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(label_Speed, operation_menu.speed);
lv_obj_align(label_Speed, buttonSpeed, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
if (uiCfg.print_state != WORKING) {
/*{
lv_label_set_text(label_Filament, operation_menu.filament);
lv_obj_align(label_Filament, buttonFilament, LV_ALIGN_IN_BOTTOM_MID,0, BUTTON_TEXT_Y_OFFSET);
}
else*/
lv_label_set_text(label_Move, operation_menu.move);
lv_obj_align(label_Move, buttonMove, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
if (gCfgItems.finish_power_off == 1)
lv_label_set_text(label_PowerOff, printing_more_menu.auto_close);
else
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_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);
}
}
void lv_clear_opration() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI

View file

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

View file

@ -0,0 +1,55 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "../../../../inc/MarlinConfigPre.h"
#if BOTH(TFT_LITTLE_VGL_UI, ADVANCED_PAUSE_FEATURE)
#include "draw_ui.h"
#include "lv_conf.h"
//#include "../lvgl/src/lv_objx/lv_imgbtn.h"
//#include "../lvgl/src/lv_objx/lv_img.h"
//#include "../lvgl/src/lv_core/lv_disp.h"
//#include "../lvgl/src/lv_core/lv_refr.h"
#include "../../../../MarlinCore.h"
#include "../../../../feature/pause.h"
void lv_draw_pause_message(const PauseMessage msg) {
switch (msg) {
case PAUSE_MESSAGE_PAUSING: clear_cur_ui(); lv_draw_dialog(DIALOG_PAUSE_MESSAGE_PAUSING); break;
case PAUSE_MESSAGE_CHANGING: clear_cur_ui(); lv_draw_dialog(DIALOG_PAUSE_MESSAGE_CHANGING); break;
case PAUSE_MESSAGE_UNLOAD: clear_cur_ui(); lv_draw_dialog(DIALOG_PAUSE_MESSAGE_UNLOAD); break;
case PAUSE_MESSAGE_WAITING: clear_cur_ui(); lv_draw_dialog(DIALOG_PAUSE_MESSAGE_WAITING); break;
case PAUSE_MESSAGE_INSERT: clear_cur_ui(); lv_draw_dialog(DIALOG_PAUSE_MESSAGE_INSERT); break;
case PAUSE_MESSAGE_LOAD: clear_cur_ui(); lv_draw_dialog(DIALOG_PAUSE_MESSAGE_LOAD); break;
case PAUSE_MESSAGE_PURGE: clear_cur_ui(); lv_draw_dialog(DIALOG_PAUSE_MESSAGE_PURGE); break;
case PAUSE_MESSAGE_RESUME: clear_cur_ui(); lv_draw_dialog(DIALOG_PAUSE_MESSAGE_RESUME); break;
case PAUSE_MESSAGE_HEAT: clear_cur_ui(); lv_draw_dialog(DIALOG_PAUSE_MESSAGE_HEAT); break;
case PAUSE_MESSAGE_HEATING: clear_cur_ui(); lv_draw_dialog(DIALOG_PAUSE_MESSAGE_HEATING); break;
case PAUSE_MESSAGE_OPTION: pause_menu_response = PAUSE_RESPONSE_WAIT_FOR;
clear_cur_ui(); lv_draw_dialog(DIALOG_PAUSE_MESSAGE_OPTION); break;
case PAUSE_MESSAGE_STATUS:
default: break;
}
}
#endif // TFT_LITTLE_VGL_UI && ADVANCED_PAUSE_FEATURE

View file

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

View file

@ -0,0 +1,392 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI)
#include "lv_conf.h"
#include "draw_ui.h"
//#include "../lvgl/src/lv_objx/lv_imgbtn.h"
//#include "../lvgl/src/lv_objx/lv_img.h"
//#include "../lvgl/src/lv_core/lv_disp.h"
//#include "../lvgl/src/lv_core/lv_refr.h"
#include "../../../../MarlinCore.h"
#include "../../../../module/temperature.h"
static lv_obj_t * scr;
static lv_obj_t *buttoType, *buttonStep;
static lv_obj_t * labelType;
static lv_obj_t * labelStep;
static lv_obj_t * tempText1;
#define ID_P_ADD 1
#define ID_P_DEC 2
#define ID_P_TYPE 3
#define ID_P_STEP 4
#define ID_P_OFF 5
#define ID_P_RETURN 6
static void event_handler(lv_obj_t * obj, lv_event_t event) {
switch (obj->mks_obj_id) {
case ID_P_ADD:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (uiCfg.curTempType == 0) {
thermalManager.temp_hotend[uiCfg.curSprayerChoose].target += uiCfg.stepHeat;
if (uiCfg.curSprayerChoose == 0) {
if ((int)thermalManager.temp_hotend[uiCfg.curSprayerChoose].target > (HEATER_0_MAXTEMP - (WATCH_TEMP_INCREASE + TEMP_HYSTERESIS + 1))) {
thermalManager.temp_hotend[uiCfg.curSprayerChoose].target = (float)HEATER_0_MAXTEMP - (WATCH_TEMP_INCREASE + TEMP_HYSTERESIS + 1);
thermalManager.start_watching_hotend(uiCfg.curSprayerChoose);
}
}
#if !defined(SINGLENOZZLE) && EXTRUDERS >= 2
else if ((int)thermalManager.temp_hotend[uiCfg.curSprayerChoose].target > (HEATER_1_MAXTEMP - (WATCH_TEMP_INCREASE + TEMP_HYSTERESIS + 1))) {
thermalManager.temp_hotend[uiCfg.curSprayerChoose].target = (float)HEATER_1_MAXTEMP - (WATCH_TEMP_INCREASE + TEMP_HYSTERESIS + 1);
thermalManager.start_watching_hotend(uiCfg.curSprayerChoose);
}
#endif
}
#if HAS_HEATED_BED
else {
thermalManager.temp_bed.target += uiCfg.stepHeat;
if ((int)thermalManager.temp_bed.target > BED_MAXTEMP - (WATCH_BED_TEMP_INCREASE + TEMP_BED_HYSTERESIS + 1)) {
thermalManager.temp_bed.target = (float)BED_MAXTEMP - (WATCH_BED_TEMP_INCREASE + TEMP_BED_HYSTERESIS + 1);
thermalManager.start_watching_bed();
}
}
#endif
disp_desire_temp();
}
break;
case ID_P_DEC:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (uiCfg.curTempType == 0) {
if ((int)thermalManager.temp_hotend[uiCfg.curSprayerChoose].target > uiCfg.stepHeat) {
thermalManager.temp_hotend[uiCfg.curSprayerChoose].target -= uiCfg.stepHeat;
thermalManager.start_watching_hotend(uiCfg.curSprayerChoose);
}
else {
thermalManager.temp_hotend[uiCfg.curSprayerChoose].target = (float)0;
thermalManager.start_watching_hotend(uiCfg.curSprayerChoose);
}
}
#if HAS_HEATED_BED
else {
if ((int)thermalManager.temp_bed.target > uiCfg.stepHeat) {
thermalManager.temp_bed.target -= uiCfg.stepHeat;
thermalManager.start_watching_bed();
}
else {
thermalManager.temp_bed.target = (float)0;
thermalManager.start_watching_bed();
}
}
#endif
disp_desire_temp();
}
break;
case ID_P_TYPE:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (uiCfg.curTempType == 0) {
if (EXTRUDERS == 2) {
if (uiCfg.curSprayerChoose == 0) {
uiCfg.curSprayerChoose = 1;
}
else if (uiCfg.curSprayerChoose == 1) {
if (TEMP_SENSOR_BED != 0) {
uiCfg.curTempType = 1;
}
else {
uiCfg.curTempType = 0;
uiCfg.curSprayerChoose = 0;
}
}
}
else if (uiCfg.curSprayerChoose == 0) {
if (TEMP_SENSOR_BED != 0)
uiCfg.curTempType = 1;
else
uiCfg.curTempType = 0;
}
}
else if (uiCfg.curTempType == 1) {
uiCfg.curSprayerChoose = 0;
uiCfg.curTempType = 0;
}
disp_temp_type();
}
break;
case ID_P_STEP:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
switch (uiCfg.stepHeat) {
case 1: uiCfg.stepHeat = 5; break;
case 5: uiCfg.stepHeat = 10; break;
case 10: uiCfg.stepHeat = 1; break;
default: break;
}
disp_step_heat();
}
break;
case ID_P_OFF:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (uiCfg.curTempType == 0) {
thermalManager.temp_hotend[uiCfg.curSprayerChoose].target = (float)0;
thermalManager.start_watching_hotend(uiCfg.curSprayerChoose);
}
#if HAS_HEATED_BED
else {
thermalManager.temp_bed.target = (float)0;
thermalManager.start_watching_bed();
}
#endif
disp_desire_temp();
}
break;
case ID_P_RETURN:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
clear_cur_ui();
draw_return_ui();
}
break;
}
}
void lv_draw_preHeat(void) {
lv_obj_t *buttonAdd, *buttonDec;
lv_obj_t *buttonOff, *buttonBack;
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != PRE_HEAT_UI) {
disp_state_stack._disp_index++;
disp_state_stack._disp_state[disp_state_stack._disp_index] = PRE_HEAT_UI;
}
disp_state = PRE_HEAT_UI;
scr = lv_obj_create(NULL, NULL);
lv_obj_set_style(scr, &tft_style_scr);
lv_scr_load(scr);
lv_obj_clean(scr);
lv_obj_t * title = lv_label_create(scr, NULL);
lv_obj_set_style(title, &tft_style_lable_rel);
lv_obj_set_pos(title, TITLE_XPOS, TITLE_YPOS);
lv_label_set_text(title, creat_title_text());
lv_refr_now(lv_refr_get_disp_refreshing());
LV_IMG_DECLARE(bmp_pic);
/*Create an Image button*/
buttonAdd = lv_imgbtn_create(scr, NULL);
buttonDec = lv_imgbtn_create(scr, NULL);
buttoType = lv_imgbtn_create(scr, NULL);
buttonStep = lv_imgbtn_create(scr, NULL);
buttonOff = lv_imgbtn_create(scr, NULL);
buttonBack = lv_imgbtn_create(scr, NULL);
lv_obj_set_event_cb_mks(buttonAdd, event_handler, ID_P_ADD, "bmp_Add.bin", 0);
lv_imgbtn_set_src(buttonAdd, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonAdd, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonAdd, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonAdd, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_clear_protect(buttonAdd, LV_PROTECT_FOLLOW);
#if 1
lv_obj_set_event_cb_mks(buttonDec, event_handler, ID_P_DEC, "bmp_Dec.bin", 0);
lv_imgbtn_set_src(buttonDec, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonDec, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonDec, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonDec, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_imgbtn_set_src(buttoType, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttoType, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttoType, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttoType, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonStep, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonStep, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonStep, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonOff, event_handler, ID_P_OFF, "bmp_Speed0.bin", 0);
lv_imgbtn_set_src(buttonOff, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonOff, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonOff, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonOff, LV_BTN_STATE_REL, &tft_style_lable_rel);
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);
lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_lable_rel);
#endif
lv_obj_set_pos(buttonAdd, INTERVAL_V, titleHeight);
lv_obj_set_pos(buttonDec, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight);
lv_obj_set_pos(buttoType, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
lv_obj_set_pos(buttonStep, BTN_X_PIXEL + INTERVAL_V * 2, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
lv_obj_set_pos(buttonOff, BTN_X_PIXEL * 2 + INTERVAL_V * 3, 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*/
lv_btn_set_layout(buttonAdd, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonDec, LV_LAYOUT_OFF);
lv_btn_set_layout(buttoType, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonStep, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonOff, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
lv_obj_t * labelAdd = lv_label_create(buttonAdd, NULL);
lv_obj_t * labelDec = lv_label_create(buttonDec, NULL);
labelType = lv_label_create(buttoType, NULL);
labelStep = lv_label_create(buttonStep, NULL);
lv_obj_t * labelOff = lv_label_create(buttonOff, NULL);
lv_obj_t * label_Back = lv_label_create(buttonBack, NULL);
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(labelAdd, preheat_menu.add);
lv_obj_align(labelAdd, buttonAdd, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(labelDec, preheat_menu.dec);
lv_obj_align(labelDec, buttonDec, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(labelOff, preheat_menu.off);
lv_obj_align(labelOff, buttonOff, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
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);
}
disp_temp_type();
disp_step_heat();
tempText1 = lv_label_create(scr, NULL);
lv_obj_set_style(tempText1, &tft_style_lable_rel);
disp_desire_temp();
}
void disp_temp_type() {
if (uiCfg.curTempType == 0) {
if (uiCfg.curSprayerChoose == 1) {
lv_obj_set_event_cb_mks(buttoType, event_handler, ID_P_TYPE, "bmp_Extru2.bin", 0);
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(labelType, preheat_menu.ext2);
lv_obj_align(labelType, buttoType, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
}
else {
lv_obj_set_event_cb_mks(buttoType, event_handler, ID_P_TYPE, "bmp_Extru1.bin", 0);
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(labelType, preheat_menu.ext1);
lv_obj_align(labelType, buttoType, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
}
}
else {
lv_obj_set_event_cb_mks(buttoType, event_handler, ID_P_TYPE, "bmp_Bed.bin", 0);
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(labelType, preheat_menu.hotbed);
lv_obj_align(labelType, buttoType, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
}
}
void disp_desire_temp() {
char buf[20] = {0};
public_buf_l[0] = '\0';
if (uiCfg.curTempType == 0) {
if (uiCfg.curSprayerChoose < 1)
strcat(public_buf_l, preheat_menu.ext1);
else
strcat(public_buf_l, preheat_menu.ext2);
sprintf(buf, preheat_menu.value_state, (int)thermalManager.temp_hotend[uiCfg.curSprayerChoose].celsius, (int)thermalManager.temp_hotend[uiCfg.curSprayerChoose].target);
}
#if HAS_HEATED_BED
else {
strcat(public_buf_l, preheat_menu.hotbed);
sprintf(buf, preheat_menu.value_state, (int)thermalManager.temp_bed.celsius, (int)thermalManager.temp_bed.target);
}
#endif
strcat(public_buf_l, ": ");
strcat(public_buf_l, buf);
lv_label_set_text(tempText1, public_buf_l);
lv_obj_align(tempText1, NULL, LV_ALIGN_CENTER, 0, -50);
}
void disp_step_heat() {
if (uiCfg.stepHeat == 1)
lv_obj_set_event_cb_mks(buttonStep, event_handler, ID_P_STEP, "bmp_Step1_degree.bin", 0);
else if (uiCfg.stepHeat == 5)
lv_obj_set_event_cb_mks(buttonStep, event_handler, ID_P_STEP, "bmp_Step5_degree.bin", 0);
else if (uiCfg.stepHeat == 10)
lv_obj_set_event_cb_mks(buttonStep, event_handler, ID_P_STEP, "bmp_Step10_degree.bin", 0);
if (gCfgItems.multiple_language != 0) {
if (uiCfg.stepHeat == 1) {
lv_label_set_text(labelStep, preheat_menu.step_1c);
lv_obj_align(labelStep, buttonStep, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
else if (uiCfg.stepHeat == 5) {
lv_label_set_text(labelStep, preheat_menu.step_5c);
lv_obj_align(labelStep, buttonStep, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
else if (uiCfg.stepHeat == 10) {
lv_label_set_text(labelStep, preheat_menu.step_10c);
lv_obj_align(labelStep, buttonStep, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
}
}
void lv_clear_preHeat() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI

View file

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

View file

@ -0,0 +1,595 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI)
#include "../../../../MarlinCore.h"
#include "lv_conf.h"
//#include "../lvgl/src/lv_objx/lv_imgbtn.h"
//#include "../lvgl/src/lv_objx/lv_img.h"
//#include "../lvgl/src/lv_core/lv_disp.h"
//#include "../lvgl/src/lv_core/lv_refr.h"
#include "draw_ui.h"
#include "../../../../sd/cardreader.h"
static lv_obj_t * scr;
static lv_obj_t *buttonPageUp, *buttonPageDown, *buttonBack, *buttonGcode[FILE_BTN_CNT];
static lv_obj_t * labelPageUp[FILE_BTN_CNT];
static lv_obj_t *buttonText[FILE_BTN_CNT];
#define ID_P_UP 7
#define ID_P_DOWN 8
#define ID_P_RETURN 9
int8_t curDirLever = 0;
LIST_FILE list_file;
DIR_OFFSET dir_offset[10];
extern uint8_t public_buf[512];
extern char public_buf_m[100];
uint8_t sel_id = 0;
#if ENABLED(SDSUPPORT)
static uint8_t search_file() {
int valid_name_cnt = 0;
//char tmp[SHORT_NEME_LEN*MAX_DIR_LEVEL+1];
list_file.Sd_file_cnt = 0;
//list_file.Sd_file_offset = dir_offset[curDirLever].cur_page_first_offset;
//root2.rewind();
//SERIAL_ECHOLN(list_file.curDirPath);
if (curDirLever != 0) card.cd(list_file.curDirPath);
else card.cdroot(); //while(card.cdup());
const uint16_t fileCnt = card.get_num_Files();
for (uint16_t i = 0; i < fileCnt; i++) {
if (list_file.Sd_file_cnt == list_file.Sd_file_offset) {
const uint16_t nr = SD_ORDER(i, fileCnt);
card.getfilename_sorted(nr);
if (card.flag.filenameIsDir)
/*
SERIAL_ECHOLN(card.longest_filename);
*/
list_file.IsFolder[valid_name_cnt] = 1;
else
//SERIAL_ECHOLN(card.longFilename);
list_file.IsFolder[valid_name_cnt] = 0;
#if 1
//
memset(list_file.file_name[valid_name_cnt], 0, strlen(list_file.file_name[valid_name_cnt]));
strcpy(list_file.file_name[valid_name_cnt], list_file.curDirPath);
strcat(list_file.file_name[valid_name_cnt], "/");
strcat(list_file.file_name[valid_name_cnt], card.filename);
//
memset(list_file.long_name[valid_name_cnt], 0, strlen(list_file.long_name[valid_name_cnt]));
if (card.longFilename[0] == 0)
strncpy(list_file.long_name[valid_name_cnt], card.filename, strlen(card.filename));
else
strncpy(list_file.long_name[valid_name_cnt], card.longFilename, strlen(card.longFilename));
valid_name_cnt++;
if (valid_name_cnt == 1)
dir_offset[curDirLever].cur_page_first_offset = list_file.Sd_file_offset;
if (valid_name_cnt >= FILE_NUM) {
dir_offset[curDirLever].cur_page_last_offset = list_file.Sd_file_offset;
list_file.Sd_file_offset++;
break;
}
list_file.Sd_file_offset++;
#endif
}
list_file.Sd_file_cnt++;
}
//card.closefile(false);
return valid_name_cnt;
}
#endif // SDSUPPORT
uint8_t have_pre_pic(char *path) {
#if ENABLED(SDSUPPORT)
char *ps1, *ps2, *cur_name = strrchr(path, '/');
card.openFileRead(cur_name);
card.read(public_buf, 512);
ps1 = strstr((char *)public_buf, ";simage:");
card.read(public_buf, 512);
ps2 = strstr((char *)public_buf, ";simage:");
if (ps1 || ps2) {
card.closefile();
return 1;
}
card.closefile();
#endif
return 0;
}
LV_IMG_DECLARE(bmp_pic_117x92);
LV_IMG_DECLARE(bmp_pic_100x100);
LV_IMG_DECLARE(bmp_pic);
LV_IMG_DECLARE(bmp_pic_100x40);
static void event_handler(lv_obj_t * obj, lv_event_t event) {
uint8_t i, file_count = 0;
//switch (obj->mks_obj_id)
//{
if (obj->mks_obj_id == ID_P_UP) {
if (event == LV_EVENT_CLICKED) {
}
else if (event == LV_EVENT_RELEASED) {
if (dir_offset[curDirLever].curPage > 0) {
//2015.05.19
list_file.Sd_file_cnt = 0;
if (dir_offset[curDirLever].cur_page_first_offset >= FILE_NUM)
list_file.Sd_file_offset = dir_offset[curDirLever].cur_page_first_offset - FILE_NUM;
#if ENABLED(SDSUPPORT)
file_count = search_file();
#endif
if (file_count != 0) {
dir_offset[curDirLever].curPage--;
lv_obj_del(scr);
disp_gcode_icon(file_count);
}
}
}
}
else if (obj->mks_obj_id == ID_P_DOWN) {
if (event == LV_EVENT_CLICKED) {
}
else if (event == LV_EVENT_RELEASED) {
if (dir_offset[curDirLever].cur_page_last_offset > 0) {
list_file.Sd_file_cnt = 0;
list_file.Sd_file_offset = dir_offset[curDirLever].cur_page_last_offset + 1;
#if ENABLED(SDSUPPORT)
file_count = search_file();
#endif
if (file_count != 0) {
dir_offset[curDirLever].curPage++;
lv_obj_del(scr);
disp_gcode_icon(file_count);
}
if (file_count < FILE_NUM)
dir_offset[curDirLever].cur_page_last_offset = 0;
}
}
}
else if (obj->mks_obj_id == ID_P_RETURN) {
if (event == LV_EVENT_CLICKED) {
}
else if (event == LV_EVENT_RELEASED) {
if (curDirLever > 0) {
int8_t *ch = (int8_t *)strrchr(list_file.curDirPath, '/');
if (ch) {
*ch = 0;
#if ENABLED(SDSUPPORT)
card.cdup();
#endif
dir_offset[curDirLever].curPage = 0;
dir_offset[curDirLever].cur_page_first_offset = 0;
dir_offset[curDirLever].cur_page_last_offset = 0;
curDirLever--;
list_file.Sd_file_offset = dir_offset[curDirLever].cur_page_first_offset;
#if ENABLED(SDSUPPORT)
file_count = search_file();
#endif
lv_obj_del(scr);
disp_gcode_icon(file_count);
}
}
else {
lv_obj_del(scr);
lv_draw_ready_print();
}
}
}
else {
for (i = 0; i < FILE_BTN_CNT; i++) {
if (obj->mks_obj_id == (i + 1)) {
if (event == LV_EVENT_CLICKED) {
}
else if (event == LV_EVENT_RELEASED) {
if (list_file.file_name[i][0] != 0) {
if (list_file.IsFolder[i] == 1) {
memset(list_file.curDirPath, 0, sizeof(list_file.curDirPath));
strcpy(list_file.curDirPath, list_file.file_name[i]);
curDirLever++;
list_file.Sd_file_offset = dir_offset[curDirLever].cur_page_first_offset;
#if ENABLED(SDSUPPORT)
file_count = search_file();
#endif
lv_obj_del(scr);
disp_gcode_icon(file_count);
}
else {
sel_id = i;
lv_obj_del(scr);
lv_draw_dialog(DIALOG_TYPE_PRINT_FILE);
}
break;
}
}
}
}
}
}
void lv_draw_print_file(void) {
//uint8_t i;
uint8_t file_count;
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != PRINT_FILE_UI) {
disp_state_stack._disp_index++;
disp_state_stack._disp_state[disp_state_stack._disp_index] = PRINT_FILE_UI;
}
disp_state = PRINT_FILE_UI;
curDirLever = 0;
dir_offset[curDirLever].curPage = 0;
list_file.Sd_file_offset = 0;
list_file.Sd_file_cnt = 0;
ZERO(dir_offset);
ZERO(list_file.IsFolder);
ZERO(list_file.curDirPath);
list_file.Sd_file_offset = dir_offset[curDirLever].cur_page_first_offset;
#if ENABLED(SDSUPPORT)
card.mount();
file_count = search_file();
#endif
disp_gcode_icon(file_count);
//lv_obj_t * labelPageUp = lv_label_create(buttonPageUp, NULL);
//lv_obj_t * labelPageDown = lv_label_create(buttonPageDown, NULL);
//lv_obj_t * label_Back = lv_label_create(buttonBack, NULL);
/*
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(labelPageUp, tool_menu.preheat);
lv_obj_align(labelPageUp, buttonPageUp, LV_ALIGN_IN_BOTTOM_MID,0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(labelPageDown, tool_menu.extrude);
lv_obj_align(labelPageDown, buttonPageDown, LV_ALIGN_IN_BOTTOM_MID,0, BUTTON_TEXT_Y_OFFSET);
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);
}
*/
}
void disp_gcode_icon(uint8_t file_num) {
uint8_t i;
scr = lv_obj_create(NULL, NULL);
//static lv_style_t tool_style;
lv_obj_set_style(scr, &tft_style_scr);
lv_scr_load(scr);
lv_obj_clean(scr);
lv_obj_t * title = lv_label_create(scr, NULL);
lv_obj_set_style(title, &tft_style_lable_rel);
lv_obj_set_pos(title, TITLE_XPOS, TITLE_YPOS);
lv_label_set_text(title, creat_title_text());
lv_refr_now(lv_refr_get_disp_refreshing());
buttonPageUp = lv_imgbtn_create(scr, NULL);
buttonPageDown = lv_imgbtn_create(scr, NULL);
buttonBack = lv_imgbtn_create(scr, NULL);
lv_obj_set_event_cb_mks(buttonPageUp, event_handler, ID_P_UP, "bmp_pageUp.bin", 0);
lv_imgbtn_set_src(buttonPageUp, LV_BTN_STATE_REL, &bmp_pic_117x92);
lv_imgbtn_set_src(buttonPageUp, LV_BTN_STATE_PR, &bmp_pic_117x92);
lv_imgbtn_set_style(buttonPageUp, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonPageUp, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_clear_protect(buttonPageUp, LV_PROTECT_FOLLOW);
#if 1
lv_obj_set_event_cb_mks(buttonPageDown, event_handler, ID_P_DOWN, "bmp_pageDown.bin", 0);
lv_imgbtn_set_src(buttonPageDown, LV_BTN_STATE_REL, &bmp_pic_117x92);
lv_imgbtn_set_src(buttonPageDown, LV_BTN_STATE_PR, &bmp_pic_117x92);
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_obj_set_event_cb_mks(buttonBack, event_handler, ID_P_RETURN, "bmp_Back.bin", 0);
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_style(buttonBack, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_lable_rel);
#endif
lv_obj_set_pos(buttonPageUp, OTHER_BTN_XPIEL * 3 + INTERVAL_V * 4, titleHeight);
lv_obj_set_pos(buttonPageDown, OTHER_BTN_XPIEL * 3 + INTERVAL_V * 4, titleHeight + OTHER_BTN_YPIEL + INTERVAL_H);
lv_obj_set_pos(buttonBack, OTHER_BTN_XPIEL * 3 + INTERVAL_V * 4, titleHeight + OTHER_BTN_YPIEL * 2 + INTERVAL_H * 2);
/*Create a label on the Image button*/
lv_btn_set_layout(buttonPageUp, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonPageDown, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
for (i = 0; i < FILE_BTN_CNT; i++) {
/*
if(seq) {
j = (FILE_BTN_CNT-1) - i;
back_flg = 1;
}
else {
j = i;
back_flg = 0;
}
*/
if (i >= file_num) break;
#ifdef TFT35
buttonGcode[i] = lv_imgbtn_create(scr, NULL);
lv_imgbtn_set_style(buttonGcode[i], LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonGcode[i], LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_clear_protect(buttonGcode[i], LV_PROTECT_FOLLOW);
lv_btn_set_layout(buttonGcode[i], LV_LAYOUT_OFF);
ZERO(public_buf_m);
cutFileName((char *)list_file.long_name[i], 16, 8, (char *)public_buf_m);
if (list_file.IsFolder[i] == 1) {
lv_obj_set_event_cb_mks(buttonGcode[i], event_handler, (i + 1), "bmp_Dir.bin", 0);
lv_imgbtn_set_src(buttonGcode[i], LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonGcode[i], LV_BTN_STATE_PR, &bmp_pic);
if (i < 3)
lv_obj_set_pos(buttonGcode[i], BTN_X_PIXEL * i + INTERVAL_V * (i + 1), titleHeight);
else
lv_obj_set_pos(buttonGcode[i], BTN_X_PIXEL * (i - 3) + INTERVAL_V * ((i - 3) + 1), BTN_Y_PIXEL + INTERVAL_H + titleHeight);
labelPageUp[i] = lv_label_create(buttonGcode[i], NULL);
lv_obj_set_style(labelPageUp[i], &tft_style_lable_rel);
lv_label_set_text(labelPageUp[i], public_buf_m);
lv_obj_align(labelPageUp[i], buttonGcode[i], LV_ALIGN_IN_BOTTOM_MID, 0, -5);
}
else {
if (have_pre_pic((char *)list_file.file_name[i])) {
lv_obj_set_event_cb_mks(buttonGcode[i], event_handler, (i + 1), list_file.file_name[i], 1);
lv_imgbtn_set_src(buttonGcode[i], LV_BTN_STATE_REL, &bmp_pic_100x100);
lv_imgbtn_set_src(buttonGcode[i], LV_BTN_STATE_PR, &bmp_pic_100x100);
if (i < 3) {
lv_obj_set_pos(buttonGcode[i], BTN_X_PIXEL * i + INTERVAL_V * (i + 1) + FILE_PRE_PIC_X_OFFSET, titleHeight + FILE_PRE_PIC_Y_OFFSET);
buttonText[i] = lv_btn_create(scr, NULL);
//lv_obj_set_event_cb(buttonText[i], event_handler);
lv_btn_set_style(buttonText[i], LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_btn_set_style(buttonText[i], LV_BTN_STATE_REL, &tft_style_lable_rel);
//lv_obj_set_style(buttonText[i], &tft_style_lable_pre);
//lv_obj_set_style(buttonText[i], &tft_style_lable_rel);
lv_obj_clear_protect(buttonText[i], LV_PROTECT_FOLLOW);
lv_btn_set_layout(buttonText[i], LV_LAYOUT_OFF);
//lv_obj_set_event_cb_mks(buttonText[i], event_handler,(i+10),NULL,0);
//lv_imgbtn_set_src(buttonText[i], LV_BTN_STATE_REL, &bmp_pic_100x40);
//lv_imgbtn_set_src(buttonText[i], LV_BTN_STATE_PR, &bmp_pic_100x40);
lv_obj_set_pos(buttonText[i], BTN_X_PIXEL * i + INTERVAL_V * (i + 1) + FILE_PRE_PIC_X_OFFSET, titleHeight + FILE_PRE_PIC_Y_OFFSET + 100);
lv_obj_set_size(buttonText[i], 100, 40);
}
else {
lv_obj_set_pos(buttonGcode[i], BTN_X_PIXEL * (i - 3) + INTERVAL_V * ((i - 3) + 1) + FILE_PRE_PIC_X_OFFSET, BTN_Y_PIXEL + INTERVAL_H + titleHeight + FILE_PRE_PIC_Y_OFFSET);
buttonText[i] = lv_btn_create(scr, NULL);
//lv_obj_set_event_cb(buttonText[i], event_handler);
lv_btn_set_style(buttonText[i], LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_btn_set_style(buttonText[i], LV_BTN_STATE_REL, &tft_style_lable_rel);
//lv_imgbtn_set_style(buttonText[i], LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_clear_protect(buttonText[i], LV_PROTECT_FOLLOW);
lv_btn_set_layout(buttonText[i], LV_LAYOUT_OFF);
//lv_obj_set_event_cb_mks(buttonText[i], event_handler,(i+10),NULL,0);
//lv_imgbtn_set_src(buttonText[i], LV_BTN_STATE_REL, &bmp_pic_100x40);
//lv_imgbtn_set_src(buttonText[i], LV_BTN_STATE_PR, &bmp_pic_100x40);
lv_obj_set_pos(buttonText[i], BTN_X_PIXEL * (i - 3) + INTERVAL_V * ((i - 3) + 1) + FILE_PRE_PIC_X_OFFSET, BTN_Y_PIXEL + INTERVAL_H + titleHeight + FILE_PRE_PIC_Y_OFFSET + 100);
lv_obj_set_size(buttonText[i], 100, 40);
}
labelPageUp[i] = lv_label_create(buttonText[i], NULL);
lv_obj_set_style(labelPageUp[i], &tft_style_lable_rel);
lv_label_set_text(labelPageUp[i], public_buf_m);
lv_obj_align(labelPageUp[i], buttonText[i], LV_ALIGN_IN_BOTTOM_MID, 0, 0);
}
else {
lv_obj_set_event_cb_mks(buttonGcode[i], event_handler, (i + 1), "bmp_File.bin", 0);
lv_imgbtn_set_src(buttonGcode[i], LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonGcode[i], LV_BTN_STATE_PR, &bmp_pic);
if (i < 3)
lv_obj_set_pos(buttonGcode[i], BTN_X_PIXEL * i + INTERVAL_V * (i + 1), titleHeight);
else
lv_obj_set_pos(buttonGcode[i], BTN_X_PIXEL * (i - 3) + INTERVAL_V * ((i - 3) + 1), BTN_Y_PIXEL + INTERVAL_H + titleHeight);
labelPageUp[i] = lv_label_create(buttonGcode[i], NULL);
lv_obj_set_style(labelPageUp[i], &tft_style_lable_rel);
lv_label_set_text(labelPageUp[i], public_buf_m);
lv_obj_align(labelPageUp[i], buttonGcode[i], LV_ALIGN_IN_BOTTOM_MID, 0, -5);
}
}
#else // ifdef TFT35
#endif // ifdef TFT35
}
}
void lv_open_gcode_file(char *path) {
#if ENABLED(SDSUPPORT)
//uint32_t read;
uint32_t *ps4;
int pre_sread_cnt;
char *cur_name;
cur_name = strrchr(path, '/');
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
}
int ascii2dec_test(char *ascii) {
int result = 0;
if (ascii == 0) return 0;
if (*(ascii) >= '0' && *(ascii) <= '9')
result = *(ascii) - '0';
else if (*(ascii) >= 'a' && *(ascii) <= 'f')
result = *(ascii) - 'a' + 0x0a;
else if (*(ascii) >= 'A' && *(ascii) <= 'F')
result = *(ascii) - 'A' + 0x0a;
else
return 0;
return result;
}
void lv_gcode_file_read(uint8_t *data_buf) {
#if ENABLED(SDSUPPORT)
uint16_t i = 0, j = 0, k = 0;
//uint32_t read;
uint16_t row_1 = 0;
char temp_test[200];
while (1) {
card.read(temp_test, 200);
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;
}
k++;
j = 0;
if (k >= 2) {
k = 0;
card.read(temp_test, 9);
break;
}
}
memcpy(data_buf, public_buf, 200);
#endif
}
void lv_close_gcode_file() {TERN_(SDSUPPORT, card.closefile());}
void cutFileName(char *path, int len, int bytePerLine, char *outStr) {
#if _LFN_UNICODE
TCHAR *tmpFile;
TCHAR *strIndex1 = 0, *strIndex2 = 0, *beginIndex;
TCHAR secSeg[10] = {0};
TCHAR gFileTail[4] = {'~', '.', 'g', '\0'};
#else
char *tmpFile;
char *strIndex1 = 0, *strIndex2 = 0, *beginIndex;
char secSeg[10] = {0};
#endif
if (path == 0 || len <= 3 || outStr == 0) return;
tmpFile = path;
#if _LFN_UNICODE
strIndex1 = (WCHAR *)wcsstr((const WCHAR *)tmpFile, (const WCHAR *)'/');
strIndex2 = (WCHAR *)wcsstr((const WCHAR *)tmpFile, (const WCHAR *)'.');
#else
strIndex1 = (char *)strrchr(tmpFile, '/');
strIndex2 = (char *)strrchr(tmpFile, '.');
#endif
beginIndex = (strIndex1 != 0
// && (strIndex2 != 0) && (strIndex1 < strIndex2)
) ? strIndex1 + 1 : tmpFile;
if (strIndex2 == 0 || (strIndex1 > strIndex2)) { // not gcode file
#if _LFN_UNICODE
if (wcslen(beginIndex) > len)
wcsncpy(outStr, beginIndex, len);
else
wcscpy(outStr, beginIndex);
#else
if ((int)strlen(beginIndex) > len)
strncpy(outStr, beginIndex, len);
else
strcpy(outStr, beginIndex);
#endif
}
else { //gcode file
if (strIndex2 - beginIndex > (len - 2)) {
#if _LFN_UNICODE
wcsncpy(outStr, (const WCHAR *)beginIndex, len - 3);
wcscat(outStr, (const WCHAR *)gFileTail);
#else
//strncpy(outStr, beginIndex, len - 3);
strncpy(outStr, beginIndex, len - 4);
strcat(outStr, "~.g");
#endif
}
else {
#if _LFN_UNICODE
wcsncpy(outStr, (const WCHAR *)beginIndex, strIndex2 - beginIndex + 1);
wcscat(outStr, (const WCHAR *)&gFileTail[3]);
#else
strncpy(outStr, beginIndex, strIndex2 - beginIndex + 1);
strcat(outStr, "g");
#endif
}
}
#if _LFN_UNICODE
if (wcslen(outStr) > bytePerLine) {
wcscpy(secSeg, (const WCHAR *)&outStr[bytePerLine]);
outStr[bytePerLine] = '\n';
outStr[bytePerLine + 1] = '\0';
wcscat(outStr, (const WCHAR *)secSeg);
}
#else
if ((int)strlen(outStr) > bytePerLine) {
strcpy(secSeg, &outStr[bytePerLine]);
outStr[bytePerLine] = '\n';
outStr[bytePerLine + 1] = '\0';
strcat(outStr, secSeg);
}
else {
strcat(outStr, "\n");
}
#endif
}
void lv_clear_print_file() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI

View file

@ -0,0 +1,65 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#pragma once
#ifdef __cplusplus
extern "C" { /* C-declarations for C++ */
#endif
typedef struct {
int cur_page_first_offset;
int cur_page_last_offset;
int curPage;
} DIR_OFFSET;
extern DIR_OFFSET dir_offset[10];
#define FILE_NUM 6
#define SHORT_NEME_LEN 13
#define NAME_CUT_LEN 23
#define MAX_DIR_LEVEL 10
typedef struct {
//char longName[FILE_NUM][LONG_FILENAME_LENGTH];
char file_name[FILE_NUM][SHORT_NEME_LEN * MAX_DIR_LEVEL + 1];
char curDirPath[SHORT_NEME_LEN * MAX_DIR_LEVEL + 1];
char long_name[FILE_NUM][SHORT_NEME_LEN * 2 + 1];
char IsFolder[FILE_NUM];
char Sd_file_cnt;
char sd_file_index;
char Sd_file_offset;
} LIST_FILE;
extern LIST_FILE list_file;
extern void disp_gcode_icon(uint8_t file_num);
extern void lv_draw_print_file(void);
extern void lv_open_gcode_file(char *path);
extern void lv_gcode_file_read(uint8_t *data_buf);
extern void lv_close_gcode_file();
extern void cutFileName(char *path, int len, int bytePerLine, char *outStr);
extern int ascii2dec_test(char *ascii);
extern void lv_clear_print_file();
//extern void disp_temp_ready_print();
#ifdef __cplusplus
} /* C-declarations for C++ */
#endif

View file

@ -0,0 +1,435 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI)
#include "lv_conf.h"
#include "draw_ui.h"
//#include "../lvgl/src/lv_objx/lv_imgbtn.h"
//#include "../lvgl/src/lv_objx/lv_img.h"
//#include "../lvgl/src/lv_core/lv_disp.h"
//#include "../lvgl/src/lv_core/lv_refr.h"
#include "../../../../MarlinCore.h"
#include "../../../../module/temperature.h"
#include "../../../../module/motion.h"
#include "../../../../sd/cardreader.h"
#include "../../../../gcode/queue.h"
#if ENABLED(POWER_LOSS_RECOVERY)
#include "../../../../feature/powerloss.h"
#endif
static lv_obj_t * scr;
static lv_obj_t * labelExt1, * labelExt2, * labelFan, * labelZpos, * labelTime;
static lv_obj_t * labelPause, * labelStop, * labelOperat;
static lv_obj_t * bar1;
static lv_obj_t * buttonPause, *buttonOperat, *buttonStop;
#if HAS_HEATED_BED
static lv_obj_t* labelBed;
#endif
#define ID_PAUSE 1
#define ID_STOP 2
#define ID_OPTION 3
lv_style_t lv_bar_style_indic;
uint8_t once_flag = 0;
extern uint32_t To_pre_view;
extern uint8_t flash_preview_begin;
extern uint8_t default_preview_flg;
extern uint8_t gcode_preview_over;
static void event_handler(lv_obj_t * obj, lv_event_t event) {
switch (obj->mks_obj_id) {
case ID_PAUSE:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (gcode_preview_over != 1) {
if (uiCfg.print_state == WORKING) {
//#if ENABLED(PARK_HEAD_ON_PAUSE)
//queue.inject_P(PSTR("M25 P\nM24"));
#if ENABLED(SDSUPPORT)
//queue.inject_P(PSTR("M25\nG91\nG1 Z10\nG90"));
card.pauseSDPrint();
stop_print_time();
uiCfg.print_state = PAUSING;
#endif
lv_obj_set_event_cb_mks(buttonPause, event_handler, ID_PAUSE, "bmp_Pause.bin", 0);
lv_label_set_text(labelPause, printing_menu.resume);
lv_obj_align(labelPause, buttonPause, LV_ALIGN_CENTER, 30, 0);
}
else if (uiCfg.print_state == PAUSED) {
uiCfg.print_state = RESUMING;
//if (IS_SD_PAUSED())queue.inject_P(PSTR("M24"));// queue.inject_P(M24_STR);
lv_obj_set_event_cb_mks(obj, event_handler, ID_PAUSE, "bmp_Resume.bin", 0);
lv_label_set_text(labelPause, printing_menu.pause);
lv_obj_align(labelPause, buttonPause, LV_ALIGN_CENTER, 30, 0);
}
#if ENABLED(POWER_LOSS_RECOVERY)
else if (uiCfg.print_state == REPRINTING) {
uiCfg.print_state = REPRINTED;
lv_obj_set_event_cb_mks(obj, event_handler, ID_PAUSE, "bmp_Resume.bin", 0);
lv_label_set_text(labelPause, printing_menu.pause);
lv_obj_align(labelPause, buttonPause, LV_ALIGN_CENTER, 30, 0);
//recovery.resume();
print_time.minutes = recovery.info.print_job_elapsed / 60;
print_time.seconds = recovery.info.print_job_elapsed % 60;
print_time.hours = print_time.minutes / 60;
}
#endif
}
}
break;
case ID_STOP:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (gcode_preview_over != 1) {
lv_obj_del(scr);
lv_draw_dialog(DIALOG_TYPE_STOP);
}
}
break;
case ID_OPTION:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
if (gcode_preview_over != 1) {
lv_obj_del(scr);
lv_draw_opration();
}
}
break;
}
}
void lv_draw_printing(void) {
lv_obj_t *buttonExt1, *buttonExt2, *buttonFanstate, *buttonZpos, *buttonTime;
TERN_(HAS_HEATED_BED, lv_obj_t * buttonBedstate);
disp_state_stack._disp_index = 0;
ZERO(disp_state_stack._disp_state);
disp_state_stack._disp_state[disp_state_stack._disp_index] = PRINTING_UI;
disp_state = PRINTING_UI;
scr = lv_obj_create(NULL, NULL);
//static lv_style_t tool_style;
lv_obj_set_style(scr, &tft_style_scr);
lv_scr_load(scr);
lv_obj_clean(scr);
lv_obj_t * title = lv_label_create(scr, NULL);
lv_obj_set_style(title, &tft_style_lable_rel);
lv_obj_set_pos(title, TITLE_XPOS, TITLE_YPOS);
lv_label_set_text(title, creat_title_text());
lv_refr_now(lv_refr_get_disp_refreshing());
LV_IMG_DECLARE(bmp_pic_150x80);
LV_IMG_DECLARE(bmp_pic_45x45);
/*Create an Image button*/
buttonExt1 = lv_imgbtn_create(scr, NULL);
if (EXTRUDERS == 2)
buttonExt2 = lv_imgbtn_create(scr, NULL);
#if HAS_HEATED_BED
buttonBedstate = lv_imgbtn_create(scr, NULL);
#endif
buttonFanstate = lv_imgbtn_create(scr, NULL);
buttonZpos = lv_imgbtn_create(scr, NULL);
buttonPause = lv_imgbtn_create(scr, NULL);
buttonStop = lv_imgbtn_create(scr, NULL);
buttonOperat = lv_imgbtn_create(scr, NULL);
buttonTime = lv_imgbtn_create(scr, NULL);
lv_obj_set_event_cb_mks(buttonExt1, event_handler, 0, "bmp_Ext1_state.bin", 0);
lv_imgbtn_set_src(buttonExt1, LV_BTN_STATE_REL, &bmp_pic_45x45);
lv_imgbtn_set_src(buttonExt1, LV_BTN_STATE_PR, &bmp_pic_45x45);
lv_imgbtn_set_style(buttonExt1, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonExt1, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_clear_protect(buttonExt1, LV_PROTECT_FOLLOW);
#if 1
if (EXTRUDERS == 2) {
lv_obj_set_event_cb_mks(buttonExt2, event_handler, 0, "bmp_Ext2_state.bin", 0);
lv_imgbtn_set_src(buttonExt2, LV_BTN_STATE_REL, &bmp_pic_45x45);
lv_imgbtn_set_src(buttonExt2, LV_BTN_STATE_PR, &bmp_pic_45x45);
lv_imgbtn_set_style(buttonExt2, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonExt2, LV_BTN_STATE_REL, &tft_style_lable_rel);
}
#if HAS_HEATED_BED
lv_obj_set_event_cb_mks(buttonBedstate, event_handler, 0, "bmp_Bed_state.bin", 0);
lv_imgbtn_set_src(buttonBedstate, LV_BTN_STATE_REL, &bmp_pic_45x45);
lv_imgbtn_set_src(buttonBedstate, LV_BTN_STATE_PR, &bmp_pic_45x45);
lv_imgbtn_set_style(buttonBedstate, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonBedstate, LV_BTN_STATE_REL, &tft_style_lable_rel);
#endif
lv_obj_set_event_cb_mks(buttonFanstate, event_handler, 0, "bmp_Fan_state.bin", 0);
lv_imgbtn_set_src(buttonFanstate, LV_BTN_STATE_REL, &bmp_pic_45x45);
lv_imgbtn_set_src(buttonFanstate, LV_BTN_STATE_PR, &bmp_pic_45x45);
lv_imgbtn_set_style(buttonFanstate, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonFanstate, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonTime, event_handler, 0, "bmp_Time_state.bin", 0);
lv_imgbtn_set_src(buttonTime, LV_BTN_STATE_REL, &bmp_pic_45x45);
lv_imgbtn_set_src(buttonTime, LV_BTN_STATE_PR, &bmp_pic_45x45);
lv_imgbtn_set_style(buttonTime, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonTime, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonZpos, event_handler, 0, "bmp_Zpos_state.bin", 0);
lv_imgbtn_set_src(buttonZpos, LV_BTN_STATE_REL, &bmp_pic_45x45);
lv_imgbtn_set_src(buttonZpos, LV_BTN_STATE_PR, &bmp_pic_45x45);
lv_imgbtn_set_style(buttonZpos, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonZpos, LV_BTN_STATE_REL, &tft_style_lable_rel);
if (uiCfg.print_state == WORKING)
lv_obj_set_event_cb_mks(buttonPause, event_handler, ID_PAUSE, "bmp_Resume.bin", 0);
else
lv_obj_set_event_cb_mks(buttonPause, event_handler, ID_PAUSE, "bmp_Pause.bin", 0);
lv_imgbtn_set_src(buttonPause, LV_BTN_STATE_REL, &bmp_pic_150x80);
lv_imgbtn_set_src(buttonPause, LV_BTN_STATE_PR, &bmp_pic_150x80);
lv_imgbtn_set_style(buttonPause, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonPause, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonStop, event_handler, ID_STOP, "bmp_Stop.bin", 0);
lv_imgbtn_set_src(buttonStop, LV_BTN_STATE_REL, &bmp_pic_150x80);
lv_imgbtn_set_src(buttonStop, LV_BTN_STATE_PR, &bmp_pic_150x80);
lv_imgbtn_set_style(buttonStop, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonStop, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonOperat, event_handler, ID_OPTION, "bmp_Operate.bin", 0);
lv_imgbtn_set_src(buttonOperat, LV_BTN_STATE_REL, &bmp_pic_150x80);
lv_imgbtn_set_src(buttonOperat, LV_BTN_STATE_PR, &bmp_pic_150x80);
lv_imgbtn_set_style(buttonOperat, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonOperat, LV_BTN_STATE_REL, &tft_style_lable_rel);
#endif
lv_obj_set_pos(buttonExt1, 205, 136);
if (EXTRUDERS == 2)
lv_obj_set_pos(buttonExt2, 350, 136);
#if HAS_HEATED_BED
lv_obj_set_pos(buttonBedstate, 205, 186);
#endif
lv_obj_set_pos(buttonFanstate, 350, 186);
lv_obj_set_pos(buttonTime, 205, 86);
lv_obj_set_pos(buttonZpos, 350, 86);
lv_obj_set_pos(buttonPause, 5, 240);
lv_obj_set_pos(buttonStop, 165, 240);
lv_obj_set_pos(buttonOperat, 325, 240);
/*Create a label on the Image button*/
lv_btn_set_layout(buttonExt1, LV_LAYOUT_OFF);
if (EXTRUDERS == 2)
lv_btn_set_layout(buttonExt2, LV_LAYOUT_OFF);
#if HAS_HEATED_BED
lv_btn_set_layout(buttonBedstate, LV_LAYOUT_OFF);
#endif
lv_btn_set_layout(buttonFanstate, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonZpos, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonPause, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonStop, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonOperat, LV_LAYOUT_OFF);
labelExt1 = lv_label_create(scr, NULL);
lv_obj_set_style(labelExt1, &tft_style_lable_rel);
lv_obj_set_pos(labelExt1, 250, 146);
if (EXTRUDERS == 2) {
labelExt2 = lv_label_create(scr, NULL);
lv_obj_set_style(labelExt2, &tft_style_lable_rel);
lv_obj_set_pos(labelExt2, 395, 146);
}
#if HAS_HEATED_BED
labelBed = lv_label_create(scr, NULL);
lv_obj_set_style(labelBed, &tft_style_lable_rel);
lv_obj_set_pos(labelBed, 250, 196);
#endif
labelFan = lv_label_create(scr, NULL);
lv_obj_set_style(labelFan, &tft_style_lable_rel);
lv_obj_set_pos(labelFan, 395, 196);
labelZpos = lv_label_create(scr, NULL);
lv_obj_set_style(labelZpos, &tft_style_lable_rel);
lv_obj_set_pos(labelZpos, 395, 96);
labelTime = lv_label_create(scr, NULL);
lv_obj_set_style(labelTime, &tft_style_lable_rel);
lv_obj_set_pos(labelTime, 250, 96);
labelPause = lv_label_create(buttonPause, NULL);
labelStop = lv_label_create(buttonStop, NULL);
labelOperat = lv_label_create(buttonOperat, NULL);
if (gCfgItems.multiple_language != 0) {
if (uiCfg.print_state == WORKING)
lv_label_set_text(labelPause, printing_menu.pause);
else
lv_label_set_text(labelPause, printing_menu.resume);
lv_obj_align(labelPause, buttonPause, LV_ALIGN_CENTER, 30, 0);
lv_label_set_text(labelStop, printing_menu.stop);
lv_obj_align(labelStop, buttonStop, LV_ALIGN_CENTER, 30, 0);
lv_label_set_text(labelOperat, printing_menu.option);
lv_obj_align(labelOperat, buttonOperat, LV_ALIGN_CENTER, 30, 0);
}
lv_style_copy(&lv_bar_style_indic, &lv_style_pretty_color);
lv_bar_style_indic.text.color = lv_color_hex3(0xADF);
lv_bar_style_indic.image.color = lv_color_hex3(0xADF);
lv_bar_style_indic.line.color = lv_color_hex3(0xADF);
lv_bar_style_indic.body.main_color = lv_color_hex3(0xADF);
lv_bar_style_indic.body.grad_color = lv_color_hex3(0xADF);
lv_bar_style_indic.body.border.color = lv_color_hex3(0xADF);
bar1 = lv_bar_create(scr, NULL);
lv_obj_set_pos(bar1, 205, 36);
lv_obj_set_size(bar1, 270, 40);
lv_bar_set_style(bar1, LV_BAR_STYLE_INDIC, &lv_bar_style_indic);
lv_bar_set_anim_time(bar1, 1000);
lv_bar_set_value(bar1, 0, LV_ANIM_ON);
disp_ext_temp();
disp_bed_temp();
disp_fan_speed();
disp_print_time();
disp_fan_Zpos();
}
void disp_ext_temp() {
memset(public_buf_l, 0, sizeof(public_buf_l));
sprintf(public_buf_l, printing_menu.temp1, (int)thermalManager.temp_hotend[0].celsius, (int)thermalManager.temp_hotend[0].target);
lv_label_set_text(labelExt1, public_buf_l);
if (EXTRUDERS == 2) {
memset(public_buf_l, 0, sizeof(public_buf_l));
sprintf(public_buf_l, printing_menu.temp1, (int)thermalManager.temp_hotend[1].celsius, (int)thermalManager.temp_hotend[1].target);
lv_label_set_text(labelExt2, public_buf_l);
}
}
void disp_bed_temp() {
#if HAS_HEATED_BED
memset(public_buf_l, 0, sizeof(public_buf_l));
sprintf(public_buf_l, printing_menu.bed_temp, (int)thermalManager.temp_bed.celsius, (int)thermalManager.temp_bed.target);
lv_label_set_text(labelBed, public_buf_l);
#endif
}
void disp_fan_speed() {
memset(public_buf_l, 0, sizeof(public_buf_l));
sprintf(public_buf_l, "%3d", thermalManager.fan_speed[0]);
lv_label_set_text(labelFan, public_buf_l);
}
void disp_print_time() {
memset(public_buf_l, 0, sizeof(public_buf_l));
sprintf(public_buf_l, "%d%d:%d%d:%d%d", print_time.hours / 10, print_time.hours % 10, print_time.minutes / 10, print_time.minutes % 10, print_time.seconds / 10, print_time.seconds % 10);
lv_label_set_text(labelTime, public_buf_l);
}
void disp_fan_Zpos() {
memset(public_buf_l, 0, sizeof(public_buf_l));
sprintf(public_buf_l, "%.3f", current_position[Z_AXIS]);
lv_label_set_text(labelZpos, public_buf_l);
}
void reset_print_time() {
//print_time.days = 0;
print_time.hours = 0;
print_time.minutes = 0;
print_time.seconds = 0;
print_time.ms_10 = 0;
//print_time.start = 1;
}
void start_print_time() { print_time.start = 1; }
void stop_print_time() { print_time.start = 0; }
void setProBarRate() {
int rate;
volatile long long rate_tmp_r;
if (gCfgItems.from_flash_pic != 1) {
#if ENABLED(SDSUPPORT)
rate_tmp_r = (long long)card.getIndex() * 100;
#endif
rate = rate_tmp_r / gCfgItems.curFilesize;
}
else {
#if ENABLED(SDSUPPORT)
rate_tmp_r = (long long)card.getIndex();
#endif
rate = (rate_tmp_r - (PREVIEW_SIZE + To_pre_view)) * 100 / (gCfgItems.curFilesize - (PREVIEW_SIZE + To_pre_view));
}
//gCurFileState.totalSend = rate;
if (rate <= 0) return;
if (disp_state == PRINTING_UI) {
lv_bar_set_value(bar1, rate, LV_ANIM_ON);
if (marlin_state == MF_SD_COMPLETE) {
if (once_flag == 0) {
stop_print_time();
flash_preview_begin = 0;
default_preview_flg = 0;
lv_clear_printing();
lv_draw_dialog(DIALOG_TYPE_FINISH_PRINT);
once_flag = 1;
#if HAS_SUICIDE
if (gCfgItems.finish_power_off == 1)
suicide();
#endif
}
}
}
}
void lv_clear_printing() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI

View file

@ -0,0 +1,52 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#pragma once
#ifdef __cplusplus
extern "C" { /* C-declarations for C++ */
#endif
#define IDLE 0
#define WORKING 1
#define PAUSING 2
#define PAUSED 3
#define REPRINTING 4
#define REPRINTED 5
#define RESUMING 6
#define STOP 7
extern void lv_draw_printing(void);
extern void lv_clear_printing();
extern void disp_ext_temp();
extern void disp_bed_temp();
extern void disp_fan_speed();
extern void disp_print_time();
extern void disp_fan_Zpos();
extern void reset_print_time();
extern void start_print_time();
extern void stop_print_time();
extern void setProBarRate();
//extern void disp_temp_ready_print();
#ifdef __cplusplus
} /* C-declarations for C++ */
#endif

View file

@ -0,0 +1,319 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI)
#include "draw_ready_print.h"
#include "draw_tool.h"
#include "lv_conf.h"
#include "lvgl.h"
//#include "../lvgl/src/lv_objx/lv_imgbtn.h"
//#include "../lvgl/src/lv_objx/lv_img.h"
//#include "../lvgl/src/lv_core/lv_disp.h"
//#include "../lvgl/src/lv_core/lv_refr.h"
#include "tft_lvgl_configuration.h"
#include "mks_hardware_test.h"
#include "draw_ui.h"
#include <stdio.h>
#include "../../../../MarlinCore.h"
#include "../../../../module/temperature.h"
//static lv_obj_t *buttonPrint,*buttonTool,*buttonSet;
static lv_obj_t * scr;
#if ENABLED(MKS_TEST)
uint8_t curent_disp_ui = 0;
#endif
#define ID_TOOL 1
#define ID_SET 2
#define ID_PRINT 3
static void event_handler(lv_obj_t * obj, lv_event_t event) {
switch (obj->mks_obj_id) {
case ID_TOOL:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
#if ENABLED(MKS_TEST)
curent_disp_ui = 2;
#endif
lv_obj_del(scr);
lv_draw_tool();
}
break;
case ID_SET:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
lv_obj_del(scr);
lv_draw_set();
}
break;
case ID_PRINT:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
lv_obj_del(scr);
lv_draw_print_file();
}
break;
}
}
#if ENABLED(MKS_TEST)
lv_obj_t *limit_info, *det_info;
lv_style_t limit_style, det_style;
void disp_Limit_ok() {
limit_style.text.color.full = 0xFFFF;
lv_obj_set_style(limit_info, &limit_style);
lv_label_set_text(limit_info, "Limit:ok");
}
void disp_Limit_error() {
limit_style.text.color.full = 0xF800;
lv_obj_set_style(limit_info, &limit_style);
lv_label_set_text(limit_info, "Limit:error");
}
void disp_det_ok() {
det_style.text.color.full = 0xFFFF;
lv_obj_set_style(det_info, &det_style);
lv_label_set_text(det_info, "det:ok");
}
void disp_det_error() {
det_style.text.color.full = 0xF800;
lv_obj_set_style(det_info, &det_style);
lv_label_set_text(det_info, "det:error");
}
lv_obj_t *e1, *e2, *e3, *bed;
void disp_test() {
char buf[30] = {0};
//lv_obj_t * label_tool2 = lv_label_create(scr, NULL);
//lv_obj_set_pos(label_tool,20,50);
memset(buf, 0, sizeof(buf));
sprintf(buf, "e1:%d", (int)thermalManager.temp_hotend[0].celsius);
lv_label_set_text(e1, buf);
memset(buf, 0, sizeof(buf));
sprintf(buf, "e2:%d", (int)thermalManager.temp_hotend[1].celsius);
lv_label_set_text(e2, buf);
memset(buf, 0, sizeof(buf));
sprintf(buf, "e3:%d", (int)thermalManager.temp_hotend[2].celsius);
lv_label_set_text(e3, buf);
memset(buf, 0, sizeof(buf));
sprintf(buf, "bed:%d", (int)thermalManager.temp_bed.celsius);
lv_label_set_text(bed, buf);
}
#endif // MKS_TEST
void lv_draw_ready_print(void) {
#if ENABLED(MKS_TEST)
char buf[30] = {0};
lv_obj_t *buttonTool;
static lv_style_t style_pr, style_rel;
curent_disp_ui = 1;
scr = lv_obj_create(NULL, NULL);
static lv_style_t ready_style;
lv_style_copy(&ready_style, &lv_style_scr);
//ready_style.body.main_color.full = 0X18C3;
//ready_style.body.grad_color.full = 0X18C3;
ready_style.body.main_color.full = 0X0000;
ready_style.body.grad_color.full = 0X0000;
ready_style.text.color.full = 0Xffff;
lv_obj_set_style(scr, &ready_style);
lv_scr_load(scr);
lv_obj_clean(scr);
//lv_obj_set_hidden(scr,true);
lv_refr_now(lv_refr_get_disp_refreshing());
LV_IMG_DECLARE(bmp_pic);
//LV_IMG_DECLARE(bmp_pic2);
//LV_IMG_DECLARE(bmp_pic3);
//scr = lv_obj_create(NULL, NULL);
//lv_scr_load(scr);
/*Create an Image button*/
buttonTool = lv_imgbtn_create(scr, NULL);
//lv_btn_setting(&style_pr,0x5d8f16,0x5d8f16);
//lv_btn_setting(&style_rel,0x5d8f16,0x5d8f16);
lv_obj_set_event_cb_mks(buttonTool, event_handler, 3, "bmp_Tool.bin", 0);
//lv_imgbtn_set_src_mks(buttonTool, LV_BTN_STATE_REL, &bmp_pic,(uint8_t *)"bmp_tool.bin");
lv_imgbtn_set_src(buttonTool, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonTool, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonTool, LV_BTN_STATE_PR, &style_pr);
lv_imgbtn_set_style(buttonTool, LV_BTN_STATE_REL, &style_rel);
lv_obj_set_pos(buttonTool, 360, 180);
lv_btn_set_layout(buttonTool, LV_LAYOUT_OFF);
lv_obj_t * label_tool = lv_label_create(buttonTool, NULL);
lv_obj_set_pos(label_tool, 30, 100);
lv_label_set_text(label_tool, "Back");
e1 = lv_label_create(scr, NULL);
lv_obj_set_pos(e1, 20, 20);
sprintf(buf, "e1: %d", (int)thermalManager.temp_hotend[0].celsius);
lv_label_set_text(e1, buf);
e2 = lv_label_create(scr, NULL);
lv_obj_set_pos(e2, 20, 45);
sprintf(buf, "e1: %d", (int)thermalManager.temp_hotend[1].celsius);
lv_label_set_text(e2, buf);
e3 = lv_label_create(scr, NULL);
lv_obj_set_pos(e3, 20, 70);
sprintf(buf, "e1: %d", (int)thermalManager.temp_hotend[2].celsius);
lv_label_set_text(e3, buf);
bed = lv_label_create(scr, NULL);
lv_obj_set_pos(bed, 20, 95);
sprintf(buf, "bed: %d", (int)thermalManager.temp_bed.celsius);
lv_label_set_text(bed, buf);
limit_info = lv_label_create(scr, NULL);
lv_style_copy(&limit_style, &lv_style_scr);
limit_style.body.main_color.full = 0X0000;
limit_style.body.grad_color.full = 0X0000;
limit_style.text.color.full = 0Xffff;
lv_obj_set_style(limit_info, &limit_style);
lv_obj_set_pos(limit_info, 20, 120);
lv_label_set_text(limit_info, " ");
det_info = lv_label_create(scr, NULL);
lv_style_copy(&det_style, &lv_style_scr);
det_style.body.main_color.full = 0X0000;
det_style.body.grad_color.full = 0X0000;
det_style.text.color.full = 0Xffff;
lv_obj_set_style(det_info, &det_style);
lv_obj_set_pos(det_info, 20, 145);
lv_label_set_text(det_info, " ");
#else // !MKS_TEST
lv_obj_t *buttonPrint, *buttonTool, *buttonSet;
disp_state_stack._disp_index = 0;
memset(disp_state_stack._disp_state, 0, sizeof(disp_state_stack._disp_state));
disp_state_stack._disp_state[disp_state_stack._disp_index] = PRINT_READY_UI;
disp_state = PRINT_READY_UI;
scr = lv_obj_create(NULL, NULL);
lv_obj_set_style(scr, &tft_style_scr);
lv_scr_load(scr);
lv_obj_clean(scr);
//lv_obj_set_hidden(scr,true);
lv_refr_now(lv_refr_get_disp_refreshing());
LV_IMG_DECLARE(bmp_pic);
//lv_obj_t * title = lv_label_create(scr, NULL);
//lv_obj_set_style(title, &tft_style_lable_rel);
//lv_obj_set_pos(title,TITLE_XPOS,TITLE_YPOS);
//lv_label_set_text(title, creat_title_text());
/*Create an Image button*/
buttonPrint = lv_imgbtn_create(scr, NULL);
buttonTool = 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_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_PR, &bmp_pic);
lv_imgbtn_set_style(buttonPrint, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonPrint, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_clear_protect(buttonPrint, LV_PROTECT_FOLLOW);
#if 1
lv_obj_set_event_cb_mks(buttonSet, event_handler, ID_SET, "bmp_Set.bin", 0);
//lv_imgbtn_set_src_mks(buttonSet, LV_BTN_STATE_REL, &bmp_pic,(uint8_t *)"bmp_set.bin");
lv_imgbtn_set_src(buttonSet, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonSet, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonSet, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonSet, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonTool, event_handler, ID_TOOL, "bmp_Tool.bin", 0);
//lv_imgbtn_set_src_mks(buttonTool, LV_BTN_STATE_REL, &bmp_pic,(uint8_t *)"bmp_tool.bin");
lv_imgbtn_set_src(buttonTool, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonTool, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonTool, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonTool, LV_BTN_STATE_REL, &tft_style_lable_rel);
#endif
lv_obj_set_pos(buttonTool, 20, 90);
lv_obj_set_pos(buttonSet, 180, 90);
lv_obj_set_pos(buttonPrint, 340, 90);
//lv_obj_set_pos(buttonTool,SIMPLE_FIRST_PAGE_GRAP+1,(TFT_HEIGHT-BTN_Y_PIXEL)/2+2);
//lv_obj_set_pos(buttonSet,BTN_X_PIXEL+SIMPLE_FIRST_PAGE_GRAP*2+1,(TFT_HEIGHT-BTN_Y_PIXEL)/2+2);
//lv_obj_set_pos(buttonPrint,BTN_X_PIXEL*2+SIMPLE_FIRST_PAGE_GRAP*3+1,(TFT_HEIGHT-BTN_Y_PIXEL)/2+2);
/*Create a label on the Image button*/
lv_btn_set_layout(buttonPrint, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonSet, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonTool, LV_LAYOUT_OFF);
lv_obj_t * label_print = lv_label_create(buttonPrint, NULL);
lv_obj_t * label_set = lv_label_create(buttonSet, NULL);
lv_obj_t * label_tool = lv_label_create(buttonTool, NULL);
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(label_print, main_menu.print);
lv_obj_align(label_print, buttonPrint, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(label_set, main_menu.set);
lv_obj_align(label_set, buttonSet, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
//lv_label_set_style(label_tool,LV_BTN_STATE_PR,&tft_style_lable_pre);
//lv_label_set_style(label_tool,LV_BTN_STATE_REL,&tft_style_lable_rel);
lv_label_set_text(label_tool, main_menu.tool);
lv_obj_align(label_tool, buttonTool, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
#endif // !MKS_TEST
}
void lv_clear_ready_print() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI

View file

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

View file

@ -0,0 +1,258 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI)
#include "../../../../MarlinCore.h"
#include "draw_ready_print.h"
#include "draw_set.h"
#include "lv_conf.h"
//#include "../lvgl/src/lv_objx/lv_imgbtn.h"
//#include "../lvgl/src/lv_objx/lv_img.h"
//#include "../lvgl/src/lv_core/lv_disp.h"
//#include "../lvgl/src/lv_core/lv_refr.h"
#include "draw_ui.h"
#include "../../../../gcode/queue.h"
static lv_obj_t * scr;
#define ID_S_WIFI 1
#define ID_S_FAN 2
#define ID_S_ABOUT 3
#define ID_S_CONTINUE 4
#define ID_S_MOTOR_OFF 5
#define ID_S_LANGUAGE 6
#define ID_S_RETURN 7
static void event_handler(lv_obj_t * obj, lv_event_t event) {
switch (obj->mks_obj_id) {
case ID_S_WIFI:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
}
break;
case ID_S_FAN:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
lv_obj_del(scr);
lv_draw_fan();
}
break;
case ID_S_ABOUT:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
lv_obj_del(scr);
lv_draw_about();
}
break;
case ID_S_CONTINUE:
break;
case ID_S_MOTOR_OFF:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
#if HAS_SUICIDE
suicide();
#else
queue.enqueue_one_now(PSTR("M84"));
#endif
}
break;
case ID_S_LANGUAGE:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
lv_obj_del(scr);
lv_draw_language();
}
break;
case ID_S_RETURN:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
lv_obj_del(scr);
lv_draw_ready_print();
}
break;
}
}
void lv_draw_set(void) {
lv_obj_t *buttonFan, *buttonAbout;
lv_obj_t *buMotorOff, *buttonLanguage, *buttonBack;
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != SET_UI) {
disp_state_stack._disp_index++;
disp_state_stack._disp_state[disp_state_stack._disp_index] = SET_UI;
}
disp_state = SET_UI;
scr = lv_obj_create(NULL, NULL);
//static lv_style_t tool_style;
lv_obj_set_style(scr, &tft_style_scr);
lv_scr_load(scr);
lv_obj_clean(scr);
lv_obj_t * title = lv_label_create(scr, NULL);
lv_obj_set_style(title, &tft_style_lable_rel);
lv_obj_set_pos(title, TITLE_XPOS, TITLE_YPOS);
lv_label_set_text(title, creat_title_text());
lv_refr_now(lv_refr_get_disp_refreshing());
LV_IMG_DECLARE(bmp_pic);
/*Create an Image button*/
//buttonWifi = lv_imgbtn_create(scr, NULL);
buttonFan = lv_imgbtn_create(scr, NULL);
buttonAbout = lv_imgbtn_create(scr, NULL);
//buttonContinue = lv_imgbtn_create(scr, NULL);
buMotorOff = lv_imgbtn_create(scr, NULL);
buttonLanguage = lv_imgbtn_create(scr, NULL);
buttonBack = lv_imgbtn_create(scr, NULL);
//lv_obj_set_event_cb_mks(buttonWifi, event_handler,ID_S_WIFI,"bmp_Wifi.bin",0);
//lv_imgbtn_set_src(buttonWifi, LV_BTN_STATE_REL, &bmp_pic);
//lv_imgbtn_set_src(buttonWifi, LV_BTN_STATE_PR, &bmp_pic);
//lv_imgbtn_set_style(buttonWifi, LV_BTN_STATE_PR, &tft_style_lable_pre);
//lv_imgbtn_set_style(buttonWifi, LV_BTN_STATE_REL, &tft_style_lable_rel);
//lv_obj_clear_protect(buttonWifi, LV_PROTECT_FOLLOW);
#if 1
lv_obj_set_event_cb_mks(buttonFan, event_handler, ID_S_FAN, "bmp_Fan.bin", 0);
lv_imgbtn_set_src(buttonFan, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonFan, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonFan, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonFan, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonAbout, event_handler, ID_S_ABOUT, "bmp_About.bin", 0);
lv_imgbtn_set_src(buttonAbout, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonAbout, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonAbout, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonAbout, LV_BTN_STATE_REL, &tft_style_lable_rel);
//lv_obj_set_event_cb_mks(buttonContinue, event_handler,ID_S_CONTINUE,"bmp_Breakpoint.bin",0);
//lv_imgbtn_set_src(buttonContinue, LV_BTN_STATE_REL, &bmp_pic);
//lv_imgbtn_set_src(buttonContinue, LV_BTN_STATE_PR, &bmp_pic);
//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);
#if HAS_SUICIDE
lv_obj_set_event_cb_mks(buMotorOff, event_handler, ID_S_MOTOR_OFF, "bmp_Mamual.bin", 0);
#else
lv_obj_set_event_cb_mks(buMotorOff, event_handler, ID_S_MOTOR_OFF, "bmp_Motor_off.bin", 0);
#endif
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_style(buMotorOff, LV_BTN_STATE_PR, &tft_style_lable_pre);
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);
lv_imgbtn_set_src(buttonLanguage, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonLanguage, LV_BTN_STATE_PR, &bmp_pic);
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);
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_PR, &bmp_pic);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_lable_rel);
#endif
/*lv_obj_set_pos(buttonWifi,INTERVAL_V,titleHeight);
lv_obj_set_pos(buttonFan,BTN_X_PIXEL+INTERVAL_V*2,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(buMotorOff,INTERVAL_V, BTN_Y_PIXEL+INTERVAL_H+titleHeight);
lv_obj_set_pos(buttonLanguage,BTN_X_PIXEL+INTERVAL_V*2,BTN_Y_PIXEL+INTERVAL_H+titleHeight);
lv_obj_set_pos(buttonBack,BTN_X_PIXEL*3+INTERVAL_V*4, BTN_Y_PIXEL+INTERVAL_H+titleHeight);*/
//lv_obj_set_pos(buttonWifi,INTERVAL_V,titleHeight);
lv_obj_set_pos(buttonFan, BTN_X_PIXEL + INTERVAL_V * 2, 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(buMotorOff, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight);
lv_obj_set_pos(buttonLanguage, INTERVAL_V, 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*/
//lv_btn_set_layout(buttonWifi, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonFan, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonAbout, LV_LAYOUT_OFF);
//lv_btn_set_layout(buttonContinue, LV_LAYOUT_OFF);
lv_btn_set_layout(buMotorOff, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonLanguage, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
//lv_obj_t * labelWifi= lv_label_create(buttonWifi, NULL);
lv_obj_t * labelFan = lv_label_create(buttonFan, 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_MotorOff = lv_label_create(buMotorOff, NULL);
lv_obj_t * label_Language = lv_label_create(buttonLanguage, NULL);
lv_obj_t * label_Back = lv_label_create(buttonBack, NULL);
if (gCfgItems.multiple_language != 0) {
//lv_label_set_text(labelWifi, set_menu.wifi);
//lv_obj_align(labelWifi, buttonWifi, LV_ALIGN_IN_BOTTOM_MID,0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(labelFan, set_menu.fan);
lv_obj_align(labelFan, buttonFan, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(label_About, set_menu.about);
lv_obj_align(label_About, buttonAbout, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
//lv_label_set_text(label_Continue, set_menu.breakpoint);
//lv_obj_align(label_Continue, buttonContinue, LV_ALIGN_IN_BOTTOM_MID,0, BUTTON_TEXT_Y_OFFSET);
#if HAS_SUICIDE
lv_label_set_text(label_MotorOff, set_menu.shutdown);
#else
lv_label_set_text(label_MotorOff, set_menu.motoroff);
#endif
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);
lv_obj_align(label_Language, buttonLanguage, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
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);
}
}
void lv_clear_set() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI

View file

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

View file

@ -0,0 +1,270 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI)
#include "lv_conf.h"
#include "draw_ui.h"
//#include "../lvgl/src/lv_objx/lv_imgbtn.h"
//#include "../lvgl/src/lv_objx/lv_img.h"
//#include "../lvgl/src/lv_core/lv_disp.h"
//#include "../lvgl/src/lv_core/lv_refr.h"
#include "../../../../MarlinCore.h"
#include "../../../../gcode/queue.h"
//static lv_obj_t *buttonMoveZ,*buttonTest,*buttonZ0,*buttonStop,*buttonReturn;
static lv_obj_t * scr;
#if ENABLED(MKS_TEST)
extern uint8_t curent_disp_ui;
#endif
#define ID_T_PRE_HEAT 1
#define ID_T_EXTRUCT 2
#define ID_T_MOV 3
#define ID_T_HOME 4
#define ID_T_LEVELING 5
#define ID_T_FILAMENT 6
#define ID_T_MORE 7
#define ID_T_RETURN 8
static void event_handler(lv_obj_t * obj, lv_event_t event) {
switch (obj->mks_obj_id) {
case ID_T_PRE_HEAT:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
lv_clear_tool();
lv_draw_preHeat();
}
break;
case ID_T_EXTRUCT:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
lv_clear_tool();
lv_draw_extrusion();
}
break;
case ID_T_MOV:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
lv_clear_tool();
lv_draw_move_motor();
}
break;
case ID_T_HOME:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
lv_clear_tool();
lv_draw_home();
}
break;
case ID_T_LEVELING:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
#if ENABLED(AUTO_BED_LEVELING_BILINEAR)
queue.enqueue_one_P(PSTR("G28"));
queue.enqueue_one_P(PSTR("G29"));
#else
uiCfg.leveling_first_time = 1;
lv_clear_tool();
lv_draw_manualLevel();
#endif
}
break;
case ID_T_FILAMENT: break;
case ID_T_MORE: break;
case ID_T_RETURN:
if (event == LV_EVENT_CLICKED) {
// nothing to do
}
else if (event == LV_EVENT_RELEASED) {
TERN_(MKS_TEST, curent_disp_ui = 1);
lv_obj_del(scr);
lv_draw_ready_print();
}
break;
}
}
void lv_draw_tool(void) {
lv_obj_t *buttonPreHeat, *buttonExtrusion, *buttonMove, *buttonHome, *buttonLevel;
lv_obj_t *buttonBack;
if (disp_state_stack._disp_state[disp_state_stack._disp_index] != TOOL_UI) {
disp_state_stack._disp_index++;
disp_state_stack._disp_state[disp_state_stack._disp_index] = TOOL_UI;
}
disp_state = TOOL_UI;
scr = lv_obj_create(NULL, NULL);
//static lv_style_t tool_style;
lv_obj_set_style(scr, &tft_style_scr);
lv_scr_load(scr);
lv_obj_clean(scr);
lv_obj_t * title = lv_label_create(scr, NULL);
lv_obj_set_style(title, &tft_style_lable_rel);
lv_obj_set_pos(title, TITLE_XPOS, TITLE_YPOS);
lv_label_set_text(title, creat_title_text());
lv_refr_now(lv_refr_get_disp_refreshing());
LV_IMG_DECLARE(bmp_pic);
/*Create an Image button*/
buttonPreHeat = lv_imgbtn_create(scr, NULL);
buttonExtrusion = lv_imgbtn_create(scr, NULL);
buttonMove = lv_imgbtn_create(scr, NULL);
buttonHome = lv_imgbtn_create(scr, NULL);
buttonLevel = lv_imgbtn_create(scr, NULL);
//buttonFilament = lv_imgbtn_create(scr, NULL);
//buttonMore = lv_imgbtn_create(scr, NULL);
buttonBack = lv_imgbtn_create(scr, NULL);
lv_obj_set_event_cb_mks(buttonPreHeat, event_handler, ID_T_PRE_HEAT, "bmp_PreHeat.bin", 0);
lv_imgbtn_set_src(buttonPreHeat, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonPreHeat, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonPreHeat, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonPreHeat, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_clear_protect(buttonPreHeat, LV_PROTECT_FOLLOW);
#if 1
lv_obj_set_event_cb_mks(buttonExtrusion, event_handler, ID_T_EXTRUCT, "bmp_Extruct.bin", 0);
lv_imgbtn_set_src(buttonExtrusion, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonExtrusion, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonExtrusion, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonExtrusion, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonMove, event_handler, ID_T_MOV, "bmp_Mov.bin", 0);
lv_imgbtn_set_src(buttonMove, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonMove, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonMove, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonMove, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonHome, event_handler, ID_T_HOME, "bmp_Zero.bin", 0);
lv_imgbtn_set_src(buttonHome, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonHome, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonHome, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonHome, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonLevel, event_handler, ID_T_LEVELING, "bmp_Leveling.bin", 0);
lv_imgbtn_set_src(buttonLevel, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonLevel, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonLevel, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonLevel, LV_BTN_STATE_REL, &tft_style_lable_rel);
//lv_obj_set_event_cb_mks(buttonFilament, event_handler,ID_T_FILAMENT,"bmp_Filamentchange.bin",0);
//lv_imgbtn_set_src(buttonFilament, LV_BTN_STATE_REL, &bmp_pic);
//lv_imgbtn_set_src(buttonFilament, LV_BTN_STATE_PR, &bmp_pic);
//lv_imgbtn_set_style(buttonFilament, LV_BTN_STATE_PR, &tft_style_lable_pre);
//lv_imgbtn_set_style(buttonFilament, LV_BTN_STATE_REL, &tft_style_lable_rel);
//lv_obj_set_event_cb_mks(buttonMore, event_handler,ID_T_MORE,"bmp_More.bin",0);
//lv_imgbtn_set_src(buttonMore, LV_BTN_STATE_REL, &bmp_pic);
//lv_imgbtn_set_src(buttonMore, LV_BTN_STATE_PR, &bmp_pic);
//lv_imgbtn_set_style(buttonMore, LV_BTN_STATE_PR, &tft_style_lable_pre);
//lv_imgbtn_set_style(buttonMore, LV_BTN_STATE_REL, &tft_style_lable_rel);
lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_T_RETURN, "bmp_Return.bin", 0);
lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic);
lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_lable_pre);
lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_lable_rel);
#endif
lv_obj_set_pos(buttonPreHeat, INTERVAL_V, titleHeight);
lv_obj_set_pos(buttonExtrusion, BTN_X_PIXEL + INTERVAL_V * 2, titleHeight);
lv_obj_set_pos(buttonMove, BTN_X_PIXEL * 2 + INTERVAL_V * 3, titleHeight);
lv_obj_set_pos(buttonHome, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight);
lv_obj_set_pos(buttonLevel, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
//lv_obj_set_pos(buttonFilament,BTN_X_PIXEL+INTERVAL_V*2,BTN_Y_PIXEL+INTERVAL_H+titleHeight);
//lv_obj_set_pos(buttonMore,BTN_X_PIXEL*2+INTERVAL_V*3, 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*/
lv_btn_set_layout(buttonPreHeat, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonExtrusion, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonMove, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonHome, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonLevel, LV_LAYOUT_OFF);
//lv_btn_set_layout(buttonFilament, LV_LAYOUT_OFF);
//lv_btn_set_layout(buttonMore, LV_LAYOUT_OFF);
lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
lv_obj_t * labelPreHeat = lv_label_create(buttonPreHeat, NULL);
lv_obj_t * labelExtrusion = lv_label_create(buttonExtrusion, NULL);
lv_obj_t * label_Move = lv_label_create(buttonMove, NULL);
lv_obj_t * label_Home = lv_label_create(buttonHome, NULL);
lv_obj_t * label_Level = lv_label_create(buttonLevel, NULL);
//lv_obj_t * label_Filament = lv_label_create(buttonFilament, NULL);
//lv_obj_t * label_More = lv_label_create(buttonMore, NULL);
lv_obj_t * label_Back = lv_label_create(buttonBack, NULL);
if (gCfgItems.multiple_language != 0) {
lv_label_set_text(labelPreHeat, tool_menu.preheat);
lv_obj_align(labelPreHeat, buttonPreHeat, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(labelExtrusion, tool_menu.extrude);
lv_obj_align(labelExtrusion, buttonExtrusion, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(label_Move, tool_menu.move);
lv_obj_align(label_Move, buttonMove, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
lv_label_set_text(label_Home, tool_menu.home);
lv_obj_align(label_Home, buttonHome, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
/*
if (gCfgItems.leveling_mode != 2) {
lv_label_set_text(label_Level, gCfgItems.leveling_mode == 1 ? tool_menu.autoleveling : tool_menu.leveling);
lv_obj_align(label_Level, buttonLevel, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
*/
lv_label_set_text(label_Level, tool_menu.TERN(AUTO_BED_LEVELING_BILINEAR, autoleveling, leveling));
lv_obj_align(label_Level, buttonLevel, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
//lv_label_set_text(label_Filament, tool_menu.filament);
//lv_obj_align(label_Filament, buttonFilament, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
//lv_label_set_text(label_More, tool_menu.more);
//lv_obj_align(label_More, buttonMore, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
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);
}
}
void lv_clear_tool() { lv_obj_del(scr); }
#endif // TFT_LITTLE_VGL_UI

View file

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

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,229 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#pragma once
#ifdef __cplusplus
extern "C" { /* C-declarations for C++ */
#endif
#include <stdint.h>
#include <string.h>
#include "lvgl.h"
#include "inc/tft_multi_language.h"
#include "inc/draw_ready_print.h"
#include "inc/draw_language.h"
#include "inc/draw_set.h"
#include "inc/draw_tool.h"
#include "inc/draw_print_file.h"
#include "inc/draw_dialog.h"
#include "inc/draw_printing.h"
#include "inc/draw_opration.h"
#include "inc/draw_preHeat.h"
#include "inc/draw_extrusion.h"
#include "inc/draw_home.h"
#include "inc/draw_move_motor.h"
#include "inc/draw_fan.h"
#include "inc/draw_about.h"
#include "inc/draw_change_speed.h"
#include "inc/draw_manuaLevel.h"
#include "inc/draw_error_message.h"
#include "inc/printer_opration.h"
#define TFT35
#ifdef TFT35
#define TFT_WIDTH 480
#define TFT_HEIGHT 320
#define titleHeight 36 // TFT_screen.title_high
#define INTERVAL_H 2 // TFT_screen.gap_h // 2
#define INTERVAL_V 2 // TFT_screen.gap_v // 2
#define BTN_X_PIXEL 117 // TFT_screen.btn_x_pixel
#define BTN_Y_PIXEL 140 // TFT_screen.btn_y_pixel
#define SIMPLE_FIRST_PAGE_GRAP 30
#define BUTTON_TEXT_Y_OFFSET -20
#define TITLE_XPOS 3 //TFT_screen.title_xpos
#define TITLE_YPOS 5 //TFT_screen.title_ypos
#define FILE_BTN_CNT 6
#define OTHER_BTN_XPIEL 117
#define OTHER_BTN_YPIEL 92
#define FILE_PRE_PIC_X_OFFSET 8
#define FILE_PRE_PIC_Y_OFFSET 0
#define PREVIEW_LITTLE_PIC_SIZE 40910//400*100+9*101+1
#define PREVIEW_SIZE 202720//(PREVIEW_LITTLE_PIC_SIZE+800*200+201*9+1)
#define GCFG_FLAG_VALUE 0xEE
#else
#define TFT_WIDTH 320
#define TFT_HEIGHT 240
#endif
extern char public_buf_m[100];
extern char public_buf_l[30];
typedef struct {
uint8_t spi_flash_flag;
uint8_t multiple_language;
uint8_t language;
uint8_t leveling_mode;
uint8_t from_flash_pic;
uint8_t finish_power_off;
uint8_t pause_reprint;
uint32_t curFilesize;
} CFG_ITMES;
typedef struct {
uint8_t curTempType : 1,
curSprayerChoose : 3,
stepHeat : 4;
uint8_t leveling_first_time : 1;
uint8_t extruStep;
uint8_t extruSpeed;
uint8_t print_state;
uint8_t stepPrintSpeed;
uint8_t waitEndMoves;
uint16_t moveSpeed;
float move_dist;
} UI_CFG;
typedef enum {
MAIN_UI,
PRINT_READY_UI,
PRINT_FILE_UI,
PRINTING_UI,
MOVE_MOTOR_UI,
OPERATE_UI,
PAUSE_UI,
EXTRUSION_UI,
FAN_UI,
PRE_HEAT_UI,
CHANGE_SPEED_UI,
TEMP_UI,
SET_UI,
ZERO_UI,
SPRAYER_UI,
MACHINE_UI,
LANGUAGE_UI,
ABOUT_UI,
LOG_UI,
DISK_UI,
CALIBRATE_UI,
DIALOG_UI,
WIFI_UI,
MORE_UI,
FILETRANSFER_UI,
FILETRANSFERSTATE_UI,
PRINT_MORE_UI,
FILAMENTCHANGE_UI,
LEVELING_UI,
MESHLEVELING_UI,
BIND_UI,
ZOFFSET_UI,
TOOL_UI,
HARDWARE_TEST_UI,
WIFI_LIST_UI,
KEY_BOARD_UI,
TIPS_UI,
MACHINE_PARA_UI,
MACHINE_SETTINGS_UI,
TEMPERATURE_SETTINGS_UI,
MOTOR_SETTINGS_UI,
MACHINETYPE_UI,
STROKE_UI,
HOME_DIR_UI,
ENDSTOP_TYPE_UI,
FILAMENT_SETTINGS_UI,
LEVELING_SETTIGNS_UI,
LEVELING_PARA_UI,
DELTA_LEVELING_PARA_UI,
XYZ_LEVELING_PARA_UI,
MAXFEEDRATE_UI,
STEPS_UI,
ACCELERATION_UI,
JERK_UI,
MOTORDIR_UI,
HOMESPEED_UI,
NOZZLE_CONFIG_UI,
HOTBED_CONFIG_UI,
ADVANCED_UI,
DOUBLE_Z_UI,
ENABLE_INVERT_UI,
NUMBER_KEY_UI,
BABY_STEP_UI,
ERROR_MESSAGE_UI
} DISP_STATE;
typedef struct {
DISP_STATE _disp_state[100];
int _disp_index;
} DISP_STATE_STACK;
typedef struct {
int16_t days;
uint16_t hours;
uint8_t minutes;
volatile int8_t seconds;
int8_t ms_10;
int8_t start;
} PRINT_TIME;
extern PRINT_TIME print_time;
extern CFG_ITMES gCfgItems;
extern UI_CFG uiCfg;
extern DISP_STATE disp_state;
extern DISP_STATE last_disp_state;
extern DISP_STATE_STACK disp_state_stack;
extern lv_style_t tft_style_scr;
extern lv_style_t tft_style_lable_pre;
extern lv_style_t tft_style_lable_rel;
extern void gCfgItems_init();
extern void ui_cfg_init();
extern void tft_style_init();
extern char *creat_title_text(void);
extern void preview_gcode_prehandle(char *path);
extern void update_spi_flash();
extern void disp_pre_gcode(int xpos_pixel, int ypos_pixel);
extern void GUI_RefreshPage();
extern void clear_cur_ui();
extern void draw_return_ui();
extern void sd_detection();
extern void gCfg_to_spiFlah();
extern void print_time_count();
extern void LV_TASK_HANDLER();
#ifdef __cplusplus
} /* C-declarations for C++ */
#endif

View file

@ -0,0 +1,111 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI)
#include "../../../../MarlinCore.h"
#include "lvgl.h"
#include "pic_manager.h"
typedef struct {
uint16_t min;
uint16_t max;
uint8_t bpp;
uint8_t reserved[3];
} x_header_t;
typedef struct {
uint32_t pos;
} x_table_t;
typedef struct {
uint8_t adv_w;
uint8_t box_w;
} glyph_dsc_t;
static x_header_t __g_xbf_hd = { .min = 0, .max = 0, .bpp = 0 };
static uint8_t __g_font_buf[75];
static uint8_t *__user_font_getdata(int offset, int size) {
//memset(__g_font_buf,0,sizeof(__g_font_buf));
get_spi_flash_data((char *)__g_font_buf, offset, size);
return __g_font_buf;
//return &buf_test[offset];
}
static const uint8_t * __user_font_get_bitmap(const lv_font_t * font, uint32_t unicode_letter) {
if (__g_xbf_hd.max == 0) {
uint8_t *p = __user_font_getdata(0, sizeof(x_header_t));
memcpy(&__g_xbf_hd, p, sizeof(x_header_t));
}
if (unicode_letter > __g_xbf_hd.max || unicode_letter < __g_xbf_hd.min)
return NULL;
uint32_t unicode_offset = sizeof(x_header_t) + (unicode_letter - __g_xbf_hd.min) * 4;
uint32_t *p_pos = (uint32_t *)__user_font_getdata(unicode_offset, 4);
if (p_pos[0] != 0) {
uint32_t pos = p_pos[0];
//glyph_dsc_t * gdsc = (glyph_dsc_t*)__user_font_getdata(pos, 2);
__user_font_getdata(pos, 2);
//return __user_font_getdata(pos+2, gdsc->box_w*__g_xbf_hd.bpp/8);
return __user_font_getdata(pos + 2, sizeof(__g_font_buf));
}
return NULL;
}
static bool __user_font_get_glyph_dsc(const lv_font_t * font, lv_font_glyph_dsc_t * dsc_out, uint32_t unicode_letter, uint32_t unicode_letter_next) {
if (__g_xbf_hd.max == 0) {
uint8_t *p = __user_font_getdata(0, sizeof(x_header_t));
memcpy(&__g_xbf_hd, p, sizeof(x_header_t));
}
if (unicode_letter > __g_xbf_hd.max || unicode_letter < __g_xbf_hd.min)
return NULL;
uint32_t unicode_offset = sizeof(x_header_t) + (unicode_letter - __g_xbf_hd.min) * 4;
uint32_t *p_pos = (uint32_t *)__user_font_getdata(unicode_offset, 4);
if (p_pos[0] != 0) {
glyph_dsc_t * gdsc = (glyph_dsc_t*)__user_font_getdata(p_pos[0], 2);
dsc_out->adv_w = gdsc->adv_w;
dsc_out->box_h = font->line_height;
dsc_out->box_w = gdsc->box_w;
dsc_out->ofs_x = 0;
dsc_out->ofs_y = 0;
dsc_out->bpp = __g_xbf_hd.bpp;
return true;
}
return false;
}
/*lv_font_t gb2312_puhui32 = {
.get_glyph_bitmap = __user_font_get_bitmap,
.get_glyph_dsc = __user_font_get_glyph_dsc,
.line_height = 25,
.base_line = 0,
};*/
lv_font_t gb2312_puhui32;
void init_gb2312_font() {
gb2312_puhui32.get_glyph_bitmap = __user_font_get_bitmap;
gb2312_puhui32.get_glyph_dsc = __user_font_get_glyph_dsc;
gb2312_puhui32.line_height = 25;
gb2312_puhui32.base_line = 0;
}
#endif // TFT_LITTLE_VGL_UI

View file

@ -0,0 +1,594 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI)
#include "tft_lvgl_configuration.h"
#include "lvgl.h"
#include "draw_ready_print.h"
#include "W25Qxx.h"
#include "pic_manager.h"
#include "mks_hardware_test.h"
#include "../../../../MarlinCore.h"
#include "../../../../module/temperature.h"
#include "../../../../feature/touch/xpt2046.h"
#if ENABLED(MKS_TEST)
extern uint8_t curent_disp_ui;
uint8_t pw_det_sta, pw_off_sta, mt_det_sta, mt_det2_sta, mt_det3_sta;
uint8_t endstopx1_sta, endstopx2_sta, endstopy1_sta, endstopy2_sta, endstopz1_sta, endstopz2_sta;
void test_gpio_readlevel_L() {
volatile uint32_t itest;
WRITE(WIFI_IO2_PIN, HIGH);
itest = 10000;
while (itest--);
pw_det_sta = (READ(POWER_LOSS_PIN) == 0);
pw_off_sta = (READ(PS_ON_PIN) == 0);
mt_det_sta = (READ(FIL_RUNOUT_PIN) == 0);
mt_det2_sta = (READ(FIL_RUNOUT_2_PIN) == 0);
mt_det3_sta = (READ(FIL_RUNOUT_3_PIN) == 0);
endstopx1_sta = (READ(X_MIN_PIN) == 0);
endstopx2_sta = (READ(X_MAX_PIN) == 0);
endstopy1_sta = (READ(Y_MIN_PIN) == 0);
endstopy2_sta = (READ(Y_MAX_PIN) == 0);
endstopz1_sta = (READ(Z_MIN_PIN) == 0);
endstopz2_sta = (READ(Z_MAX_PIN) == 0);
}
void test_gpio_readlevel_H() {
volatile uint32_t itest;
WRITE(WIFI_IO2_PIN, LOW);
itest = 10000;
while (itest--);
pw_det_sta = (READ(POWER_LOSS_PIN) == 1);
pw_off_sta = (READ(PS_ON_PIN) == 1);
mt_det_sta = (READ(FIL_RUNOUT_PIN) == 1);
mt_det2_sta = (READ(FIL_RUNOUT_2_PIN) == 1);
mt_det3_sta = (READ(FIL_RUNOUT_3_PIN) == 1);
endstopx1_sta = (READ(X_MIN_PIN) == 1);
endstopx2_sta = (READ(X_MAX_PIN) == 1);
endstopy1_sta = (READ(Y_MIN_PIN) == 1);
endstopy2_sta = (READ(Y_MAX_PIN) == 1);
endstopz1_sta = (READ(Z_MIN_PIN) == 1);
endstopz2_sta = (READ(Z_MAX_PIN) == 1);
}
void init_Tst_GPIO() {
SET_INPUT_PULLUP(X_MIN_PIN);
SET_INPUT_PULLUP(X_MAX_PIN);
SET_INPUT_PULLUP(Y_MIN_PIN);
SET_INPUT_PULLUP(Y_MAX_PIN);
SET_INPUT_PULLUP(Z_MIN_PIN);
SET_INPUT_PULLUP(Z_MAX_PIN);
SET_OUTPUT(WIFI_IO2_PIN);
SET_INPUT_PULLUP(FIL_RUNOUT_PIN);
SET_INPUT_PULLUP(FIL_RUNOUT_2_PIN);
SET_INPUT_PULLUP(FIL_RUNOUT_3_PIN);
SET_INPUT_PULLUP(POWER_LOSS_PIN);
SET_INPUT_PULLUP(PS_ON_PIN);
SET_INPUT_PULLUP(SERVO0_PIN);
SET_OUTPUT(E0_ENABLE_PIN);
SET_OUTPUT(X_ENABLE_PIN);
WRITE(X_ENABLE_PIN, LOW);
WRITE(Y_ENABLE_PIN, LOW);
WRITE(Z_ENABLE_PIN, LOW);
WRITE(E0_ENABLE_PIN, LOW);
WRITE(E1_ENABLE_PIN, LOW);
WRITE(E2_ENABLE_PIN, LOW);
}
void mks_test_beeper() {
WRITE(BEEPER_PIN, HIGH);
delay(100);
WRITE(BEEPER_PIN, LOW);
delay(100);
}
void Test_GPIO() {
init_Tst_GPIO();
test_gpio_readlevel_L();
test_gpio_readlevel_H();
test_gpio_readlevel_L();
if ((pw_det_sta == 1) && (mt_det_sta == 1) && (mt_det2_sta == 1) && (mt_det3_sta == 1)) {
if (curent_disp_ui == 1) disp_det_ok();
}
else if (curent_disp_ui == 1) disp_det_error();
if ((endstopx1_sta == 1)
&& (endstopx2_sta == 1)
&& (endstopy1_sta == 1)
&& (endstopy2_sta == 1)
&& (endstopz1_sta == 1)
&& (endstopz2_sta == 1)
) {
if (curent_disp_ui == 1) disp_Limit_ok();
}
else if (curent_disp_ui == 1)
disp_Limit_error();
//mks_test_beeper();
}
void mks_test() {
if (millis() % 2000 < 1000) {
WRITE(X_DIR_PIN, LOW);
WRITE(Y_DIR_PIN, LOW);
WRITE(Z_DIR_PIN, LOW);
WRITE(E0_DIR_PIN, LOW);
WRITE(E1_DIR_PIN, LOW);
WRITE(E2_DIR_PIN, LOW);
thermalManager.fan_speed[0] = 255;
WRITE(HEATER_2_PIN, HIGH); // HE2
WRITE(HEATER_1_PIN, HIGH); // HE1
WRITE(HEATER_0_PIN, HIGH); // HE0
WRITE(HEATER_BED_PIN, HIGH); // HOT-BED
}
else {
WRITE(X_DIR_PIN, HIGH);
WRITE(Y_DIR_PIN, HIGH);
WRITE(Z_DIR_PIN, HIGH);
WRITE(E0_DIR_PIN, HIGH);
WRITE(E1_DIR_PIN, HIGH);
WRITE(E2_DIR_PIN, HIGH);
thermalManager.fan_speed[0] = 0;
WRITE(HEATER_2_PIN, LOW); // HE2
WRITE(HEATER_1_PIN, LOW); // HE1
WRITE(HEATER_0_PIN, LOW); // HE0
WRITE(HEATER_BED_PIN, LOW); // HOT-BED
}
if ((endstopx1_sta == 1) && (endstopx2_sta == 1)
&& (endstopy1_sta == 1) && (endstopy2_sta == 1)
&& (endstopz1_sta == 1) && (endstopz2_sta == 1)
) {
}
else {
mks_test_beeper();
}
if (curent_disp_ui == 1)
disp_test();
}
#endif // MKS_TEST
static const uint16_t ASCII_Table_16x24[] PROGMEM = {
// Space ' '
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// '!'
0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0000, 0x0000,
0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// '"'
0x0000, 0x0000, 0x00CC, 0x00CC, 0x00CC, 0x00CC, 0x00CC, 0x00CC,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// '#'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0C60, 0x0C60,
0x0C60, 0x0630, 0x0630, 0x1FFE, 0x1FFE, 0x0630, 0x0738, 0x0318,
0x1FFE, 0x1FFE, 0x0318, 0x0318, 0x018C, 0x018C, 0x018C, 0x0000,
// '$'
0x0000, 0x0080, 0x03E0, 0x0FF8, 0x0E9C, 0x1C8C, 0x188C, 0x008C,
0x0098, 0x01F8, 0x07E0, 0x0E80, 0x1C80, 0x188C, 0x188C, 0x189C,
0x0CB8, 0x0FF0, 0x03E0, 0x0080, 0x0080, 0x0000, 0x0000, 0x0000,
// '%'
0x0000, 0x0000, 0x0000, 0x180E, 0x0C1B, 0x0C11, 0x0611, 0x0611,
0x0311, 0x0311, 0x019B, 0x018E, 0x38C0, 0x6CC0, 0x4460, 0x4460,
0x4430, 0x4430, 0x4418, 0x6C18, 0x380C, 0x0000, 0x0000, 0x0000,
// '&'
0x0000, 0x01E0, 0x03F0, 0x0738, 0x0618, 0x0618, 0x0330, 0x01F0,
0x00F0, 0x00F8, 0x319C, 0x330E, 0x1E06, 0x1C06, 0x1C06, 0x3F06,
0x73FC, 0x21F0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// "'"
0x0000, 0x0000, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// '('
0x0000, 0x0200, 0x0300, 0x0180, 0x00C0, 0x00C0, 0x0060, 0x0060,
0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,
0x0060, 0x0060, 0x00C0, 0x00C0, 0x0180, 0x0300, 0x0200, 0x0000,
// ')'
0x0000, 0x0020, 0x0060, 0x00C0, 0x0180, 0x0180, 0x0300, 0x0300,
0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600,
0x0300, 0x0300, 0x0180, 0x0180, 0x00C0, 0x0060, 0x0020, 0x0000,
// '*'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00C0, 0x00C0,
0x06D8, 0x07F8, 0x01E0, 0x0330, 0x0738, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// '+'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0180,
0x0180, 0x0180, 0x0180, 0x3FFC, 0x3FFC, 0x0180, 0x0180, 0x0180,
0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// ','
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0180, 0x0180, 0x0100, 0x0100, 0x0080, 0x0000, 0x0000,
// '-'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x07E0, 0x07E0, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// '.'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// '/'
0x0000, 0x0C00, 0x0C00, 0x0600, 0x0600, 0x0600, 0x0300, 0x0300,
0x0300, 0x0380, 0x0180, 0x0180, 0x0180, 0x00C0, 0x00C0, 0x00C0,
0x0060, 0x0060, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// '0'
0x0000, 0x03E0, 0x07F0, 0x0E38, 0x0C18, 0x180C, 0x180C, 0x180C,
0x180C, 0x180C, 0x180C, 0x180C, 0x180C, 0x180C, 0x0C18, 0x0E38,
0x07F0, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// '1'
0x0000, 0x0100, 0x0180, 0x01C0, 0x01F0, 0x0198, 0x0188, 0x0180,
0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// '2'
0x0000, 0x03E0, 0x0FF8, 0x0C18, 0x180C, 0x180C, 0x1800, 0x1800,
0x0C00, 0x0600, 0x0300, 0x0180, 0x00C0, 0x0060, 0x0030, 0x0018,
0x1FFC, 0x1FFC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// '3'
0x0000, 0x01E0, 0x07F8, 0x0E18, 0x0C0C, 0x0C0C, 0x0C00, 0x0600,
0x03C0, 0x07C0, 0x0C00, 0x1800, 0x1800, 0x180C, 0x180C, 0x0C18,
0x07F8, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// '4'
0x0000, 0x0C00, 0x0E00, 0x0F00, 0x0F00, 0x0D80, 0x0CC0, 0x0C60,
0x0C60, 0x0C30, 0x0C18, 0x0C0C, 0x3FFC, 0x3FFC, 0x0C00, 0x0C00,
0x0C00, 0x0C00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// '5'
0x0000, 0x0FF8, 0x0FF8, 0x0018, 0x0018, 0x000C, 0x03EC, 0x07FC,
0x0E1C, 0x1C00, 0x1800, 0x1800, 0x1800, 0x180C, 0x0C1C, 0x0E18,
0x07F8, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// '6'
0x0000, 0x07C0, 0x0FF0, 0x1C38, 0x1818, 0x0018, 0x000C, 0x03CC,
0x0FEC, 0x0E3C, 0x1C1C, 0x180C, 0x180C, 0x180C, 0x1C18, 0x0E38,
0x07F0, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// '7'
0x0000, 0x1FFC, 0x1FFC, 0x0C00, 0x0600, 0x0600, 0x0300, 0x0380,
0x0180, 0x01C0, 0x00C0, 0x00E0, 0x0060, 0x0060, 0x0070, 0x0030,
0x0030, 0x0030, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// '8'
0x0000, 0x03E0, 0x07F0, 0x0E38, 0x0C18, 0x0C18, 0x0C18, 0x0638,
0x07F0, 0x07F0, 0x0C18, 0x180C, 0x180C, 0x180C, 0x180C, 0x0C38,
0x0FF8, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// '9'
0x0000, 0x03E0, 0x07F0, 0x0E38, 0x0C1C, 0x180C, 0x180C, 0x180C,
0x1C1C, 0x1E38, 0x1BF8, 0x19E0, 0x1800, 0x0C00, 0x0C00, 0x0E1C,
0x07F8, 0x01F0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// ':'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0180,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// ';'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0180,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0180, 0x0180, 0x0100, 0x0100, 0x0080, 0x0000, 0x0000, 0x0000,
// '<'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x1000, 0x1C00, 0x0F80, 0x03E0, 0x00F8, 0x0018, 0x00F8, 0x03E0,
0x0F80, 0x1C00, 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// '='
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x1FF8, 0x0000, 0x0000, 0x0000, 0x1FF8, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// '>'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0008, 0x0038, 0x01F0, 0x07C0, 0x1F00, 0x1800, 0x1F00, 0x07C0,
0x01F0, 0x0038, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// '?'
0x0000, 0x03E0, 0x0FF8, 0x0C18, 0x180C, 0x180C, 0x1800, 0x0C00,
0x0600, 0x0300, 0x0180, 0x00C0, 0x00C0, 0x00C0, 0x0000, 0x0000,
0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// '@'
0x0000, 0x0000, 0x07E0, 0x1818, 0x2004, 0x29C2, 0x4A22, 0x4411,
0x4409, 0x4409, 0x4409, 0x2209, 0x1311, 0x0CE2, 0x4002, 0x2004,
0x1818, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'A'
0x0000, 0x0380, 0x0380, 0x06C0, 0x06C0, 0x06C0, 0x0C60, 0x0C60,
0x1830, 0x1830, 0x1830, 0x3FF8, 0x3FF8, 0x701C, 0x600C, 0x600C,
0xC006, 0xC006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'B'
0x0000, 0x03FC, 0x0FFC, 0x0C0C, 0x180C, 0x180C, 0x180C, 0x0C0C,
0x07FC, 0x0FFC, 0x180C, 0x300C, 0x300C, 0x300C, 0x300C, 0x180C,
0x1FFC, 0x07FC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'C'
0x0000, 0x07C0, 0x1FF0, 0x3838, 0x301C, 0x700C, 0x6006, 0x0006,
0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x6006, 0x700C, 0x301C,
0x1FF0, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'D'
0x0000, 0x03FE, 0x0FFE, 0x0E06, 0x1806, 0x1806, 0x3006, 0x3006,
0x3006, 0x3006, 0x3006, 0x3006, 0x3006, 0x1806, 0x1806, 0x0E06,
0x0FFE, 0x03FE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'E'
0x0000, 0x3FFC, 0x3FFC, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C,
0x1FFC, 0x1FFC, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C,
0x3FFC, 0x3FFC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'F'
0x0000, 0x3FF8, 0x3FF8, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
0x1FF8, 0x1FF8, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
0x0018, 0x0018, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'G'
0x0000, 0x0FE0, 0x3FF8, 0x783C, 0x600E, 0xE006, 0xC007, 0x0003,
0x0003, 0xFE03, 0xFE03, 0xC003, 0xC007, 0xC006, 0xC00E, 0xF03C,
0x3FF8, 0x0FE0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'H'
0x0000, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C,
0x3FFC, 0x3FFC, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C,
0x300C, 0x300C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'I'
0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'J'
0x0000, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0600,
0x0600, 0x0600, 0x0600, 0x0600, 0x0600, 0x0618, 0x0618, 0x0738,
0x03F0, 0x01E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'K'
0x0000, 0x3006, 0x1806, 0x0C06, 0x0606, 0x0306, 0x0186, 0x00C6,
0x0066, 0x0076, 0x00DE, 0x018E, 0x0306, 0x0606, 0x0C06, 0x1806,
0x3006, 0x6006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'L'
0x0000, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018,
0x1FF8, 0x1FF8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'M'
0x0000, 0xE00E, 0xF01E, 0xF01E, 0xF01E, 0xD836, 0xD836, 0xD836,
0xD836, 0xCC66, 0xCC66, 0xCC66, 0xC6C6, 0xC6C6, 0xC6C6, 0xC6C6,
0xC386, 0xC386, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'N'
0x0000, 0x300C, 0x301C, 0x303C, 0x303C, 0x306C, 0x306C, 0x30CC,
0x30CC, 0x318C, 0x330C, 0x330C, 0x360C, 0x360C, 0x3C0C, 0x3C0C,
0x380C, 0x300C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'O'
0x0000, 0x07E0, 0x1FF8, 0x381C, 0x700E, 0x6006, 0xC003, 0xC003,
0xC003, 0xC003, 0xC003, 0xC003, 0xC003, 0x6006, 0x700E, 0x381C,
0x1FF8, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'P'
0x0000, 0x0FFC, 0x1FFC, 0x380C, 0x300C, 0x300C, 0x300C, 0x300C,
0x180C, 0x1FFC, 0x07FC, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C,
0x000C, 0x000C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'Q'
0x0000, 0x07E0, 0x1FF8, 0x381C, 0x700E, 0x6006, 0xE003, 0xC003,
0xC003, 0xC003, 0xC003, 0xC003, 0xE007, 0x6306, 0x3F0E, 0x3C1C,
0x3FF8, 0xF7E0, 0xC000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'R'
0x0000, 0x0FFE, 0x1FFE, 0x3806, 0x3006, 0x3006, 0x3006, 0x3806,
0x1FFE, 0x07FE, 0x0306, 0x0606, 0x0C06, 0x1806, 0x1806, 0x3006,
0x3006, 0x6006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'S'
0x0000, 0x03E0, 0x0FF8, 0x0C1C, 0x180C, 0x180C, 0x000C, 0x001C,
0x03F8, 0x0FE0, 0x1E00, 0x3800, 0x3006, 0x3006, 0x300E, 0x1C1C,
0x0FF8, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'T'
0x0000, 0x7FFE, 0x7FFE, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'U'
0x0000, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C,
0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x300C, 0x1818,
0x1FF8, 0x07E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'V'
0x0000, 0x6003, 0x3006, 0x3006, 0x3006, 0x180C, 0x180C, 0x180C,
0x0C18, 0x0C18, 0x0E38, 0x0630, 0x0630, 0x0770, 0x0360, 0x0360,
0x01C0, 0x01C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'W'
0x0000, 0x6003, 0x61C3, 0x61C3, 0x61C3, 0x3366, 0x3366, 0x3366,
0x3366, 0x3366, 0x3366, 0x1B6C, 0x1B6C, 0x1B6C, 0x1A2C, 0x1E3C,
0x0E38, 0x0E38, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'X'
0x0000, 0xE00F, 0x700C, 0x3018, 0x1830, 0x0C70, 0x0E60, 0x07C0,
0x0380, 0x0380, 0x03C0, 0x06E0, 0x0C70, 0x1C30, 0x1818, 0x300C,
0x600E, 0xE007, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'Y'
0x0000, 0xC003, 0x6006, 0x300C, 0x381C, 0x1838, 0x0C30, 0x0660,
0x07E0, 0x03C0, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'Z'
0x0000, 0x7FFC, 0x7FFC, 0x6000, 0x3000, 0x1800, 0x0C00, 0x0600,
0x0300, 0x0180, 0x00C0, 0x0060, 0x0030, 0x0018, 0x000C, 0x0006,
0x7FFE, 0x7FFE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// '['
0x0000, 0x03E0, 0x03E0, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060,
0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060,
0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x03E0, 0x03E0, 0x0000,
// '\'
0x0000, 0x0030, 0x0030, 0x0060, 0x0060, 0x0060, 0x00C0, 0x00C0,
0x00C0, 0x01C0, 0x0180, 0x0180, 0x0180, 0x0300, 0x0300, 0x0300,
0x0600, 0x0600, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// ']'
0x0000, 0x03E0, 0x03E0, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x0300,
0x0300, 0x0300, 0x0300, 0x0300, 0x0300, 0x03E0, 0x03E0, 0x0000,
// '^'
0x0000, 0x0000, 0x01C0, 0x01C0, 0x0360, 0x0360, 0x0360, 0x0630,
0x0630, 0x0C18, 0x0C18, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// '_'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// '''
0x0000, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'a'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03F0, 0x07F8,
0x0C1C, 0x0C0C, 0x0F00, 0x0FF0, 0x0CF8, 0x0C0C, 0x0C0C, 0x0F1C,
0x0FF8, 0x18F0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'b'
0x0000, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x03D8, 0x0FF8,
0x0C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x0C38,
0x0FF8, 0x03D8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'c'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03C0, 0x07F0,
0x0E30, 0x0C18, 0x0018, 0x0018, 0x0018, 0x0018, 0x0C18, 0x0E30,
0x07F0, 0x03C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'd'
0x0000, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x1BC0, 0x1FF0,
0x1C30, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1C30,
0x1FF0, 0x1BC0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'e'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03C0, 0x0FF0,
0x0C30, 0x1818, 0x1FF8, 0x1FF8, 0x0018, 0x0018, 0x1838, 0x1C30,
0x0FF0, 0x07C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'f'
0x0000, 0x0F80, 0x0FC0, 0x00C0, 0x00C0, 0x00C0, 0x07F0, 0x07F0,
0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'g'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0DE0, 0x0FF8,
0x0E18, 0x0C0C, 0x0C0C, 0x0C0C, 0x0C0C, 0x0C0C, 0x0C0C, 0x0E18,
0x0FF8, 0x0DE0, 0x0C00, 0x0C0C, 0x061C, 0x07F8, 0x01F0, 0x0000,
// 'h'
0x0000, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x07D8, 0x0FF8,
0x1C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818,
0x1818, 0x1818, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'i'
0x0000, 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x00C0, 0x00C0,
0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'j'
0x0000, 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x00C0, 0x00C0,
0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00F8, 0x0078, 0x0000,
// 'k'
0x0000, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x0C0C, 0x060C,
0x030C, 0x018C, 0x00CC, 0x006C, 0x00FC, 0x019C, 0x038C, 0x030C,
0x060C, 0x0C0C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'l'
0x0000, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'm'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3C7C, 0x7EFF,
0xE3C7, 0xC183, 0xC183, 0xC183, 0xC183, 0xC183, 0xC183, 0xC183,
0xC183, 0xC183, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'n'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0798, 0x0FF8,
0x1C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818,
0x1818, 0x1818, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'o'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03C0, 0x0FF0,
0x0C30, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x0C30,
0x0FF0, 0x03C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'p'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03D8, 0x0FF8,
0x0C38, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x0C38,
0x0FF8, 0x03D8, 0x0018, 0x0018, 0x0018, 0x0018, 0x0018, 0x0000,
// 'q'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1BC0, 0x1FF0,
0x1C30, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1C30,
0x1FF0, 0x1BC0, 0x1800, 0x1800, 0x1800, 0x1800, 0x1800, 0x0000,
// 'r'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x07B0, 0x03F0,
0x0070, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030,
0x0030, 0x0030, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 's'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03E0, 0x03F0,
0x0E38, 0x0C18, 0x0038, 0x03F0, 0x07C0, 0x0C00, 0x0C18, 0x0E38,
0x07F0, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 't'
0x0000, 0x0000, 0x0080, 0x00C0, 0x00C0, 0x00C0, 0x07F0, 0x07F0,
0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
0x07C0, 0x0780, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'u'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1818, 0x1818,
0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1818, 0x1C38,
0x1FF0, 0x19E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'v'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x180C, 0x0C18,
0x0C18, 0x0C18, 0x0630, 0x0630, 0x0630, 0x0360, 0x0360, 0x0360,
0x01C0, 0x01C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'w'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x41C1, 0x41C1,
0x61C3, 0x6363, 0x6363, 0x6363, 0x3636, 0x3636, 0x3636, 0x1C1C,
0x1C1C, 0x1C1C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'x'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x381C, 0x1C38,
0x0C30, 0x0660, 0x0360, 0x0360, 0x0360, 0x0360, 0x0660, 0x0C30,
0x1C38, 0x381C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// 'y'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3018, 0x1830,
0x1830, 0x1870, 0x0C60, 0x0C60, 0x0CE0, 0x06C0, 0x06C0, 0x0380,
0x0380, 0x0380, 0x0180, 0x0180, 0x01C0, 0x00F0, 0x0070, 0x0000,
// 'z'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1FFC, 0x1FFC,
0x0C00, 0x0600, 0x0300, 0x0180, 0x00C0, 0x0060, 0x0030, 0x0018,
0x1FFC, 0x1FFC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
// '{'
0x0000, 0x0300, 0x0180, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0,
0x00C0, 0x0060, 0x0060, 0x0030, 0x0060, 0x0040, 0x00C0, 0x00C0,
0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x0180, 0x0300, 0x0000, 0x0000,
// '|'
0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0000,
// '}'
0x0000, 0x0060, 0x00C0, 0x01C0, 0x0180, 0x0180, 0x0180, 0x0180,
0x0180, 0x0300, 0x0300, 0x0600, 0x0300, 0x0100, 0x0180, 0x0180,
0x0180, 0x0180, 0x0180, 0x0180, 0x00C0, 0x0060, 0x0000, 0x0000,
// '~'
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x10F0, 0x1FF8, 0x0F08, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
};
void disp_char_1624(uint16_t x, uint16_t y, uint8_t c, uint16_t charColor, uint16_t bkColor) {
for (uint16_t i = 0; i < 24; i++) {
const uint16_t tmp_char = pgm_read_word(&ASCII_Table_16x24[((c - 0x20) * 24) + i]);
for (uint16_t j = 0; j < 16; j++)
tft_set_point(x + j, y + i, ((tmp_char >> j) & 0x01) ? charColor : bkColor);
}
}
void disp_string(uint16_t x, uint16_t y, const char * string, uint16_t charColor, uint16_t bkColor) {
while (*string != '\0') {
disp_char_1624(x, y, *string, charColor, bkColor);
string++;
x += 16;
}
}
//static lv_obj_t * scr_test;
void disp_pic_update() {
LCD_Clear(0x0000);
disp_string(120, 150, "PIC Updating...", 0xFFFF, 0x0000);
}
void disp_font_update() {
LCD_Clear(0x0000);
disp_string(120, 150, "FONT Updating...", 0xFFFF, 0x0000);
}
#endif // TFT_LITTLE_VGL_UI

View file

@ -0,0 +1,31 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#pragma once
#include "lvgl.h"
void Test_GPIO();
void disp_char_1624(uint16_t x, uint16_t y, uint8_t c, uint16_t charColor, uint16_t bkColor);
void disp_string(uint16_t x, uint16_t y, const char * string, uint16_t charColor, uint16_t bkColor);
void mks_test();
void disp_pic_update();
void disp_font_update();

View file

@ -0,0 +1,736 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI)
#include "../../../../MarlinCore.h"
//#include "type_define.h"
#include "string.h"
#include "pic_manager.h"
#include "W25Qxx.h"
#include "../../../../sd/cardreader.h"
#include "draw_ready_print.h"
#include "mks_hardware_test.h"
//#include "gui.h"
//#include "spi_flash.h"
//uint8_t DMA_ERRO_FLAG;
extern uint16_t DeviceCode;
extern unsigned char bmp_public_buf[17 * 1024];
#if ENABLED(SDSUPPORT)
extern char *createFilename(char * const buffer, const dir_t &p);
#endif
/*void SPI_FLASH_BufferRead(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t NumByteToRead) {}*/
uint32_t lv_get_pic_addr(uint8_t *Pname) {
uint8_t Pic_cnt;
uint8_t i, j;
PIC_MSG PIC;
uint32_t tmp_cnt = 0;
uint32_t addr = 0;
W25QXX.init(SPI_QUARTER_SPEED);
W25QXX.SPI_FLASH_BufferRead(&Pic_cnt, PIC_COUNTER_ADDR, 1);
if (Pic_cnt == 0xff)
Pic_cnt = 0;
for (i = 0; i < Pic_cnt; i++) {
j = 0;
do
{
W25QXX.SPI_FLASH_BufferRead(&PIC.name[j], PIC_NAME_ADDR + tmp_cnt, 1);
tmp_cnt++;
}while (PIC.name[j++] != '\0');
if ((strcmp((char*)Pname, (char*)PIC.name)) == 0) {
if ((DeviceCode == 0x9488) || (DeviceCode == 0x5761))
addr = PIC_DATA_ADDR_TFT35 + i * PER_PIC_MAX_SPACE_TFT35;
else
addr = PIC_DATA_ADDR_TFT32 + i * PER_PIC_MAX_SPACE_TFT32;
return (addr + 4);//The purpose of adding 4 is to remove 4-byte picture header information.
}
}
return addr;
}
const char *picPath = "mks_pic";
const char *bakPath = "bak_pic";
const char *fontPath = "mks_font";
const char *bakFont = "bak_font";
#if 1
void spiFlashErase_PIC() {
#if 1
volatile uint32_t pic_sectorcnt = 0;
//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() {
volatile uint32_t Font_sectorcnt = 0;
//LCD_Clear(BACK_COLOR);
if ((DeviceCode == 0x9488) || (DeviceCode == 0x5761)) {
//LCD_ShowString(180,100,200,24,24,"SPI Flash");
//LCD_ShowString(170,130,200,24,24,"FONT Erasing...");
}
else {
//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;
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;
W25QXX.SPI_FLASH_BufferWrite(Logo_Wbuff, PIC_LOGO_ADDR + LogoWrite_Addroffset, LogoWriteSize);
for (i = 0; i < LogoWriteSize; i++) {
W25QXX.SPI_FLASH_BufferRead(&temp1, PIC_LOGO_ADDR + LogoWrite_Addroffset + i, 1);
if (*(Logo_Wbuff + i) != temp1) return 0;
}
LogoWrite_Addroffset += LogoWriteSize;
if ((DeviceCode == 0x9488) || (DeviceCode == 0x5761))
logo_maxsize = LOGO_MAX_SIZE_TFT35;
else
logo_maxsize = LOGO_MAX_SIZE_TFT32;
if (LogoWrite_Addroffset >= logo_maxsize)
LogoWrite_Addroffset = 0;
return 1;
}
uint32_t TitleLogoWrite_Addroffset = 0;
uint8_t Pic_TitleLogo_Write(uint8_t *TitleLogoName, uint8_t *TitleLogo_Wbuff, uint32_t TitleLogoWriteSize) {
//uint32_t i;
//uint8_t temp1;
if (TitleLogoWriteSize <= 0)
return 0;
if ((DeviceCode == 0x9488) || (DeviceCode == 0x5761))
W25QXX.SPI_FLASH_BufferWrite(TitleLogo_Wbuff, PIC_ICON_LOGO_ADDR_TFT35 + TitleLogoWrite_Addroffset, TitleLogoWriteSize);
else
W25QXX.SPI_FLASH_BufferWrite(TitleLogo_Wbuff, PIC_ICON_LOGO_ADDR_TFT32 + TitleLogoWrite_Addroffset, TitleLogoWriteSize);
TitleLogoWrite_Addroffset += TitleLogoWriteSize;
if (TitleLogoWrite_Addroffset >= TITLELOGO_MAX_SIZE)
TitleLogoWrite_Addroffset = 0;
return 1;
}
uint32_t default_view_addroffset_r = 0;
void default_view_Write(uint8_t *default_view__Rbuff, uint32_t default_view_Writesize) {
W25QXX.SPI_FLASH_BufferWrite(default_view__Rbuff, DEFAULT_VIEW_ADDR_TFT35 + default_view_addroffset_r, default_view_Writesize);
default_view_addroffset_r += default_view_Writesize;
if (default_view_addroffset_r >= DEFAULT_VIEW_MAX_SIZE)
default_view_addroffset_r = 0;
}
uint32_t Pic_Info_Write(uint8_t *P_name, uint32_t P_size) {
uint8_t pic_counter = 0;
uint32_t Pic_SaveAddr;
uint32_t Pic_SizeSaveAddr;
uint32_t Pic_NameSaveAddr;
//uint8_t temp;
uint8_t Pname_temp;
uint32_t i, j;
uint32_t name_len = 0;
uint32_t SaveName_len = 0;
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);
if (pic_counter == 0xFF)
pic_counter = 0;
if ((DeviceCode == 0x9488) || (DeviceCode == 0x5761))
Pic_SaveAddr = PIC_DATA_ADDR_TFT35 + pic_counter * PER_PIC_MAX_SPACE_TFT35;
else
Pic_SaveAddr = PIC_DATA_ADDR_TFT32 + pic_counter * PER_PIC_MAX_SPACE_TFT32;
for (j = 0; j < pic_counter; j++) {
do {
W25QXX.SPI_FLASH_BufferRead(&Pname_temp, PIC_NAME_ADDR + SaveName_len, 1);
SaveName_len++;
} while (Pname_temp != '\0');
}
i = 0;
while ((*(P_name + i) != '\0')) {
i++;
name_len++;
}
Pic_NameSaveAddr = PIC_NAME_ADDR + SaveName_len;
W25QXX.SPI_FLASH_BufferWrite(P_name, Pic_NameSaveAddr, name_len + 1);
Pic_SizeSaveAddr = PIC_SIZE_ADDR + 4 * pic_counter;
size_tmp.dwords = P_size;
W25QXX.SPI_FLASH_BufferWrite(size_tmp.bytes, Pic_SizeSaveAddr, 4);
pic_counter++;
W25QXX.SPI_FLASH_SectorErase(PIC_COUNTER_ADDR);
W25QXX.SPI_FLASH_BufferWrite(&pic_counter, PIC_COUNTER_ADDR, 1);
return Pic_SaveAddr;
}
uint8_t public_buf[512];
//uint8_t public_buf_test[512];
#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;
//DIR dir;
//char tmp[30];
#if 0//_USE_LFN
static char lfn[_MAX_LFN + 1];
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, 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);
}
}
void spi_flash_read_test() {W25QXX.SPI_FLASH_BufferRead(public_buf, UNIGBK_FLASH_ADDR, BMP_WRITE_BUF_LEN);}
void UpdateFont() {
//int r;
//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 dir;
//char tmp[30];
#if 0//_USE_LFN
static char lfn[_MAX_LFN + 1];
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)
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")) {
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...");
}
*/
flashaddr = UNIGBK_FLASH_ADDR;
pbr = 0;
while (1)
{
flashaddr += pbr;
pbr = file.read(public_buf, BMP_WRITE_BUF_LEN);
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;
}
/*--------------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();
}*/
dir.rename(&root, bakFont);
//r = f_rename(picPath, bakPath);
//update_flag_ok = 1;
#endif
#endif
}
}
}
#endif // SDSUPPORT
#endif
#if 1
void Pic_Read(uint8_t *Pname, uint8_t *P_Rbuff) {
uint8_t i, j;
uint8_t Pic_cnt;
uint32_t tmp_cnt = 0;
PIC_MSG PIC;
//void SPI_FLASH_BufferRead(u8* pBuffer, u32 ReadAddr, u16 NumByteToRead);
W25QXX.SPI_FLASH_BufferRead(&Pic_cnt, PIC_COUNTER_ADDR, 1);
if (Pic_cnt == 0xff)
Pic_cnt = 0;
for (i = 0; i < Pic_cnt; i++) {
//pic name
j = 0;
do
{
W25QXX.SPI_FLASH_BufferRead(&PIC.name[j], PIC_NAME_ADDR + tmp_cnt, 1);
tmp_cnt++;
}while (PIC.name[j++] != '\0');
//pic size
W25QXX.SPI_FLASH_BufferRead(PIC.size.bytes, PIC_SIZE_ADDR + i * 4, 4);
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);
/*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;
}
}
}
void lv_pic_test(uint8_t *P_Rbuff, uint32_t addr, uint32_t size) {
W25QXX.init(SPI_QUARTER_SPEED);
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);
}
#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 default_view_addroffset = 0;
void default_view_Read(uint8_t *default_view_Rbuff, uint32_t default_view_Readsize) {
W25QXX.init(SPI_QUARTER_SPEED);
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;
}
uint32_t flash_view_addroffset = 0;
void flash_view_Read(uint8_t *flash_view_Rbuff, uint32_t flash_view_Readsize) {
W25QXX.init(SPI_QUARTER_SPEED);
W25QXX.SPI_FLASH_BufferRead(flash_view_Rbuff, BAK_VIEW_ADDR_TFT35 + flash_view_addroffset, flash_view_Readsize);
flash_view_addroffset += flash_view_Readsize;
if (flash_view_addroffset >= FLASH_VIEW_MAX_SIZE)
flash_view_addroffset = 0;
}
#endif
#endif // TFT_LITTLE_VGL_UI

View file

@ -0,0 +1,120 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#pragma once
#ifdef __cplusplus
extern "C" { /* C-declarations for C++ */
#endif
#include <stdint.h>
#include <string.h>
#include "lvgl.h"
#if 1
#define PIC_MAX_CN 100 // Maximum number of pictures
#define PIC_NAME_MAX_LEN 50 // Picture name maximum length
#define LOGO_MAX_SIZE_TFT35 (300*1024)
#define LOGO_MAX_SIZE_TFT32 (150*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)
//pic
//Robin_pro pic addr
#define PIC_NAME_ADDR 0x003000 // Pic information addr
#define PIC_SIZE_ADDR 0x007000 // Pic size information addr
#define PIC_COUNTER_ADDR 0x008000 // Pic total number
#define PER_PIC_SAVE_ADDR 0x009000 // Storage address of each picture
#define PIC_LOGO_ADDR 0x00A000 // Logo addr
//#define PIC_DATA_ADDR 0x02F000 //
// TFT35
#define DEFAULT_VIEW_ADDR_TFT35 0XC5800
#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 (PIC_ICON_LOGO_ADDR_TFT35+350*1024)//0XC5800
// TFT32
#define PIC_DATA_ADDR_TFT32 0x02F000
#define PIC_ICON_LOGO_ADDR_TFT32 0x5D8000
#define PIC_OTHER_SIZE_ADDR_TFT32 0x5EE000
// font
#define FONTINFOADDR 0x600000 // 6M -- font addr
#define UNIGBK_FLASH_ADDR (FONTINFOADDR+4096) // 4*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
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 SPI_FLASH_BufferRead(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t NumByteToRead);
extern void spi_flash_read_test();
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);
#ifdef __cplusplus
} /* C-declarations for C++ */
#endif

View file

@ -0,0 +1,218 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI)
#include "../../../../MarlinCore.h"
#include "lv_conf.h"
#include "draw_ui.h"
#include "../../../../module/temperature.h"
#include "../../../../module/motion.h"
#include "../../../../sd/cardreader.h"
#include "../../../../gcode/queue.h"
#if ENABLED(POWER_LOSS_RECOVERY)
#include "../../../../feature/powerloss.h"
#endif
#include "../../../../gcode/gcode.h"
#include "../../../../module/planner.h"
extern uint32_t To_pre_view;
extern uint8_t flash_preview_begin, default_preview_flg, gcode_preview_over;
void printer_state_polling() {
if (uiCfg.print_state == PAUSING) {
#if ENABLED(SDSUPPORT)
if (!planner.has_blocks_queued() && card.getIndex() > MIN_FILE_PRINTED) //<2F><><EFBFBD><EFBFBD> <20>ļ<EFBFBD><C4BC><EFBFBD> M109<30><39>M190ָ<30><D6B8>
uiCfg.waitEndMoves++;
if (uiCfg.waitEndMoves > 20) {
uiCfg.waitEndMoves = 0;
planner.synchronize();
gcode.process_subcommands_now_P(PSTR("M25"));
gcode.process_subcommands_now_P(PSTR("G91"));
gcode.process_subcommands_now_P(PSTR("G1 Z5"));
gcode.process_subcommands_now_P(PSTR("G90"));
uiCfg.print_state = PAUSED;
//#if ENABLED(POWER_LOSS_RECOVERY)
// if (recovery.enabled) recovery.save(true);
//#endif
gCfgItems.pause_reprint = 1;
update_spi_flash();
}
#endif
}
else {
uiCfg.waitEndMoves = 0;
}
if (uiCfg.print_state == PAUSED) {
}
if (uiCfg.print_state == RESUMING) {
if (IS_SD_PAUSED()) {
gcode.process_subcommands_now_P(PSTR("G91"));
gcode.process_subcommands_now_P(PSTR("G1 Z-5"));
gcode.process_subcommands_now_P(PSTR("G90"));
gcode.process_subcommands_now_P(PSTR("M24"));
uiCfg.print_state = WORKING;
start_print_time();
gCfgItems.pause_reprint = 0;
update_spi_flash();
}
}
#if ENABLED(POWER_LOSS_RECOVERY)
if (uiCfg.print_state == REPRINTED) {
memset(public_buf_m, 0, sizeof(public_buf_m));
#if HOTENDS
HOTEND_LOOP() {
const int16_t et = recovery.info.target_temperature[e];
if (et) {
#if HOTENDS > 1
sprintf_P(public_buf_m, PSTR("T%i"), e);
gcode.process_subcommands_now(public_buf_m);
#endif
sprintf_P(public_buf_m, PSTR("M109 S%i"), et);
gcode.process_subcommands_now(public_buf_m);
}
}
#endif
if (gCfgItems.pause_reprint == 1) {
gcode.process_subcommands_now_P(PSTR("G91"));
gcode.process_subcommands_now_P(PSTR("G1 Z-5"));
gcode.process_subcommands_now_P(PSTR("G90"));
}
recovery.resume();
uiCfg.print_state = WORKING;
start_print_time();
gCfgItems.pause_reprint = 0;
update_spi_flash();
}
#endif
if (uiCfg.print_state == WORKING)
filament_check();
}
void filament_pin_setup() {
#if PIN_EXISTS(MT_DET_1)
pinMode(MT_DET_1_PIN, INPUT_PULLUP);
#endif
#if PIN_EXISTS(MT_DET_2)
pinMode(MT_DET_2_PIN, INPUT_PULLUP);
#endif
#if PIN_EXISTS(MT_DET_3)
pinMode(MT_DET_3_PIN, INPUT_PULLUP);
#endif
}
void filament_check() {
const int FIL_DELAY = 20;
#if PIN_EXISTS(MT_DET_1)
static int fil_det_count_1 = 0;
if (!READ(MT_DET_1_PIN) && !MT_DET_PIN_INVERTING)
fil_det_count_1++;
else if (READ(MT_DET_1_PIN) && MT_DET_PIN_INVERTING)
fil_det_count_1++;
else if (fil_det_count_1 > 0)
fil_det_count_1--;
if (!READ(MT_DET_1_PIN) && !MT_DET_PIN_INVERTING)
fil_det_count_1++;
else if (READ(MT_DET_1_PIN) && MT_DET_PIN_INVERTING)
fil_det_count_1++;
else if (fil_det_count_1 > 0)
fil_det_count_1--;
#endif
#if PIN_EXISTS(MT_DET_2)
static int fil_det_count_2 = 0;
if (!READ(MT_DET_2_PIN) && !MT_DET_PIN_INVERTING)
fil_det_count_2++;
else if (READ(MT_DET_2_PIN) && MT_DET_PIN_INVERTING)
fil_det_count_2++;
else if (fil_det_count_2 > 0)
fil_det_count_2--;
if (!READ(MT_DET_2_PIN) && !MT_DET_PIN_INVERTING)
fil_det_count_2++;
else if (READ(MT_DET_2_PIN) && MT_DET_PIN_INVERTING)
fil_det_count_2++;
else if (fil_det_count_2 > 0)
fil_det_count_2--;
#endif
#if PIN_EXISTS(MT_DET_3)
static int fil_det_count_3 = 0;
if (!READ(MT_DET_3_PIN) && !MT_DET_PIN_INVERTING)
fil_det_count_3++;
else if (READ(MT_DET_3_PIN) && MT_DET_PIN_INVERTING)
fil_det_count_3++;
else if (fil_det_count_3 > 0)
fil_det_count_3--;
if (!READ(MT_DET_3_PIN) && !MT_DET_PIN_INVERTING)
fil_det_count_3++;
else if (READ(MT_DET_3_PIN) && MT_DET_PIN_INVERTING)
fil_det_count_3++;
else if (fil_det_count_3 > 0)
fil_det_count_3--;
#endif
if (
#if PIN_EXISTS(MT_DET_1)
fil_det_count_1 >= FIL_DELAY
#else
false
#endif
#if PIN_EXISTS(MT_DET_2)
|| fil_det_count_2 >= FIL_DELAY
#endif
#if PIN_EXISTS(MT_DET_3)
|| fil_det_count_3 >= FIL_DELAY
#endif
) {
clear_cur_ui();
card.pauseSDPrint();
stop_print_time();
uiCfg.print_state = PAUSING;
if (gCfgItems.from_flash_pic == 1)
flash_preview_begin = 1;
else
default_preview_flg = 1;
lv_draw_printing();
}
}
#endif // TFT_LITTLE_VGL_UI

View file

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

View file

@ -0,0 +1,718 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#pragma once
//****************英文***************************//
#define MACHINE_CONFIG_EN "Machine\nSettings"
#define NEXT_EN "Next"
#define PREVIOUS_EN "Previous"
#define DEFAULT_EN "Default"
#define KEY_BACK_EN "Del"
#define KEY_REST_EN "Rest"
#define KEY_CONFIRM_EN "Confirm"
#define KEYBOARD_KEY0_EN "0"
#define KEYBOARD_KEY1_EN "1"
#define KEYBOARD_KEY2_EN "2"
#define KEYBOARD_KEY3_EN "3"
#define KEYBOARD_KEY4_EN "4"
#define KEYBOARD_KEY5_EN "5"
#define KEYBOARD_KEY6_EN "6"
#define KEYBOARD_KEY7_EN "7"
#define KEYBOARD_KEY8_EN "8"
#define KEYBOARD_KEY9_EN "9"
#define KEYBOARD_KEY_POINT_EN "."
#define KEYBOARD_KEY_NEGATIVE_EN "-"
#define MACHINE_PARA_EN "Machine\nsettings"
#define MACHINE_PARA_TITLE_EN "Machine settings"
#define MACHINE_TYPE_CNOFIG_EN "Machine"
#define TEMPERATURE_CONFIG_EN "Temperature"
#define MOTOR_CONFIG_EN "Motor"
#define ADVANCE_CONFIG_EN "Adavance"
#define MACHINE_CONFIG_TITLE_EN "Machine Settings"
#define MACHINE_TYPE_EN "Machine type"
#define MACHINE_STROKE_EN "Machine Size"
#define MACHINE_HOMEDIR_EN "Home direction"
#define MACHINE_ENDSTOP_TYPE_EN "Endstop type"
#define MACHINE_FILAMENT_CONFIG_EN "Filament settings"
#define MACHINE_LEVELING_CONFIG_EN "Leveling settings"
#define MACHINE_TYPE_CONFIG_TITLE_EN "Machine Settings>Machine type"
#define MACHINE_TYPE_XYZ_EN "XYZ Machine"
#define MACHINE_TYPE_DELTA_EN "Delta Machine"
#define MACHINE_TYPE_COREXY_EN "Corexy Machine"
#define MACHINE_STROKE_CONF_TITLE_EN "Machine Settings>Machine Size"
#define X_MAX_LENGTH_EN "X-axis maximum stroke"
#define Y_MAX_LENGTH_EN "Y-axis maximum stroke"
#define Z_MAX_LENGTH_EN "Z-axis maximum stroke"
#define X_MIN_LENGTH_EN "X-axis minimum stroke"
#define Y_MIN_LENGTH_EN "Y-axis minimum stroke"
#define Z_MIN_LENGTH_EN "Z-axis minimum stroke"
#define HOME_DIR_CONF_TITLE_EN "Machine Settings>Home direction"
#define HOME_DIR_X_EN "X-axis home direction"
#define HOME_DIR_Y_EN "Y-axis home direction"
#define HOME_DIR_Z_EN "Z-axis home direction"
#define HOME_MIN_EN "MIN"
#define HOME_MAX_EN "MAX"
#define ENDSTOP_CONF_TITLE_EN "Machine Settings>Endstop type"
#define MIN_ENDSTOP_X_EN "X-axis minimum Endstop"
#define MIN_ENDSTOP_Y_EN "Y-axis minimum Endstop"
#define MIN_ENDSTOP_Z_EN "Z-axis minimum Endstop"
#define MAX_ENDSTOP_X_EN "X axis maximum Endstop"
#define MAX_ENDSTOP_Y_EN "Y axis maximum Endstop"
#define MAX_ENDSTOP_Z_EN "Z axis maximum Endstop"
#define ENDSTOP_FIL_EN "Filament sensor"
#define ENDSTOP_LEVEL_EN "Leveling sensor"
#define ENDSTOP_OPENED_EN "Open"
#define ENDSTOP_CLOSED_EN "Close"
#define FILAMENT_CONF_TITLE_EN "Filament settings"
#define FILAMENT_IN_TEMPERATURE_EN "Load temperature"
#define FILAMENT_IN_LENGTH_EN "Load length"
#define FILAMENT_IN_SPEED_EN "Load speed"
#define FILAMENT_OUT_TEMPERATURE_EN "Unload temperature"
#define FILAMENT_OUT_LENGTH_EN "Unload length"
#define FILAMENT_OUT_SPEED_EN "Unload speed"
#define LEVELING_CONF_TITLE_EN "Leveling settings"
#define LEVELING_PARA_CONF_EN "Leveling settings"
#define LEVELING_DELTA_EN "delta machine leveling"
#define LEVELING_XYZ_EN "Manual leveling coordinate settings"
#define LEVELING_PARA_CONF_TITLE_EN "leveling setting"
#define AUTO_LEVELING_ENABLE_EN "Enable auto leveling"
#define BLTOUCH_LEVELING_ENABLE_EN "Enable BLtouch"
#define PROBE_PORT_EN "Probe connector"
#define PROBE_X_OFFSET_EN "Probe x axis offset"
#define PROBE_Y_OFFSET_EN "Probe y axis offset"
#define PROBE_Z_OFFSET_EN "Probe z axis offset"
#define PROBE_XY_SPEED_EN "Probe xy axis speed"
#define PROBE_Z_SPEED_EN "Probe z axis speed"
#define ENABLE_EN "YES"
#define DISABLE_EN "NO"
#define Z_MIN_EN "ZMin"
#define Z_MAX_EN "ZMax"
#define DELTA_LEVEL_CONF_TITLE_EN "Delta Machine settings"
#define DELTA_LEVEL_CONF_EN "Delta Machine Leveling"
#define DELTA_MACHINE_RADIUS_EN "Machine Radius"
#define DELTA_DIAGONAL_ROD_EN "Machine rod length"
#define DELTA_PRINT_RADIUS_EN "Print radius"
#define DELTA_HEIGHT_EN "Print height"
#define SMOOTH_ROD_OFFSET_EN "Slider offset"
#define EFFECTOR_OFFSET_EN "Effector offset"
#define CALIBRATION_RADIUS_EN "Leveling radius"
#define XYZ_LEVEL_CONF_TITLE_EN "Cartesian Machine Settings"
#define PROBE_REACH_MAX_LEFT_EN "Probe reaches leftmost position"
#define PROBE_REACH_MAX_RIGHT_EN "Probe reaches rightmost position"
#define PROBE_REACH_MAX_FRONT_EN "Probe reaches front position"
#define PROBE_REACH_MAX_BACK_EN "Probe reaches final position"
#define TEMPERATURE_CONF_TITLE_EN "Machine Settings>Temperature settings"
#define NOZZLE_CONF_EN "Nozzle settings"
#define HOTBED_CONF_EN "Hotbed settings"
#define PREHEAT_TEMPER_EN "Preset temperature"
#define NOZZLE_CONF_TITLE_EN "Machine Settings>Nozzle settings"
#define NOZZLECNT_EN "Number of nozzles"
#define NOZZLE_TYPE_EN "E0 Temperature type"
#define NOZZLE_ADJUST_TYPE_EN "PID thermostat"
#define NOZZLE_MIN_TEMPERATURE_EN "lowest temperature"
#define NOZZLE_MAX_TEMPERATURE_EN "Maximum temperature"
#define EXTRUD_MIN_TEMPER_EN "Minimum extrusion temperature"
#define HOTBED_CONF_TITLE_EN "Machine Settings>Hotbed settings"
#define HOTBED_ADJUST_EN "PID thermostat"
#define HOTBED_MIN_TEMPERATURE_EN "lowest temperature"
#define HOTBED_MAX_TEMPERATURE_EN "Maximum temperature"
#define MOTOR_CONF_TITLE_EN "Machine Settings>Motor settings"
#define MAXFEEDRATE_CONF_EN "Maximum speed settings"
#define ACCELERATION_CONF_EN "Acceleration settings"
#define JERKCONF_EN "Jerk settings"
#define STEPSCONF_EN "Steps settings"
#define MOTORDIRCONF_EN "Motor direction settings"
#define HOMEFEEDRATECONF_EN "Home speed setting"
#define MAXFEEDRATE_CONF_TITLE_EN "Machine Settings>Maximum speed"
#define X_MAXFEEDRATE_EN "X axis maximum speed"
#define Y_MAXFEEDRATE_EN "Y axis maximum speed"
#define Z_MAXFEEDRATE_EN "Z axis maximum speed"
#define E0_MAXFEEDRATE_EN "E0 axis maximum speed"
#define E1_MAXFEEDRATE_EN "E1 axis maximum speed"
#define ACCELERATION_CONF_TITLE_EN "Machine Settings>Acceleration"
#define PRINT_ACCELERATION_EN "Print acceleration"
#define RETRACT_ACCELERATION_EN "Retraction acceleration"
#define TRAVEL_ACCELERATION_EN "Travel acceleration"
#define X_ACCELERATION_EN "X-axis acceleration"
#define Y_ACCELERATION_EN "Y-axis acceleration"
#define Z_ACCELERATION_EN "Z-axis acceleration"
#define E0_ACCELERATION_EN "E0-axis acceleration"
#define E1_ACCELERATION_EN "E1-axis acceleration"
#define JERK_CONF_TITLE_EN "Machine Settings>Jerk speed"
#define X_JERK_EN "X-axis jerk speed"
#define Y_JERK_EN "Y-axis jerk speed"
#define Z_JERK_EN "J-axis jerk speed"
#define E_JERK_EN "E-axis jerk speed"
#define STEPS_CONF_TITLE_EN "Machine Settings>Steps settings"
#define X_STEPS_EN "X-axis steps"
#define Y_STEPS_EN "Y-axis stepS"
#define Z_STEPS_EN "Z-axis stepS"
#define E0_STEPS_EN "E0-axis steps"
#define E1_STEPS_EN "E1-axis steps"
#define MOTORDIR_CONF_TITLE_EN "Machine Settings>Motor direction"
#define X_MOTORDIR_EN "X-axis motor direction invert"
#define Y_MOTORDIR_EN "Y-axis motor direction invert"
#define Z_MOTORDIR_EN "Z-axis motor direction invert"
#define E0_MOTORDIR_EN "E0-axis motor direction invert"
#define E1_MOTORDIR_EN "E1-axis motor direction invert"
#define INVERT_P_EN "YES"
#define INVERT_N_EN "NO"
#define HOMEFEEDRATE_CONF_TITLE_EN "Machine Settings>Home speed"
#define X_HOMESPEED_EN "XY-axis Home speed"
#define Y_HOMESPEED_EN "Y-axis Home speed"
#define Z_HOMESPEED_EN "Z-axis Home speed"
#define ADVANCED_CONF_TITLE_EN "Machine Settings>Advance"
#define PWROFF_DECTION_EN "power off dection module"
#define PWROFF_AFTER_PRINT_EN "Auto Shutdown after print"
#define HAVE_UPS_EN "Has UPS power supply"
#define Z2_AND_Z2ENDSTOP_CONF_EN "Z2 Settings"
#define ENABLE_PINS_CONF_EN "Enable pins level settings"
#define Z2_AND_Z2ENDSTOP_CONF_TITLE_EN "Z2 Settings"
#define Z2_ENABLE_EN "Z2 Enable"
#define Z2_ENDSTOP_EN "Z2_EndStop Enable"
#define Z2_PORT_EN "Z2 Connector"
#define ENABLE_PINS_CONF_TITLE_EN "ENABLE_PINS_LEVEL"
#define X_ENABLE_PINS_INVERT_EN "X_ENABLE_PIN_INVERT"
#define Y_ENABLE_PINS_INVERT_EN "Y_ENABLE_PIN_INVERT"
#define Z_ENABLE_PINS_INVERT_EN "Z_ENABLE_PIN_INVERT"
#define E_ENABLE_PINS_INVERT_EN "E_ENABLE_PIN_INVERT"
#define TOOL_TEXT_EN "Tool"
#define PREHEAT_TEXT_EN "Preheat"
#define MOVE_TEXT_EN "Move"
#define HOME_TEXT_EN "Home"
#define PRINT_TEXT_EN "Printing"
#define EXTRUDE_TEXT_EN "Extrusion"
#define LEVELING_TEXT_EN "Leveling"
#define AUTO_LEVELING_TEXT_EN "AutoLevel"
#define SET_TEXT_EN "Settings"
#define MORE_TEXT_EN "More"
#define ADD_TEXT_EN "Add"
#define DEC_TEXT_EN "Dec"
#define EXTRUDER_1_TEXT_EN "Extrusion1"
#define EXTRUDER_2_TEXT_EN "Extrusion2"
#define HEATBED_TEXT_EN "HeatBed"
#define TEXT_1C_EN "1℃"
#define TEXT_5C_EN "5℃"
#define TEXT_10C_EN "10℃"
#define CLOSE_TEXT_EN "Close"
#define BACK_TEXT_EN "Back"
#define TOOL_PREHEAT_EN "Preheat"
#define TOOL_EXTRUDE_EN "Extrusion"
#define TOOL_MOVE_EN "Move"
#define TOOL_HOME_EN "Home"
#define TOOL_LEVELING_EN "Leveling"
#define TOOL_AUTO_LEVELING_EN "AutoLevel"
#define TOOL_FILAMENT_EN "Filament"
#define TOOL_MORE_EN "More"
#define AXIS_X_ADD_TEXT_EN "X+"
#define AXIS_X_DEC_TEXT_EN "X-"
#define AXIS_Y_ADD_TEXT_EN "Y+"
#define AXIS_Y_DEC_TEXT_EN "Y-"
#define AXIS_Z_ADD_TEXT_EN "Z+"
#define AXIS_Z_DEC_TEXT_EN "Z-"
#define TEXT_01MM_EN "0.1mm"
#define TEXT_1MM_EN "1mm"
#define TEXT_10MM_EN "10mm"
#define HOME_X_TEXT_EN "X"
#define HOME_Y_TEXT_EN "Y"
#define HOME_Z_TEXT_EN "Z"
#define HOME_ALL_TEXT_EN "Home"
#define HOME_STOPMOVE_EN "Quickstop"
#define PAGE_UP_TEXT_EN "Page up"
#define PAGE_DOWN_TEXT_EN "Page down"
#define EXTRUDER_IN_TEXT_EN "In"
#define EXTRUDER_OUT_TEXT_EN "Out"
#define EXTRUDE_1MM_TEXT_EN "1mm"
#define EXTRUDE_5MM_TEXT_EN "5mm"
#define EXTRUDE_10MM_TEXT_EN "10mm"
#define EXTRUDE_LOW_SPEED_TEXT_EN "Low"
#define EXTRUDE_MEDIUM_SPEED_TEXT_EN "Normal"
#define EXTRUDE_HIGH_SPEED_TEXT_EN "High"
#define LEVELING_POINT1_TEXT_EN "Point1"
#define LEVELING_POINT2_TEXT_EN "Point2"
#define LEVELING_POINT3_TEXT_EN "Point3"
#define LEVELING_POINT4_TEXT_EN "Point4"
#define LEVELING_POINT5_TEXT_EN "Point5"
#define FILESYS_TEXT_EN "FileSys"
#define WIFI_TEXT_EN "WiFi"
#define FAN_TEXT_EN "Fan"
#define ABOUT_TEXT_EN "About"
#define BREAK_POINT_TEXT_EN "Continue"
#define FILAMENT_TEXT_EN "Filament"
#define LANGUAGE_TEXT_EN "Language"
#define MOTOR_OFF_TEXT_EN "Motor-off"
#define MOTOR_OFF_XY_TEXT_EN "Off-XY"
#define SHUTDOWN_TEXT_EN "Shutdown"
#define U_DISK_TEXT_EN "USB"
#define SD_CARD_TEXT_EN "SD"
#define WIFI_NAME_TEXT_EN "WiFi: "
#define WIFI_KEY_TEXT_EN "Key: "
#define WIFI_IP_TEXT_EN "IP: "
#define WIFI_AP_TEXT_EN "State: AP"
#define WIFI_STA_TEXT_EN "State: STA"
#define WIFI_CONNECTED_TEXT_EN "Connected"
#define WIFI_DISCONNECTED_TEXT_EN "Disconnected"
#define WIFI_EXCEPTION_TEXT_EN "Exception"
#define WIFI_RECONNECT_TEXT_EN "Reconnect"
#define CLOUD_TEXT_EN "Cloud"
#define CLOUD_BIND_EN "Bind"
#define CLOUD_UNBIND_EN "Unbind"
#define CLOUD_UNBINDING_EN "Unbinding"
#define CLOUD_DISCONNECTED_EN "Disconnected"
#define CLOUD_UNBINDED_EN "Unbinded"
#define CLOUD_BINDED_EN "Binded"
#define CLOUD_DISABLE_EN "Disable"
#define FAN_ADD_TEXT_EN "Add"
#define FAN_DEC_TEXT_EN "Dec"
#define FAN_OPEN_TEXT_EN "100%"
#define FAN_HALF_TEXT_EN "50%"
#define FAN_CLOSE_TEXT_EN "Close"
#define FAN_TIPS1_TEXT_EN "FAN"
#define FAN_TIPS2_TEXT_EN "FAN\nClose"
#define FILAMENT_IN_TEXT_EN "Load"
#define FILAMENT_OUT_TEXT_EN "Unload"
#define FILAMENT_EXT0_TEXT_EN "Extrusion1"
#define FILAMENT_EXT1_TEXT_EN "Extrusion2"
#define FILAMENT_HEAT_TEXT_EN "Preheat"
#define FILAMENT_STOP_TEXT_EN "Stop"
//#define FILAMENT_CHANGE_TEXT_EN "Filament replace"
#define FILAMENT_TIPS2_TEXT_EN "T:"
#define FILAMENT_TIPS3_TEXT_EN "Loading..."
#define FILAMENT_TIPS4_TEXT_EN "Unloading..."
#define FILAMENT_TIPS5_TEXT_EN "Temp is too low to go,please heat"
#define FILAMENT_TIPS6_TEXT_EN "Completed"
#if 0
#define FILAMENT_REPLAYS_IDLE_TEXT_EN "Please click <Load> or <unload> \nto replace filament!"
#define FILAMENT_CHANGE_TEXT_EN "Please click <Load> or <unload>,\nAfter pinter pause."
#define FILAMENT_DIALOG_LOAD_HEAT_TIPS_EN "Heating up the nozzle,please wait..."
#define FILAMENT_DIALOG_UNLOAD_HEAT_TIPS_EN "Heating up the nozzle,please wait..."
#define FILAMENT_DIALOG_LOAD_CONFIRM1_TIPS_EN "Heat completed,please load filament to extruder,and click <confirm> for start loading."
#define FILAMENT_DIALOG_LOAD_CONFIRM2_TIPS_EN "Please load filament to extruder,and click <confirm> for start loading."
#define FILAMENT_DIALOG_UNLOAD_CONFIRM_TIPS_EN "Heat completed,please click <confirm> for start unloading.!"
#define FILAMENT_DIALOG_LOADING_TIPS_EN "Is loading ,please wait!"
#define FILAMENT_DIALOG_UNLOADING_TIPS_EN "Is unloading,please wait!"
#define FILAMENT_DIALOG_LOAD_COMPLETE_TIPS_EN "Load filament completed,click <confirm> for return!"
#define FILAMENT_DIALOG_UNLOAD_COMPLETE_TIPS_EN "Unload filament completed,click <confirm> for return!"
#endif
#define FILAMENT_CHANGE_TEXT_EN "Please click <Load> \nor <unload>,After \npinter pause."
#define FILAMENT_DIALOG_LOAD_HEAT_TIPS_EN "Heating up the nozzle,\nplease wait..."
#define FILAMENT_DIALOG_UNLOAD_HEAT_TIPS_EN "Heating up the nozzle,\nplease wait..."
#define FILAMENT_DIALOG_LOAD_CONFIRM1_TIPS_EN "Heat completed,please load filament \nto extruder,and click <confirm> \nfor start loading."
#define FILAMENT_DIALOG_LOAD_CONFIRM2_TIPS_EN "Please load filament to extruder,\nand click <confirm> for start loading."
#define FILAMENT_DIALOG_UNLOAD_CONFIRM_TIPS_EN "Heat completed,please \nclick <confirm> for start unloading.!"
#define FILAMENT_DIALOG_LOADING_TIPS_EN "Is loading ,please wait!"
#define FILAMENT_DIALOG_UNLOADING_TIPS_EN "Is unloading,please wait!"
#define FILAMENT_DIALOG_LOAD_COMPLETE_TIPS_EN "Load filament completed,\nclick <confirm> for return!"
#define FILAMENT_DIALOG_UNLOAD_COMPLETE_TIPS_EN "Unload filament completed,\nclick <confirm> for return!"
#define PRE_HEAT_EXT_TEXT_EN "E"
#define PRE_HEAT_BED_TEXT_EN "Bed"
#define FILE_LOADING_EN "Loading......"
#if 0
#define NO_FILE_AND_CHECK_EN "No files found!Please insert SD card or U disk!"
#else
#define NO_FILE_AND_CHECK_EN " No files found!\n Check the file system configuration!"
#endif
#define NO_FILE_EN "No files found!"
#define EXTRUDER_TEMP_TEXT_EN "Temper"
#define EXTRUDER_E_LENGTH1_TEXT_EN "Extrusion1"
#define EXTRUDER_E_LENGTH2_TEXT_EN "Extrusion2"
#define EXTRUDER_E_LENGTH3_TEXT_EN "Extrusion3"
#define ABOUT_TYPE_TEXT_EN "Type: "
#define ABOUT_VERSION_TEXT_EN "Firmware: "
#define ABOUT_WIFI_TEXT_EN "WiFi: "
#define PRINTING_OPERATION_EN "Option"
#define PRINTING_PAUSE_EN "Pause"
#define PRINTING_TEMP_EN "Temp."
#define PRINTING_CHANGESPEED_EN "Speed"
#define PRINTING_RESUME_EN "Resume"
#define PRINTING_STOP_EN "Stop"
#define PRINTING_MORE_EN "More"
#define PRINTING_EXTRUDER_EN "Extrusion"
#define PRINTING_MOVE_EN "Move"
#define EXTRUDER_SPEED_EN "Extrusion"
#define MOVE_SPEED_EN "Move"
#define EXTRUDER_SPEED_STATE_EN "Extrude Speed"
#define MOVE_SPEED_STATE_EN "Move Speed"
#define STEP_1PERCENT_EN "1%"
#define STEP_5PERCENT_EN "5%"
#define STEP_10PERCENT_EN "10%"
#define ZOFFSET_EN "Z Offset"
#define ZOFFSET_INC_EN "Add"
#define ZOFFSET_DEC_EN "Dec"
#define TITLE_READYPRINT_EN "ReadyPrint"
#define TITLE_PREHEAT_EN "Preheat"
#define TITLE_MOVE_EN "Move"
#define TITLE_HOME_EN "Home"
#define TITLE_EXTRUDE_EN "Extrusion"
#define TITLE_LEVELING_EN "Leveling"
#define TITLE_SET_EN "Settings"
#define TITLE_MORE_EN "More"
#define TITLE_CHOOSEFILE_EN "ChooseFile"
#define TITLE_PRINTING_EN "Printing"
#define TITLE_OPERATION_EN "Operation"
#define TITLE_ADJUST_EN "Adjust"
#define TITLE_WIRELESS_EN "Wireless"
#define TITLE_FILAMENT_EN "Filament"
#define TITLE_ABOUT_EN "About"
#define TITLE_FAN_EN "Fan"
#define TITLE_LANGUAGE_EN "Language"
#define TITLE_PAUSE_EN "Pause"
#define TITLE_CHANGESPEED_EN "Speed"
#define TITLE_CLOUD_TEXT_EN "Cloud"
#define TITLE_DIALOG_CONFIRM_EN "Confirm"
#define TITLE_FILESYS_EN "FileSys"
#define TITLE_ZOFFSET_EN "Z Offset"
#define AUTO_SHUTDOWN_EN "Auto"
#define MANUAL_SHUTDOWN_EN "Manual"
#define DIALOG_CONFIRM_EN "Confirm"
#define DIALOG_CANCLE_EN "Cancel"
#define DIALOG_OK_EN "OK"
#define DIALOG_RESET_EN "Reset"
#define DIALOG_RETRY_EN "Retry"
#define DIALOG_DISABLE_EN "Disable"
#define DIALOG_PRINT_MODEL_EN "Print this model?"
#define DIALOG_CANCEL_PRINT_EN "Stop print?"
#define DIALOG_RETRY_EN "Retry"
#define DIALOG_STOP_EN "Stop"
#define DIALOG_REPRINT_FROM_BREAKPOINT_EN "Reprint from breakpoint?"
//#define DIALOG_UNBIND_PRINTER_EN "Unbind the printer?"
#define DIALOG_ERROR_TIPS1_EN "Error:no file,please check it again."
#define DIALOG_ERROR_TIPS2_EN "Error:transaction failed.please check display baudrate \nwhether as the same as mainboard!"
#define DIALOG_ERROR_TIPS3_EN "Error:file name or path is too long!"
#define DIALOG_CLOSE_MACHINE_EN "Closing machine......"
#define DIALOG_UNBIND_PRINTER_EN "Unbind the printer?"
#define DIALOG_FILAMENT_NO_PRESS_EN "Filament detection switch is not pressed"
#define DIALOG_PRINT_FINISH_EN "Done print!"
#define DIALOG_PRINT_TIME_EN "Print time: "
#define DIALOG_REPRINT_EN "Print again"
#define DIALOG_WIFI_ENABLE_TIPS_EN "The wifi module is being configured\nplease wait a moment....."
#define HOTBED_ENABLE_EN "Enable heatbed"
#define MOTOR_EN_HIGH_LEVEL_EN "High"
#define MOTOR_EN_LOW_LEVEL_EN "Low"
#define TEXT_WIFI_MENU_TITLE_EN "WI-FI"
#define TEXT_WIFI_SAPCE_EN "space"
#define TEXT_WIFI_LETTER_EN "abc"
#define TEXT_WIFI_DIGITAL_EN "123"
#define TEXT_WIFI_SYMBOL_EN "#+="
#define TEXT_WIFI_PASSWORD_EN "Password"
#define TEXT_WIFI_POINT_BOLD_EN "`"
#define TEXT_WIFI_JOINING_EN "Joining\nNetwork..."
#define TEXT_WIFI_FAILED_JOIN_EN "Failed to\nJoin Wi-Fi"
#define TEXT_WIFI_WIFI_CONECTED_EN "Wi-Fi\nConnected"
#define TEXT_BUTTON_DISCONECTED_EN "Disconnect"
#define TEXT_WIFI_FORGET_EN "Forget Network"
#define TEXT_DISCONECTED_EN "Wi-Fi Connected"
//wifi-list
#define MAIN_BUILT_EN "Build"
#define MAIN_FILAMENT_EN "Filament"
#define MAIN_SETUP_EN "Setup"
#define MAIN_ABOUT_EN "About"
#define MAIN_MENU_EN "Menu"
#define FILE_MENU_BUILD_EN "Build"
#define FILE_MENU_MENU_EN " < Menu"
//about
#define ABOUT_TITLE_EN "About"
#define ABOUT_BUILT_MACHINES_EN "Built Machines"
#define ABOUT_SPARK_EN "Spark"
#define ABOUT_VERSION_EN "Version 1.1.0"
#define ABOUT_SERIAL_NUMBER_EN "Serial Number:"
#define ABOUT_S_NUMBER_EN "DCPLX02KFC6P"
//set
#define SETUP_TITLE_EN "Setup"
#define SETUP_WIFI_EN "Wi-Fi"
#define SETUP_MANUAL_IP_EN "Manual IP"
#define SETUP_WIFI_NOT_CONNECTED_EN "Not Connected"
#define SETUP_WIFI_NETWORK_EN "WiFi_Network"
//build
#define BUILD_TITLE_EN "Build"
#define BUILD_SD_CARD_EN "SD Card"
#define BUILD_USB_DRIVE_EN "USB Drive"
//SD card
#define SD_CARD_TITLE_EN "SD Card"
#define SD_CARD_BACK_EN "< Back"
//USB Drive
#define USB_DRIVE_TITLE_EN "USB Drive"
#define USB_DRIVE_BACK_EN "< Back"
#define FILE_PAGES_EN "%d/%d"
#define FILE_NEXT_PAGE_EN "Next Page"
//BUILD PLATE
#define PLATE_TITLE_EN "Build Plate"
#define PLATE_BACK_EN "< Back"
#define PLATE_CONFIRM_EN "Confirm >"
#define PLATE_TIPS_EN "Confirm that there is a Clear\nBuild Plate installed in the\nmachine."
//build model
#define MODEL_TITLE_EN "Build Model"
#define MODEL_START_BUILD_EN "Start Build"
#define MODEL_BACK_EN "< Back"
//building
#define BUILDING_TITLE_EN "Building"
#define BUILDING_MENU_EN "Build Menu"
#define BUILDING_COMPLETED "Build\nComplete"
//building menu
#define BUILDING_MENU_TITLE_EN "Build Menu"
#define BUILDING_MENU_SETTINGS_EN "Build Settings"
#define BUILDING_MENU_PAUSE_EN "Pause Build"
#define BUILDING_MENU_CANCEL_EN "Cancel Build"
#define BUILDING_MENU_BACK_EN "< Back"
//build settings
#define SETTINGS_TITLE_EN "Build Settings"
#define SETTINGS_NOZZLE_TEMPER_EN "Nozzle Temp:"
#define SETTINGS_NOZZLE_VALUE_EN "%d"
#define SETTINGS_BED_TEMPER_EN "Bed Temp:"
#define SETTINGS_BED_VALUE_EN "%d"
#define SETTINGS_BUILD_SPEED_EN "Build Speed:"
#define SETTINGS_SPEED_VALUE_EN "Standard"
#define SETTINGS_BACK_EN "< Back"
//build paused
#define PAUSED_TITLE_EN "Build Paused"
#define PAUSED_RESUME_EN "Resume Build"
#define PAUSED_CANCEL_EN "Cancel Build"
#define PAUSED_BACK_EN "< Back"
//build cancel
#define CANCEL_TITLE_EN "Cancel Build"
#define CANCEL_BUILD_EN "Cancel Build"
#define CANCEL_TIPS_EN "Are you sure you want to\ncancel this build? The model\nwill be deleted from this\nmachine. It will need to be\nresent from your computer\nbefore it can be built in the\nfuture."
#define CANCEL_BACK_EN "< Back"
#define CANCEL_BUILD_DISPLAY_EN "Build\nCanceled"
#define CANCEL_OVER_PLATE_TIPS_EN "Confirm that the Build Plate\nhas been removed from the\nmachine."
//filament model enter
#define FILAMENT_MODEL_ENTER_TITLE_EN "Model-PLA"
#define FILAMENT_MODEL_ENTER_BACK_EN "< Back"
#define FILAMENT_MODEL_ENTER_BEGIN_EN "Begin >"
#define FILAMENT_MODEL_ENTER_TIPS_EN "The Model Filament spool\ncompartment is located on\nthe right side of the machine."
//filament model PLA
#define FILAMENT_MODEL_PLA_TITLE_EN "Model-PLA"
#define FILAMENT_PLA_LOAD_TITLE_EN "Load Filament"
#define FILAMENT_PLA_UNLOAD_TITLE_EN "Unload Filament"
#define FILAMENT_MODEL_PLA_LOAD_EN "Load Filament"
#define FILAMENT_MODEL_PLA_UNLOAD_EN "Unload Filament"
//filament support enter
#define FILAMENT_SUPPORT_ENTER_TITLE_EN "Support-PVA"
#define FILAMENT_SUPPORT_ENTER_BACK_EN "< Back"
#define FILAMENT_SUPPORT_ENTER_BEGIN_EN "Begin >"
#define FILAMENT_SUPPORT_ENTER_TIPS_EN "The Support Filament spool\ncompartment is located on\nthe left side of the machine."
//filament heating
#define FILAMENT_HEATING_LOAD_TITLE_EN "Load Filament"
#define FILAMENT_HEATING_UNLOAD_TITLE_EN "Unload Filament"
#define FILAMENT_HEATING_CANCEL_EN "< Cancel"
#define FILAMENT_HEATING_MATERIAL_EN "Material:"
#define FILAMENT_HEATING_PLA_EN "Model-PLA"
#define FILAMENT_HEATING_TIPS_EN "Print head is heating..."
//rotate left
#define ROTATE_LEFT_LOAD_TITLE_EN "Load Filament"
#define ROTATE_LEFT_UNLOAD_TITLE_EN "Unload Filament"
#define ROTATE_LEFT_CANCEL_EN "< Cancel"
#define ROTATE_LEFT_MATERIAL_EN "Material:"
#define ROTATE_LEFT_PLA_EN "Model-PLA"
#define ROTATE_LEFT_NEXT_EN "Next >"
#define ROTATE_LEFT_TIPS_EN "Rotate extruder selection\ndial to the left."
//hang spool
#define HANG_SPOOL_TITLE_EN "Load Filament"
#define HANG_SPOOL_PREVIOUS_EN "< Previous"
#define HANG_SPOOL_MATERIAL_EN "Material:"
#define HANG_SPOOL_PLA_EN "Model-PLA"
#define HANG_SPOOL_NEXT_EN "Next >"
#define HANG_SPOOL_TIPS_EN "Hang the spool in the spool\ncompartment as shown."
//feed filament
#define FEED_FILAMENT_TITLE_EN "Load Filament"
#define FEED_FILAMENT_PREVIOUS_EN "< Previous"
#define FEED_FILAMENT_MATERIAL_EN "Material:"
#define FEED_FILAMENT_PLA_EN "Model-PLA"
#define FEED_FILAMENT_NEXT_EN "Next >"
#define FEED_FILAMENT_TIPS_EN "Feed filament into extruder\nup beyond the gears."
//feed filament
#define ROTATE_UP_TITLE_EN "Load Filament"
#define ROTATE_UP_PREVIOUS_EN "< Previous"
#define ROTATE_UP_MATERIAL_EN "Material:"
#define ROTATE_UP_PLA_EN "Model-PLA"
#define ROTATE_UP_NEXT_EN "Next >"
#define ROTATE_UP_TIPS_EN "Rotate extruder selection\ndial up."
//filament begin
#define FEED_BEGIN_TITLE_EN "Load Filament"
#define FEED_BEGIN_MATERIAL_EN "Material:"
#define FEED_BEGIN_PLA_EN "Model-PLA"
#define FEED_BEGIN_NEXT_EN "Next >"
#define FEED_BEGIN_TIPS_EN "Press Next when filament\nbegins to extrude."
//filament finish
#define FEED_FINISH_TITLE_EN "Load Filament"
#define FEED_FINISH_MATERIAL_EN "Material:"
#define FEED_FINISH_PLA_EN "Model-PLA"
#define FEED_FINISH_NEXT_EN "Finish >"
#define FEED_FINISH_TIPS_EN "Remove filament from the\nnozzle and discard."
//fiament remove
#define REMOVE_SPOOL_TITLE_EN "Unload Filament"
#define REMOVE_SPOOL_PREVIOUS_EN "< Previous"
#define REMOVE_SPOOL_FINISH_EN "Finish >"
#define REMOVE_SPOOL_MATERIAL_EN "Material:"
#define REMOVE_SPOOL_PLA_EN "Model-PLA"
#define REMOVE_SPOOL_TIPS_EN "Remove the spool and pull\nfilament out of the machine."
#define FILAMENT_SUPPORT_PVA_EN "Support-PVA"
#define LOAD_FINISH_EN "Load\nFilament\nComplete"
#define UNLOAD_FINISH_EN "Unload\nFilament\nComplete"
//manual ip
#define MANUAL_IP_TITLE_EN "Manual IP"
#define MANUAL_IP_CANCEL_EN "< Cancel"
#define MANUAL_IP_APPLY_EN "Join >"
#define MANUAL_IP_ADDRESS_EN "IP Address"
#define MANUAL_IP_MASK_EN "Subnet Mask"
#define MANUAL_IP_GATEWAY_EN "Default Gateway"
#define MANUAL_IP_SERVER_EN "Name Server"
#define MANUAL_IP_INIT_DATA_EN "0.0.0.0"
#define MANUAL_TEXT_POINT_EN "."
#define MANUAL_TEXT_ENTER_EN "enter"
//Wifi name
//#define TEXT_WIFI_MENU_TITLE_EN "WI-FI"
//#define TEXT_WIFI_SAPCE_EN "space"
//#define TEXT_WIFI_LETTER_EN "abc"
//#define TEXT_WIFI_DIGITAL_EN "123"
//#define TEXT_WIFI_SYMBOL_EN "#+="
//#define TEXT_WIFI_PASSWORD_EN "Password"
//#define TEXT_WIFI_POINT_BOLD_EN "`"
//#define TEXT_WIFI_JOINING_EN "Joining\nNetwork..."
//#define TEXT_WIFI_FAILED_JOIN_EN "Failed to\nJoin Wi-Fi"
//#define TEXT_WIFI_WIFI_CONECTED_EN "Wi-Fi\nConnected"
//#define TEXT_BUTTON_DISCONECTED_EN "Disconnect"
//#define TEXT_WIFI_FORGET_EN "Forget Network"
//#define TEXT_DISCONECTED_EN "Wi-Fi Connected"
#define TEXT_FORGET_TIPS_TITLE_EN "Forget Network"
#define TEXT_FORGET_NETWORK_TIPS1_EN "Are you sure you want to\nforget this network?"
#define TEXT_FORGET_NETWORK_TIPS2_EN "This machine will no longer\njoin this Wi-Fi Network."
#define TEXT_IPADDRESS_EN "IP Address: "
#define TEXT_BUILD_FROM_CURA_CANCEL_TIPS1_EN "Are you sure you want to\ncancel this build?"
#define TEXT_BUILD_FROM_CURA_CANCEL_TIPS2_EN "The model will be deleted\nfrom this machine.It will\nneed to be resent from your\ncomputer before it can be\nbuilt in the future."
#define DIALOG_CONFIRM_EN2 "Confirm"
#define HEATING_TITLE_EN "Heating"
#define LEVELING_TITLE_EN "Leveling"
#define ABOUT_SPARK_ADD_EN "Spark+"
#define TEXT_RECEIVING_DATA_EN "Receiving Data"
#define TEXT_BABY_STEP_EN "Babystep"
#define PRINTING_OTHER_LANGUGE "Printing"
#define PRINTING_OPERATION_OTHER_LANGUGE "Operation"
#define PRINTING_PAUSE_OTHER_LANGUGE "Pause"
#define MESSEGE_PAUSING_EN "Parking..."
#define MESSEGE_CHANGING_EN "Wait for filament change to start"
#define MESSEGE_UNLOAD_EN "Wait for filament unload"
#define MESSEGE_WAITING_EN "Press Button to resume print"
#define MESSEGE_INSERT_EN "Insert filament and press button to continue"
#define MESSEGE_LOAD_EN "Wait for filament load"
#define MESSEGE_PURGE_EN "Wait for filament purge"
#define MESSEGE_RESUME_EN "Wait for print to resume..."
#define MESSEGE_HEAT_EN "Press button to heat nozzle"
#define MESSEGE_HEATING_EN "Nozzle heating Please wait..."
#define MESSEGE_OPTION_EN "Purge more or continue print?"
#define MESSEGE_PURGE_MORE_EN "Purge"
#define MESSEGE_CONTINUE_PRINT_EN "Print"

View file

@ -0,0 +1,276 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#pragma once
//*************法文****************************//
#define TOOL_TEXT_FR "prêt"
#define PREHEAT_TEXT_FR "Préchauffe"
#define MOVE_TEXT_FR "Déplace"
#define HOME_TEXT_FR "Acceuil"
#define PRINT_TEXT_FR "Impression"
#define EXTRUDE_TEXT_FR "Extruder"
#define LEVELING_TEXT_FR "Leveling"
#define AUTO_LEVELING_TEXT_FR "AutoLevel"
#define SET_TEXT_FR "Config"
#define MORE_TEXT_FR "Plus"
#define ADD_TEXT_FR "Ajouter"
#define DEC_TEXT_FR "Réduire"
#define EXTRUDER_1_TEXT_FR "Extr1"
#define EXTRUDER_2_TEXT_FR "Extr2"
#define HEATBED_TEXT_FR "Hotlit"
#define TEXT_1C_FR "1℃"
#define TEXT_5C_FR "5℃"
#define TEXT_10C_FR "10℃"
#define CLOSE_TEXT_FR "Off"
#define BACK_TEXT_FR "Arrière"
#define TOOL_PREHEAT_FR "Préchauffe"
#define TOOL_EXTRUDE_FR "Extruder"
#define TOOL_MOVE_FR "Déplace"
#define TOOL_HOME_FR "Acceuil"
#define TOOL_LEVELING_FR "Leveling"
#define TOOL_AUTO_LEVELING_FR "AutoLevel"
#define TOOL_FILAMENT_FR "Filament"
#define TOOL_MORE_FR "Plus"
#define AXIS_X_ADD_TEXT_FR "X+"
#define AXIS_X_DEC_TEXT_FR "X-"
#define AXIS_Y_ADD_TEXT_FR "Y+"
#define AXIS_Y_DEC_TEXT_FR "Y-"
#define AXIS_Z_ADD_TEXT_FR "Z+"
#define AXIS_Z_DEC_TEXT_FR "Z-"
#define TEXT_01MM_FR "0.1mm"
#define TEXT_1MM_FR "1mm"
#define TEXT_10MM_FR "10mm"
#define HOME_X_TEXT_FR "X"
#define HOME_Y_TEXT_FR "Y"
#define HOME_Z_TEXT_FR "Z"
#define HOME_ALL_TEXT_FR "ALL"
#define HOME_STOPMOVE_FR "Quickstop"
#define PAGE_UP_TEXT_FR "En haut"
#define PAGE_DOWN_TEXT_FR "En bas"
#define EXTRUDER_IN_TEXT_FR "Insérer"
#define EXTRUDER_OUT_TEXT_FR "éjecter"
#define EXTRUDE_1MM_TEXT_FR "1mm"
#define EXTRUDE_5MM_TEXT_FR "5mm"
#define EXTRUDE_10MM_TEXT_FR "10mm"
#define EXTRUDE_LOW_SPEED_TEXT_FR "Lente"
#define EXTRUDE_MEDIUM_SPEED_TEXT_FR "Moyen"
#define EXTRUDE_HIGH_SPEED_TEXT_FR "Rapide"
#define LEVELING_POINT1_TEXT_FR "Premier"
#define LEVELING_POINT2_TEXT_FR "Seconde"
#define LEVELING_POINT3_TEXT_FR "Troisième"
#define LEVELING_POINT4_TEXT_FR "Quatrième"
#define LEVELING_POINT5_TEXT_FR "Cinquième"
#define FILESYS_TEXT_FR "Fichier"
#define WIFI_TEXT_FR "WiFi"
#define FAN_TEXT_FR "Fan"
#define ABOUT_TEXT_FR "A propos"
#define BREAK_POINT_TEXT_FR "Continuer"
#define FILAMENT_TEXT_FR "Remplacer"
#define LANGUAGE_TEXT_FR "Langue"
#define MOTOR_OFF_TEXT_FR "M-hors"
#define MOTOR_OFF_XY_TEXT_FR "M-hors-XY"
#define SHUTDOWN_TEXT_FR "Eteindre"
#define U_DISK_TEXT_FR "Clé usb"
#define SD_CARD_TEXT_FR "Carte SD"
#define WIFI_NAME_TEXT_FR "WiFi: "
#define WIFI_KEY_TEXT_FR "Key: "
#define WIFI_IP_TEXT_FR "IP: "
#define WIFI_AP_TEXT_FR "Etat: AP"
#define WIFI_STA_TEXT_FR "Etat: STA"
#define WIFI_CONNECTED_TEXT_FR "Connecté"
#define WIFI_DISCONNECTED_TEXT_FR "Déconnecté"
#define WIFI_EXCEPTION_TEXT_FR "Exception"
#define WIFI_RECONNECT_TEXT_FR "Reconnect"
#define CLOUD_TEXT_FR "Cloud"
#define CLOUD_BIND_FR "Lié"
#define CLOUD_UNBIND_FR "Délier"
#define CLOUD_UNBINDING_FR "Délier"
#define CLOUD_DISCONNECTED_FR "Déconnecté"
#define CLOUD_UNBINDED_FR "Délier"
#define CLOUD_BINDED_FR "Lié"
#define CLOUD_DISABLE_FR "Désactiver"
#define FAN_ADD_TEXT_FR "Ajouter"
#define FAN_DEC_TEXT_FR "Réduire"
#define FAN_OPEN_TEXT_FR "100%"
#define FAN_HALF_TEXT_FR "50%"
#define FAN_CLOSE_TEXT_FR "0%"
#define FAN_TIPS1_TEXT_FR "ventilateur"
#define FAN_TIPS2_TEXT_FR "ventilateur\n0"
#define FILAMENT_IN_TEXT_FR "Insérer"
#define FILAMENT_OUT_TEXT_FR "éjecter"
#define FILAMENT_EXT0_TEXT_FR "Extr1"
#define FILAMENT_EXT1_TEXT_FR "Extr2"
#define FILAMENT_HEAT_TEXT_FR "Preheat"
#define FILAMENT_STOP_TEXT_FR "Arrêter"
//#define FILAMENT_CHANGE_TEXT_FR "Filament remplacer"
#define FILAMENT_TIPS2_TEXT_FR "T:"
#define FILAMENT_TIPS3_TEXT_FR "Insérer le filament..."
#define FILAMENT_TIPS4_TEXT_FR "éjecter le filament..."
#define FILAMENT_TIPS5_TEXT_FR "Température trop basse pour démarrer, chauffez svp"
#define FILAMENT_TIPS6_TEXT_FR "Terminé"
#if 0
#define FILAMENT_REPLAYS_IDLE_TEXT_FR "Please click <Insérer> or <éjecter> \nto replace filament!"
#define FILAMENT_CHANGE_TEXT_FR "Please click <Insérer> or <éjecter>,\nAfter pinter pause."
#define FILAMENT_DIALOG_LOAD_HEAT_TIPS_FR "Heating up the nozzle,please wait..."
#define FILAMENT_DIALOG_UNLOAD_HEAT_TIPS_FR "Heating up the nozzle,please wait..."
#define FILAMENT_DIALOG_LOAD_CONFIRM1_TIPS_FR "Heat completed,please load filament to extruder,and click <Confirmer> for start loading."
#define FILAMENT_DIALOG_LOAD_CONFIRM2_TIPS_FR "Please load filament to extruder,and click <Confirmer> for start loading."
#define FILAMENT_DIALOG_UNLOAD_CONFIRM_TIPS_FR "Heat completed,please click <Confirmer> for start unloading.!"
#define FILAMENT_DIALOG_LOADING_TIPS_FR "Is loading ,please wait!"
#define FILAMENT_DIALOG_UNLOADING_TIPS_FR "Is unloading,please wait!"
#define FILAMENT_DIALOG_LOAD_COMPLETE_TIPS_FR "Load filament completed,click <Confirmer> for return!"
#define FILAMENT_DIALOG_UNLOAD_COMPLETE_TIPS_FR "Unload filament completed,click <Confirmer> for return!"
#endif
#define FILAMENT_CHANGE_TEXT_FR "Please click <Load> \nor <unload>,After \npinter pause."
#define FILAMENT_DIALOG_LOAD_HEAT_TIPS_FR "Heating up the nozzle,\nplease wait..."
#define FILAMENT_DIALOG_UNLOAD_HEAT_TIPS_FR "Heating up the nozzle,\nplease wait..."
#define FILAMENT_DIALOG_LOAD_CONFIRM1_TIPS_FR "Heat completed,please load filament \nto extruder,and click <confirm> \nfor start loading."
#define FILAMENT_DIALOG_LOAD_CONFIRM2_TIPS_FR "Please load filament to extruder,\nand click <confirm> for start loading."
#define FILAMENT_DIALOG_UNLOAD_CONFIRM_TIPS_FR "Heat completed,please \nclick <confirm> for start unloading.!"
#define FILAMENT_DIALOG_LOADING_TIPS_FR "Is loading ,please wait!"
#define FILAMENT_DIALOG_UNLOADING_TIPS_FR "Is unloading,please wait!"
#define FILAMENT_DIALOG_LOAD_COMPLETE_TIPS_FR "Load filament completed,\nclick <confirm> for return!"
#define FILAMENT_DIALOG_UNLOAD_COMPLETE_TIPS_FR "Unload filament completed,\nclick <confirm> for return!"
#define PRE_HEAT_EXT_TEXT_FR "E"
#define PRE_HEAT_BED_TEXT_FR "Bed"
#define FILE_LOADING_FR "Chargement......"
#if 0
#define NO_FILE_AND_CHECK_FR "Aucun fichier trouvé! Insérez une carte SD ou un disque U!"
#else
#define NO_FILE_AND_CHECK_FR "Aucun fichier,vérifiez à nouveau!"
#endif
#define NO_FILE_FR "Pas de fichier!"
#define EXTRUDER_TEMP_TEXT_FR "Temper"
#define EXTRUDER_E_LENGTH1_TEXT_FR "Extruder1"
#define EXTRUDER_E_LENGTH2_TEXT_FR "Extruder2"
#define EXTRUDER_E_LENGTH3_TEXT_FR "Extruder3"
#define ABOUT_TYPE_TEXT_FR "Type: "
#define ABOUT_VERSION_TEXT_FR "Firmware: "
#define ABOUT_WIFI_TEXT_FR "Wifi: "
#define PRINTING_OPERATION_FR "Option"
#define PRINTING_PAUSE_FR "Pause"
#define PRINTING_TEMP_FR "Temp."
#define PRINTING_CHANGESPEED_FR "Speed"
#define PRINTING_RESUME_FR "Reprendre"
#define PRINTING_STOP_FR "Stop"
#define PRINTING_MORE_FR "Plus"
#define PRINTING_EXTRUDER_FR "Extruder"
#define PRINTING_MOVE_FR "Déplace"
#define EXTRUDER_SPEED_FR "Extruder"
#define MOVE_SPEED_FR "Déplace"
#define EXTRUDER_SPEED_STATE_FR "Vitesse d'extrusion"
#define MOVE_SPEED_STATE_FR "vitesse de déplacement"
#define STEP_1PERCENT_FR "1%"
#define STEP_5PERCENT_FR "5%"
#define STEP_10PERCENT_FR "10%"
#define ZOFFSET_FR "Z Offset"
#define ZOFFSET_INC_FR "Ajouter"
#define ZOFFSET_DEC_FR "Réduire"
#define TITLE_READYPRINT_FR "Prête"
#define TITLE_PREHEAT_FR "Préchauffe"
#define TITLE_MOVE_FR "Déplace"
#define TITLE_HOME_FR "Acceuil"
#define TITLE_EXTRUDE_FR "Extruder"
#define TITLE_LEVELING_FR "Leveling"
#define TITLE_SET_FR "Paramètres"
#define TITLE_MORE_FR "Plus"
#define TITLE_CHOOSEFILE_FR "Fichier"
#define TITLE_PRINTING_FR "Pimpression"
#define TITLE_OPERATION_FR "Option"
#define TITLE_ADJUST_FR "Réglage"
#define TITLE_WIRELESS_FR "Sans fil"
#define TITLE_FILAMENT_FR "Remplacer"
#define TITLE_ABOUT_FR "A propos"
#define TITLE_FAN_FR "Ventilateur"
#define TITLE_LANGUAGE_FR "Langue"
#define TITLE_PAUSE_FR "Pause"
#define TITLE_CHANGESPEED_FR "Speed"
#define TITLE_CLOUD_TEXT_FR "Cloud"
#define TITLE_DIALOG_CONFIRM_FR "Confirm"
#define TITLE_FILESYS_FR "FileSys"
#define TITLE_ZOFFSET_FR "Z Offset"
#define DIALOG_CLOSE_MACHINE_FR "Closing machine......"
#define AUTO_SHUTDOWN_FR "Auto"
#define MANUAL_SHUTDOWN_FR "Manuel"
#define DIALOG_CONFIRM_FR "Confirmer"
#define DIALOG_CANCLE_FR "Annuler"
#define DIALOG_OK_FR "OK"
#define DIALOG_RESET_FR "Réinitialiser"
#define DIALOG_RETRY_FR "Recommencez"
#define DIALOG_DISABLE_FR "Disable"
#define DIALOG_PRINT_MODEL_FR "Imprimer le fichier?"
#define DIALOG_CANCEL_PRINT_FR "Arrêter?"
#define DIALOG_STOP_FR "Arrêter"
#define DIALOG_REPRINT_FROM_BREAKPOINT_FR "Continuer?"
//#define DIALOG_UNBIND_PRINTER_FR "Non lié?"
#define DIALOG_ERROR_TIPS1_FR "Erreur:error:Aucun fichier, \nvérifiez à nouveau."
#define DIALOG_ERROR_TIPS2_FR "Erreur:La opération a échoué. \nVerifiez que le baudrate de l'écran et de \nla carte mère soient identique!"
#define DIALOG_ERROR_TIPS3_FR "Erreur: le nom du fichier ou le \nchemin d'accès est trop long."
#define DIALOG_UNBIND_PRINTER_FR "Unbind the printer?"
#define DIALOG_FILAMENT_NO_PRESS_FR "Filament detection switch is not pressed"
#define DIALOG_PRINT_FINISH_FR "L'impression est terminée!"
#define DIALOG_PRINT_TIME_FR "Temps d'impression: "
#define DIALOG_REPRINT_FR "Print again"
#define DIALOG_WIFI_ENABLE_TIPS_FR "The wifi module is being configured,\nplease wait a moment....."
#define MESSEGE_PAUSING_FR "Parking..."
#define MESSEGE_CHANGING_FR "Attente filament pour démarrer"
#define MESSEGE_UNLOAD_FR "Attente retrait du filament"
#define MESSEGE_WAITING_FR "Presser bouton,pour reprendre"
#define MESSEGE_INSERT_FR "Insérer filament et app. bouton pour continuer..."
#define MESSEGE_LOAD_FR "Attente chargement filament"
#define MESSEGE_PURGE_FR "Attente Purge filament"
#define MESSEGE_RESUME_FR "Attente reprise impression"
#define MESSEGE_HEAT_FR "Presser le bouton pour chauffer..."
#define MESSEGE_HEATING_FR "Buse en chauffe Patienter SVP..."
#define MESSEGE_OPTION_FR "Purger davantage ou continuer l'impression?"
#define MESSEGE_PURGE_MORE_FR "Purge"
#define MESSEGE_CONTINUE_PRINT_FR "Impression"

View file

@ -0,0 +1,271 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#pragma once
//****************意大利语***************************//
#define TOOL_TEXT_IT "Strumento"
#define PREHEAT_TEXT_IT "Prerisc"
#define MOVE_TEXT_IT "Muovi"
#define HOME_TEXT_IT "Home"
#define PRINT_TEXT_IT "Stampa"
#define EXTRUDE_TEXT_IT "Estrude"
#define LEVELING_TEXT_IT "Leveling"
#define AUTO_LEVELING_TEXT_IT "AutoLevel"
#define SET_TEXT_IT "Imposta"
#define MORE_TEXT_IT "Di più"
#define ADD_TEXT_IT "Aumentare"
#define DEC_TEXT_IT "Ridurre"
#define EXTRUDER_1_TEXT_IT "Estrude1"
#define EXTRUDER_2_TEXT_IT "Estrude2"
#define HEATBED_TEXT_IT "Piano"
#define TEXT_1C_IT "1℃"
#define TEXT_5C_IT "5℃"
#define TEXT_10C_IT "10℃"
#define CLOSE_TEXT_IT "Spento"
#define BACK_TEXT_IT "Indietro"
#define TOOL_PREHEAT_IT "Prerisc"
#define TOOL_EXTRUDE_IT "Estrude"
#define TOOL_MOVE_IT "Muovi"
#define TOOL_HOME_IT "Home"
#define TOOL_LEVELING_IT "Leveling"
#define TOOL_AUTO_LEVELING_IT "Autolevel"
#define TOOL_FILAMENT_IT "Filamento"
#define TOOL_MORE_IT "Di più"
#define AXIS_X_ADD_TEXT_IT "X+"
#define AXIS_X_DEC_TEXT_IT "X-"
#define AXIS_Y_ADD_TEXT_IT "Y+"
#define AXIS_Y_DEC_TEXT_IT "Y-"
#define AXIS_Z_ADD_TEXT_IT "Z+"
#define AXIS_Z_DEC_TEXT_IT "Z-"
#define TEXT_01MM_IT "0.1mm"
#define TEXT_1MM_IT "1mm"
#define TEXT_10MM_IT "10mm"
#define HOME_X_TEXT_IT "X"
#define HOME_Y_TEXT_IT "Y"
#define HOME_Z_TEXT_IT "Z"
#define HOME_ALL_TEXT_IT "All"
#define HOME_STOPMOVE_IT "Quickstop"
#define PAGE_UP_TEXT_IT "Pagina su"
#define PAGE_DOWN_TEXT_IT "Pagina giù"
#define EXTRUDER_IN_TEXT_IT "Estru"
#define EXTRUDER_OUT_TEXT_IT "Ritra"
#define EXTRUDE_1MM_TEXT_IT "1mm"
#define EXTRUDE_5MM_TEXT_IT "5mm"
#define EXTRUDE_10MM_TEXT_IT "10mm"
#define EXTRUDE_LOW_SPEED_TEXT_IT "Bassa"
#define EXTRUDE_MEDIUM_SPEED_TEXT_IT "Media"
#define EXTRUDE_HIGH_SPEED_TEXT_IT "Alta"
#define LEVELING_POINT1_TEXT_IT "Primo"
#define LEVELING_POINT2_TEXT_IT "Secondo"
#define LEVELING_POINT3_TEXT_IT "Terzo"
#define LEVELING_POINT4_TEXT_IT "Quarto"
#define LEVELING_POINT5_TEXT_IT "Quinto"
#define FILESYS_TEXT_IT "FileSys"
#define WIFI_TEXT_IT "WIFI"
#define FAN_TEXT_IT "Ventola"
#define ABOUT_TEXT_IT "Circa"
#define BREAK_POINT_TEXT_IT "Continua"
#define FILAMENT_TEXT_IT "Filamento"
#define LANGUAGE_TEXT_IT "Lingua"
#define MOTOR_OFF_TEXT_IT "Motor off"
#define MOTOR_OFF_XY_TEXT_IT "Off-XY"
#define SHUTDOWN_TEXT_IT "Spento"
#define U_DISK_TEXT_IT "USB"
#define SD_CARD_TEXT_IT "SD"
#define WIFI_NAME_TEXT_IT "WIFI: "
#define WIFI_KEY_TEXT_IT "KEY: "
#define WIFI_IP_TEXT_IT "IP: "
#define WIFI_AP_TEXT_IT "Stato: AP"
#define WIFI_STA_TEXT_IT "Stato: STA"
#define WIFI_CONNECTED_TEXT_IT "Connesso"
#define WIFI_DISCONNECTED_TEXT_IT "Disconnesso"
#define WIFI_EXCEPTION_TEXT_IT "Eccezione"
#define WIFI_RECONNECT_TEXT_IT "Reconnect"
#define CLOUD_TEXT_IT "Cloud"
#define CLOUD_BIND_IT "Legato"
#define CLOUD_UNBIND_IT "Libero"
#define CLOUD_DISCONNECTED_IT "Disconnesso"
#define CLOUD_UNBINDING_IT "Libero"
#define CLOUD_UNBINDED_IT "Sciolto"
#define CLOUD_BINDED_IT "Legato"
#define CLOUD_DISABLE_IT "Disable"
#define FAN_ADD_TEXT_IT "Aumentare"
#define FAN_DEC_TEXT_IT "Ridurre"
#define FAN_OPEN_TEXT_IT "100%"
#define FAN_HALF_TEXT_IT "50%"
#define FAN_CLOSE_TEXT_IT "Spento"
#define FAN_TIPS1_TEXT_IT "Ventola"
#define FAN_TIPS2_TEXT_IT "Ventola\n0"
#define FILAMENT_IN_TEXT_IT "Inser"
#define FILAMENT_OUT_TEXT_IT "Estra"
#define FILAMENT_EXT0_TEXT_IT "Estrude1"
#define FILAMENT_EXT1_TEXT_IT "Estrude2"
#define FILAMENT_HEAT_TEXT_IT "Preriscaldamento"
#define FILAMENT_STOP_TEXT_IT "Stop"
//#define FILAMENT_CHANGE_TEXT_IT "Filamento"
#define FILAMENT_TIPS2_TEXT_IT "T:"
#define FILAMENT_TIPS3_TEXT_IT "Inserimento del filamento..."
#define FILAMENT_TIPS4_TEXT_IT "Estrazione del filamento..."
#define FILAMENT_TIPS5_TEXT_IT "Temp is too low to go,please heat"
#define FILAMENT_TIPS6_TEXT_IT "Completato"
#if 0
#define FILAMENT_REPLAYS_IDLE_TEXT_IT "Please click <Estru> or <Ritra> \nto replace filament!"
#define FILAMENT_CHANGE_TEXT_IT "Please click <Estru> or <Ritra>,\nAfter pinter pause."
#define FILAMENT_DIALOG_LOAD_HEAT_TIPS_IT "Heating up the nozzle,please wait..."
#define FILAMENT_DIALOG_UNLOAD_HEAT_TIPS_IT "Heating up the nozzle,please wait..."
#define FILAMENT_DIALOG_LOAD_CONFIRM1_TIPS_IT "Heat completed,please load filament to extruder,and click <Conferma> for start loading."
#define FILAMENT_DIALOG_LOAD_CONFIRM2_TIPS_IT "Please load filament to extruder,and click <Conferma> for start loading."
#define FILAMENT_DIALOG_UNLOAD_CONFIRM_TIPS_IT "Heat completed,please click <Conferma> for start unloading.!"
#define FILAMENT_DIALOG_LOADING_TIPS_IT "Is loading ,please wait!"
#define FILAMENT_DIALOG_UNLOADING_TIPS_IT "Is unloading,please wait!"
#define FILAMENT_DIALOG_LOAD_COMPLETE_TIPS_IT "Load filament completed,click <Conferma> for return!"
#define FILAMENT_DIALOG_UNLOAD_COMPLETE_TIPS_IT "Unload filament completed,click <Conferma> for return!"
#endif
#define FILAMENT_CHANGE_TEXT_IT "Please click <Load> \nor <unload>,After \npinter pause."
#define FILAMENT_DIALOG_LOAD_HEAT_TIPS_IT "Heating up the nozzle,please wait..."
#define FILAMENT_DIALOG_UNLOAD_HEAT_TIPS_IT "Heating up the nozzle,please wait..."
#define FILAMENT_DIALOG_LOAD_CONFIRM1_TIPS_IT "Heat completed,please load filament \nto extruder,and click <confirm> \nfor start loading."
#define FILAMENT_DIALOG_LOAD_CONFIRM2_TIPS_IT "Please load filament to extruder,\nand click <confirm> for start loading."
#define FILAMENT_DIALOG_UNLOAD_CONFIRM_TIPS_IT "Heat completed,please \nclick <confirm> for start unloading.!"
#define FILAMENT_DIALOG_LOADING_TIPS_IT "Is loading ,please wait!"
#define FILAMENT_DIALOG_UNLOADING_TIPS_IT "Is unloading,please wait!"
#define FILAMENT_DIALOG_LOAD_COMPLETE_TIPS_IT "Load filament completed,\nclick <confirm> for return!"
#define FILAMENT_DIALOG_UNLOAD_COMPLETE_TIPS_IT "Unload filament completed,\nclick <confirm> for return!"
#define PRE_HEAT_EXT_TEXT_IT "E"
#define PRE_HEAT_BED_TEXT_IT "Piano"
#define FILE_LOADING_IT "Caricamento......"
#if 0
#define NO_FILE_AND_CHECK_IT "Nessun file trovato! Inserisci la scheda SD o il disco U!"
#endif
#define NO_FILE_AND_CHECK_IT "Nessun file,\n per favore controllare di nuovo!"
#define NO_FILE_IT "Nessun file!"
#define EXTRUDER_TEMP_TEXT_IT "Temper"
#define EXTRUDER_E_LENGTH1_TEXT_IT "Estrude1"
#define EXTRUDER_E_LENGTH2_TEXT_IT "Estrude2"
#define EXTRUDER_E_LENGTH3_TEXT_IT "Estrude3"
#define ABOUT_TYPE_TEXT_IT "Type: "
#define ABOUT_VERSION_TEXT_IT "Firmware: "
#define ABOUT_WIFI_TEXT_IT "WiFi: "
#define PRINTING_OPERATION_IT "Opzioni"
#define PRINTING_PAUSE_IT "Pause"
#define PRINTING_TEMP_IT "Temp."
#define PRINTING_CHANGESPEED_IT "Velocità"
#define PRINTING_RESUME_IT "Recupero"
#define PRINTING_STOP_IT "Stop"
#define PRINTING_MORE_IT "Di più"
#define PRINTING_EXTRUDER_IT "Estrude"
#define PRINTING_MOVE_IT "Muovi"
#define EXTRUDER_SPEED_IT "Estrude"
#define MOVE_SPEED_IT "Muovi"
#define EXTRUDER_SPEED_STATE_IT "Estrusione"
#define MOVE_SPEED_STATE_IT "Movimento"
#define STEP_1PERCENT_IT "1%"
#define STEP_5PERCENT_IT "5%"
#define STEP_10PERCENT_IT "10%"
#define ZOFFSET_IT "Z Offset"
#define ZOFFSET_INC_IT "Add"
#define ZOFFSET_DEC_IT "Dec"
#define TITLE_READYPRINT_IT "Pronto"
#define TITLE_PREHEAT_IT "Preris"
#define TITLE_MOVE_IT "Muovi"
#define TITLE_HOME_IT "Home"
#define TITLE_EXTRUDE_IT "Estrude"
#define TITLE_LEVELING_IT "Livella"
#define TITLE_SET_IT "Impostare"
#define TITLE_MORE_IT "Di più"
#define TITLE_CHOOSEFILE_IT "File"
#define TITLE_PRINTING_IT "Stampa"
#define TITLE_OPERATION_IT "Opzioni"
#define TITLE_ADJUST_IT "Regolare"
#define TITLE_WIRELESS_IT "Wireless"
#define TITLE_FILAMENT_IT "Filamento"
#define TITLE_ABOUT_IT "Circa"
#define TITLE_FAN_IT "Ventola"
#define TITLE_LANGUAGE_IT "Lingua"
#define TITLE_PAUSE_IT "Pausa"
#define TITLE_CHANGESPEED_IT "Velocità"
#define TITLE_CLOUD_TEXT_IT "Cloud"
#define TITLE_DIALOG_CONFIRM_IT "Confirm"
#define TITLE_FILESYS_IT "FileSys"
#define TITLE_ZOFFSET_IT "Z Offset"
#define AUTO_SHUTDOWN_IT "Auto"
#define MANUAL_SHUTDOWN_IT "Manuale"
#define DIALOG_CONFIRM_IT "Conferma"
#define DIALOG_CANCLE_IT "Cancella"
#define DIALOG_OK_IT "OK"
#define DIALOG_RESET_IT "Resettare"
#define DIALOG_RETRY_IT "Riprovare"
#define DIALOG_DISABLE_IT "Disable"
#define DIALOG_PRINT_MODEL_IT "Gcode stampa?"
#define DIALOG_CANCEL_PRINT_IT "Stop stampa?"
#define DIALOG_STOP_IT "Stop"
#define DIALOG_REPRINT_FROM_BREAKPOINT_IT "Continua a stampare dal \npunto di interruzione?"
//#define DIALOG_UNBIND_PRINTER_IT "Libero?"
#define DIALOG_ERROR_TIPS1_IT "Errore: nessun file, \nper favore controllare di nuovo."
#define DIALOG_ERROR_TIPS2_IT "Errore: operazione non riuscita, \nsi prega di controllare se il baudrate del \ndisplay è lo stesso scheda madre"
#define DIALOG_ERROR_TIPS3_IT "Errore: il nome del file o il \npercorso è troppo lungo!"
#define DIALOG_CLOSE_MACHINE_IT "Closing machine......"
#define DIALOG_UNBIND_PRINTER_IT "Unbind the printer?"
#define DIALOG_FILAMENT_NO_PRESS_IT "Filament detection switch is not pressed"
#define DIALOG_PRINT_FINISH_IT "La stampa è completa!"
#define DIALOG_PRINT_TIME_IT "Tempo di stampa: "
#define DIALOG_REPRINT_IT "Print again"
#define DIALOG_WIFI_ENABLE_TIPS_IT "The wifi module is being configured,\nplease wait a moment....."
#define MESSEGE_PAUSING_IT "Parcheggiando..."
#define MESSEGE_CHANGING_IT "Attendere avvio del cambio di filamento"
#define MESSEGE_UNLOAD_IT "Attendere l'espulsione del filamento"
#define MESSEGE_WAITING_IT "Premi per riprendere la stampa"
#define MESSEGE_INSERT_IT "Inserisci il filamento e premi per continuare"
#define MESSEGE_LOAD_IT "Attendere il caricamento del filamento"
#define MESSEGE_PURGE_IT "Attendere lo spurgo del filamento"
#define MESSEGE_RESUME_IT "Attendere la ripresa della stampa..."
#define MESSEGE_HEAT_IT "Premi per riscaldare ugello"
#define MESSEGE_HEATING_IT "Riscaldam. ugello Attendere prego..."
#define MESSEGE_OPTION_IT "Eliminare di più o continuare a stampare?"
#define MESSEGE_PURGE_MORE_IT "Epurazione"
#define MESSEGE_CONTINUE_PRINT_IT "Stampa"

View file

@ -0,0 +1,272 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#pragma once
//****************俄语***************************//
#define TOOL_TEXT_RU "инструмент"
#define PREHEAT_TEXT_RU " нагрев"
#define MOVE_TEXT_RU "движение"
#define HOME_TEXT_RU "домой"
#define PRINT_TEXT_RU " печать"
#define EXTRUDE_TEXT_RU "экструзия"
#define LEVELING_TEXT_RU "уровень"
#define AUTO_LEVELING_TEXT_RU "aвто"
#define SET_TEXT_RU "настройки"
#define MORE_TEXT_RU "больше"
#define ADD_TEXT_RU "добавить"
#define DEC_TEXT_RU "уменьшить"
#define EXTRUDER_1_TEXT_RU "экструдер1"
#define EXTRUDER_2_TEXT_RU "экструдер2"
#define HEATBED_TEXT_RU "стол"
#define TEXT_1C_RU "1℃"
#define TEXT_5C_RU "5℃"
#define TEXT_10C_RU "10℃"
#define CLOSE_TEXT_RU "выкл"
#define BACK_TEXT_RU "назад"
#define TOOL_PREHEAT_RU "нагрев"
#define TOOL_EXTRUDE_RU "экструзия"
#define TOOL_MOVE_RU "движение"
#define TOOL_HOME_RU "домой"
#define TOOL_LEVELING_RU "уровень"
#define TOOL_AUTO_LEVELING_RU "aвто"
#define TOOL_FILAMENT_RU "замена"
#define TOOL_MORE_RU "больше"
#define AXIS_X_ADD_TEXT_RU "X+"
#define AXIS_X_DEC_TEXT_RU "X-"
#define AXIS_Y_ADD_TEXT_RU "Y+"
#define AXIS_Y_DEC_TEXT_RU "Y-"
#define AXIS_Z_ADD_TEXT_RU "Z+"
#define AXIS_Z_DEC_TEXT_RU "Z-"
#define TEXT_01MM_RU "0.1mm"
#define TEXT_1MM_RU "1mm"
#define TEXT_10MM_RU "10mm"
#define HOME_X_TEXT_RU "X"
#define HOME_Y_TEXT_RU "Y"
#define HOME_Z_TEXT_RU "Z"
#define HOME_ALL_TEXT_RU "Home"
#define HOME_STOPMOVE_RU "Quickstop"
#define PAGE_UP_TEXT_RU "вверх"
#define PAGE_DOWN_TEXT_RU "вниз"
#define EXTRUDER_IN_TEXT_RU "втянуть"
#define EXTRUDER_OUT_TEXT_RU "выдавить"
#define EXTRUDE_1MM_TEXT_RU "1mm"
#define EXTRUDE_5MM_TEXT_RU "5mm"
#define EXTRUDE_10MM_TEXT_RU "10mm"
#define EXTRUDE_LOW_SPEED_TEXT_RU "мин"
#define EXTRUDE_MEDIUM_SPEED_TEXT_RU "сред"
#define EXTRUDE_HIGH_SPEED_TEXT_RU "выс"
#define LEVELING_POINT1_TEXT_RU "1точка"
#define LEVELING_POINT2_TEXT_RU "2точка"
#define LEVELING_POINT3_TEXT_RU "3точка"
#define LEVELING_POINT4_TEXT_RU "4точка"
#define LEVELING_POINT5_TEXT_RU "5точка"
#define FILESYS_TEXT_RU "система"
#define WIFI_TEXT_RU "WiFi"
#define FAN_TEXT_RU "вентилятор"
#define ABOUT_TEXT_RU "инфо"
#define BREAK_POINT_TEXT_RU "продолжить"
#define FILAMENT_TEXT_RU "замена"
#define LANGUAGE_TEXT_RU "язык"
#define MOTOR_OFF_TEXT_RU "отклмотор"
#define MOTOR_OFF_XY_TEXT_RU "Off-XY"
#define SHUTDOWN_TEXT_RU "выключение"
#define U_DISK_TEXT_RU "U диск"
#define SD_CARD_TEXT_RU "SD диск"
#define WIFI_NAME_TEXT_RU "WiFi: "
#define WIFI_KEY_TEXT_RU "пароль: "
#define WIFI_IP_TEXT_RU "IP: "
#define WIFI_AP_TEXT_RU "режим: AP"
#define WIFI_STA_TEXT_RU "режим: STA"
#define WIFI_CONNECTED_TEXT_RU "подключен"
#define WIFI_DISCONNECTED_TEXT_RU "не подключен"
#define WIFI_EXCEPTION_TEXT_RU "исключение"
#define WIFI_RECONNECT_TEXT_RU "Reconnect"
#define CLOUD_TEXT_RU "облако"
#define CLOUD_BIND_RU "соединён"
#define CLOUD_UNBIND_RU "не соединён"
#define CLOUD_UNBINDING_RU "Unbinding"
#define CLOUD_DISCONNECTED_RU "Disconnected"
#define CLOUD_UNBINDED_RU "Unbinded"
#define CLOUD_BINDED_RU "Binded"
#define CLOUD_DISABLE_RU "Disable"
#define FAN_ADD_TEXT_RU "добавить"
#define FAN_DEC_TEXT_RU "уменьшить"
#define FAN_OPEN_TEXT_RU "100%"
#define FAN_HALF_TEXT_RU "50%"
#define FAN_CLOSE_TEXT_RU "откл"
#define FAN_TIPS1_TEXT_RU "вентилятор"
#define FAN_TIPS2_TEXT_RU "вентилятор\nоткл"
#define FILAMENT_IN_TEXT_RU "втянуть"
#define FILAMENT_OUT_TEXT_RU "выдавить"
#define FILAMENT_EXT0_TEXT_RU "экструдер1"
#define FILAMENT_EXT1_TEXT_RU "экструдер2"
#define FILAMENT_HEAT_TEXT_RU "нагрев"
#define FILAMENT_STOP_TEXT_RU "стоп"
//#define FILAMENT_CHANGE_TEXT_RU "замена"
#define FILAMENT_TIPS2_TEXT_RU "T:"
#define FILAMENT_TIPS3_TEXT_RU "втянуть..."
#define FILAMENT_TIPS4_TEXT_RU "вядавить..."
#define FILAMENT_TIPS5_TEXT_RU "Низкая температура, \nнеобходим нагрев"
#define FILAMENT_TIPS6_TEXT_RU "завершено"
#if 0
#define FILAMENT_REPLAYS_IDLE_TEXT_RU "Please click <втянуть> or <выдавить> \nto replace filament!"
#define FILAMENT_CHANGE_TEXT_RU "Please click <втянуть> or <выдавить>,\nAfter pinter pause."
#define FILAMENT_DIALOG_LOAD_HEAT_TIPS_RU "Heating up the nozzle,please wait..."
#define FILAMENT_DIALOG_UNLOAD_HEAT_TIPS_RU "Heating up the nozzle,please wait..."
#define FILAMENT_DIALOG_LOAD_CONFIRM1_TIPS_RU "Heat completed,please load filament to extruder,and click <да> for start loading."
#define FILAMENT_DIALOG_LOAD_CONFIRM2_TIPS_RU "Please load filament to extruder,and click <да> for start loading."
#define FILAMENT_DIALOG_UNLOAD_CONFIRM_TIPS_RU "Heat completed,please click <да> for start unloading.!"
#define FILAMENT_DIALOG_LOADING_TIPS_RU "Is loading ,please wait!"
#define FILAMENT_DIALOG_UNLOADING_TIPS_RU "Is unloading,please wait!"
#define FILAMENT_DIALOG_LOAD_COMPLETE_TIPS_RU "Load filament completed,click <да> for return!"
#define FILAMENT_DIALOG_UNLOAD_COMPLETE_TIPS_RU "Unload filament completed,click <да> for return!"
#endif
#define FILAMENT_CHANGE_TEXT_RU "Please click <Load> \nor <unload>,After \npinter pause."
#define FILAMENT_DIALOG_LOAD_HEAT_TIPS_RU "Heating up the nozzle,\nplease wait..."
#define FILAMENT_DIALOG_UNLOAD_HEAT_TIPS_RU "Heating up the nozzle,\nplease wait..."
#define FILAMENT_DIALOG_LOAD_CONFIRM1_TIPS_RU "Heat completed,please load filament \nto extruder,and click <confirm> \nfor start loading."
#define FILAMENT_DIALOG_LOAD_CONFIRM2_TIPS_RU "Please load filament to extruder,\nand click <confirm> for start loading."
#define FILAMENT_DIALOG_UNLOAD_CONFIRM_TIPS_RU "Heat completed,please \nclick <confirm> for start unloading.!"
#define FILAMENT_DIALOG_LOADING_TIPS_RU "Is loading ,please wait!"
#define FILAMENT_DIALOG_UNLOADING_TIPS_RU "Is unloading,please wait!"
#define FILAMENT_DIALOG_LOAD_COMPLETE_TIPS_RU "Load filament completed,\nclick <confirm> for return!"
#define FILAMENT_DIALOG_UNLOAD_COMPLETE_TIPS_RU "Unload filament completed,\nclick <confirm> for return!"
#define PRE_HEAT_EXT_TEXT_RU "E"
#define PRE_HEAT_BED_TEXT_RU "стол"
#define FILE_LOADING_RU "загрузка......"
#if 0
#define NO_FILE_AND_CHECK_RU "Файлы не найдены! Вставьте SD-карту или диск U!"
#endif
#define NO_FILE_AND_CHECK_RU "нет файла,попробуйте ещё раз!"
#define NO_FILE_RU "нет файла!"
#define EXTRUDER_TEMP_TEXT_RU "температура"
#define EXTRUDER_E_LENGTH1_TEXT_RU "экструзия1"
#define EXTRUDER_E_LENGTH2_TEXT_RU "экструзия2"
#define EXTRUDER_E_LENGTH3_TEXT_RU "экструзия3"
#define ABOUT_TYPE_TEXT_RU "Type: "
#define ABOUT_VERSION_TEXT_RU "Firmware: "
#define ABOUT_WIFI_TEXT_RU "WiFi: "
#define PRINTING_OPERATION_RU "управление"
#define PRINTING_PAUSE_RU "пауза"
#define PRINTING_TEMP_RU "темп"
#define PRINTING_CHANGESPEED_RU "скорости"
#define PRINTING_RESUME_RU "возобновить"
#define PRINTING_STOP_RU "стоп"
#define PRINTING_MORE_RU "больше"
#define PRINTING_EXTRUDER_RU "экстр"
#define PRINTING_MOVE_RU "движение"
#define EXTRUDER_SPEED_RU "экстр"
#define MOVE_SPEED_RU "движ"
#define EXTRUDER_SPEED_STATE_RU "скорость экстр"
#define MOVE_SPEED_STATE_RU "скорость движ"
#define STEP_1PERCENT_RU "1%"
#define STEP_5PERCENT_RU "5%"
#define STEP_10PERCENT_RU "10%"
#define ZOFFSET_RU "Z Offset"
#define ZOFFSET_INC_RU "добавить"
#define ZOFFSET_DEC_RU "уменьшить"
#define TITLE_READYPRINT_RU "готов к"
#define TITLE_PREHEAT_RU "движение"
#define TITLE_MOVE_RU "движение"
#define TITLE_HOME_RU "Home"
#define TITLE_EXTRUDE_RU "экструзия"
#define TITLE_LEVELING_RU "уровень"
#define TITLE_SET_RU "настройки"
#define TITLE_MORE_RU "больше"
#define TITLE_CHOOSEFILE_RU "файла"
#define TITLE_PRINTING_RU "печать"
#define TITLE_OPERATION_RU "управление"
#define TITLE_ADJUST_RU "регулировать"
#define TITLE_WIRELESS_RU "Wireless"
#define TITLE_FILAMENT_RU "замена"
#define TITLE_ABOUT_RU "инфо"
#define TITLE_FAN_RU "вентилятор"
#define TITLE_LANGUAGE_RU "язык"
#define TITLE_PAUSE_RU "пауза"
#define TITLE_CHANGESPEED_RU "скорости"
#define TILE_TOOL_RU "инструмент"
#define TITLE_CLOUD_TEXT_RU "Cloud"
#define TITLE_DIALOG_CONFIRM_RU "Confirm"
#define TITLE_FILESYS_RU "FileSys"
#define TITLE_ZOFFSET_RU "Z Offset"
#define AUTO_SHUTDOWN_RU "авто-откл"
#define MANUAL_SHUTDOWN_RU "ручн-откл"
#define DIALOG_CONFIRM_RU "да"//"подтвердить"
#define DIALOG_CANCLE_RU "отмена"
#define DIALOG_OK_RU "да"
#define DIALOG_RESET_RU "сброс"
#define DIALOG_RETRY_RU "повтор"
#define DIALOG_DISABLE_RU "запретить"
#define DIALOG_PRINT_MODEL_RU "печать модели?"
#define DIALOG_CANCEL_PRINT_RU "стоп?"
#define DIALOG_STOP_RU "стоп"
#define DIALOG_REPRINT_FROM_BREAKPOINT_RU "продолжить?"
//#define DIALOG_UNBIND_PRINTER_RU "разрыв?"
#define DIALOG_ERROR_TIPS1_RU "ошибка:нет файла, попробуйте ещё раз."
#define DIALOG_ERROR_TIPS2_RU "ошибка:сбой передачи. установите скорость \nпередачи данных как на плате управления!"
#define DIALOG_ERROR_TIPS3_RU "ошибка: имя файла слишком длинное!"
#define DIALOG_CLOSE_MACHINE_RU "Closing machine......"
#define DIALOG_UNBIND_PRINTER_RU "Unbind the printer?"
#define DIALOG_FILAMENT_NO_PRESS_RU "Filament detection switch is not pressed"
#define DIALOG_PRINT_FINISH_RU "Печать завершена!"
#define DIALOG_PRINT_TIME_RU "Время печати: "
#define DIALOG_REPRINT_RU "Print again"
#define DIALOG_WIFI_ENABLE_TIPS_RU "The wifi module is being configured,\nplease wait a moment....."
#define MESSEGE_PAUSING_RU "Стоянка..."
#define MESSEGE_CHANGING_RU "Подождите, пока начнется смена филамента"
#define MESSEGE_UNLOAD_RU "Дождитесь выгрузки нити"
#define MESSEGE_WAITING_RU "Нажмите кнопку,чтобы возобновить печать"
#define MESSEGE_INSERT_RU "Вставьте нить и нажмите кнопку,чтобы продолжить"
#define MESSEGE_LOAD_RU "Дождитесь загрузки нити"
#define MESSEGE_PURGE_RU "Дождитесь чистки нити"
#define MESSEGE_RESUME_RU "Подождите,пока печать возобновится ..."
#define MESSEGE_HEAT_RU "Нажмите кнопку, чтобы нагреть форсунку"
#define MESSEGE_HEATING_RU "Подогрев форсунки Пожалуйста, подождите ..."
#define MESSEGE_OPTION_RU "Очистить больше или продолжить печать?"
#define MESSEGE_PURGE_MORE_RU "чистка"
#define MESSEGE_CONTINUE_PRINT_RU "Распечатать"

View file

@ -0,0 +1,264 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#pragma once
//*************简体中文***********************//
#define TOOL_TEXT_CN "工具"
#define PREHEAT_TEXT_CN "预热"
#define MOVE_TEXT_CN "移动"
#define HOME_TEXT_CN "回零"
#define PRINT_TEXT_CN "打印"
#define EXTRUDE_TEXT_CN "挤出"
#define LEVELING_TEXT_CN "调平"
#define AUTO_LEVELING_TEXT_CN "自动调平"
#define SET_TEXT_CN "设置"
#define MORE_TEXT_CN "更多"
#define ADD_TEXT_CN "增加"
#define DEC_TEXT_CN "减少"
#define EXTRUDER_1_TEXT_CN "喷头1"
#define EXTRUDER_2_TEXT_CN "喷头2"
#define HEATBED_TEXT_CN "热床"
#define TEXT_1C_CN "1℃"
#define TEXT_5C_CN "5℃"
#define TEXT_10C_CN "10℃"
#define CLOSE_TEXT_CN "关闭"
#define BACK_TEXT_CN "返回"
#define TOOL_PREHEAT_CN "预热"
#define TOOL_EXTRUDE_CN "挤出"
#define TOOL_MOVE_CN "移动"
#define TOOL_HOME_CN "回零"
#define TOOL_LEVELING_CN "调平"
#define TOOL_AUTO_LEVELING_CN "自动调平"
#define TOOL_FILAMENT_CN "换料"
#define TOOL_MORE_CN "更多"
#define AXIS_X_ADD_TEXT_CN "X+"
#define AXIS_X_DEC_TEXT_CN "X-"
#define AXIS_Y_ADD_TEXT_CN "Y+"
#define AXIS_Y_DEC_TEXT_CN "Y-"
#define AXIS_Z_ADD_TEXT_CN "Z+"
#define AXIS_Z_DEC_TEXT_CN "Z-"
#define TEXT_01MM_CN "0.1mm"
#define TEXT_1MM_CN "1mm"
#define TEXT_10MM_CN "10mm"
#define HOME_X_TEXT_CN "X"
#define HOME_Y_TEXT_CN "Y"
#define HOME_Z_TEXT_CN "Z"
#define HOME_ALL_TEXT_CN "回零"
#define HOME_STOPMOVE_CN "急停"
#define PAGE_UP_TEXT_CN "上一页"
#define PAGE_DOWN_TEXT_CN "下一页"
#define EXTRUDER_IN_TEXT_CN "进料"
#define EXTRUDER_OUT_TEXT_CN "退料"
#define EXTRUDE_1MM_TEXT_CN "1mm"
#define EXTRUDE_5MM_TEXT_CN "5mm"
#define EXTRUDE_10MM_TEXT_CN "10mm"
#define EXTRUDE_LOW_SPEED_TEXT_CN "低速"
#define EXTRUDE_MEDIUM_SPEED_TEXT_CN "常速"
#define EXTRUDE_HIGH_SPEED_TEXT_CN "高速"
#define LEVELING_POINT1_TEXT_CN "第一点"
#define LEVELING_POINT2_TEXT_CN "第二点"
#define LEVELING_POINT3_TEXT_CN "第三点"
#define LEVELING_POINT4_TEXT_CN "第四点"
#define LEVELING_POINT5_TEXT_CN "第五点"
#define FILESYS_TEXT_CN "文件系统"
#define WIFI_TEXT_CN "WIFI"
#define FAN_TEXT_CN "风扇"
#define ABOUT_TEXT_CN "关于"
#define BREAK_POINT_TEXT_CN "断点续打"
#define FILAMENT_TEXT_CN "换料"
#define LANGUAGE_TEXT_CN "语言"
#define MOTOR_OFF_TEXT_CN "关闭电机"
#define MOTOR_OFF_XY_TEXT_CN "关闭XY"
#define SHUTDOWN_TEXT_CN "关机"
#define U_DISK_TEXT_CN "U盘"
#define SD_CARD_TEXT_CN "SD卡"
#define WIFI_NAME_TEXT_CN "无线网络:"
#define WIFI_KEY_TEXT_CN "密码: "
#define WIFI_IP_TEXT_CN "IP: "
#define WIFI_AP_TEXT_CN "状态: AP"
#define WIFI_STA_TEXT_CN "状态: STA"
#define WIFI_CONNECTED_TEXT_CN "已连接"
#define WIFI_DISCONNECTED_TEXT_CN "未连接"
#define WIFI_EXCEPTION_TEXT_CN "模块异常"
#define CLOUD_TEXT_CN "云服务"
#define CLOUD_BIND_CN "已绑定"
#define CLOUD_UNBIND_CN "解绑"
#define CLOUD_UNBINDING_CN "解绑中"
#define CLOUD_DISCONNECTED_CN "未连接"
#define CLOUD_UNBINDED_CN "未绑定"
#define CLOUD_BINDED_CN "已绑定"
#define CLOUD_DISABLE_CN "已禁用"
#define FAN_ADD_TEXT_CN "增加"
#define FAN_DEC_TEXT_CN "减少"
#define FAN_OPEN_TEXT_CN "100%"
#define FAN_HALF_TEXT_CN "50%"
#define FAN_CLOSE_TEXT_CN "关闭"
#define FAN_TIPS1_TEXT_CN "风扇"
#define FAN_TIPS2_TEXT_CN "FAN\nClose"
#define FILAMENT_IN_TEXT_CN "进料"
#define FILAMENT_OUT_TEXT_CN "退料"
#define FILAMENT_EXT0_TEXT_CN "喷头1"
#define FILAMENT_EXT1_TEXT_CN "喷头2"
#define FILAMENT_HEAT_TEXT_CN "预热"
#define FILAMENT_STOP_TEXT_CN "停止"
#if 0
#define FILAMENT_REPLAYS_IDLE_TEXT_CN "请按<进料>或<退料>进行换料!"
#define FILAMENT_CHANGE_TEXT_CN "待打印机暂停后,请按<进料>或<退料>进行换料!"
#else
#define FILAMENT_CHANGE_TEXT_CN "待打印机暂停后,\n请按<进料>或<退料>"
#endif
#define FILAMENT_DIALOG_LOAD_HEAT_TIPS_CN "准备进料,正在加热,请稍等!"
#define FILAMENT_DIALOG_UNLOAD_HEAT_TIPS_CN "准备退料,正在加热,请稍等!"
#define FILAMENT_DIALOG_LOAD_CONFIRM1_TIPS_CN "加热完成,请装载耗材后,按<确定>开始进料!"
#define FILAMENT_DIALOG_LOAD_CONFIRM2_TIPS_CN "请装载耗材,按<确定>开始进料!"
#define FILAMENT_DIALOG_UNLOAD_CONFIRM_TIPS_CN "加热完成,请按<确定>开始退料!"
#define FILAMENT_DIALOG_LOADING_TIPS_CN "正在进料,请等待耗材加载完成!"
#define FILAMENT_DIALOG_UNLOADING_TIPS_CN "正在退料,请等待耗材卸载完成!"
#define FILAMENT_DIALOG_LOAD_COMPLETE_TIPS_CN "进料完成,请按<确定>返回"
#define FILAMENT_DIALOG_UNLOAD_COMPLETE_TIPS_CN "退料完成,请按<确定>返回"
#define FILAMENT_TIPS3_TEXT_CN "正在进料"
#define FILAMENT_TIPS4_TEXT_CN "正在退料"
#define FILAMENT_TIPS5_TEXT_CN "温度太低,请先预热"
#define FILAMENT_TIPS6_TEXT_CN "换料完成"
#define PRE_HEAT_EXT_TEXT_CN "喷头"
#define PRE_HEAT_BED_TEXT_CN "热床"
#define FILE_LOADING_CN "正在载入......"
#define NO_FILE_AND_CHECK_CN "无文件!请插入sd卡或u盘!"
#define NO_FILE_CN "无文件!"
#define EXTRUDER_TEMP_TEXT_CN "温度"
#define EXTRUDER_E_LENGTH1_TEXT_CN "喷头"
#define EXTRUDER_E_LENGTH2_TEXT_CN "喷头"
#define EXTRUDER_E_LENGTH3_TEXT_CN "喷头"
#define ABOUT_TYPE_TEXT_CN "Type: "
#define ABOUT_VERSION_TEXT_CN "Firmware: "
#define ABOUT_WIFI_TEXT_CN "Wifi: "
#define PRINTING_OPERATION_CN "操作"
#define PRINTING_PAUSE_CN "暂停"
#define PRINTING_TEMP_CN "温度"
#define PRINTING_CHANGESPEED_CN "变速"
#define PRINTING_RESUME_CN "恢复"
#define PRINTING_STOP_CN "停止"
#define PRINTING_MORE_CN "更多"
#define PRINTING_EXTRUDER_CN "挤出"
#define PRINTING_MOVE_CN "移动"
#define EXTRUDER_SPEED_CN "挤出"
#define MOVE_SPEED_CN "移动"
#define EXTRUDER_SPEED_STATE_CN "挤出速度"
#define MOVE_SPEED_STATE_CN "移动速度"
#define STEP_1PERCENT_CN "1%"
#define STEP_5PERCENT_CN "5%"
#define STEP_10PERCENT_CN "10%"
#define ZOFFSET_CN "Z Offset"
#define ZOFFSET_INC_CN "增加"
#define ZOFFSET_DEC_CN "减少"
#define TITLE_READYPRINT_CN "准备打印"
#define TITLE_PREHEAT_CN "预热"
#define TITLE_MOVE_CN "移动"
#define TITLE_HOME_CN "回零"
#define TITLE_EXTRUDE_CN "挤出"
#define TITLE_LEVELING_CN "调平"
#define TITLE_SET_CN "设置"
#define TITLE_MORE_CN "更多"
#define TITLE_CHOOSEFILE_CN "选择文件"
#define TITLE_PRINTING_CN "正在打印"
#define TITLE_OPERATION_CN "操作"
#define TITLE_ADJUST_CN "调整"
#define TITLE_WIRELESS_CN "无线网络"
#define TITLE_FILAMENT_CN "换料"
#define TITLE_ABOUT_CN "关于"
#define TITLE_FAN_CN "风扇"
#define TITLE_LANGUAGE_CN "语言"
#define TITLE_PAUSE_CN "暂停"
#define TITLE_CHANGESPEED_CN "变速"
#define TITLE_CLOUD_TEXT_CN "云服务"
#define TITLE_DIALOG_CONFIRM_CN "确认"
#define TITLE_FILESYS_CN "文件系统"
#define TITLE_ZOFFSET_CN "Z Offset"
#define AUTO_SHUTDOWN_CN "自动关机"
#define MANUAL_SHUTDOWN_CN "手动关机"
#define DIALOG_CONFIRM_CN "确定"
#define DIALOG_CANCLE_CN "取消"
#define DIALOG_OK_CN "确认"
#define DIALOG_RESET_CN "重置"
#define DIALOG_DISABLE_CN "禁用"
#define DIALOG_PRINT_MODEL_CN "打印模型?"
#define DIALOG_CANCEL_PRINT_CN "停止打印?"
#define DIALOG_RETRY_CN "重试"
#define DIALOG_STOP_CN "停止"
#define DIALOG_REPRINT_FROM_BREAKPOINT_CN "从断点续打?"
//#define DIALOG_UNBIND_PRINTER_CN "解除绑定 ?"
#define DIALOG_ERROR_TIPS1_CN "错误:找不到文件,请插入sd卡/u盘!"
#define DIALOG_ERROR_TIPS2_CN "错误:通信失败,请检查波特率或主板硬件!"
#define DIALOG_ERROR_TIPS3_CN "错误:文件名或文件路径太长 !"
#define DIALOG_CLOSE_MACHINE_CN "正在关机......"
#define DIALOG_UNBIND_PRINTER_CN "解除绑定?"
#define DIALOG_FILAMENT_NO_PRESS_CN "请先装载耗材!"
#define DIALOG_PRINT_FINISH_CN "打印完成!"
#define DIALOG_PRINT_TIME_CN "打印时间: "
#define DIALOG_REPRINT_CN "再打印一次"
#define DIALOG_WIFI_ENABLE_TIPS_CN "wifi模块正在配置中,请稍等......"
#define TEXT_VALUE_CN "%d℃/%d℃"
#define EXTRUDE_TEXT_VALUE_T_CN ": %d℃"
#define WIFI_RECONNECT_TEXT_CN "重新连接"
#define PRINTING_GBK "正在打印"
#define PRINTING_OPERATION_GBK "操作"
#define PRINTING_PAUSE_GBK "暂停"
#define MESSEGE_PAUSING_CN "暂停中..."
#define MESSEGE_CHANGING_CN "等待换料开始..."
#define MESSEGE_UNLOAD_CN "退料中,请稍等..."
#define MESSEGE_WAITING_CN "点击按钮恢复打印"
#define MESSEGE_INSERT_CN "装载耗材后,点击按钮开始打印"
#define MESSEGE_LOAD_CN "进料中,请稍等..."
#define MESSEGE_PURGE_CN "等待挤出..."
#define MESSEGE_RESUME_CN "等待恢复打印..."
#define MESSEGE_HEAT_CN "按下按钮,加热喷头"
#define MESSEGE_HEATING_CN "喷头加热中,请等待..."
#define MESSEGE_OPTION_CN "挤出更多还是继续打印?"
#define MESSEGE_PURGE_MORE_CN "挤出"
#define MESSEGE_CONTINUE_PRINT_CN "打印"

View file

@ -0,0 +1,279 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#pragma once
//****************西班牙语***************************
#define TOOL_TEXT_SP "Ajustes"
#define PREHEAT_TEXT_SP "Precalentar"//"precalent\nar"
#define MOVE_TEXT_SP "Mover"
#define HOME_TEXT_SP "Origen"
#define PRINT_TEXT_SP "Imprimir"
#define EXTRUDE_TEXT_SP "Extrusor"
#define LEVELING_TEXT_SP "Leveling"//"nivelac\nión"
#define AUTO_LEVELING_TEXT_SP "Autolevel"//"auto\nnivelación"
#define SET_TEXT_SP "Config"
#define MORE_TEXT_SP "Más"
#define ADD_TEXT_SP "Más"
#define DEC_TEXT_SP "Menos"
#define EXTRUDER_1_TEXT_SP "Extrusor1: "
#define EXTRUDER_2_TEXT_SP "Extrusor2: "
#define HEATBED_TEXT_SP "Cama: "
#define TEXT_1C_SP "1℃"
#define TEXT_5C_SP "5℃"
#define TEXT_10C_SP "10℃"
#define CLOSE_TEXT_SP "Apagar"
#define BACK_TEXT_SP "Atrás"
#define TOOL_PREHEAT_SP "Precalentar"
#define TOOL_EXTRUDE_SP "Extrusor"
#define TOOL_MOVE_SP "Mover"
#define TOOL_HOME_SP "Origen"
#define TOOL_LEVELING_SP "Leveling"
#define TOOL_AUTO_LEVELING_SP "Autolevel"
#define TOOL_FILAMENT_SP "Filamento"
#define TOOL_MORE_SP "Más"
#define AXIS_X_ADD_TEXT_SP "X+"
#define AXIS_X_DEC_TEXT_SP "X-"
#define AXIS_Y_ADD_TEXT_SP "Y+"
#define AXIS_Y_DEC_TEXT_SP "Y-"
#define AXIS_Z_ADD_TEXT_SP "Z+"
#define AXIS_Z_DEC_TEXT_SP "Z-"
#define TEXT_01MM_SP "0.1mm"
#define TEXT_1MM_SP "1mm"
#define TEXT_10MM_SP "10mm"
#define HOME_X_TEXT_SP "EJE X"
#define HOME_Y_TEXT_SP "EJE Y"
#define HOME_Z_TEXT_SP "EJE Z"
#define HOME_ALL_TEXT_SP "TODOS"
#define HOME_STOPMOVE_SP "Quickstop"
#define PAGE_UP_TEXT_SP "Arriba"
#define PAGE_DOWN_TEXT_SP "Abajo"
#define EXTRUDER_IN_TEXT_SP "Dentro"
#define EXTRUDER_OUT_TEXT_SP "Fuera"
#define EXTRUDE_1MM_TEXT_SP "1mm"
#define EXTRUDE_5MM_TEXT_SP "5mm"
#define EXTRUDE_10MM_TEXT_SP "10mm"
#define EXTRUDE_LOW_SPEED_TEXT_SP "Baja"
#define EXTRUDE_MEDIUM_SPEED_TEXT_SP "Media"
#define EXTRUDE_HIGH_SPEED_TEXT_SP "Alta"
#define LEVELING_POINT1_TEXT_SP "Primero"
#define LEVELING_POINT2_TEXT_SP "Segundo"
#define LEVELING_POINT3_TEXT_SP "Tercero"
#define LEVELING_POINT4_TEXT_SP "Cuarto"
#define LEVELING_POINT5_TEXT_SP "Quinto"
#define FILESYS_TEXT_SP "Puerto"
#define WIFI_TEXT_SP "WiFi"
#define FAN_TEXT_SP "Ventilador"
#define ABOUT_TEXT_SP "Acerca"
#define BREAK_POINT_TEXT_SP "Continuar"
#define FILAMENT_TEXT_SP "Filamento"
#define LANGUAGE_TEXT_SP "Language"
#define MOTOR_OFF_TEXT_SP "Apagar motor"
#define MOTOR_OFF_XY_TEXT_SP "Off-XY"
#define SHUTDOWN_TEXT_SP "Apagar"
#define U_DISK_TEXT_SP "PENDRIVE"
#define SD_CARD_TEXT_SP "SD"
#define WIFI_NAME_TEXT_SP "WIFI: "
#define WIFI_KEY_TEXT_SP "Contraseña: "
#define WIFI_IP_TEXT_SP "IP: "
#define WIFI_AP_TEXT_SP "Estado: AP"
#define WIFI_STA_TEXT_SP "Estado: STA"
#define WIFI_CONNECTED_TEXT_SP "Conectado"
#define WIFI_DISCONNECTED_TEXT_SP "Desconectado"
#define WIFI_EXCEPTION_TEXT_SP "Excepción"
#define WIFI_RECONNECT_TEXT_SP "Reconnect"
#define CLOUD_TEXT_SP "Nube"
#define CLOUD_BIND_SP "Atado"
#define CLOUD_UNBIND_SP "Sin atar"
#define CLOUD_UNBINDING_SP "Unbinding"
#define CLOUD_DISCONNECTED_SP "Disconnected"
#define CLOUD_UNBINDED_SP "Unbinded"
#define CLOUD_BINDED_SP "Binded"
#define CLOUD_DISABLE_SP "Disable"
#define FAN_ADD_TEXT_SP "Más"
#define FAN_DEC_TEXT_SP "Menos"
#define FAN_OPEN_TEXT_SP "100%"
#define FAN_HALF_TEXT_SP "50%"
#define FAN_CLOSE_TEXT_SP "0%"
#define FAN_TIPS1_TEXT_SP "ventilador"
#define FAN_TIPS2_TEXT_SP "ventilador\n0"
#define FILAMENT_IN_TEXT_SP "Dentro"
#define FILAMENT_OUT_TEXT_SP "Fuera"
#define FILAMENT_EXT0_TEXT_SP "Extrusor1"
#define FILAMENT_EXT1_TEXT_SP "Extrusor2"
#define FILAMENT_HEAT_TEXT_SP "Precalentar"
#define FILAMENT_STOP_TEXT_SP "Parar"
//#define FILAMENT_CHANGE_TEXT_SP "Filamento"
#define FILAMENT_TIPS2_TEXT_SP "T:"
#define FILAMENT_TIPS3_TEXT_SP "Dentro..."
#define FILAMENT_TIPS4_TEXT_SP "Fuera..."
#define FILAMENT_TIPS5_TEXT_SP "Temperatura demasiado baja, por favor calentar"
#define FILAMENT_TIPS6_TEXT_SP "Completado"
#if 0
#define FILAMENT_REPLAYS_IDLE_TEXT_SP "Please click <Dentro> or <Fuera> \nto replace filament!"
#define FILAMENT_CHANGE_TEXT_SP "Please click <Dentro> or <Fuera>,\nAfter pinter pause."
#define FILAMENT_DIALOG_LOAD_HEAT_TIPS_SP "Calentando el extrusor, por favor espere..."
#define FILAMENT_DIALOG_UNLOAD_HEAT_TIPS_SP "Calentando el extrusor, por favor espere..."
#define FILAMENT_DIALOG_LOAD_CONFIRM1_TIPS_SP "Temperatura alcanzada.Inserte el filamento y luego presione\"Confirmar\"para comenzar la carga."
#define FILAMENT_DIALOG_LOAD_CONFIRM2_TIPS_SP "Inserte el filamento y luego presione\"Confirmar\"para comenzar la carga."
#define FILAMENT_DIALOG_UNLOAD_CONFIRM_TIPS_SP "Temperatura alcanzada.Presione\"Confirmar\"para retirar el filamento."
#define FILAMENT_DIALOG_LOADING_TIPS_SP "Cargando filamento,por favor espere."
#define FILAMENT_DIALOG_UNLOADING_TIPS_SP "Retirando filamento,por favor espere."
#define FILAMENT_DIALOG_LOAD_COMPLETE_TIPS_SP "Filamento cargado,presione\"Confirmar\"."
#define FILAMENT_DIALOG_UNLOAD_COMPLETE_TIPS_SP "Filamento retirado,presione\"Confirmar\"."
#else
#define FILAMENT_CHANGE_TEXT_SP "Please click <Load> \nor <unload>,After \npinter pause."
#define FILAMENT_DIALOG_LOAD_HEAT_TIPS_SP "Calentando el extrusor,\npor favor espere..."
#define FILAMENT_DIALOG_UNLOAD_HEAT_TIPS_SP "Calentando el extrusor,\npor favor espere..."
#define FILAMENT_DIALOG_LOAD_CONFIRM1_TIPS_SP "Temperatura alcanzada.Inserte el \nfilamento y luego presione\"Confirmar\"\npara comenzar la carga."
#define FILAMENT_DIALOG_LOAD_CONFIRM2_TIPS_SP "Inserte el filamento y \nluego presione\"Confirmar\"para \ncomenzar la carga."
#define FILAMENT_DIALOG_UNLOAD_CONFIRM_TIPS_SP "Temperatura alcanzada.\nPresione\"Confirmar\"para retirar \nel filamento."
#define FILAMENT_DIALOG_LOADING_TIPS_SP "Cargando filamento,\npor favor espere."
#define FILAMENT_DIALOG_UNLOADING_TIPS_SP "Retirando filamento,\npor favor espere."
#define FILAMENT_DIALOG_LOAD_COMPLETE_TIPS_SP "Filamento cargado,\npresione\"Confirmar\"."
#define FILAMENT_DIALOG_UNLOAD_COMPLETE_TIPS_SP "Filamento retirado,\npresione\"Confirmar\"."
#endif
#define PRE_HEAT_EXT_TEXT_SP "Extrusor"
#define PRE_HEAT_BED_TEXT_SP "cama"
#define FILE_LOADING_SP "Cargando......"
#if 0
#define NO_FILE_AND_CHECK_SP "No se encontraron archivos! Por favor, inserte la tarjeta SD o el disco U!"
#endif
#define NO_FILE_AND_CHECK_SP "Archivo no encontrado,\n por favor insertar SD o disco USB!"
#define NO_FILE_SP "Sin archivo!"
#define EXTRUDER_TEMP_TEXT_SP "Temper"
#define EXTRUDER_E_LENGTH1_TEXT_SP "Extrusor1"
#define EXTRUDER_E_LENGTH2_TEXT_SP "Extrusor2"
#define EXTRUDER_E_LENGTH3_TEXT_SP "Extrusor3"
#define ABOUT_TYPE_TEXT_SP "Pantalla: "
#define ABOUT_VERSION_TEXT_SP "Firmware: "
#define ABOUT_WIFI_TEXT_SP "WiFi: "
#define PRINTING_OPERATION_SP "Ajustes"
#define PRINTING_PAUSE_SP "Pausar"
#define PRINTING_TEMP_SP "Temp."
#define PRINTING_CHANGESPEED_SP "Velocidad"
#define PRINTING_RESUME_SP "Resumir"
#define PRINTING_STOP_SP "Detener"
#define PRINTING_MORE_SP "Más"
#define PRINTING_EXTRUDER_SP "Extrusor"
#define PRINTING_MOVE_SP "Mover"
#define EXTRUDER_SPEED_SP "Extrusor"
#define MOVE_SPEED_SP "Mover"
#define EXTRUDER_SPEED_STATE_SP "Extrusión"
#define MOVE_SPEED_STATE_SP "Movimiento"
#define STEP_1PERCENT_SP "1%"
#define STEP_5PERCENT_SP "5%"
#define STEP_10PERCENT_SP "10%"
#define ZOFFSET_SP "Z Offset"
#define ZOFFSET_INC_SP "Más"
#define ZOFFSET_DEC_SP "Menos"
#define TITLE_READYPRINT_SP "Inicio"
#define TITLE_PREHEAT_SP "Precalentar"
#define TITLE_MOVE_SP "Mover"
#define TITLE_HOME_SP "Origen"
#define TITLE_EXTRUDE_SP "Extrusor"
#define TITLE_LEVELING_SP "Leveling"
#define TITLE_SET_SP "Config"
#define TITLE_MORE_SP "Más"
#define TITLE_CHOOSEFILE_SP "Imprimir"
#define TITLE_PRINTING_SP "Imprimir"
#define TITLE_OPERATION_SP "Ajustes"
#define TITLE_ADJUST_SP "Temp."
#define TITLE_WIRELESS_SP "Wireless"
#define TITLE_FILAMENT_SP "Filamento"
#define TITLE_ABOUT_SP "Acerca"
#define TITLE_FAN_SP "Ventilador"
#define TITLE_LANGUAGE_SP "Language"
#define TITLE_PAUSE_SP "Pausar"
#define TITLE_CHANGESPEED_SP "Velocidad"
#define TILE_TOOL_SP "Ajustes"
#define TITLE_CLOUD_TEXT_SP "Cloud"
#define TITLE_DIALOG_CONFIRM_SP "Confirmar"
#define TITLE_FILESYS_SP "Puerto"
#define TITLE_ZOFFSET_SP "Z Offset"
#define AUTO_SHUTDOWN_SP "Auto"
#define MANUAL_SHUTDOWN_SP "manual"
#define DIALOG_CONFIRM_SP "Confirmar"
#define DIALOG_CANCLE_SP "Cancelar"
#define DIALOG_OK_SP "OK"
#define DIALOG_RESET_SP "Resetear"
#define DIALOG_RETRY_SP "Reintentar"
#define DIALOG_DISABLE_SP "Desactivar"
#define DIALOG_PRINT_MODEL_SP "¿Está seguro?"
#define DIALOG_CANCEL_PRINT_SP "¿Está seguro que desea detener la impresión?"
#define DIALOG_RETRY_SP "Reintentar"
#define DIALOG_STOP_SP "Stop"
#define DIALOG_REPRINT_FROM_BREAKPOINT_SP "Reprint from breakpoint?"
//#define DIALOG_UNBIND_PRINTER_SP "Unbind the printer?"
#define DIALOG_ERROR_TIPS1_SP "Error:archivo no encontrado, \npor favor insertar SD o disco USB."
#define DIALOG_ERROR_TIPS2_SP "error:transacción fallida, \nconfigurar baudrate del \ndisplay para la placa base!"
#define DIALOG_ERROR_TIPS3_SP "Error : nombre de archivo o \nruta demasiado largo!"
#define DIALOG_CLOSE_MACHINE_SP "Closing machine......"
#define DIALOG_UNBIND_PRINTER_SP "Unbind the printer?"
#define DIALOG_FILAMENT_NO_PRESS_SP "Filament detection switch is not pressed"
#define DIALOG_PRINT_FINISH_SP "¡La impresión está completa!"
#define DIALOG_PRINT_TIME_SP "Tiempo de impresión: "
#define DIALOG_REPRINT_SP "Print again"
#define DIALOG_WIFI_ENABLE_TIPS_SP "The wifi module is being configured,\nplease wait a moment....."
#define PRINTING_SP "Imprimiendo"
#define PRINTING_AJUSTES_SP "Ajustes"
#define PRINTING_PAUSAR_SP "Pausar"
#define MESSEGE_PAUSING_SP "Aparcando..."
#define MESSEGE_CHANGING_SP "Esperando para iniciar el cambio de filamento"
#define MESSEGE_UNLOAD_SP "Espere para liberar el filamento"
#define MESSEGE_WAITING_SP "Pulsar el botón para reanudar impresión"
#define MESSEGE_INSERT_SP "Inserte el filamento y pulse el botón para continuar..."
#define MESSEGE_LOAD_SP "Espere para purgar el filamento"
#define MESSEGE_PURGE_SP "Espere para purgar el filamento"
#define MESSEGE_RESUME_SP "Esperando impresora para reanudar..."
#define MESSEGE_HEAT_SP "Pulse el botón para calentar la boquilla"
#define MESSEGE_HEATING_SP "Calentando boquilla Espere por favor..."
#define MESSEGE_OPTION_SP "¿Purgar más o continuar con la impresión?"
#define MESSEGE_PURGE_MORE_SP "Purga"
#define MESSEGE_CONTINUE_PRINT_SP "Impresión"

View file

@ -0,0 +1,273 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "../../../../inc/MarlinConfig.h"
#if ENABLED(TFT_LITTLE_VGL_UI)
#if defined(ARDUINO_ARCH_STM32F1) && PIN_EXISTS(FSMC_CS) // FSMC on 100/144 pins SoCs
#include <libmaple/fsmc.h>
#include <libmaple/gpio.h>
#include <libmaple/dma.h>
#include <boards.h>
/* Timing configuration */
#define FSMC_ADDRESS_SETUP_TIME 15// AddressSetupTime
#define FSMC_DATA_SETUP_TIME 15// DataSetupTime
void LCD_IO_Init(uint8_t cs, uint8_t rs);
void LCD_IO_WriteData(uint16_t RegValue);
void LCD_IO_WriteReg(uint16_t Reg);
uint16_t LCD_IO_ReadData(uint16_t RegValue);
uint32_t LCD_IO_ReadData(uint16_t RegValue, uint8_t ReadSize);
uint16_t ILI9488_ReadRAM();
#ifdef LCD_USE_DMA_FSMC
void LCD_IO_WriteMultiple(uint16_t data, uint32_t count);
void LCD_IO_WriteSequence(uint16_t *data, uint16_t length);
#endif
/**
* FSMC LCD IO
*/
#define __ASM __asm
#define __STATIC_INLINE static inline
__attribute__((always_inline)) __STATIC_INLINE void __DSB() {__ASM volatile ("dsb 0xF" ::: "memory");}
#define FSMC_CS_NE1 PD7
#if ENABLED(STM32_XL_DENSITY)
#define FSMC_CS_NE2 PG9
#define FSMC_CS_NE3 PG10
#define FSMC_CS_NE4 PG12
#define FSMC_RS_A0 PF0
#define FSMC_RS_A1 PF1
#define FSMC_RS_A2 PF2
#define FSMC_RS_A3 PF3
#define FSMC_RS_A4 PF4
#define FSMC_RS_A5 PF5
#define FSMC_RS_A6 PF12
#define FSMC_RS_A7 PF13
#define FSMC_RS_A8 PF14
#define FSMC_RS_A9 PF15
#define FSMC_RS_A10 PG0
#define FSMC_RS_A11 PG1
#define FSMC_RS_A12 PG2
#define FSMC_RS_A13 PG3
#define FSMC_RS_A14 PG4
#define FSMC_RS_A15 PG5
#endif
#define FSMC_RS_A16 PD11
#define FSMC_RS_A17 PD12
#define FSMC_RS_A18 PD13
#define FSMC_RS_A19 PE3
#define FSMC_RS_A20 PE4
#define FSMC_RS_A21 PE5
#define FSMC_RS_A22 PE6
#define FSMC_RS_A23 PE2
#if ENABLED(STM32_XL_DENSITY)
#define FSMC_RS_A24 PG13
#define FSMC_RS_A25 PG14
#endif
static uint8_t fsmcInit = 0;
typedef struct {
__IO uint16_t REG;
__IO uint16_t RAM;
} LCD_CONTROLLER_TypeDef;
LCD_CONTROLLER_TypeDef *LCD;
void LCD_IO_Init(uint8_t cs, uint8_t rs) {
uint32_t controllerAddress;
if (fsmcInit) return;
fsmcInit = 1;
switch (cs) {
case FSMC_CS_NE1: controllerAddress = (uint32_t)FSMC_NOR_PSRAM_REGION1; break;
#if ENABLED(STM32_XL_DENSITY)
case FSMC_CS_NE2: controllerAddress = (uint32_t)FSMC_NOR_PSRAM_REGION2; break;
case FSMC_CS_NE3: controllerAddress = (uint32_t)FSMC_NOR_PSRAM_REGION3; break;
case FSMC_CS_NE4: controllerAddress = (uint32_t)FSMC_NOR_PSRAM_REGION4; break;
#endif
default: return;
}
#define _ORADDR(N) controllerAddress |= (_BV32(N) - 2)
switch (rs) {
#if ENABLED(STM32_XL_DENSITY)
case FSMC_RS_A0: _ORADDR( 1); break;
case FSMC_RS_A1: _ORADDR( 2); break;
case FSMC_RS_A2: _ORADDR( 3); break;
case FSMC_RS_A3: _ORADDR( 4); break;
case FSMC_RS_A4: _ORADDR( 5); break;
case FSMC_RS_A5: _ORADDR( 6); break;
case FSMC_RS_A6: _ORADDR( 7); break;
case FSMC_RS_A7: _ORADDR( 8); break;
case FSMC_RS_A8: _ORADDR( 9); break;
case FSMC_RS_A9: _ORADDR(10); break;
case FSMC_RS_A10: _ORADDR(11); break;
case FSMC_RS_A11: _ORADDR(12); break;
case FSMC_RS_A12: _ORADDR(13); break;
case FSMC_RS_A13: _ORADDR(14); break;
case FSMC_RS_A14: _ORADDR(15); break;
case FSMC_RS_A15: _ORADDR(16); break;
#endif
case FSMC_RS_A16: _ORADDR(17); break;
case FSMC_RS_A17: _ORADDR(18); break;
case FSMC_RS_A18: _ORADDR(19); break;
case FSMC_RS_A19: _ORADDR(20); break;
case FSMC_RS_A20: _ORADDR(21); break;
case FSMC_RS_A21: _ORADDR(22); break;
case FSMC_RS_A22: _ORADDR(23); break;
case FSMC_RS_A23: _ORADDR(24); break;
#if ENABLED(STM32_XL_DENSITY)
case FSMC_RS_A24: _ORADDR(25); break;
case FSMC_RS_A25: _ORADDR(26); break;
#endif
default: return;
}
rcc_clk_enable(RCC_FSMC);
gpio_set_mode(GPIOD, 14, GPIO_AF_OUTPUT_PP); // FSMC_D00
gpio_set_mode(GPIOD, 15, GPIO_AF_OUTPUT_PP); // FSMC_D01
gpio_set_mode(GPIOD, 0, GPIO_AF_OUTPUT_PP);// FSMC_D02
gpio_set_mode(GPIOD, 1, GPIO_AF_OUTPUT_PP);// FSMC_D03
gpio_set_mode(GPIOE, 7, GPIO_AF_OUTPUT_PP);// FSMC_D04
gpio_set_mode(GPIOE, 8, GPIO_AF_OUTPUT_PP);// FSMC_D05
gpio_set_mode(GPIOE, 9, GPIO_AF_OUTPUT_PP);// FSMC_D06
gpio_set_mode(GPIOE, 10, GPIO_AF_OUTPUT_PP); // FSMC_D07
gpio_set_mode(GPIOE, 11, GPIO_AF_OUTPUT_PP); // FSMC_D08
gpio_set_mode(GPIOE, 12, GPIO_AF_OUTPUT_PP); // FSMC_D09
gpio_set_mode(GPIOE, 13, GPIO_AF_OUTPUT_PP); // FSMC_D10
gpio_set_mode(GPIOE, 14, GPIO_AF_OUTPUT_PP); // FSMC_D11
gpio_set_mode(GPIOE, 15, GPIO_AF_OUTPUT_PP); // FSMC_D12
gpio_set_mode(GPIOD, 8, GPIO_AF_OUTPUT_PP);// FSMC_D13
gpio_set_mode(GPIOD, 9, GPIO_AF_OUTPUT_PP);// FSMC_D14
gpio_set_mode(GPIOD, 10, GPIO_AF_OUTPUT_PP); // FSMC_D15
gpio_set_mode(GPIOD, 4, GPIO_AF_OUTPUT_PP);// FSMC_NOE
gpio_set_mode(GPIOD, 5, GPIO_AF_OUTPUT_PP);// FSMC_NWE
gpio_set_mode(PIN_MAP[cs].gpio_device, PIN_MAP[cs].gpio_bit, GPIO_AF_OUTPUT_PP); //FSMC_CS_NEx
gpio_set_mode(PIN_MAP[rs].gpio_device, PIN_MAP[rs].gpio_bit, GPIO_AF_OUTPUT_PP); //FSMC_RS_Ax
#if ENABLED(STM32_XL_DENSITY)
FSMC_NOR_PSRAM4_BASE->BCR = FSMC_BCR_WREN | FSMC_BCR_MTYP_SRAM | FSMC_BCR_MWID_16BITS | FSMC_BCR_MBKEN;
FSMC_NOR_PSRAM4_BASE->BTR = (FSMC_DATA_SETUP_TIME << 8) | FSMC_ADDRESS_SETUP_TIME;
#else // PSRAM1 for STM32F103V (high density)
FSMC_NOR_PSRAM1_BASE->BCR = FSMC_BCR_WREN | FSMC_BCR_MTYP_SRAM | FSMC_BCR_MWID_16BITS | FSMC_BCR_MBKEN;
FSMC_NOR_PSRAM1_BASE->BTR = (FSMC_DATA_SETUP_TIME << 8) | FSMC_ADDRESS_SETUP_TIME;
#endif
afio_remap(AFIO_REMAP_FSMC_NADV);
LCD = (LCD_CONTROLLER_TypeDef*)controllerAddress;
}
void LCD_IO_WriteData(uint16_t RegValue) {
LCD->RAM = RegValue;
__DSB();
}
void LCD_IO_WriteReg(uint16_t Reg) {
LCD->REG = Reg;
__DSB();
}
uint16_t LCD_IO_ReadData(uint16_t RegValue) {
LCD->REG = RegValue;
__DSB();
return LCD->RAM;
}
uint16_t ILI9488_ReadRAM() {
uint16_t data;
data = LCD->RAM;
return data;
}
uint32_t LCD_IO_ReadData(uint16_t RegValue, uint8_t ReadSize) {
volatile uint32_t data;
LCD->REG = RegValue;
__DSB();
data = LCD->RAM; // dummy read
data = LCD->RAM & 0x00FF;
while (--ReadSize) {
data <<= 8;
data |= (LCD->RAM & 0x00FF);
}
return uint32_t(data);
}
#if ENABLED(LCD_USE_DMA_FSMC)
void LCD_IO_WriteMultiple(uint16_t color, uint32_t count) {
while (count > 0) {
dma_setup_transfer(FSMC_DMA_DEV, FSMC_DMA_CHANNEL, &color, DMA_SIZE_16BITS, &LCD->RAM, DMA_SIZE_16BITS, DMA_MEM_2_MEM);
dma_set_num_transfers(FSMC_DMA_DEV, FSMC_DMA_CHANNEL, count > 65535 ? 65535 : count);
dma_clear_isr_bits(FSMC_DMA_DEV, FSMC_DMA_CHANNEL);
dma_enable(FSMC_DMA_DEV, FSMC_DMA_CHANNEL);
while ((dma_get_isr_bits(FSMC_DMA_DEV, FSMC_DMA_CHANNEL) & 0x0A) == 0) {}
dma_disable(FSMC_DMA_DEV, FSMC_DMA_CHANNEL);
count = count > 65535 ? count - 65535 : 0;
}
}
void LCD_IO_WriteSequence(uint16_t *data, uint16_t length) {
dma_setup_transfer(FSMC_DMA_DEV, FSMC_DMA_CHANNEL, data, DMA_SIZE_16BITS, &LCD->RAM, DMA_SIZE_16BITS, DMA_MEM_2_MEM | DMA_PINC_MODE);
dma_set_num_transfers(FSMC_DMA_DEV, FSMC_DMA_CHANNEL, length);
dma_clear_isr_bits(FSMC_DMA_DEV, FSMC_DMA_CHANNEL);
dma_enable(FSMC_DMA_DEV, FSMC_DMA_CHANNEL);
while ((dma_get_isr_bits(FSMC_DMA_DEV, FSMC_DMA_CHANNEL) & 0x0A) == 0) {}
dma_disable(FSMC_DMA_DEV, FSMC_DMA_CHANNEL);
}
void LCD_IO_WriteSequence_Async(uint16_t *data, uint16_t length) {
dma_setup_transfer(FSMC_DMA_DEV, FSMC_DMA_CHANNEL, data, DMA_SIZE_16BITS, &LCD->RAM, DMA_SIZE_16BITS, DMA_MEM_2_MEM | DMA_PINC_MODE);
dma_set_num_transfers(FSMC_DMA_DEV, FSMC_DMA_CHANNEL, length);
dma_clear_isr_bits(FSMC_DMA_DEV, FSMC_DMA_CHANNEL);
dma_enable(FSMC_DMA_DEV, FSMC_DMA_CHANNEL);
}
void LCD_IO_WaitSequence_Async() {
while ((dma_get_isr_bits(FSMC_DMA_DEV, FSMC_DMA_CHANNEL) & 0x0A) == 0) {}
dma_disable(FSMC_DMA_DEV, FSMC_DMA_CHANNEL);
}
#endif // LCD_USE_DMA_FSMC
#endif // ARDUINO_ARCH_STM32F1 && FSMC_CS_PIN
#endif // TFT_LITTLE_VGL_UI

View file

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

View file

@ -0,0 +1,791 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/**
* @file lcd_lvgl_configuration.c
* @date 2020-02-21
*/
#include "../../../../inc/MarlinConfigPre.h"
#if ENABLED(TFT_LITTLE_VGL_UI)
#include "../../../../MarlinCore.h"
#include "tft_lvgl_configuration.h"
#include "lvgl.h"
#include "../../../../feature/touch/xpt2046.h"
#include "draw_ready_print.h"
#include "W25Qxx.h"
#include "pic_manager.h"
#include "mks_hardware_test.h"
#include "draw_ui.h"
#if ENABLED(POWER_LOSS_RECOVERY)
#include "../../../../feature/powerloss.h"
#endif
#include <SPI.h>
#if ENABLED(SPI_GRAPHICAL_TFT)
#include "SPI_TFT.h"
#endif
//#include "../../Configuration.h"
//#include "../../src/core/macros.h"
extern void LCD_IO_Init(uint8_t cs, uint8_t rs);
extern void LCD_IO_WriteData(uint16_t RegValue);
extern void LCD_IO_WriteReg(uint16_t Reg);
extern void LCD_IO_WriteMultiple(uint16_t color, uint32_t count);
extern void init_gb2312_font();
static lv_disp_buf_t disp_buf;
//static lv_color_t buf[LV_HOR_RES_MAX * 18];
//static lv_color_t buf[10*5];
//extern lv_obj_t * scr;
#if ENABLED(SDSUPPORT)
extern void UpdatePic();
extern void UpdateFont();
#endif
uint16_t DeviceCode = 0x9488;
extern uint8_t sel_id;
#define SetCs
#define ClrCs
#define HDP 799//Horizontal Display Period //**
#define HT 1000//Horizontal Total
#define HPS 51//LLINE Pulse Start Position
#define LPS 3 // Horizontal Display Period Start Position
#define HPW 8 // LLINE Pulse Width
#define VDP 479//Vertical Display Period
#define VT 530//Vertical Total
#define VPS 24// LFRAME Pulse Start Position
#define FPS 23//Vertical Display Period Start Positio
#define VPW 3 // LFRAME Pulse Width //**
#define MAX_HZ_POSX HDP+1
#define MAX_HZ_POSY VDP+1
extern uint8_t gcode_preview_over, flash_preview_begin, default_preview_flg;
void SysTick_Callback() {
lv_tick_inc(1);
print_time_count();
}
void tft_set_cursor(uint16_t x, uint16_t y) {
#if 0
if (DeviceCode == 0x8989) {
LCD_WriteReg(0x004E, y); //行
LCD_WriteReg(0x004F, x); //列
}
else if ((DeviceCode == 0x9919)) {
LCD_WriteReg(0x004E, x); // 行
LCD_WriteReg(0x004F, y); // 列
}
else if ((DeviceCode == 0x5761)) { //SSD1963
LCD_WrtReg(0x002A);
LCD_WrtRAM(x >> 8);
LCD_WrtRAM(x & 0x00FF);
LCD_WrtRAM(HDP >> 8);
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) {
#if 0
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
LCD_IO_WriteReg(LCD_Reg);
/* Write 16-bit Reg */
LCD_IO_WriteData(LCD_RegValue);
SetCs
}
void ili9320_SetWindows(uint16_t StartX, uint16_t StartY, uint16_t width, uint16_t heigh) {
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);
}
}
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();
//index = (160*480);
for (index = 0; index < 320 * 480; index++)
LCD_IO_WriteData(Color);
//LCD_IO_WriteMultiple(Color, (480*320));
//while(index --) LCD_IO_WriteData(Color);
}
else if (DeviceCode == 0x5761) {
LCD_IO_WriteReg(0x002a);
LCD_IO_WriteData(0);
LCD_IO_WriteData(0);
LCD_IO_WriteData(HDP >> 8);
LCD_IO_WriteData(HDP & 0x00ff);
LCD_IO_WriteReg(0x002b);
LCD_IO_WriteData(0);
LCD_IO_WriteData(0);
LCD_IO_WriteData(VDP >> 8);
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 **********//
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();
#if ENABLED(SDSUPPORT)
UpdatePic();
UpdateFont();
#endif
gCfgItems_init();
ui_cfg_init();
disp_language_init();
//spi_flash_read_test();
#if ENABLED(SPI_GRAPHICAL_TFT)
SPI_TFT.spi_init(SPI_FULL_SPEED);
SPI_TFT.LCD_init();
#else
init_tft();
#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);
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
}
#if 0
void LCD_WriteRAM(uint16_t RGB_Code) {
#if 0
ClrCs
/* Write 16-bit GRAM Reg */
LCD->LCD_RAM = RGB_Code;
SetCs
#else
LCD_IO_WriteData(RGB_Code);
#endif
}
#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 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
#if USE_XPT2046
#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
#ifndef USE_XPT2046
#define USE_XPT2046 1
#define XPT2046_XY_SWAP 1
#define XPT2046_X_INV 0
#define XPT2046_Y_INV 1
#endif
#if USE_XPT2046
#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
#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// 0x90
#define CHY 0xD0// 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;
//int result;
//#if ENABLED(TOUCH_BUTTONS)
#if ENABLED(SPI_GRAPHICAL_TFT)
SPI_TFT.spi_init(SPI_QUARTER_SPEED);
#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
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) {
#if 1
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) {
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*/
#endif
}
#endif // TFT_LITTLE_VGL_UI

View file

@ -0,0 +1,46 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* @file tft_lvgl_configuration.h
* @date 2020-02-21
* */
//#ifdef __cplusplus
//extern "C" {
//#endif
#include "lvgl.h"
void tft_lvgl_init();
void my_disp_flush(lv_disp_drv_t * disp, const lv_area_t * area, lv_color_t * color_p);
bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data);
void LCD_Clear(uint16_t Color);
void tft_set_point(uint16_t x, uint16_t y, uint16_t point);
void ili9320_SetWindows(uint16_t StartX, uint16_t StartY, uint16_t width, uint16_t heigh);
void LCD_WriteRAM_Prepare(void);
//#ifdef __cplusplus
//} /* extern "C" */
//#endif

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,584 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#pragma once
#include "inc/tft_Language_en.h"
#include "inc/tft_Language_s_cn.h"
#include "inc/tft_Language_t_cn.h"
#include "inc/tft_Language_ru.h"
#include "inc/tft_Language_fr.h"
#include "inc/tft_Language_sp.h"
#include "inc/tft_Language_it.h"
extern void disp_language_init();
#define LANG_SIMPLE_CHINESE 1
#define LANG_COMPLEX_CHINESE 2
#define LANG_ENGLISH 3
#define LANG_JAPAN 4
#define LANG_GERMAN 5
#define LANG_FRENCH 6
#define LANG_RUSSIAN 7
#define LANG_KOREAN 8
#define LANG_TURKISH 9
#define LANG_SPANISH 10
#define LANG_GREEK 11
#define LANG_ITALY 12
#define LANG_PORTUGUESE 13
#define MULTI_LANGUAGE_ENABLE 1
#define MULTI_LANGUAGE_DISABLE 0
typedef struct common_menu_disp {
const char *text_back;
const char *dialog_confirm_title;
const char *close_machine_tips;
const char *unbind_printer_tips;
const char *print_special_title;
const char *pause_special_title;
const char *operate_special_title;
const char *next;
const char *previous;
} common_menu_def;
extern common_menu_def common_menu;
typedef struct main_menu_disp {
const char *title;
const char *preheat;
const char *move;
const char *home;
const char *print;
const char *extrude;
const char *leveling;
const char *autoleveling;
const char *fan;
const char *set;
const char *tool;
const char *more;
const char *machine_para;
} main_menu_def;
extern main_menu_def main_menu;
typedef struct preheat_menu_disp {
const char *adjust_title;
const char *title;
const char *add;
const char *dec;
const char *ext1;
const char *ext2;
const char *hotbed;
const char *off;
const char *step_1c;
const char *step_5c;
const char *step_10c;
const char *back;
const char *value_state;
const char *dialog_tips;
}preheat_menu_def;
extern preheat_menu_def preheat_menu;
typedef struct move_menu_disp {
const char *title;
const char *x_add;
const char *x_dec;
const char *y_add;
const char *y_dec;
const char *z_add;
const char *z_dec;
const char *step_001mm;
const char *step_005mm;
const char *step_01mm;
const char *step_1mm;
const char *step_10mm;
const char *back;
} move_menu_def;
extern move_menu_def move_menu;
typedef struct home_menu_disp {
const char *title;
const char *home_all;
const char *home_x;
const char *home_y;
const char *home_z;
const char *stopmove;
const char *back;
} home_menu_def;
extern home_menu_def home_menu;
typedef struct file_menu_disp {
const char *title;
const char *page_up;
const char *page_down;
const char *back;
const char *file_loading;
const char *no_file;
const char *no_file_and_check;
}file_menu_def;
extern file_menu_def file_menu;
typedef struct extrude_menu_disp {
const char *title;
const char *in;
const char *out;
const char *ext1;
const char *ext2;
const char *step_1mm;
const char *step_5mm;
const char *step_10mm;
const char *low;
const char *normal;
const char *high;
const char *back;
const char *count_value_mm;
const char *count_value_cm;
const char *count_value_m;
const char *temp_value;
const char *temper_text;
} extrude_menu_def;
extern extrude_menu_def extrude_menu;
typedef struct leveling_menu_disp {
const char *title;
const char *position1;
const char *position2;
const char *position3;
const char *position4;
const char *position5;
char *back;
} leveling_menu_def;
extern leveling_menu_def leveling_menu;
typedef struct set_menu_disp {
const char *title;
const char *filesys;
const char *wifi;
const char *about;
const char *fan;
const char *filament;
const char *breakpoint;
const char *motoroff;
const char *motoroffXY;
const char *shutdown;
const char *language;
const char *machine_para;
const char *back;
} set_menu_def;
extern set_menu_def set_menu;
typedef struct filesys_menu_disp {
const char *title;
const char *filesys;
const char *sd_sys;
const char *usb_sys;
const char *back;
} filesys_menu_def;
extern filesys_menu_def filesys_menu;
typedef struct more_menu_disp {
const char *title;
const char *zoffset;
const char *back;
} more_menu_def;
extern more_menu_def more_menu;
typedef struct wifi_menu_disp {
const char *title;
const char *ip;
const char *wifi;
const char *key;
const char *state_ap;
const char *state_sta;
const char *cloud;
const char *connected;
const char *disconnected;
const char *exception;
const char *back;
const char *reconnect;
} wifi_menu_def;
extern wifi_menu_def wifi_menu;
typedef struct cloud_menu_disp {
const char *title;
const char *unbind;
const char *unbinding;
const char *unbinded;
const char *bind;
const char *binding;
const char *binded;
const char *disable;
const char *disconnected;
const char *back;
const char *unbind_printer_tips;
} cloud_menu_def;
extern cloud_menu_def cloud_menu;
typedef struct about_menu_disp {
const char *title;
const char *type_name;
const char *firmware_v;
const char *type;
const char *version;
const char *wifi;
const char *type_robin;
const char *type_robin_mini;
const char *back;
} about_menu_def;
extern about_menu_def about_menu;
typedef struct fan_menu_disp {
const char *title;
const char *add;
const char *dec;
const char *full;
const char *half;
const char *off;
const char *back;
const char *state;
const char *state_value;
} fan_menu_def;
extern fan_menu_def fan_menu;
typedef struct filament_menu_disp {
const char *title;
const char *in;
const char *out;
const char *ext1;
const char *ext2;
const char *back;
const char *stat_temp;
const char *ready_replace;
const char *replacing;
const char *loading;
const char *unloading;
const char *heating;
const char *complete_and_back;
const char *filament_dialog_load_heat;
const char *filament_dialog_unload_heat;
const char *filament_dialog_load_heat_confirm;
const char *filament_dialog_unload_heat_confirm;
const char *filament_dialog_loading;
const char *filament_dialog_unloading;
const char *filament_dialog_load_completed;
const char *filament_dialog_unload_completed;
const char *filament_dialog_ok;
const char *filament_dialog_back;
} filament_menu_def;
extern filament_menu_def filament_menu;
typedef struct language_menu {
const char *title;
const char *chinese_s;
const char *chinese_t;
const char *english;
const char *russian;
const char *japan;
const char *italy;
const char *german;
const char *spanish;
const char *korean;
const char *french;
const char *brazil;
const char *portuguese;
const char *next;
const char *up;
const char *back;
} language_menu_def;
extern language_menu_def language_menu;
typedef struct printing_menu_disp {
const char *title;
const char *option;
const char *temp1;
const char *temp2;
const char *bed_temp;
const char *fan_speed;
const char *pause;
const char *resume;
const char *stop;
} printing_menu_def;
extern printing_menu_def printing_menu;
typedef struct operation_menu_disp {
const char *title;
const char *pause;
const char *stop;
const char *temp;
const char *fan;
const char *filament;
const char *extr;
const char *speed;
const char *move;
const char *more;
const char *auto_off;
const char *manual_off;
const char *back;
const char *babystep;
} operation_menu_def;
extern operation_menu_def operation_menu;
typedef struct pause_menu_disp {
const char *title;
const char *resume;
const char *stop;
const char *extrude;
const char *move;
const char *filament;
const char *more;
} pause_menu_def;
extern pause_menu_def pause_menu;
typedef struct speed_menu_disp {
const char *title;
const char *add;
const char *dec;
const char *extrude;
const char *move;
const char *step_1percent;
const char *step_5percent;
const char *step_10percent;
const char *back;
const char *move_speed;
const char *extrude_speed;
} speed_menu_def;
extern speed_menu_def speed_menu;
typedef struct printing_more_menu_disp {
const char *title;
const char *fan;
const char *auto_close;
const char *manual;
const char *temp;
const char *speed;
const char *back;
} printing_more_menu_def;
extern printing_more_menu_def printing_more_menu;
typedef struct dialog_menu_disp {
const char *confirm_title;
const char *error1_repint_no_file;
const char *error2_communication_fail;
const char *error3_filename_too_long;
const char *error4_no_file;
const char *error5_check_filesys;
const char *tip1_print_file;
const char *tip2_stop_file;
} dialog_menu_def;
extern dialog_menu_def dialog_menu;
typedef struct print_file_dialog_disp {
const char *title;
const char *confirm;
const char *cancle;
const char *print_file;
const char *cancle_print;
const char *retry;
const char *stop;
const char *no_file_print_tips;
const char *print_from_breakpoint;
const char *file_name_too_long_error;
const char *close_machine_error;
const char *filament_no_press;
const char *print_finish;
const char *print_time;
const char *reprint;
const char *wifi_enable_tips;
} print_file_dialog_menu_def;
extern print_file_dialog_menu_def print_file_dialog_menu;
typedef struct zoffset_menu_disp {
const char *title;
const char *inc;
const char *dec;
const char *step001;
const char *step01;
const char *step1;
const char *back;
} zoffset_menu_def;
extern zoffset_menu_def zoffset_menu;
typedef struct tool_menu_disp {
const char *title;
const char *preheat;
const char *extrude;
const char *move;
const char *home;
const char *leveling;
const char *autoleveling;
const char *filament;
const char *more;
const char *back;
} tool_menu_def;
extern tool_menu_def tool_menu;
typedef struct MachinePara_menu_disp {
const char *title;
const char *MachineSetting;
const char *TemperatureSetting;
const char *MotorSetting;
const char *AdvanceSetting;
//const char *back;
} MachinePara_menu_def;
extern MachinePara_menu_def MachinePara_menu;
typedef struct MachineSettings_menu_disp {
const char *title;
const char *Machine;
const char *Stroke;
const char *HomeDir;
const char *EndStopType;
const char *filamet;
const char *leveling;
const char *back;
} MachineSettings_menu_def;
extern MachineSettings_menu_def MachineSettings_menu;
typedef struct TemperatureSettings_menu_disp {
const char *title;
const char *nozzle;
const char *hotbed;
const char *preheat;
const char *back;
} TemperatureSettings_menu_def;
extern TemperatureSettings_menu_def TemperatureSettings_menu;
typedef struct pause_msg_disp {
const char *pausing;
const char *changing;
const char *unload;
const char *waiting;
const char *insert;
const char *load;
const char *purge;
const char *resume;
const char *heat;
const char *heating;
const char *option;
const char *purgeMore;
const char *continuePrint;
} pause_msg_def;
extern pause_msg_def pause_msg_menu;
/*****************************************/
//********************************************//
//#if defined(TFT70)
//
//#elif defined(TFT35)
#define TEXT_VALUE "%d/%d"
//#endif
#define TEXT_VALUE_T ": %d℃"
#define TEXT_VALUE_mm ": %dmm"
#define TEXT_VALUE_cm ": %dcm"
#define TEXT_VALUE_m ": %dm"
#define TEMP_UNIT_SYBOL "%d℃"
#define FLOAT_TEMP_UNIT_SYBOL "%.1f℃"
#define TEXT_1C "1℃"
#define TEXT_5C "5℃"
#define TEXT_10C "10℃"
#define AXIS_X_ADD_TEXT "X+"
#define AXIS_X_DEC_TEXT "X-"
#define AXIS_Y_ADD_TEXT "Y+"
#define AXIS_Y_DEC_TEXT "Y-"
#define AXIS_Z_ADD_TEXT "Z+"
#define AXIS_Z_DEC_TEXT "Z-"
#define TEXT_001MM "0.01mm"
#define TEXT_005MM "0.05mm"
#define TEXT_01MM "0.1mm"
#define TEXT_1MM "1mm"
#define TEXT_10MM "10mm"
#define EXTRUDE_1MM_TEXT "1mm"
#define EXTRUDE_5MM_TEXT "5mm"
#define EXTRUDE_10MM_TEXT "10mm"
#define STEP_1PERCENT "1%"
#define STEP_5PERCENT "5%"
#define STEP_10PERCENT "10%"
#define LANGUAGE_S_CN "简体"
#define LANGUAGE_T_CN "繁体"
#define LANGUAGE_EN "English"
#define LANGUAGE_JP "日本語"
#define LANGUAGE_GE "Deutsch"
#define LANGUAGE_FR "français"
#define LANGUAGE_IT "Italia"
#define LANGUAGE_PR "português"
#define LANGUAGE_KR "Korean"
#define LANGUAGE_BR "Brazil"
#define LANGUAGE_RU "русский"
#define LANGUAGE_SP "español"
#define HOME_X_TEXT "X"
#define HOME_Y_TEXT "Y"
#define HOME_Z_TEXT "Z"
#define HOME_ALL_TEXT "All"
//#if defined(MKS_ROBIN_NANO)
#define ABOUT_TYPE_TEXT "MKS Robin Pro"
//#elif defined(MKS_ROBIN_MINI)
//#define ABOUT_TYPE_TEXT "MKS Robin Mini"
//#endif
#define ABOUT_VERSION_TEXT "1.0.0"
//#define ABOUT_WIFI_TEXT "WiFi:"
#define FAN_OPEN_TEXT "100%"
#define FAN_HALF_TEXT "50%"
#define FAN_CLOSE_TEXT "0%"
//#define FAN_TIPS1_TEXT "FAN"
//#define FAN_TIPS2_TEXT "FAN\nClose"
#define WIFI_TEXT "WIFI"
#define WIFI_IP_TEXT "IP: "
#define WIFI_NAME_TEXT "WiFi: "
#define WIFI_KEY_TEXT "Key: "
#define WIFI_STATE_AP_TEXT "State: AP"
#define WIFI_STATE_STA_TEXT "State: STA"
#define WIFI_CONNECTED_TEXT "Connected"
#define WIFI_DISCONNECTED_TEXT "Disconnected"
#define WIFI_EXCEPTION_TEXT "Exception"
#define FILAMENT_TIPS2_TEXT "T:"
#define DIALOG_UPLOAD_ING_EN "Uploading......"
#define DIALOG_UPLOAD_ERROR_EN "Upload error"
#define DIALOG_UPLOAD_FINISH_EN "Upload finished"
#define DIALOG_UPLOAD_SIZE_EN "Size"
#define DIALOG_UPLOAD_TIME_EN "Time"
#define DIALOG_UPLOAD_SPEED_EN "Speed"
#define DIALOG_UPDATE_WIFI_FIRMWARE_EN "Updating wifi model firmware"
#define DIALOG_UPDATE_WIFI_WEB_EN "Updating wifi model web data"
#define ZOFFSET_STEP001 "0.01mm"
#define ZOFFSET_STEP01 "0.1mm"
#define ZOFFSET_STEP1 "1mm"

View file

@ -1,9 +1,9 @@
/**
* Marlin 3D Printer Firmware
* Copyright (C) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View file

@ -1,9 +1,9 @@
/**
* Marlin 3D Printer Firmware
* Copyright (C) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by

View file

@ -45,6 +45,7 @@
//#define FLASH_EEPROM_EMULATION
#define SDCARD_EEPROM_EMULATION
#endif
#define ENABLE_SPI2
//
// Limit Switches
@ -106,16 +107,27 @@
//
// Misc. Functions
//
#define POWER_LOSS_PIN PA2 // PW_DET
#define PS_ON_PIN PA3 // PW_OFF
//#define POWER_LOSS_PIN PA2 // PW_DET
//#define PS_ON_PIN PA3 // PW_OFF
#define LED_PIN PB2
//#define SUICIDE_PIN PB2 // Enable MKSPWC support ROBIN NANO v1.2 ONLY
//#define SUICIDE_PIN_INVERTING false
//#define KILL_PIN PA2 // Enable MKSPWC support ROBIN NANO v1.2 ONLY
//#define KILL_PIN_INVERTING true // Enable MKSPWC support ROBIN NANO v1.2 ONLY
//#define SERVO0_PIN PA8 // Enable BLTOUCH support ROBIN NANO v1.2 ONLY
//#define LED_PIN PB2
#define MT_DET_1_PIN PA4
#define MT_DET_PIN_INVERTING false
//
// SD Card
//
#ifndef SDCARD_CONNECTION
#define SDCARD_CONNECTION ONBOARD
//#define SDCARD_CONNECTION ONBOARD
#endif
#define SDIO_SUPPORT
@ -131,7 +143,90 @@
* If the screen stays white, disable 'LCD_RESET_PIN'
* to let the bootloader init the screen.
*/
#if ENABLED(FSMC_GRAPHICAL_TFT)
#if ENABLED(SPI_GRAPHICAL_TFT)
#if HAS_SPI_LCD
#define BEEPER_PIN PC5
#define BTN_ENC PE13
#define LCD_PINS_ENABLE PD13
#define LCD_PINS_RS PC6
#define BTN_EN1 PE8
#define BTN_EN2 PE11
#define LCD_BACKLIGHT_PIN -1
// MKS MINI12864 and MKS LCD12864B; If using MKS LCD12864A (Need to remove RPK2 resistor)
#if ENABLED(MKS_MINI_12864)
#define LCD_BACKLIGHT_PIN -1
#define LCD_RESET_PIN -1
#define DOGLCD_A0 PD11
#define DOGLCD_CS PE15
#define DOGLCD_SCK PA5
#define DOGLCD_MOSI PA7
// Required for MKS_MINI_12864 with this board
#define MKS_LCD12864B
#undef SHOW_BOOTSCREEN
#else // !MKS_MINI_12864
#define LCD_PINS_D4 PE14
#if ENABLED(ULTIPANEL)
#define LCD_PINS_D5 PE15
#define LCD_PINS_D6 PD11
#define LCD_PINS_D7 PD10
#endif
#ifndef ST7920_DELAY_1
#define ST7920_DELAY_1 DELAY_NS(125)
#endif
#ifndef ST7920_DELAY_2
#define ST7920_DELAY_2 DELAY_NS(125)
#endif
#ifndef ST7920_DELAY_3
#define ST7920_DELAY_3 DELAY_NS(125)
#endif
#endif // !MKS_MINI_12864
#else
#define SPI_TFT_CS_PIN PD11
#define SPI_TFT_SCK_PIN PA5
#define SPI_TFT_MISO_PIN PA6
#define SPI_TFT_MOSI_PIN PA7
#define SPI_TFT_DC_PIN PD10
#define SPI_TFT_RST_PIN PC6
#define LCD_BACKLIGHT_PIN PD13
#define TOUCH_CS_PIN PE14 // SPI1_NSS
#define TOUCH_SCK_PIN PA5 // SPI1_SCK
#define TOUCH_MISO_PIN PA6 // SPI1_MISO
#define TOUCH_MOSI_PIN PA7 // SPI1_MOSI
#define BTN_EN1 PE8
#define BTN_EN2 PE11
#define BEEPER_PIN PC5
#define BTN_ENC PE13
#endif // HAS_SPI_LCD
#elif ENABLED(TFT_LITTLE_VGL_UI)
#define FSMC_CS_PIN PD7 // NE4
#define FSMC_RS_PIN PD11 // A0
#define TOUCH_CS_PIN PA7 // SPI2_NSS
#define TOUCH_SCK_PIN PB13 // SPI2_SCK
#define TOUCH_MISO_PIN PB14 // SPI2_MISO
#define TOUCH_MOSI_PIN PB15 // SPI2_MOSI
#define LCD_BACKLIGHT_PIN PD13
#elif ENABLED(FSMC_GRAPHICAL_TFT)
#define FSMC_CS_PIN PD7 // NE4
#define FSMC_RS_PIN PD11 // A0
@ -146,4 +241,13 @@
#define TOUCH_MISO_PIN PB14 // SPI2_MISO
#define TOUCH_MOSI_PIN PB15 // SPI2_MOSI
#endif
#endif
#define SPI_FLASH
#if ENABLED(SPI_FLASH)
#define W25QXX_CS_PIN PB12
#define W25QXX_MOSI_PIN PB15
#define W25QXX_MISO_PIN PB14
#define W25QXX_SCK_PIN PB13
#endif

View file

@ -0,0 +1,40 @@
import os
Import("env")
# Relocate firmware from 0x08000000 to 0x08007000
for define in env['CPPDEFINES']:
if define[0] == "VECT_TAB_ADDR":
env['CPPDEFINES'].remove(define)
env['CPPDEFINES'].append(("VECT_TAB_ADDR", "0x08007000"))
custom_ld_script = os.path.abspath("buildroot/share/PlatformIO/ldscripts/mks_robin_nano.ld")
for i, flag in enumerate(env["LINKFLAGS"]):
if "-Wl,-T" in flag:
env["LINKFLAGS"][i] = "-Wl,-T" + custom_ld_script
elif flag == "-T":
env["LINKFLAGS"][i + 1] = custom_ld_script
# Encrypt ${PROGNAME}.bin and save it as 'Robin_nano35.bin'
def encrypt(source, target, env):
import sys
key = [0xA3, 0xBD, 0xAD, 0x0D, 0x41, 0x11, 0xBB, 0x8D, 0xDC, 0x80, 0x2D, 0xD0, 0xD2, 0xC4, 0x9B, 0x1E, 0x26, 0xEB, 0xE3, 0x33, 0x4A, 0x15, 0xE4, 0x0A, 0xB3, 0xB1, 0x3C, 0x93, 0xBB, 0xAF, 0xF7, 0x3E]
firmware = open(target[0].path, "rb")
robin = open(target[0].dir.path +'/Robin_nano35.bin', "wb")
length = os.path.getsize(target[0].path)
position = 0
try:
while position < length:
byte = firmware.read(1)
if position >= 320 and position < 31040:
byte = chr(ord(byte) ^ key[position & 31])
if sys.version_info[0] > 2:
byte = bytes(byte, 'latin1')
robin.write(byte)
position += 1
finally:
firmware.close()
robin.close()
env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", encrypt);

View file

@ -550,7 +550,6 @@ extra_scripts = buildroot/share/PlatformIO/scripts/mks_robin_nano.py
build_flags = ${common_stm32f1.build_flags}
-DMCU_STM32F103VE -DSS_TIMER=4
#
# MKS Robin (STM32F103ZET6)
#
@ -626,6 +625,23 @@ build_flags = ${common_stm32f1.build_flags}
lib_ignore = ${common_stm32f1.lib_ignore}
LiquidCrystal, LiquidTWI2, TMCStepper, U8glib-HAL, SoftwareSerialM
#
# MKS Robin Nano (STM32F103VET6)
#
[env:mks_robin_nano35]
platform = ststm32
board = genericSTM32F103VE
platform_packages = tool-stm32duino
build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py
${common.build_flags} -std=gnu++14 -DHAVE_SW_SERIAL -DSS_TIMER=4
build_unflags = -std=gnu++11
extra_scripts = buildroot/share/PlatformIO/scripts/mks_robin_nano35.py
src_filter = ${common.default_src_filter} +<src/HAL/STM32F1>
lib_deps = ${common.lib_deps}
SoftwareSerialM=https://github.com/FYSETC/SoftwareSerialM/archive/master.zip
MKS-LittlevGL=https://github.com/makerbase-mks/MKS-LittlevGL/archive/master.zip
lib_ignore = Adafruit NeoPixel, SPI
#
# Malyan M200 v2 (STM32F070RB)
#