🚸 Fix and improve MKS LVGL UI (#22783)
Co-authored-by: makerbase <4164049@qq.com> Co-authored-by: MKS-Sean <56996910+MKS-Sean@users.noreply.github.com> Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
This commit is contained in:
		@@ -43,9 +43,9 @@ uint32_t SPIFlashStorage::m_startAddress;
 | 
			
		||||
  static uint32_t rle_compress(T *output, uint32_t outputLength, T *input, uint32_t inputLength, uint32_t& inputProcessed) {
 | 
			
		||||
    uint32_t count = 0, out = 0, index, i;
 | 
			
		||||
    T pixel;
 | 
			
		||||
    //32767 for uint16_t
 | 
			
		||||
    //127 for uint16_t
 | 
			
		||||
    //calculated at compile time
 | 
			
		||||
    // 32767 for uint16_t
 | 
			
		||||
    // 127 for uint16_t
 | 
			
		||||
    // calculated at compile time
 | 
			
		||||
    constexpr T max = (0xFFFFFFFF >> (8 * (4 - sizeof(T)))) / 2;
 | 
			
		||||
 | 
			
		||||
    inputProcessed = 0;
 | 
			
		||||
 
 | 
			
		||||
@@ -69,14 +69,14 @@ void TFT::LCD_init() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TFT::LCD_clear(uint16_t color) {
 | 
			
		||||
  setWindow(0, 0, (TFT_WIDTH), (TFT_HEIGHT));
 | 
			
		||||
  tftio.WriteMultiple(color, (uint32_t)(TFT_WIDTH) * (TFT_HEIGHT));
 | 
			
		||||
  setWindow(0, 0, TFT_WIDTH, TFT_HEIGHT);
 | 
			
		||||
  tftio.WriteMultiple(color, uint32_t(TFT_WIDTH) * uint32_t(TFT_HEIGHT));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TFT::LCD_Draw_Logo() {
 | 
			
		||||
  #if HAS_LOGO_IN_FLASH
 | 
			
		||||
    setWindow(0, 0, TFT_WIDTH, TFT_HEIGHT);
 | 
			
		||||
    for (uint16_t i = 0; i < (TFT_HEIGHT); i ++) {
 | 
			
		||||
    for (uint16_t i = 0; i < (TFT_HEIGHT); i++) {
 | 
			
		||||
      Pic_Logo_Read((uint8_t *)"", (uint8_t *)bmp_public_buf, (TFT_WIDTH) * 2);
 | 
			
		||||
      tftio.WriteSequence((uint16_t *)bmp_public_buf, TFT_WIDTH);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -57,9 +57,9 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) {
 | 
			
		||||
      break;
 | 
			
		||||
    #if ENABLED(MKS_WIFI_MODULE)
 | 
			
		||||
      case ID_WIFI_PARA:
 | 
			
		||||
      lv_clear_advance_settings();
 | 
			
		||||
      lv_draw_wifi_settings();
 | 
			
		||||
      break;
 | 
			
		||||
        lv_clear_advance_settings();
 | 
			
		||||
        lv_draw_wifi_settings();
 | 
			
		||||
        break;
 | 
			
		||||
    #endif
 | 
			
		||||
    #if HAS_ROTARY_ENCODER
 | 
			
		||||
      case ID_ENCODER_SETTINGS:
 | 
			
		||||
 
 | 
			
		||||
@@ -55,7 +55,7 @@ enum {
 | 
			
		||||
  ID_BABY_STEP_RETURN
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static float babystep_dist=0.01;
 | 
			
		||||
static float babystep_dist  = 0.01;
 | 
			
		||||
static uint8_t has_adjust_z = 0;
 | 
			
		||||
 | 
			
		||||
static void event_handler(lv_obj_t *obj, lv_event_t event) {
 | 
			
		||||
@@ -124,9 +124,8 @@ void lv_draw_baby_stepping() {
 | 
			
		||||
  buttonV = lv_imgbtn_create(scr, nullptr, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight, event_handler, ID_BABY_STEP_DIST);
 | 
			
		||||
  labelV = lv_label_create_empty(buttonV);
 | 
			
		||||
  #if HAS_ROTARY_ENCODER
 | 
			
		||||
    if (gCfgItems.encoder_enable) {
 | 
			
		||||
    if (gCfgItems.encoder_enable)
 | 
			
		||||
      lv_group_add_obj(g, buttonV);
 | 
			
		||||
    }
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  lv_big_button_create(scr, "F:/bmp_return.bin", common_menu.text_back, BTN_X_PIXEL * 3 + INTERVAL_V * 4, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_BABY_STEP_RETURN);
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" { /* C-declarations for C++ */
 | 
			
		||||
  extern "C" { /* C-declarations for C++ */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void lv_draw_cloud_bind();
 | 
			
		||||
 
 | 
			
		||||
@@ -103,15 +103,13 @@ static void btn_ok_event_cb(lv_obj_t *btn, lv_event_t event) {
 | 
			
		||||
        if (card.isFileOpen()) {
 | 
			
		||||
          feedrate_percentage = 100;
 | 
			
		||||
          planner.flow_percentage[0] = 100;
 | 
			
		||||
          planner.e_factor[0]        = planner.flow_percentage[0] * 0.01f;
 | 
			
		||||
          planner.e_factor[0] = planner.flow_percentage[0] * 0.01f;
 | 
			
		||||
          #if HAS_MULTI_EXTRUDER
 | 
			
		||||
            planner.flow_percentage[1] = 100;
 | 
			
		||||
            planner.e_factor[1]        = planner.flow_percentage[1] * 0.01f;
 | 
			
		||||
            planner.e_factor[1] = planner.flow_percentage[1] * 0.01f;
 | 
			
		||||
          #endif
 | 
			
		||||
          card.startOrResumeFilePrinting();
 | 
			
		||||
          #if ENABLED(POWER_LOSS_RECOVERY)
 | 
			
		||||
            recovery.prepare();
 | 
			
		||||
          #endif
 | 
			
		||||
          TERN_(POWER_LOSS_RECOVERY, recovery.prepare());
 | 
			
		||||
          once_flag = false;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
@@ -229,14 +227,14 @@ void lv_draw_dialog(uint8_t type) {
 | 
			
		||||
  lv_obj_t *labelDialog = lv_label_create(scr, "");
 | 
			
		||||
 | 
			
		||||
  if (DIALOG_IS(TYPE_FINISH_PRINT, PAUSE_MESSAGE_RESUME)) {
 | 
			
		||||
      btnOk = lv_button_btn_create(scr, BTN_OK_X + 90, BTN_OK_Y, 100, 50, btn_ok_event_cb);
 | 
			
		||||
      lv_obj_t *labelOk = lv_label_create_empty(btnOk);             // Add a label to the button
 | 
			
		||||
      lv_label_set_text(labelOk, print_file_dialog_menu.confirm);    // Set the labels text
 | 
			
		||||
    btnOk = lv_button_btn_create(scr, BTN_OK_X + 90, BTN_OK_Y, 100, 50, btn_ok_event_cb);
 | 
			
		||||
    lv_obj_t *labelOk = lv_label_create_empty(btnOk);           // Add a label to the button
 | 
			
		||||
    lv_label_set_text(labelOk, print_file_dialog_menu.confirm); // Set the labels text
 | 
			
		||||
  }
 | 
			
		||||
  else if (DIALOG_IS(PAUSE_MESSAGE_WAITING, PAUSE_MESSAGE_INSERT, PAUSE_MESSAGE_HEAT)) {
 | 
			
		||||
    btnOk = lv_button_btn_create(scr, BTN_OK_X + 90, BTN_OK_Y, 100, 50, btn_ok_event_cb);
 | 
			
		||||
    lv_obj_t *labelOk = lv_label_create_empty(btnOk);             // Add a label to the button
 | 
			
		||||
    lv_label_set_text(labelOk, print_file_dialog_menu.confirm);    // Set the labels text
 | 
			
		||||
    lv_obj_t *labelOk = lv_label_create_empty(btnOk);           // Add a label to the button
 | 
			
		||||
    lv_label_set_text(labelOk, print_file_dialog_menu.confirm); // Set the labels text
 | 
			
		||||
  }
 | 
			
		||||
  else if (DIALOG_IS(PAUSE_MESSAGE_PARKING, PAUSE_MESSAGE_CHANGING, PAUSE_MESSAGE_UNLOAD, PAUSE_MESSAGE_LOAD, PAUSE_MESSAGE_PURGE, PAUSE_MESSAGE_RESUME, PAUSE_MESSAGE_HEATING)) {
 | 
			
		||||
    // nothing to do
 | 
			
		||||
@@ -269,7 +267,7 @@ void lv_draw_dialog(uint8_t type) {
 | 
			
		||||
    }
 | 
			
		||||
  #endif
 | 
			
		||||
  else if (DIALOG_IS(TYPE_FILAMENT_LOAD_HEAT, TYPE_FILAMENT_UNLOAD_HEAT)) {
 | 
			
		||||
    btnCancel = lv_button_btn_create(scr, BTN_OK_X+90, BTN_OK_Y, 100, 50, btn_cancel_event_cb);
 | 
			
		||||
    btnCancel = lv_button_btn_create(scr, BTN_OK_X + 90, BTN_OK_Y, 100, 50, btn_cancel_event_cb);
 | 
			
		||||
    lv_obj_t *labelCancel = lv_label_create_empty(btnCancel);
 | 
			
		||||
    lv_label_set_text(labelCancel, print_file_dialog_menu.cancel);
 | 
			
		||||
 | 
			
		||||
@@ -287,7 +285,7 @@ void lv_draw_dialog(uint8_t type) {
 | 
			
		||||
    lv_label_set_text(labelCancel, print_file_dialog_menu.cancel);
 | 
			
		||||
 | 
			
		||||
    filament_bar = lv_bar_create(scr, nullptr);
 | 
			
		||||
    lv_obj_set_pos(filament_bar, (TFT_WIDTH-400)/2, ((TFT_HEIGHT - titleHeight)-40)/2);
 | 
			
		||||
    lv_obj_set_pos(filament_bar, (TFT_WIDTH - 400) / 2, ((TFT_HEIGHT - titleHeight) - 40) / 2);
 | 
			
		||||
    lv_obj_set_size(filament_bar, 400, 25);
 | 
			
		||||
    lv_bar_set_style(filament_bar, LV_BAR_STYLE_INDIC, &lv_bar_style_indic);
 | 
			
		||||
    lv_bar_set_anim_time(filament_bar, 1000);
 | 
			
		||||
@@ -301,11 +299,11 @@ void lv_draw_dialog(uint8_t type) {
 | 
			
		||||
    lv_obj_t *labelCancel = lv_label_create_empty(btnCancel);     // Add a label to the button
 | 
			
		||||
 | 
			
		||||
    if (DIALOG_IS(PAUSE_MESSAGE_OPTION)) {
 | 
			
		||||
      lv_label_set_text(labelOk, pause_msg_menu.purgeMore);        // Set the labels text
 | 
			
		||||
      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(labelOk, print_file_dialog_menu.confirm); // Set the labels text
 | 
			
		||||
      lv_label_set_text(labelCancel, print_file_dialog_menu.cancel);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -44,9 +44,11 @@ enum {
 | 
			
		||||
  ID_F_RETURN
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
uint8_t fanPercent = 0;
 | 
			
		||||
static void event_handler(lv_obj_t *obj, lv_event_t event) {
 | 
			
		||||
  if (event != LV_EVENT_RELEASED) return;
 | 
			
		||||
  uint8_t fanPercent = map(thermalManager.fan_speed[0], 0, 255, 0, 100);
 | 
			
		||||
  const uint8_t temp = map(thermalManager.fan_speed[0], 0, 255, 0, 100);
 | 
			
		||||
  if (abs(fanPercent - temp) > 2) fanPercent = temp;
 | 
			
		||||
  switch (obj->mks_obj_id) {
 | 
			
		||||
    case ID_F_ADD: if (fanPercent < 100) fanPercent++; break;
 | 
			
		||||
    case ID_F_DEC: if (fanPercent !=  0) fanPercent--; break;
 | 
			
		||||
@@ -56,6 +58,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) {
 | 
			
		||||
    case ID_F_RETURN: clear_cur_ui(); draw_return_ui(); return;
 | 
			
		||||
  }
 | 
			
		||||
  thermalManager.set_fan_speed(0, map(fanPercent, 0, 100, 0, 255));
 | 
			
		||||
  if (obj->mks_obj_id != ID_F_RETURN) disp_fan_value();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void lv_draw_fan() {
 | 
			
		||||
@@ -63,7 +66,7 @@ void lv_draw_fan() {
 | 
			
		||||
 | 
			
		||||
  scr = lv_screen_create(FAN_UI);
 | 
			
		||||
  // Create an Image button
 | 
			
		||||
  buttonAdd  = lv_big_button_create(scr, "F:/bmp_Add.bin", fan_menu.add, INTERVAL_V, titleHeight, event_handler, ID_F_ADD);
 | 
			
		||||
  buttonAdd = lv_big_button_create(scr, "F:/bmp_Add.bin", fan_menu.add, INTERVAL_V, titleHeight, event_handler, ID_F_ADD);
 | 
			
		||||
  lv_obj_clear_protect(buttonAdd, LV_PROTECT_FOLLOW);
 | 
			
		||||
  lv_big_button_create(scr, "F:/bmp_Dec.bin", fan_menu.dec, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight, event_handler, ID_F_DEC);
 | 
			
		||||
  lv_big_button_create(scr, "F:/bmp_speed255.bin", fan_menu.full, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_F_HIGH);
 | 
			
		||||
@@ -78,7 +81,7 @@ void lv_draw_fan() {
 | 
			
		||||
 | 
			
		||||
void disp_fan_value() {
 | 
			
		||||
  #if HAS_FAN
 | 
			
		||||
    sprintf_P(public_buf_l, PSTR("%s: %3d%%"), fan_menu.state, (int)map(thermalManager.fan_speed[0], 0, 255, 0, 100));
 | 
			
		||||
    sprintf_P(public_buf_l, PSTR("%s: %3d%%"), fan_menu.state, fanPercent);
 | 
			
		||||
  #else
 | 
			
		||||
    sprintf_P(public_buf_l, PSTR("%s: ---"), fan_menu.state);
 | 
			
		||||
  #endif
 | 
			
		||||
 
 | 
			
		||||
@@ -52,7 +52,8 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) {
 | 
			
		||||
    case ID_FILAMNT_IN:
 | 
			
		||||
      uiCfg.filament_load_heat_flg = true;
 | 
			
		||||
      if (ABS(thermalManager.degTargetHotend(uiCfg.extruderIndex) - thermalManager.wholeDegHotend(uiCfg.extruderIndex)) <= 1
 | 
			
		||||
          || gCfgItems.filament_limit_temp <= thermalManager.wholeDegHotend(uiCfg.extruderIndex)) {
 | 
			
		||||
        || gCfgItems.filament_limit_temp <= thermalManager.wholeDegHotend(uiCfg.extruderIndex)
 | 
			
		||||
      ) {
 | 
			
		||||
        lv_clear_filament_change();
 | 
			
		||||
        lv_draw_dialog(DIALOG_TYPE_FILAMENT_HEAT_LOAD_COMPLETED);
 | 
			
		||||
      }
 | 
			
		||||
@@ -115,9 +116,8 @@ void lv_draw_filament_change() {
 | 
			
		||||
 | 
			
		||||
  buttonType = lv_imgbtn_create(scr, nullptr, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_FILAMNT_TYPE);
 | 
			
		||||
  #if HAS_ROTARY_ENCODER
 | 
			
		||||
    if (gCfgItems.encoder_enable) {
 | 
			
		||||
    if (gCfgItems.encoder_enable)
 | 
			
		||||
      lv_group_add_obj(g, buttonType);
 | 
			
		||||
    }
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  lv_big_button_create(scr, "F:/bmp_return.bin", common_menu.text_back, BTN_X_PIXEL * 3 + INTERVAL_V * 4, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_FILAMNT_RETURN);
 | 
			
		||||
 
 | 
			
		||||
@@ -30,7 +30,7 @@
 | 
			
		||||
#include "../../../inc/MarlinConfig.h"
 | 
			
		||||
 | 
			
		||||
extern lv_group_t *g;
 | 
			
		||||
static lv_obj_t *scr,*outL,*outV = 0;
 | 
			
		||||
static lv_obj_t *scr, *outL, *outV = 0;
 | 
			
		||||
static int currentWritePos = 0;
 | 
			
		||||
extern uint8_t public_buf[513];
 | 
			
		||||
extern "C" { extern char public_buf_m[100]; }
 | 
			
		||||
@@ -59,7 +59,7 @@ void lv_show_gcode_output(void * that, const char * txt) {
 | 
			
		||||
  if (!memcmp(txt, "echo:", 5)) {
 | 
			
		||||
    public_buf[0] = 0; // Clear output buffer
 | 
			
		||||
    return;
 | 
			
		||||
   }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Avoid overflow if the answer is too large
 | 
			
		||||
  size_t len = strlen((const char*)public_buf), tlen = strlen(txt);
 | 
			
		||||
@@ -69,17 +69,17 @@ void lv_show_gcode_output(void * that, const char * txt) {
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void lv_serial_capt_hook(void * userPointer, uint8_t c)
 | 
			
		||||
{
 | 
			
		||||
void lv_serial_capt_hook(void * userPointer, uint8_t c) {
 | 
			
		||||
  if (c == '\n' || currentWritePos == sizeof(public_buf_m) - 1) { // End of line, probably end of command anyway
 | 
			
		||||
    public_buf_m[currentWritePos] = 0;
 | 
			
		||||
    lv_show_gcode_output(userPointer, public_buf_m);
 | 
			
		||||
    currentWritePos = 0;
 | 
			
		||||
  }
 | 
			
		||||
  else public_buf_m[currentWritePos++] = c;
 | 
			
		||||
  else
 | 
			
		||||
    public_buf_m[currentWritePos++] = c;
 | 
			
		||||
}
 | 
			
		||||
void lv_eom_hook(void *)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
void lv_eom_hook(void *) {
 | 
			
		||||
  // Message is done, let's remove the hook now
 | 
			
		||||
  MYSERIAL1.setHook();
 | 
			
		||||
  // We are back from the keyboard, so let's redraw ourselves
 | 
			
		||||
 
 | 
			
		||||
@@ -67,10 +67,10 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) {
 | 
			
		||||
      break;
 | 
			
		||||
    #if Z2_SENSORLESS
 | 
			
		||||
      case ID_SENSITIVITY_Z2:
 | 
			
		||||
      value = z2_sensitivity;
 | 
			
		||||
      lv_clear_homing_sensitivity_settings();
 | 
			
		||||
      lv_draw_number_key();
 | 
			
		||||
      break;
 | 
			
		||||
        value = z2_sensitivity;
 | 
			
		||||
        lv_clear_homing_sensitivity_settings();
 | 
			
		||||
        lv_draw_number_key();
 | 
			
		||||
        break;
 | 
			
		||||
    #endif
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -41,10 +41,10 @@ static const char * kb_map_lc[] = {"1#", "q", "w", "e", "r", "t", "y", "u", "i",
 | 
			
		||||
                                   LV_SYMBOL_CLOSE, LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, ""};
 | 
			
		||||
 | 
			
		||||
static const lv_btnm_ctrl_t kb_ctrl_lc_map[] = {
 | 
			
		||||
    LV_KB_CTRL_BTN_FLAGS | 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7,
 | 
			
		||||
    LV_KB_CTRL_BTN_FLAGS | 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7,
 | 
			
		||||
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 | 
			
		||||
    LV_KB_CTRL_BTN_FLAGS | 2, 2, 6, 2, LV_KB_CTRL_BTN_FLAGS | 2};
 | 
			
		||||
  LV_KB_CTRL_BTN_FLAGS | 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7,
 | 
			
		||||
  LV_KB_CTRL_BTN_FLAGS | 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7,
 | 
			
		||||
  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 | 
			
		||||
  LV_KB_CTRL_BTN_FLAGS | 2, 2, 6, 2, LV_KB_CTRL_BTN_FLAGS | 2};
 | 
			
		||||
 | 
			
		||||
static const char * kb_map_uc[] = {"1#", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", LV_SYMBOL_BACKSPACE, "\n",
 | 
			
		||||
                                   "abc", "A", "S", "D", "F", "G", "H", "J", "K", "L", LV_SYMBOL_NEW_LINE, "\n",
 | 
			
		||||
@@ -52,32 +52,33 @@ static const char * kb_map_uc[] = {"1#", "Q", "W", "E", "R", "T", "Y", "U", "I",
 | 
			
		||||
                                   LV_SYMBOL_CLOSE, LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, ""};
 | 
			
		||||
 | 
			
		||||
static const lv_btnm_ctrl_t kb_ctrl_uc_map[] = {
 | 
			
		||||
    LV_KB_CTRL_BTN_FLAGS | 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7,
 | 
			
		||||
    LV_KB_CTRL_BTN_FLAGS | 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7,
 | 
			
		||||
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 | 
			
		||||
    LV_KB_CTRL_BTN_FLAGS | 2, 2, 6, 2, LV_KB_CTRL_BTN_FLAGS | 2};
 | 
			
		||||
  LV_KB_CTRL_BTN_FLAGS | 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7,
 | 
			
		||||
  LV_KB_CTRL_BTN_FLAGS | 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7,
 | 
			
		||||
  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 | 
			
		||||
  LV_KB_CTRL_BTN_FLAGS | 2, 2, 6, 2, LV_KB_CTRL_BTN_FLAGS | 2};
 | 
			
		||||
 | 
			
		||||
static const char * kb_map_spec[] = {"0", "1", "2", "3", "4" ,"5", "6", "7", "8", "9", ".", LV_SYMBOL_BACKSPACE, "\n",
 | 
			
		||||
static const char * kb_map_spec[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", LV_SYMBOL_BACKSPACE, "\n",
 | 
			
		||||
                                     "abc", "+", "-", "/", "*", "=", "%", "!", "?", "#", "<", ">", "\n",
 | 
			
		||||
                                     "\\",  "@", "$", "(", ")", "{", "}", "[", "]", ";", "\"", "'", "\n",
 | 
			
		||||
                                     LV_SYMBOL_CLOSE, LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, ""};
 | 
			
		||||
 | 
			
		||||
static const lv_btnm_ctrl_t kb_ctrl_spec_map[] = {
 | 
			
		||||
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, LV_KB_CTRL_BTN_FLAGS | 2,
 | 
			
		||||
    LV_KB_CTRL_BTN_FLAGS | 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 | 
			
		||||
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 | 
			
		||||
    LV_KB_CTRL_BTN_FLAGS | 2, 2, 6, 2, LV_KB_CTRL_BTN_FLAGS | 2};
 | 
			
		||||
  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, LV_KB_CTRL_BTN_FLAGS | 2,
 | 
			
		||||
  LV_KB_CTRL_BTN_FLAGS | 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 | 
			
		||||
  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 | 
			
		||||
  LV_KB_CTRL_BTN_FLAGS | 2, 2, 6, 2, LV_KB_CTRL_BTN_FLAGS | 2};
 | 
			
		||||
 | 
			
		||||
static const lv_btnm_ctrl_t kb_ctrl_num_map[] = {
 | 
			
		||||
        1, 1, 1, LV_KB_CTRL_BTN_FLAGS | 2,
 | 
			
		||||
        1, 1, 1, LV_KB_CTRL_BTN_FLAGS | 2,
 | 
			
		||||
        1, 1, 1, 2,
 | 
			
		||||
        1, 1, 1, 1, 1};
 | 
			
		||||
  1, 1, 1, LV_KB_CTRL_BTN_FLAGS | 2,
 | 
			
		||||
  1, 1, 1, LV_KB_CTRL_BTN_FLAGS | 2,
 | 
			
		||||
  1, 1, 1, 2,
 | 
			
		||||
  1, 1, 1, 1, 1
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void lv_kb_event_cb(lv_obj_t *kb, lv_event_t event) {
 | 
			
		||||
  if (event != LV_EVENT_VALUE_CHANGED) return;
 | 
			
		||||
 | 
			
		||||
  lv_kb_ext_t * ext = (lv_kb_ext_t * )lv_obj_get_ext_attr(kb);
 | 
			
		||||
  lv_kb_ext_t *ext = (lv_kb_ext_t*)lv_obj_get_ext_attr(kb);
 | 
			
		||||
  const uint16_t btn_id = lv_btnm_get_active_btn(kb);
 | 
			
		||||
  if (btn_id == LV_BTNM_BTN_NONE) return;
 | 
			
		||||
  if (lv_btnm_get_btn_ctrl(kb, btn_id, LV_BTNM_CTRL_HIDDEN | LV_BTNM_CTRL_INACTIVE)) return;
 | 
			
		||||
@@ -120,12 +121,12 @@ static void lv_kb_event_cb(lv_obj_t *kb, lv_event_t event) {
 | 
			
		||||
      switch (keyboard_value) {
 | 
			
		||||
        #if ENABLED(MKS_WIFI_MODULE)
 | 
			
		||||
          case wifiName:
 | 
			
		||||
            memcpy(uiCfg.wifi_name,ret_ta_txt,sizeof(uiCfg.wifi_name));
 | 
			
		||||
            memcpy(uiCfg.wifi_name, ret_ta_txt, sizeof(uiCfg.wifi_name));
 | 
			
		||||
            lv_clear_keyboard();
 | 
			
		||||
            draw_return_ui();
 | 
			
		||||
            break;
 | 
			
		||||
          case wifiPassWord:
 | 
			
		||||
            memcpy(uiCfg.wifi_key,ret_ta_txt,sizeof(uiCfg.wifi_name));
 | 
			
		||||
            memcpy(uiCfg.wifi_key, ret_ta_txt, sizeof(uiCfg.wifi_name));
 | 
			
		||||
            lv_clear_keyboard();
 | 
			
		||||
            draw_return_ui();
 | 
			
		||||
            break;
 | 
			
		||||
@@ -157,8 +158,8 @@ static void lv_kb_event_cb(lv_obj_t *kb, lv_event_t event) {
 | 
			
		||||
        #endif // MKS_WIFI_MODULE
 | 
			
		||||
        case autoLevelGcodeCommand:
 | 
			
		||||
          uint8_t buf[100];
 | 
			
		||||
          strncpy((char *)buf,ret_ta_txt,sizeof(buf));
 | 
			
		||||
          update_gcode_command(AUTO_LEVELING_COMMAND_ADDR,buf);
 | 
			
		||||
          strncpy((char *)buf, ret_ta_txt, sizeof(buf));
 | 
			
		||||
          update_gcode_command(AUTO_LEVELING_COMMAND_ADDR, buf);
 | 
			
		||||
          lv_clear_keyboard();
 | 
			
		||||
          draw_return_ui();
 | 
			
		||||
          break;
 | 
			
		||||
@@ -176,7 +177,7 @@ static void lv_kb_event_cb(lv_obj_t *kb, lv_event_t event) {
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
      lv_kb_set_ta(kb, nullptr); // De-assign the text area to hide it cursor if needed
 | 
			
		||||
  return;
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Add the characters to the text area if set
 | 
			
		||||
@@ -223,16 +224,16 @@ void lv_draw_keyboard() {
 | 
			
		||||
  static lv_style_t rel_style, pr_style;
 | 
			
		||||
 | 
			
		||||
  lv_style_copy(&rel_style, &lv_style_btn_rel);
 | 
			
		||||
  rel_style.body.radius = 0;
 | 
			
		||||
  rel_style.body.radius       = 0;
 | 
			
		||||
  rel_style.body.border.width = 1;
 | 
			
		||||
  rel_style.body.main_color = lv_color_make(0xA9, 0x62, 0x1D);
 | 
			
		||||
  rel_style.body.grad_color = lv_color_make(0xA7, 0x59, 0x0E);
 | 
			
		||||
  rel_style.body.main_color   = lv_color_make(0xA9, 0x62, 0x1D);
 | 
			
		||||
  rel_style.body.grad_color   = lv_color_make(0xA7, 0x59, 0x0E);
 | 
			
		||||
 | 
			
		||||
  lv_style_copy(&pr_style, &lv_style_btn_pr);
 | 
			
		||||
  pr_style.body.radius = 0;
 | 
			
		||||
  pr_style.body.radius       = 0;
 | 
			
		||||
  pr_style.body.border.width = 1;
 | 
			
		||||
  pr_style.body.main_color = lv_color_make(0x72, 0x42, 0x15);
 | 
			
		||||
  pr_style.body.grad_color = lv_color_make(0x6A, 0x3A, 0x0C);
 | 
			
		||||
  pr_style.body.main_color   = lv_color_make(0x72, 0x42, 0x15);
 | 
			
		||||
  pr_style.body.grad_color   = lv_color_make(0x6A, 0x3A, 0x0C);
 | 
			
		||||
 | 
			
		||||
  // Create a keyboard and apply the styles
 | 
			
		||||
  lv_obj_t *kb = lv_kb_create(scr, nullptr);
 | 
			
		||||
@@ -251,9 +252,9 @@ void lv_draw_keyboard() {
 | 
			
		||||
  lv_obj_align(ta, nullptr, LV_ALIGN_IN_TOP_MID, 0, 10);
 | 
			
		||||
  switch (keyboard_value) {
 | 
			
		||||
    case autoLevelGcodeCommand:
 | 
			
		||||
    get_gcode_command(AUTO_LEVELING_COMMAND_ADDR,(uint8_t *)public_buf_m);
 | 
			
		||||
    public_buf_m[sizeof(public_buf_m)-1] = 0;
 | 
			
		||||
    lv_ta_set_text(ta, public_buf_m);
 | 
			
		||||
      get_gcode_command(AUTO_LEVELING_COMMAND_ADDR, (uint8_t *)public_buf_m);
 | 
			
		||||
      public_buf_m[sizeof(public_buf_m) - 1] = '\0';
 | 
			
		||||
      lv_ta_set_text(ta, public_buf_m);
 | 
			
		||||
      break;
 | 
			
		||||
    case GCodeCommand:
 | 
			
		||||
      // Start with uppercase by default
 | 
			
		||||
@@ -261,7 +262,7 @@ void lv_draw_keyboard() {
 | 
			
		||||
      lv_btnm_set_ctrl_map(kb, kb_ctrl_uc_map);
 | 
			
		||||
      // Fallthrough
 | 
			
		||||
    default:
 | 
			
		||||
    lv_ta_set_text(ta, "");
 | 
			
		||||
      lv_ta_set_text(ta, "");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Assign the text area to the keyboard
 | 
			
		||||
@@ -272,5 +273,4 @@ void lv_clear_keyboard() {
 | 
			
		||||
  lv_obj_del(scr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif  // HAS_TFT_LVGL_UI
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" { /* C-declarations for C++ */
 | 
			
		||||
  extern "C" { /* C-declarations for C++ */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void lv_draw_more();
 | 
			
		||||
 
 | 
			
		||||
@@ -32,10 +32,17 @@
 | 
			
		||||
 | 
			
		||||
static lv_obj_t *scr;
 | 
			
		||||
extern lv_group_t*  g;
 | 
			
		||||
static lv_obj_t *buttonType, *buttonStep;
 | 
			
		||||
static lv_obj_t *buttonType, *buttonStep, *buttonAdd, *buttonDec;
 | 
			
		||||
static lv_obj_t *labelType;
 | 
			
		||||
static lv_obj_t *labelStep;
 | 
			
		||||
static lv_obj_t *tempText1;
 | 
			
		||||
static lv_obj_t *btn_pla;
 | 
			
		||||
static lv_obj_t *btn_abs;
 | 
			
		||||
static lv_obj_t *label_abs;
 | 
			
		||||
static lv_obj_t *label_pla;
 | 
			
		||||
 | 
			
		||||
static lv_style_t btn_style_pre;
 | 
			
		||||
static lv_style_t btn_style_rel;
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
  ID_P_ADD = 1,
 | 
			
		||||
@@ -43,7 +50,9 @@ enum {
 | 
			
		||||
  ID_P_TYPE,
 | 
			
		||||
  ID_P_STEP,
 | 
			
		||||
  ID_P_OFF,
 | 
			
		||||
  ID_P_RETURN
 | 
			
		||||
  ID_P_RETURN,
 | 
			
		||||
  ID_P_ABS,
 | 
			
		||||
  ID_P_PLA
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void event_handler(lv_obj_t *obj, lv_event_t event) {
 | 
			
		||||
@@ -55,10 +64,11 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) {
 | 
			
		||||
        thermalManager.temp_hotend[uiCfg.extruderIndex].target += uiCfg.stepHeat;
 | 
			
		||||
        if (uiCfg.extruderIndex == 0)
 | 
			
		||||
          max_target = HEATER_0_MAXTEMP - (WATCH_TEMP_INCREASE + TEMP_HYSTERESIS + 1);
 | 
			
		||||
        #if HAS_MULTI_HOTEND
 | 
			
		||||
          else
 | 
			
		||||
        else {
 | 
			
		||||
          #if HAS_MULTI_HOTEND
 | 
			
		||||
            max_target = HEATER_1_MAXTEMP - (WATCH_TEMP_INCREASE + TEMP_HYSTERESIS + 1);
 | 
			
		||||
        #endif
 | 
			
		||||
          #endif
 | 
			
		||||
        }
 | 
			
		||||
        if (thermalManager.degTargetHotend(uiCfg.extruderIndex) > max_target)
 | 
			
		||||
          thermalManager.setTargetHotend(max_target, uiCfg.extruderIndex);
 | 
			
		||||
        thermalManager.start_watching_hotend(uiCfg.extruderIndex);
 | 
			
		||||
@@ -83,16 +93,16 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) {
 | 
			
		||||
          thermalManager.setTargetHotend(0, uiCfg.extruderIndex);
 | 
			
		||||
        thermalManager.start_watching_hotend(uiCfg.extruderIndex);
 | 
			
		||||
      }
 | 
			
		||||
      #if HAS_HEATED_BED
 | 
			
		||||
        else {
 | 
			
		||||
      else {
 | 
			
		||||
        #if HAS_HEATED_BED
 | 
			
		||||
          if (thermalManager.degTargetBed() > uiCfg.stepHeat)
 | 
			
		||||
            thermalManager.temp_bed.target -= uiCfg.stepHeat;
 | 
			
		||||
          else
 | 
			
		||||
            thermalManager.setTargetBed(0);
 | 
			
		||||
 | 
			
		||||
          thermalManager.start_watching_bed();
 | 
			
		||||
        }
 | 
			
		||||
      #endif
 | 
			
		||||
        #endif
 | 
			
		||||
      }
 | 
			
		||||
      disp_desire_temp();
 | 
			
		||||
      break;
 | 
			
		||||
    case ID_P_TYPE:
 | 
			
		||||
@@ -102,25 +112,24 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) {
 | 
			
		||||
            uiCfg.extruderIndex = 1;
 | 
			
		||||
          }
 | 
			
		||||
          else if (uiCfg.extruderIndex == 1) {
 | 
			
		||||
            if (TEMP_SENSOR_BED != 0) {
 | 
			
		||||
            if (ENABLED(HAS_HEATED_BED)) {
 | 
			
		||||
              uiCfg.curTempType = 1;
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
              uiCfg.curTempType      = 0;
 | 
			
		||||
              uiCfg.curTempType = 0;
 | 
			
		||||
              uiCfg.extruderIndex = 0;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        else if (uiCfg.extruderIndex == 0) {
 | 
			
		||||
          if (TEMP_SENSOR_BED != 0)
 | 
			
		||||
            uiCfg.curTempType = 1;
 | 
			
		||||
          else
 | 
			
		||||
            uiCfg.curTempType = 0;
 | 
			
		||||
          uiCfg.curTempType = TERN(HAS_HEATED_BED, 1, 0);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      else if (uiCfg.curTempType == 1) {
 | 
			
		||||
        uiCfg.extruderIndex = 0;
 | 
			
		||||
        uiCfg.curTempType      = 0;
 | 
			
		||||
        uiCfg.curTempType = 0;
 | 
			
		||||
        disp_add_dec();
 | 
			
		||||
        disp_ext_heart();
 | 
			
		||||
      }
 | 
			
		||||
      disp_temp_type();
 | 
			
		||||
      break;
 | 
			
		||||
@@ -138,30 +147,44 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) {
 | 
			
		||||
        thermalManager.setTargetHotend(0, uiCfg.extruderIndex);
 | 
			
		||||
        thermalManager.start_watching_hotend(uiCfg.extruderIndex);
 | 
			
		||||
      }
 | 
			
		||||
      #if HAS_HEATED_BED
 | 
			
		||||
        else {
 | 
			
		||||
      else {
 | 
			
		||||
        #if HAS_HEATED_BED
 | 
			
		||||
          thermalManager.temp_bed.target = 0;
 | 
			
		||||
          thermalManager.start_watching_bed();
 | 
			
		||||
        }
 | 
			
		||||
      #endif
 | 
			
		||||
        #endif
 | 
			
		||||
      }
 | 
			
		||||
      disp_desire_temp();
 | 
			
		||||
      break;
 | 
			
		||||
    case ID_P_RETURN:
 | 
			
		||||
      clear_cur_ui();
 | 
			
		||||
      draw_return_ui();
 | 
			
		||||
      break;
 | 
			
		||||
    case ID_P_ABS:
 | 
			
		||||
      thermalManager.setTargetHotend(PREHEAT_2_TEMP_HOTEND, 0);
 | 
			
		||||
      break;
 | 
			
		||||
    case ID_P_PLA:
 | 
			
		||||
      thermalManager.setTargetHotend(PREHEAT_1_TEMP_HOTEND, 0);
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void disp_add_dec() {
 | 
			
		||||
  // Create image buttons
 | 
			
		||||
  buttonAdd = lv_big_button_create(scr, "F:/bmp_Add.bin", preheat_menu.add, INTERVAL_V, titleHeight, event_handler, ID_P_ADD);
 | 
			
		||||
  buttonDec = lv_big_button_create(scr, "F:/bmp_Dec.bin", preheat_menu.dec, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight, event_handler, ID_P_DEC);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void lv_draw_preHeat() {
 | 
			
		||||
  scr = lv_screen_create(PRE_HEAT_UI);
 | 
			
		||||
 | 
			
		||||
  // Create image buttons
 | 
			
		||||
  lv_big_button_create(scr, "F:/bmp_Add.bin", preheat_menu.add, INTERVAL_V, titleHeight, event_handler, ID_P_ADD);
 | 
			
		||||
  lv_big_button_create(scr, "F:/bmp_Dec.bin", preheat_menu.dec, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight, event_handler, ID_P_DEC);
 | 
			
		||||
  disp_add_dec();
 | 
			
		||||
 | 
			
		||||
  buttonType = lv_imgbtn_create(scr, nullptr, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_P_TYPE);
 | 
			
		||||
  buttonStep = lv_imgbtn_create(scr, nullptr, BTN_X_PIXEL + INTERVAL_V * 2, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_P_STEP);
 | 
			
		||||
 | 
			
		||||
  if (uiCfg.curTempType == 0) disp_ext_heart();
 | 
			
		||||
 | 
			
		||||
  #if HAS_ROTARY_ENCODER
 | 
			
		||||
    if (gCfgItems.encoder_enable) {
 | 
			
		||||
      lv_group_add_obj(g, buttonType);
 | 
			
		||||
@@ -184,26 +207,38 @@ void lv_draw_preHeat() {
 | 
			
		||||
  disp_desire_temp();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void disp_ext_heart() {
 | 
			
		||||
  btn_abs = lv_btn_create(scr, 160, 40, 80, 40, event_handler, ID_P_ABS);
 | 
			
		||||
  btn_pla = lv_btn_create(scr, 260, 40, 80, 40, event_handler, ID_P_PLA);
 | 
			
		||||
 | 
			
		||||
  lv_btn_set_style(btn_abs, LV_BTN_STYLE_PR, &btn_style_pre);
 | 
			
		||||
  lv_btn_set_style(btn_abs, LV_BTN_STYLE_REL, &btn_style_rel);
 | 
			
		||||
  lv_btn_set_style(btn_pla, LV_BTN_STYLE_PR, &btn_style_pre);
 | 
			
		||||
  lv_btn_set_style(btn_pla, LV_BTN_STYLE_REL, &btn_style_rel);
 | 
			
		||||
 | 
			
		||||
  label_abs = lv_label_create(btn_abs, PREHEAT_2_LABEL);
 | 
			
		||||
  label_pla = lv_label_create(btn_pla, PREHEAT_1_LABEL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void disp_temp_type() {
 | 
			
		||||
  if (uiCfg.curTempType == 0) {
 | 
			
		||||
    if (uiCfg.extruderIndex == 1) {
 | 
			
		||||
    lv_imgbtn_set_src_both(buttonType, "F:/bmp_extru2.bin");
 | 
			
		||||
      lv_imgbtn_set_src_both(buttonType, "F:/bmp_extru2.bin");
 | 
			
		||||
      if (gCfgItems.multiple_language) {
 | 
			
		||||
        lv_label_set_text(labelType, preheat_menu.ext2);
 | 
			
		||||
        lv_obj_align(labelType, buttonType, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
    lv_imgbtn_set_src_both(buttonType, "F:/bmp_extru1.bin");
 | 
			
		||||
      lv_imgbtn_set_src_both(buttonType, "F:/bmp_extru1.bin");
 | 
			
		||||
      if (gCfgItems.multiple_language) {
 | 
			
		||||
        lv_label_set_text(labelType, preheat_menu.ext1);
 | 
			
		||||
        lv_obj_align(labelType, buttonType, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
  else {
 | 
			
		||||
  lv_imgbtn_set_src_both(buttonType, "F:/bmp_bed.bin");
 | 
			
		||||
    lv_imgbtn_set_src_both(buttonType, "F:/bmp_bed.bin");
 | 
			
		||||
    if (gCfgItems.multiple_language) {
 | 
			
		||||
      lv_label_set_text(labelType, preheat_menu.hotbed);
 | 
			
		||||
      lv_obj_align(labelType, buttonType, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
 | 
			
		||||
 
 | 
			
		||||
@@ -30,6 +30,8 @@ void lv_clear_preHeat();
 | 
			
		||||
void disp_temp_type();
 | 
			
		||||
void disp_step_heat();
 | 
			
		||||
void disp_desire_temp();
 | 
			
		||||
void disp_ext_heart();
 | 
			
		||||
void disp_add_dec();
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
  } /* C-declarations for C++ */
 | 
			
		||||
 
 | 
			
		||||
@@ -160,8 +160,8 @@ void lv_draw_printing() {
 | 
			
		||||
 | 
			
		||||
  buttonZpos = lv_imgbtn_create(scr, "F:/bmp_zpos_state.bin", 350, 86, event_handler, ID_BABYSTEP);
 | 
			
		||||
 | 
			
		||||
  buttonPause = lv_imgbtn_create(scr, uiCfg.print_state == WORKING ? "F:/bmp_pause.bin" : "F:/bmp_resume.bin", 5, 240, event_handler, ID_PAUSE);
 | 
			
		||||
  buttonStop = lv_imgbtn_create(scr, "F:/bmp_stop.bin", 165, 240, event_handler, ID_STOP);
 | 
			
		||||
  buttonPause  = lv_imgbtn_create(scr, uiCfg.print_state == WORKING ? "F:/bmp_pause.bin" : "F:/bmp_resume.bin", 5, 240, event_handler, ID_PAUSE);
 | 
			
		||||
  buttonStop   = lv_imgbtn_create(scr, "F:/bmp_stop.bin", 165, 240, event_handler, ID_STOP);
 | 
			
		||||
  buttonOperat = lv_imgbtn_create(scr, "F:/bmp_operate.bin", 325, 240, event_handler, ID_OPTION);
 | 
			
		||||
 | 
			
		||||
  #if HAS_ROTARY_ENCODER
 | 
			
		||||
@@ -185,7 +185,7 @@ void lv_draw_printing() {
 | 
			
		||||
    labelBed = lv_label_create(scr, 250, 196, nullptr);
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  labelFan = lv_label_create(scr, 395, 196, nullptr);
 | 
			
		||||
  labelFan  = lv_label_create(scr, 395, 196, nullptr);
 | 
			
		||||
  labelTime = lv_label_create(scr, 250, 96, nullptr);
 | 
			
		||||
  labelZpos = lv_label_create(scr, 395, 96, nullptr);
 | 
			
		||||
 | 
			
		||||
@@ -210,8 +210,8 @@ void lv_draw_printing() {
 | 
			
		||||
  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);
 | 
			
		||||
  bar1ValueText  = lv_label_create_empty(bar1);
 | 
			
		||||
  lv_label_set_text(bar1ValueText,"0%");
 | 
			
		||||
  bar1ValueText = lv_label_create_empty(bar1);
 | 
			
		||||
  lv_label_set_text(bar1ValueText, "0%");
 | 
			
		||||
  lv_obj_align(bar1ValueText, bar1, LV_ALIGN_CENTER, 0, 0);
 | 
			
		||||
 | 
			
		||||
  disp_ext_temp();
 | 
			
		||||
@@ -291,7 +291,7 @@ void setProBarRate() {
 | 
			
		||||
  if (disp_state == PRINTING_UI) {
 | 
			
		||||
    lv_bar_set_value(bar1, rate, LV_ANIM_ON);
 | 
			
		||||
    sprintf_P(public_buf_l, "%d%%", rate);
 | 
			
		||||
    lv_label_set_text(bar1ValueText,public_buf_l);
 | 
			
		||||
    lv_label_set_text(bar1ValueText, public_buf_l);
 | 
			
		||||
    lv_obj_align(bar1ValueText, bar1, LV_ALIGN_CENTER, 0, 0);
 | 
			
		||||
 | 
			
		||||
    if (marlin_state == MF_SD_COMPLETE) {
 | 
			
		||||
 
 | 
			
		||||
@@ -43,7 +43,7 @@
 | 
			
		||||
#include "mks_hardware.h"
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
#define ICON_POS_Y          38
 | 
			
		||||
#define ICON_POS_Y          260
 | 
			
		||||
#define TARGET_LABEL_MOD_Y -36
 | 
			
		||||
#define LABEL_MOD_Y         30
 | 
			
		||||
 | 
			
		||||
@@ -183,16 +183,16 @@ void lv_draw_ready_print() {
 | 
			
		||||
    lv_label_set_text(det_info, " ");
 | 
			
		||||
  }
 | 
			
		||||
  else {
 | 
			
		||||
    lv_big_button_create(scr, "F:/bmp_tool.bin", main_menu.tool, 20, 150, event_handler, ID_TOOL);
 | 
			
		||||
    lv_big_button_create(scr, "F:/bmp_set.bin", main_menu.set, 180, 150, event_handler, ID_SET);
 | 
			
		||||
    lv_big_button_create(scr, "F:/bmp_printing.bin", main_menu.print, 340, 150, event_handler, ID_PRINT);
 | 
			
		||||
    lv_big_button_create(scr, "F:/bmp_tool.bin", main_menu.tool, 20, 90, event_handler, ID_TOOL);
 | 
			
		||||
    lv_big_button_create(scr, "F:/bmp_set.bin", main_menu.set, 180, 90, event_handler, ID_SET);
 | 
			
		||||
    lv_big_button_create(scr, "F:/bmp_printing.bin", main_menu.print, 340, 90, event_handler, ID_PRINT);
 | 
			
		||||
 | 
			
		||||
    // Monitoring
 | 
			
		||||
    #if HAS_HOTEND
 | 
			
		||||
      buttonExt1 = lv_big_button_create(scr, "F:/bmp_ext1_state.bin", " ", 55, ICON_POS_Y, event_handler, ID_INFO_EXT);
 | 
			
		||||
      buttonExt1 = lv_big_button_create(scr, "F:/bmp_ext1_state.bin", " ", 20, ICON_POS_Y, event_handler, ID_INFO_EXT);
 | 
			
		||||
    #endif
 | 
			
		||||
    #if HAS_MULTI_HOTEND
 | 
			
		||||
      buttonExt2 = lv_big_button_create(scr, "F:/bmp_ext2_state.bin", " ", 163, ICON_POS_Y, event_handler, ID_INFO_EXT);
 | 
			
		||||
      buttonExt2 = lv_big_button_create(scr, "F:/bmp_ext2_state.bin", " ", 180, ICON_POS_Y, event_handler, ID_INFO_EXT);
 | 
			
		||||
    #endif
 | 
			
		||||
    #if HAS_HEATED_BED
 | 
			
		||||
      buttonBedstate = lv_big_button_create(scr, "F:/bmp_bed_state.bin", " ", TERN(HAS_MULTI_HOTEND, 271, 210), ICON_POS_Y, event_handler, ID_INFO_BED);
 | 
			
		||||
@@ -219,22 +219,22 @@ void lv_temp_refr() {
 | 
			
		||||
  #if HAS_HOTEND
 | 
			
		||||
    sprintf(public_buf_l, printing_menu.temp1, thermalManager.wholeDegHotend(0), thermalManager.degTargetHotend(0));
 | 
			
		||||
    lv_label_set_text(labelExt1, public_buf_l);
 | 
			
		||||
    lv_obj_align(labelExt1, buttonExt1, LV_ALIGN_OUT_BOTTOM_MID, 0, 0);
 | 
			
		||||
    lv_obj_align(labelExt1, buttonExt1, LV_ALIGN_OUT_RIGHT_MID, 0, 0);
 | 
			
		||||
  #endif
 | 
			
		||||
  #if HAS_MULTI_HOTEND
 | 
			
		||||
    sprintf(public_buf_l, printing_menu.temp1, thermalManager.wholeDegHotend(1), thermalManager.degTargetHotend(1));
 | 
			
		||||
    lv_label_set_text(labelExt2, public_buf_l);
 | 
			
		||||
    lv_obj_align(labelExt2, buttonExt2, LV_ALIGN_OUT_BOTTOM_MID, 0, 0);
 | 
			
		||||
    lv_obj_align(labelExt2, buttonExt2, LV_ALIGN_OUT_RIGHT_MID, 0, 0);
 | 
			
		||||
  #endif
 | 
			
		||||
  #if HAS_HEATED_BED
 | 
			
		||||
    sprintf(public_buf_l, printing_menu.bed_temp, thermalManager.wholeDegBed(), thermalManager.degTargetBed());
 | 
			
		||||
    lv_label_set_text(labelBed, public_buf_l);
 | 
			
		||||
    lv_obj_align(labelBed, buttonBedstate, LV_ALIGN_OUT_BOTTOM_MID, 0, 0);
 | 
			
		||||
    lv_obj_align(labelBed, buttonBedstate, LV_ALIGN_OUT_RIGHT_MID, 0, 0);
 | 
			
		||||
  #endif
 | 
			
		||||
  #if HAS_FAN
 | 
			
		||||
    sprintf_P(public_buf_l, PSTR("%d%%"), (int)thermalManager.fanSpeedPercent(0));
 | 
			
		||||
    lv_label_set_text(labelFan, public_buf_l);
 | 
			
		||||
    lv_obj_align(labelFan, buttonFanstate, LV_ALIGN_OUT_BOTTOM_MID, 0, 0);
 | 
			
		||||
    lv_obj_align(labelFan, buttonFanstate, LV_ALIGN_OUT_RIGHT_MID, 0, 0);
 | 
			
		||||
  #endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -104,16 +104,16 @@ void lv_draw_tmc_step_mode_settings() {
 | 
			
		||||
  scr = lv_screen_create(TMC_MODE_UI, machine_menu.TmcStepModeConfTitle);
 | 
			
		||||
 | 
			
		||||
  bool stealth_X = false, stealth_Y = false, stealth_Z = false, stealth_E0 = false, stealth_E1 = false;
 | 
			
		||||
  TERN_(X_HAS_STEALTHCHOP,  stealth_X = stepperX.get_stealthChop());
 | 
			
		||||
  TERN_(Y_HAS_STEALTHCHOP,  stealth_Y = stepperY.get_stealthChop());
 | 
			
		||||
  TERN_(Z_HAS_STEALTHCHOP,  stealth_Z = stepperZ.get_stealthChop());
 | 
			
		||||
  TERN_(X_HAS_STEALTHCHOP,  stealth_X  = stepperX.get_stealthChop());
 | 
			
		||||
  TERN_(Y_HAS_STEALTHCHOP,  stealth_Y  = stepperY.get_stealthChop());
 | 
			
		||||
  TERN_(Z_HAS_STEALTHCHOP,  stealth_Z  = stepperZ.get_stealthChop());
 | 
			
		||||
  TERN_(E0_HAS_STEALTHCHOP, stealth_E0 = stepperE0.get_stealthChop());
 | 
			
		||||
  TERN_(E1_HAS_STEALTHCHOP, stealth_E1 = stepperE1.get_stealthChop());
 | 
			
		||||
 | 
			
		||||
  if (!uiCfg.para_ui_page) {
 | 
			
		||||
    buttonXState = lv_screen_menu_item_onoff(scr, machine_menu.X_StepMode, PARA_UI_POS_X, PARA_UI_POS_Y, event_handler, ID_TMC_MODE_X, 0, stealth_X);
 | 
			
		||||
    buttonYState = lv_screen_menu_item_onoff(scr, machine_menu.Y_StepMode, PARA_UI_POS_X, PARA_UI_POS_Y * 2, event_handler, ID_TMC_MODE_Y, 1, stealth_Y);
 | 
			
		||||
    buttonZState = lv_screen_menu_item_onoff(scr, machine_menu.Z_StepMode, PARA_UI_POS_X, PARA_UI_POS_Y * 3, event_handler, ID_TMC_MODE_Z, 2, stealth_Z);
 | 
			
		||||
    buttonXState  = lv_screen_menu_item_onoff(scr, machine_menu.X_StepMode, PARA_UI_POS_X, PARA_UI_POS_Y, event_handler, ID_TMC_MODE_X, 0, stealth_X);
 | 
			
		||||
    buttonYState  = lv_screen_menu_item_onoff(scr, machine_menu.Y_StepMode, PARA_UI_POS_X, PARA_UI_POS_Y * 2, event_handler, ID_TMC_MODE_Y, 1, stealth_Y);
 | 
			
		||||
    buttonZState  = lv_screen_menu_item_onoff(scr, machine_menu.Z_StepMode, PARA_UI_POS_X, PARA_UI_POS_Y * 3, event_handler, ID_TMC_MODE_Z, 2, stealth_Z);
 | 
			
		||||
    buttonE0State = lv_screen_menu_item_onoff(scr, machine_menu.E0_StepMode, PARA_UI_POS_X, PARA_UI_POS_Y * 4, event_handler, ID_TMC_MODE_E0, 2, stealth_E0);
 | 
			
		||||
    lv_big_button_create(scr, "F:/bmp_back70x40.bin", machine_menu.next, PARA_UI_TURN_PAGE_POS_X, PARA_UI_TURN_PAGE_POS_Y, event_handler, ID_TMC_MODE_DOWN, true);
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -60,8 +60,8 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) {
 | 
			
		||||
    case ID_T_HOME:     lv_draw_home(); break;
 | 
			
		||||
    case ID_T_LEVELING:
 | 
			
		||||
      #if ENABLED(AUTO_BED_LEVELING_BILINEAR)
 | 
			
		||||
        get_gcode_command(AUTO_LEVELING_COMMAND_ADDR,(uint8_t *)public_buf_m);
 | 
			
		||||
        public_buf_m[sizeof(public_buf_m)-1] = 0;
 | 
			
		||||
        get_gcode_command(AUTO_LEVELING_COMMAND_ADDR, (uint8_t *)public_buf_m);
 | 
			
		||||
        public_buf_m[sizeof(public_buf_m) - 1] = 0;
 | 
			
		||||
        queue.inject_P(PSTR(public_buf_m));
 | 
			
		||||
      #else
 | 
			
		||||
        uiCfg.leveling_first_time = true;
 | 
			
		||||
@@ -89,7 +89,7 @@ void lv_draw_tool() {
 | 
			
		||||
  lv_big_button_create(scr, "F:/bmp_mov.bin", tool_menu.move, BTN_X_PIXEL * 2 + INTERVAL_V * 3, titleHeight, event_handler, ID_T_MOV);
 | 
			
		||||
  lv_big_button_create(scr, "F:/bmp_zero.bin", tool_menu.home, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight, event_handler, ID_T_HOME);
 | 
			
		||||
  lv_big_button_create(scr, "F:/bmp_leveling.bin", tool_menu.TERN(AUTO_BED_LEVELING_BILINEAR, autoleveling, leveling), INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_T_LEVELING);
 | 
			
		||||
  lv_big_button_create(scr, "F:/bmp_filamentchange.bin", tool_menu.filament, BTN_X_PIXEL+INTERVAL_V*2,BTN_Y_PIXEL+INTERVAL_H+titleHeight, event_handler,ID_T_FILAMENT);
 | 
			
		||||
  lv_big_button_create(scr, "F:/bmp_filamentchange.bin", tool_menu.filament, BTN_X_PIXEL + INTERVAL_V * 2, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_T_FILAMENT);
 | 
			
		||||
  lv_big_button_create(scr, "F:/bmp_more.bin", tool_menu.more, BTN_X_PIXEL * 2 + INTERVAL_V * 3, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_T_MORE);
 | 
			
		||||
  lv_big_button_create(scr, "F:/bmp_return.bin", common_menu.text_back, BTN_X_PIXEL * 3 + INTERVAL_V * 4, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_T_RETURN);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -71,9 +71,9 @@ void lv_update_touch_calibration_screen() {
 | 
			
		||||
  if (calibration_stage < CALIBRATION_SUCCESS) {
 | 
			
		||||
    // handle current state
 | 
			
		||||
    switch (calibration_stage) {
 | 
			
		||||
      case CALIBRATION_TOP_LEFT: str = GET_TEXT(MSG_TOP_LEFT); break;
 | 
			
		||||
      case CALIBRATION_BOTTOM_LEFT: str = GET_TEXT(MSG_BOTTOM_LEFT); break;
 | 
			
		||||
      case CALIBRATION_TOP_RIGHT:  str = GET_TEXT(MSG_TOP_RIGHT); break;
 | 
			
		||||
      case CALIBRATION_TOP_LEFT:     str = GET_TEXT(MSG_TOP_LEFT); break;
 | 
			
		||||
      case CALIBRATION_BOTTOM_LEFT:  str = GET_TEXT(MSG_BOTTOM_LEFT); break;
 | 
			
		||||
      case CALIBRATION_TOP_RIGHT:    str = GET_TEXT(MSG_TOP_RIGHT); break;
 | 
			
		||||
      case CALIBRATION_BOTTOM_RIGHT: str = GET_TEXT(MSG_BOTTOM_RIGHT); break;
 | 
			
		||||
      default: break;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -159,7 +159,7 @@ void gCfgItems_init() {
 | 
			
		||||
    gCfgItems.spi_flash_flag = FLASH_INF_VALID_FLAG;
 | 
			
		||||
    W25QXX.SPI_FLASH_SectorErase(VAR_INF_ADDR);
 | 
			
		||||
    W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&gCfgItems, VAR_INF_ADDR, sizeof(gCfgItems));
 | 
			
		||||
    //init gcode command
 | 
			
		||||
    // init gcode command
 | 
			
		||||
    W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&custom_gcode_command[0], AUTO_LEVELING_COMMAND_ADDR, 100);
 | 
			
		||||
    W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&custom_gcode_command[1], OTHERS_COMMAND_ADDR_1, 100);
 | 
			
		||||
    W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&custom_gcode_command[2], OTHERS_COMMAND_ADDR_2, 100);
 | 
			
		||||
@@ -208,7 +208,7 @@ void ui_cfg_init() {
 | 
			
		||||
    memset(&ipPara, 0, sizeof(ipPara));
 | 
			
		||||
    strcpy_P(wifiPara.ap_name, PSTR(WIFI_AP_NAME));
 | 
			
		||||
    strcpy_P(wifiPara.keyCode, PSTR(WIFI_KEY_CODE));
 | 
			
		||||
    //client
 | 
			
		||||
    // client
 | 
			
		||||
    strcpy_P(ipPara.ip_addr, PSTR(IP_ADDR));
 | 
			
		||||
    strcpy_P(ipPara.mask, PSTR(IP_MASK));
 | 
			
		||||
    strcpy_P(ipPara.gate, PSTR(IP_GATE));
 | 
			
		||||
@@ -216,7 +216,7 @@ void ui_cfg_init() {
 | 
			
		||||
 | 
			
		||||
    ipPara.dhcp_flag = IP_DHCP_FLAG;
 | 
			
		||||
 | 
			
		||||
    //AP
 | 
			
		||||
    // AP
 | 
			
		||||
    strcpy_P(ipPara.dhcpd_ip, PSTR(AP_IP_ADDR));
 | 
			
		||||
    strcpy_P(ipPara.dhcpd_mask, PSTR(AP_IP_MASK));
 | 
			
		||||
    strcpy_P(ipPara.dhcpd_gate, PSTR(AP_IP_GATE));
 | 
			
		||||
@@ -238,33 +238,33 @@ void update_spi_flash() {
 | 
			
		||||
  uint8_t command_buf[512];
 | 
			
		||||
 | 
			
		||||
  W25QXX.init(SPI_QUARTER_SPEED);
 | 
			
		||||
  //read back the gcode command before erase spi flash
 | 
			
		||||
  // read back the gcode command before erase spi flash
 | 
			
		||||
  W25QXX.SPI_FLASH_BufferRead((uint8_t *)&command_buf, GCODE_COMMAND_ADDR, sizeof(command_buf));
 | 
			
		||||
  W25QXX.SPI_FLASH_SectorErase(VAR_INF_ADDR);
 | 
			
		||||
  W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&gCfgItems, VAR_INF_ADDR, sizeof(gCfgItems));
 | 
			
		||||
  W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&command_buf, GCODE_COMMAND_ADDR, sizeof(command_buf));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void update_gcode_command(int addr,uint8_t *s) {
 | 
			
		||||
void update_gcode_command(int addr, uint8_t *s) {
 | 
			
		||||
  uint8_t command_buf[512];
 | 
			
		||||
 | 
			
		||||
  W25QXX.init(SPI_QUARTER_SPEED);
 | 
			
		||||
  //read back the gcode command before erase spi flash
 | 
			
		||||
  // read back the gcode command before erase spi flash
 | 
			
		||||
  W25QXX.SPI_FLASH_BufferRead((uint8_t *)&command_buf, GCODE_COMMAND_ADDR, sizeof(command_buf));
 | 
			
		||||
  W25QXX.SPI_FLASH_SectorErase(VAR_INF_ADDR);
 | 
			
		||||
  W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&gCfgItems, VAR_INF_ADDR, sizeof(gCfgItems));
 | 
			
		||||
  switch (addr) {
 | 
			
		||||
    case AUTO_LEVELING_COMMAND_ADDR: memcpy(&command_buf[0*100], s, 100); break;
 | 
			
		||||
    case OTHERS_COMMAND_ADDR_1: memcpy(&command_buf[1*100], s, 100); break;
 | 
			
		||||
    case OTHERS_COMMAND_ADDR_2: memcpy(&command_buf[2*100], s, 100); break;
 | 
			
		||||
    case OTHERS_COMMAND_ADDR_3: memcpy(&command_buf[3*100], s, 100); break;
 | 
			
		||||
    case OTHERS_COMMAND_ADDR_4: memcpy(&command_buf[4*100], s, 100); break;
 | 
			
		||||
    case AUTO_LEVELING_COMMAND_ADDR: memcpy(&command_buf[0 * 100], s, 100); break;
 | 
			
		||||
    case OTHERS_COMMAND_ADDR_1: memcpy(&command_buf[1 * 100], s, 100); break;
 | 
			
		||||
    case OTHERS_COMMAND_ADDR_2: memcpy(&command_buf[2 * 100], s, 100); break;
 | 
			
		||||
    case OTHERS_COMMAND_ADDR_3: memcpy(&command_buf[3 * 100], s, 100); break;
 | 
			
		||||
    case OTHERS_COMMAND_ADDR_4: memcpy(&command_buf[4 * 100], s, 100); break;
 | 
			
		||||
    default: break;
 | 
			
		||||
  }
 | 
			
		||||
  W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&command_buf, GCODE_COMMAND_ADDR, sizeof(command_buf));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void get_gcode_command(int addr,uint8_t *d) {
 | 
			
		||||
void get_gcode_command(int addr, uint8_t *d) {
 | 
			
		||||
  W25QXX.init(SPI_QUARTER_SPEED);
 | 
			
		||||
  W25QXX.SPI_FLASH_BufferRead((uint8_t *)d, addr, 100);
 | 
			
		||||
}
 | 
			
		||||
@@ -369,14 +369,14 @@ void tft_style_init() {
 | 
			
		||||
  style_num_text.text.line_space   = -5;
 | 
			
		||||
 | 
			
		||||
  lv_style_copy(&style_sel_text, &lv_style_scr);
 | 
			
		||||
  style_sel_text.body.main_color  = LV_COLOR_BACKGROUND;
 | 
			
		||||
  style_sel_text.body.grad_color  = LV_COLOR_BACKGROUND;
 | 
			
		||||
  style_sel_text.text.color       = LV_COLOR_YELLOW;
 | 
			
		||||
  style_sel_text.text.sel_color   = LV_COLOR_YELLOW;
 | 
			
		||||
  style_sel_text.text.font        = TERN(HAS_SPI_FLASH_FONT, &gb2312_puhui32, LV_FONT_DEFAULT);
 | 
			
		||||
  style_sel_text.line.width       = 0;
 | 
			
		||||
  style_sel_text.text.letter_space  = 0;
 | 
			
		||||
  style_sel_text.text.line_space    = -5;
 | 
			
		||||
  style_sel_text.body.main_color   = LV_COLOR_BACKGROUND;
 | 
			
		||||
  style_sel_text.body.grad_color   = LV_COLOR_BACKGROUND;
 | 
			
		||||
  style_sel_text.text.color        = LV_COLOR_YELLOW;
 | 
			
		||||
  style_sel_text.text.sel_color    = LV_COLOR_YELLOW;
 | 
			
		||||
  style_sel_text.text.font         = TERN(HAS_SPI_FLASH_FONT, &gb2312_puhui32, LV_FONT_DEFAULT);
 | 
			
		||||
  style_sel_text.line.width        = 0;
 | 
			
		||||
  style_sel_text.text.letter_space = 0;
 | 
			
		||||
  style_sel_text.text.line_space   = -5;
 | 
			
		||||
  lv_style_copy(&style_line, &lv_style_plain);
 | 
			
		||||
  style_line.line.color   = LV_COLOR_MAKE(0x49, 0x54, 0xFF);
 | 
			
		||||
  style_line.line.width   = 1;
 | 
			
		||||
@@ -624,7 +624,7 @@ char *creat_title_text() {
 | 
			
		||||
        if (j >= 400) break;
 | 
			
		||||
      }
 | 
			
		||||
      for (i = 0; i < 400; i += 2) {
 | 
			
		||||
        p_index  = (uint16_t *)(&bmp_public_buf[i]);
 | 
			
		||||
        p_index = (uint16_t *)(&bmp_public_buf[i]);
 | 
			
		||||
        if (*p_index == 0x0000) *p_index = LV_COLOR_BACKGROUND.full;
 | 
			
		||||
      }
 | 
			
		||||
      SPI_TFT.tftio.WriteSequence((uint16_t*)bmp_public_buf, 200);
 | 
			
		||||
@@ -1353,7 +1353,7 @@ extern volatile uint32_t systick_uptime_millis;
 | 
			
		||||
 | 
			
		||||
void print_time_count() {
 | 
			
		||||
  if ((systick_uptime_millis % 1000) == 0)
 | 
			
		||||
  if (print_time.start == 1) print_time.seconds++;
 | 
			
		||||
    if (print_time.start == 1) print_time.seconds++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void LV_TASK_HANDLER() {
 | 
			
		||||
 
 | 
			
		||||
@@ -458,8 +458,8 @@ void tft_style_init();
 | 
			
		||||
extern char *creat_title_text();
 | 
			
		||||
void preview_gcode_prehandle(char *path);
 | 
			
		||||
void update_spi_flash();
 | 
			
		||||
void update_gcode_command(int addr,uint8_t *s);
 | 
			
		||||
void get_gcode_command(int addr,uint8_t *d);
 | 
			
		||||
void update_gcode_command(int addr, uint8_t *s);
 | 
			
		||||
void get_gcode_command(int addr, uint8_t *d);
 | 
			
		||||
void lv_serial_capt_hook(void *, uint8_t);
 | 
			
		||||
void lv_eom_hook(void *);
 | 
			
		||||
#if HAS_GCODE_PREVIEW
 | 
			
		||||
 
 | 
			
		||||
@@ -71,7 +71,7 @@ void lv_draw_wifi() {
 | 
			
		||||
  if (gCfgItems.wifi_mode_sel == STA_MODEL) {
 | 
			
		||||
 | 
			
		||||
    if (gCfgItems.cloud_enable)
 | 
			
		||||
      buttonCloud = lv_imgbtn_create(scr, "F:/bmp_cloud.bin", BTN_X_PIXEL+INTERVAL_V*2, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_W_CLOUD);
 | 
			
		||||
      buttonCloud = lv_imgbtn_create(scr, "F:/bmp_cloud.bin", BTN_X_PIXEL + INTERVAL_V * 2, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_W_CLOUD);
 | 
			
		||||
 | 
			
		||||
    buttonReconnect = lv_imgbtn_create(scr, "F:/bmp_wifi.bin", BTN_X_PIXEL * 2 + INTERVAL_V * 3, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_W_RECONNECT);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@
 | 
			
		||||
void lv_draw_wifi_list();
 | 
			
		||||
void lv_clear_wifi_list();
 | 
			
		||||
void disp_wifi_list();
 | 
			
		||||
void cutWifiName(char *name, int len,char *outStr);
 | 
			
		||||
void cutWifiName(char *name, int len, char *outStr);
 | 
			
		||||
void wifi_scan_handle();
 | 
			
		||||
 | 
			
		||||
#define NUMBER_OF_PAGE 5
 | 
			
		||||
 
 | 
			
		||||
@@ -38,7 +38,7 @@ TIPS_DISP tips_disp;
 | 
			
		||||
tips_menu_def tips_menu;
 | 
			
		||||
 | 
			
		||||
void lv_draw_wifi_tips() {
 | 
			
		||||
  static lv_obj_t *text_tips,*wifi_name;
 | 
			
		||||
  static lv_obj_t *text_tips, *wifi_name;
 | 
			
		||||
 | 
			
		||||
  scr = lv_screen_create(WIFI_TIPS_UI, "");
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -714,7 +714,7 @@ void disp_assets_update_progress(const char *msg) {
 | 
			
		||||
  char buf[30];
 | 
			
		||||
  memset(buf, ' ', COUNT(buf));
 | 
			
		||||
  strncpy(buf, msg, strlen(msg));
 | 
			
		||||
  buf[COUNT(buf)-1] = '\0';
 | 
			
		||||
  buf[COUNT(buf) - 1] = '\0';
 | 
			
		||||
  disp_string(100, 165, buf, 0xFFFF, 0x0000);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -265,12 +265,12 @@ const char *bakPath = "_assets";
 | 
			
		||||
void spiFlashErase_PIC() {
 | 
			
		||||
  volatile uint32_t pic_sectorcnt = 0;
 | 
			
		||||
  W25QXX.init(SPI_QUARTER_SPEED);
 | 
			
		||||
  //erase 0x001000 -64K
 | 
			
		||||
  // erase 0x001000 -64K
 | 
			
		||||
  for (pic_sectorcnt = 0; pic_sectorcnt < (64 - 4) / 4; pic_sectorcnt++) {
 | 
			
		||||
    watchdog_refresh();
 | 
			
		||||
    W25QXX.SPI_FLASH_SectorErase(PICINFOADDR + pic_sectorcnt * 4 * 1024);
 | 
			
		||||
  }
 | 
			
		||||
  //erase 64K -- 6M
 | 
			
		||||
  // erase 64K -- 6M
 | 
			
		||||
  for (pic_sectorcnt = 0; pic_sectorcnt < (PIC_SIZE_xM * 1024 / 64 - 1); pic_sectorcnt++) {
 | 
			
		||||
    watchdog_refresh();
 | 
			
		||||
    W25QXX.SPI_FLASH_BlockErase((pic_sectorcnt + 1) * 64 * 1024);
 | 
			
		||||
@@ -281,7 +281,7 @@ void spiFlashErase_PIC() {
 | 
			
		||||
  void spiFlashErase_FONT() {
 | 
			
		||||
    volatile uint32_t Font_sectorcnt = 0;
 | 
			
		||||
    W25QXX.init(SPI_QUARTER_SPEED);
 | 
			
		||||
    for (Font_sectorcnt = 0; Font_sectorcnt < 32-1; Font_sectorcnt++) {
 | 
			
		||||
    for (Font_sectorcnt = 0; Font_sectorcnt < 32 - 1; Font_sectorcnt++) {
 | 
			
		||||
      watchdog_refresh();
 | 
			
		||||
      W25QXX.SPI_FLASH_BlockErase(FONTINFOADDR + Font_sectorcnt * 64 * 1024);
 | 
			
		||||
    }
 | 
			
		||||
@@ -565,7 +565,7 @@ void Pic_Read(uint8_t *Pname, uint8_t *P_Rbuff) {
 | 
			
		||||
      W25QXX.SPI_FLASH_BufferRead(&PIC.name[j], PIC_NAME_ADDR + tmp_cnt, 1);
 | 
			
		||||
      tmp_cnt++;
 | 
			
		||||
    } while (PIC.name[j++] != '\0');
 | 
			
		||||
    //pic size
 | 
			
		||||
    // pic size
 | 
			
		||||
    W25QXX.SPI_FLASH_BufferRead(PIC.size.bytes, PIC_SIZE_ADDR + i * 4, 4);
 | 
			
		||||
 | 
			
		||||
    if ((strcmp((char*)Pname, (char*)PIC.name)) == 0) {
 | 
			
		||||
 
 | 
			
		||||
@@ -55,19 +55,19 @@
 | 
			
		||||
#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 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         (9*1024)
 | 
			
		||||
#define PER_PIC_MAX_SPACE_TFT32         (16*1024)
 | 
			
		||||
#define PER_FONT_MAX_SPACE              (16*1024)
 | 
			
		||||
#define PER_PIC_MAX_SPACE_TFT35         (9 * 1024)
 | 
			
		||||
#define PER_PIC_MAX_SPACE_TFT32         (16 * 1024)
 | 
			
		||||
#define PER_FONT_MAX_SPACE              (16 * 1024)
 | 
			
		||||
 | 
			
		||||
#if SPI_FLASH_SIZE == 0x200000
 | 
			
		||||
  //pic
 | 
			
		||||
  //Robin_pro pic addr
 | 
			
		||||
  // pic
 | 
			
		||||
  // Robin_pro pic addr
 | 
			
		||||
  #define PIC_NAME_ADDR                 0x001000      // Pic information addr
 | 
			
		||||
  #define PIC_SIZE_ADDR                 0x001800      // Pic size information addr
 | 
			
		||||
  #define PIC_COUNTER_ADDR              0x002000      // Pic total number
 | 
			
		||||
@@ -77,8 +77,8 @@
 | 
			
		||||
 | 
			
		||||
  // TFT35
 | 
			
		||||
  #define DEFAULT_VIEW_ADDR_TFT35       0x1EA070
 | 
			
		||||
  #define BAK_VIEW_ADDR_TFT35           (DEFAULT_VIEW_ADDR_TFT35+90*1024)
 | 
			
		||||
  #define PIC_ICON_LOGO_ADDR_TFT35      (BAK_VIEW_ADDR_TFT35+80*1024)
 | 
			
		||||
  #define BAK_VIEW_ADDR_TFT35           (DEFAULT_VIEW_ADDR_TFT35 + 90 * 1024)
 | 
			
		||||
  #define PIC_ICON_LOGO_ADDR_TFT35      (BAK_VIEW_ADDR_TFT35 + 80 * 1024)
 | 
			
		||||
  #define PIC_DATA_ADDR_TFT35           0x003000 // (PIC_ICON_LOGO_ADDR_TFT35+350*1024) //0xC5800
 | 
			
		||||
 | 
			
		||||
  #define PIC_DATA_ADDR_TFT32           0x00F000
 | 
			
		||||
@@ -87,11 +87,11 @@
 | 
			
		||||
 | 
			
		||||
  // font
 | 
			
		||||
  #define FONTINFOADDR                  0x150000 // 6M -- font addr
 | 
			
		||||
  #define UNIGBK_FLASH_ADDR            (FONTINFOADDR+4096) // 4*1024
 | 
			
		||||
  #define UNIGBK_FLASH_ADDR            (FONTINFOADDR + 4096) // 4*1024
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
  //pic
 | 
			
		||||
  //Robin_pro pic addr
 | 
			
		||||
  // 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
 | 
			
		||||
@@ -99,9 +99,9 @@
 | 
			
		||||
 | 
			
		||||
  // 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
 | 
			
		||||
  #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
 | 
			
		||||
@@ -110,20 +110,20 @@
 | 
			
		||||
 | 
			
		||||
  // 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
 | 
			
		||||
  #define UNIGBK_FLASH_ADDR            (FONTINFOADDR + 4096) // 4*1024
 | 
			
		||||
  #define GBK_FLASH_ADDR               (UNIGBK_FLASH_ADDR + 180224) // 176*1024
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// Flash flag
 | 
			
		||||
#define REFLSHE_FLGA_ADD                (0x800000-32)
 | 
			
		||||
#define REFLSHE_FLGA_ADD                (0x800000 - 32)
 | 
			
		||||
 | 
			
		||||
// SD card information first addr
 | 
			
		||||
#define VAR_INF_ADDR                    0x000000
 | 
			
		||||
#define FLASH_INF_VALID_FLAG            0x20201118
 | 
			
		||||
 | 
			
		||||
//Store some gcode commands, such as auto leveling commands
 | 
			
		||||
#define GCODE_COMMAND_ADDR              VAR_INF_ADDR + 3*1024
 | 
			
		||||
// Store some gcode commands, such as auto leveling commands
 | 
			
		||||
#define GCODE_COMMAND_ADDR              VAR_INF_ADDR + 3 * 1024
 | 
			
		||||
#define AUTO_LEVELING_COMMAND_ADDR      GCODE_COMMAND_ADDR
 | 
			
		||||
#define OTHERS_COMMAND_ADDR_1           AUTO_LEVELING_COMMAND_ADDR + 100
 | 
			
		||||
#define OTHERS_COMMAND_ADDR_2           OTHERS_COMMAND_ADDR_1 + 100
 | 
			
		||||
@@ -155,7 +155,7 @@ typedef struct pic_msg PIC_MSG;
 | 
			
		||||
#define FONT_SIZE_xM  2
 | 
			
		||||
 | 
			
		||||
void Pic_Read(uint8_t *Pname, uint8_t *P_Rbuff);
 | 
			
		||||
void Pic_Logo_Read(uint8_t *LogoName,uint8_t *Logo_Rbuff,uint32_t LogoReadsize);
 | 
			
		||||
void Pic_Logo_Read(uint8_t *LogoName, uint8_t *Logo_Rbuff, uint32_t LogoReadsize);
 | 
			
		||||
void lv_pic_test(uint8_t *P_Rbuff, uint32_t addr, uint32_t size);
 | 
			
		||||
uint32_t lv_get_pic_addr(uint8_t *Pname);
 | 
			
		||||
void get_spi_flash_data(const char *rec_buf, int offset, int size);
 | 
			
		||||
 
 | 
			
		||||
@@ -55,7 +55,7 @@ void printer_state_polling() {
 | 
			
		||||
 | 
			
		||||
        gcode.process_subcommands_now_P(PSTR("M25"));
 | 
			
		||||
 | 
			
		||||
        //save the position
 | 
			
		||||
        // save the position
 | 
			
		||||
        uiCfg.current_x_position_bak = current_position.x;
 | 
			
		||||
        uiCfg.current_y_position_bak = current_position.y;
 | 
			
		||||
        uiCfg.current_z_position_bak = current_position.z;
 | 
			
		||||
 
 | 
			
		||||
@@ -503,7 +503,7 @@
 | 
			
		||||
#define TEXT_WIFI_FORGET_EN         "Forget Network"
 | 
			
		||||
#define TEXT_DISCONECTED_EN         "Wi-Fi Connected"
 | 
			
		||||
 | 
			
		||||
//wifi-list
 | 
			
		||||
// wifi-list
 | 
			
		||||
#define MAIN_BUILT_EN       "Build"
 | 
			
		||||
#define MAIN_FILAMENT_EN    "Filament"
 | 
			
		||||
#define MAIN_SETUP_EN       "Setup"
 | 
			
		||||
@@ -512,7 +512,7 @@
 | 
			
		||||
#define FILE_MENU_BUILD_EN  "Build"
 | 
			
		||||
#define FILE_MENU_MENU_EN   " < Menu"
 | 
			
		||||
 | 
			
		||||
//about
 | 
			
		||||
// about
 | 
			
		||||
#define ABOUT_TITLE_EN                    "About"
 | 
			
		||||
#define ABOUT_BUILT_MACHINES_EN           "Built Machines"
 | 
			
		||||
#define ABOUT_SPARK_EN                    "Spark"
 | 
			
		||||
@@ -520,52 +520,52 @@
 | 
			
		||||
#define ABOUT_SERIAL_NUMBER_EN            "Serial Number:"
 | 
			
		||||
#define ABOUT_S_NUMBER_EN                 "DCPLX02KFC6P"
 | 
			
		||||
 | 
			
		||||
//set
 | 
			
		||||
// 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
 | 
			
		||||
// build
 | 
			
		||||
#define BUILD_TITLE_EN                    "Build"
 | 
			
		||||
#define BUILD_SD_CARD_EN                  "SD Card"
 | 
			
		||||
#define BUILD_USB_DRIVE_EN                "USB Drive"
 | 
			
		||||
 | 
			
		||||
//SD card
 | 
			
		||||
// SD card
 | 
			
		||||
#define SD_CARD_TITLE_EN                  "SD Card"
 | 
			
		||||
#define SD_CARD_BACK_EN                   "< Back"
 | 
			
		||||
//USB Drive
 | 
			
		||||
// 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"
 | 
			
		||||
#define MEDIA_SELECT_TITLE_EN             "Select Media"
 | 
			
		||||
 | 
			
		||||
//BUILD PLATE
 | 
			
		||||
// 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
 | 
			
		||||
// build model
 | 
			
		||||
#define MODEL_TITLE_EN                    "Build Model"
 | 
			
		||||
#define MODEL_START_BUILD_EN              "Start Build"
 | 
			
		||||
#define MODEL_BACK_EN                     "< Back"
 | 
			
		||||
 | 
			
		||||
//building
 | 
			
		||||
// building
 | 
			
		||||
#define BUILDING_TITLE_EN                 "Building"
 | 
			
		||||
#define BUILDING_MENU_EN                  "Build Menu"
 | 
			
		||||
#define BUILDING_COMPLETED                "Build\nComplete"
 | 
			
		||||
 | 
			
		||||
//building menu
 | 
			
		||||
// 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
 | 
			
		||||
// build settings
 | 
			
		||||
#define SETTINGS_TITLE_EN                 "Build Settings"
 | 
			
		||||
#define SETTINGS_NOZZLE_TEMPER_EN         "Nozzle Temp:"
 | 
			
		||||
#define SETTINGS_NOZZLE_VALUE_EN          "%d"
 | 
			
		||||
@@ -575,13 +575,13 @@
 | 
			
		||||
#define SETTINGS_SPEED_VALUE_EN           "Standard"
 | 
			
		||||
#define SETTINGS_BACK_EN                  "< Back"
 | 
			
		||||
 | 
			
		||||
//build paused
 | 
			
		||||
// 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
 | 
			
		||||
// 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."
 | 
			
		||||
@@ -589,31 +589,31 @@
 | 
			
		||||
#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
 | 
			
		||||
// 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
 | 
			
		||||
// 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
 | 
			
		||||
// 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
 | 
			
		||||
// 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
 | 
			
		||||
// rotate left
 | 
			
		||||
#define ROTATE_LEFT_LOAD_TITLE_EN         "Load Filament"
 | 
			
		||||
#define ROTATE_LEFT_UNLOAD_TITLE_EN       "Unload Filament"
 | 
			
		||||
#define ROTATE_LEFT_CANCEL_EN             "< Cancel"
 | 
			
		||||
@@ -622,7 +622,7 @@
 | 
			
		||||
#define ROTATE_LEFT_NEXT_EN               "Next >"
 | 
			
		||||
#define ROTATE_LEFT_TIPS_EN               "Rotate extruder selection\ndial to the left."
 | 
			
		||||
 | 
			
		||||
//hang spool
 | 
			
		||||
// hang spool
 | 
			
		||||
#define HANG_SPOOL_TITLE_EN         "Load Filament"
 | 
			
		||||
#define HANG_SPOOL_PREVIOUS_EN      "< Previous"
 | 
			
		||||
#define HANG_SPOOL_MATERIAL_EN      "Material:"
 | 
			
		||||
@@ -630,7 +630,7 @@
 | 
			
		||||
#define HANG_SPOOL_NEXT_EN          "Next >"
 | 
			
		||||
#define HANG_SPOOL_TIPS_EN          "Hang the spool in the spool\ncompartment as shown."
 | 
			
		||||
 | 
			
		||||
//feed filament
 | 
			
		||||
// feed filament
 | 
			
		||||
#define FEED_FILAMENT_TITLE_EN      "Load Filament"
 | 
			
		||||
#define FEED_FILAMENT_PREVIOUS_EN   "< Previous"
 | 
			
		||||
#define FEED_FILAMENT_MATERIAL_EN   "Material:"
 | 
			
		||||
@@ -638,7 +638,7 @@
 | 
			
		||||
#define FEED_FILAMENT_NEXT_EN       "Next >"
 | 
			
		||||
#define FEED_FILAMENT_TIPS_EN       "Feed filament into extruder\nup beyond the gears."
 | 
			
		||||
 | 
			
		||||
//feed filament
 | 
			
		||||
// feed filament
 | 
			
		||||
#define ROTATE_UP_TITLE_EN          "Load Filament"
 | 
			
		||||
#define ROTATE_UP_PREVIOUS_EN        "< Previous"
 | 
			
		||||
#define ROTATE_UP_MATERIAL_EN       "Material:"
 | 
			
		||||
@@ -646,20 +646,20 @@
 | 
			
		||||
#define ROTATE_UP_NEXT_EN           "Next >"
 | 
			
		||||
#define ROTATE_UP_TIPS_EN           "Rotate extruder selection\ndial up."
 | 
			
		||||
 | 
			
		||||
//filament begin
 | 
			
		||||
// 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
 | 
			
		||||
// 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
 | 
			
		||||
// fiament remove
 | 
			
		||||
#define REMOVE_SPOOL_TITLE_EN       "Unload Filament"
 | 
			
		||||
#define REMOVE_SPOOL_PREVIOUS_EN     "< Previous"
 | 
			
		||||
#define REMOVE_SPOOL_FINISH_EN      "Finish >"
 | 
			
		||||
@@ -671,7 +671,7 @@
 | 
			
		||||
#define LOAD_FINISH_EN              "Load\nFilament\nComplete"
 | 
			
		||||
#define UNLOAD_FINISH_EN            "Unload\nFilament\nComplete"
 | 
			
		||||
 | 
			
		||||
//manual ip
 | 
			
		||||
// manual ip
 | 
			
		||||
#define MANUAL_IP_TITLE_EN          "Manual IP"
 | 
			
		||||
#define MANUAL_IP_CANCEL_EN         "< Cancel"
 | 
			
		||||
#define MANUAL_IP_APPLY_EN          "Join >"
 | 
			
		||||
 
 | 
			
		||||
@@ -215,7 +215,7 @@
 | 
			
		||||
#define AUTO_SHUTDOWN_RU                    "авто-откл"
 | 
			
		||||
#define MANUAL_SHUTDOWN_RU                  "ручн-откл"
 | 
			
		||||
 | 
			
		||||
#define DIALOG_CONFIRM_RU                   "да"//"подтвердить"
 | 
			
		||||
#define DIALOG_CONFIRM_RU                   "да" // "подтвердить"
 | 
			
		||||
#define DIALOG_CANCLE_RU                    "отмена"
 | 
			
		||||
#define DIALOG_OK_RU                        "да"
 | 
			
		||||
#define DIALOG_RESET_RU                     "сброс"
 | 
			
		||||
 
 | 
			
		||||
@@ -241,8 +241,7 @@ void my_disp_flush(lv_disp_drv_t * disp, const lv_area_t * area, lv_color_t * co
 | 
			
		||||
 | 
			
		||||
  SPI_TFT.setWindow((uint16_t)area->x1, (uint16_t)area->y1, width, height);
 | 
			
		||||
 | 
			
		||||
  for (uint16_t i = 0; i < height; i++)
 | 
			
		||||
    SPI_TFT.tftio.WriteSequence((uint16_t*)(color_p + width * i), width);
 | 
			
		||||
  SPI_TFT.tftio.WriteSequence((uint16_t*)color_p, width * height);
 | 
			
		||||
 | 
			
		||||
  lv_disp_flush_ready(disp); // Indicate you are ready with the flushing
 | 
			
		||||
 | 
			
		||||
@@ -333,7 +332,7 @@ bool my_mousewheel_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data) {
 | 
			
		||||
 | 
			
		||||
extern uint8_t currentFlashPage;
 | 
			
		||||
 | 
			
		||||
//spi_flash
 | 
			
		||||
// spi_flash
 | 
			
		||||
uint32_t pic_read_base_addr = 0, pic_read_addr_offset = 0;
 | 
			
		||||
lv_fs_res_t spi_flash_open_cb (lv_fs_drv_t * drv, void * file_p, const char * path, lv_fs_mode_t mode) {
 | 
			
		||||
  static char last_path_name[30];
 | 
			
		||||
@@ -382,7 +381,7 @@ lv_fs_res_t spi_flash_tell_cb(lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p
 | 
			
		||||
  return LV_FS_RES_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//sd
 | 
			
		||||
// sd
 | 
			
		||||
char *cur_namefff;
 | 
			
		||||
uint32_t sd_read_base_addr = 0, sd_read_addr_offset = 0, small_image_size = 409;
 | 
			
		||||
lv_fs_res_t sd_open_cb (lv_fs_drv_t * drv, void * file_p, const char * path, lv_fs_mode_t mode) {
 | 
			
		||||
 
 | 
			
		||||
@@ -48,7 +48,7 @@ void disp_language_init();
 | 
			
		||||
#define MULTI_LANGUAGE_ENABLE   1
 | 
			
		||||
#define MULTI_LANGUAGE_DISABLE  0
 | 
			
		||||
 | 
			
		||||
typedef struct machine_common_disp{
 | 
			
		||||
typedef struct machine_common_disp {
 | 
			
		||||
  const char *default_value;
 | 
			
		||||
 | 
			
		||||
  const char *next;
 | 
			
		||||
@@ -742,7 +742,7 @@ typedef struct pause_msg_disp {
 | 
			
		||||
 | 
			
		||||
extern pause_msg_def pause_msg_menu;
 | 
			
		||||
 | 
			
		||||
typedef struct eeprom_disp{
 | 
			
		||||
typedef struct eeprom_disp {
 | 
			
		||||
  const char *title;
 | 
			
		||||
  const char *store;
 | 
			
		||||
  const char *read;
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ class WifiSerial {
 | 
			
		||||
 | 
			
		||||
    // Set up / tear down
 | 
			
		||||
    void begin(uint32_t baud);
 | 
			
		||||
    void begin(uint32_t baud,uint8_t config);
 | 
			
		||||
    void begin(uint32_t baud, uint8_t config);
 | 
			
		||||
    void end();
 | 
			
		||||
    int available(void);
 | 
			
		||||
    int read(void);
 | 
			
		||||
@@ -51,13 +51,13 @@ class WifiSerial {
 | 
			
		||||
    bool isHalfDuplex(void) const;
 | 
			
		||||
    void enableHalfDuplexRx(void);
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
      void setRx(uint32_t _rx);
 | 
			
		||||
      void setTx(uint32_t _tx);
 | 
			
		||||
      void setRx(PinName _rx);
 | 
			
		||||
      void setTx(PinName _tx);
 | 
			
		||||
      void init(PinName _rx, PinName _tx);
 | 
			
		||||
      bool _rx_enabled;
 | 
			
		||||
      uint8_t _config;
 | 
			
		||||
      unsigned long _baud;
 | 
			
		||||
  private:
 | 
			
		||||
    void setRx(uint32_t _rx);
 | 
			
		||||
    void setTx(uint32_t _tx);
 | 
			
		||||
    void setRx(PinName _rx);
 | 
			
		||||
    void setTx(PinName _tx);
 | 
			
		||||
    void init(PinName _rx, PinName _tx);
 | 
			
		||||
    bool _rx_enabled;
 | 
			
		||||
    uint8_t _config;
 | 
			
		||||
    unsigned long _baud;
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -68,7 +68,8 @@ WifiSerial::WifiSerial(usart_dev *usart_device, uint8 tx_pin, uint8 rx_pin) {
 | 
			
		||||
  #define disable_timer_if_necessary(dev, ch) NOOP
 | 
			
		||||
 | 
			
		||||
  static void usart_enable_no_irq(usart_dev *usart_device, bool with_irq) {
 | 
			
		||||
    if (with_irq) usart_enable(usart_device);
 | 
			
		||||
    if (with_irq)
 | 
			
		||||
      usart_enable(usart_device);
 | 
			
		||||
    else {
 | 
			
		||||
      usart_reg_map *regs = usart_device->regs;
 | 
			
		||||
      regs->CR1 |= (USART_CR1_TE | USART_CR1_RE);   // Preserve word length, etc. Use 'or' to preserve USART_CR1_M_8N1
 | 
			
		||||
 
 | 
			
		||||
@@ -39,18 +39,18 @@ class WifiSerial {
 | 
			
		||||
 | 
			
		||||
    /* Set up/tear down */
 | 
			
		||||
    void begin(uint32 baud);
 | 
			
		||||
    void begin(uint32 baud,uint8_t config);
 | 
			
		||||
    void begin(uint32 baud, uint8_t config);
 | 
			
		||||
    void end();
 | 
			
		||||
    int available();
 | 
			
		||||
    int read();
 | 
			
		||||
    int write(uint8_t);
 | 
			
		||||
    inline void wifi_usart_irq(usart_reg_map *regs) {
 | 
			
		||||
      /* Handling RXNEIE and TXEIE interrupts.
 | 
			
		||||
      * RXNE signifies availability of a byte in DR.
 | 
			
		||||
      *
 | 
			
		||||
      * See table 198 (sec 27.4, p809) in STM document RM0008 rev 15.
 | 
			
		||||
      * We enable RXNEIE.
 | 
			
		||||
      */
 | 
			
		||||
       * RXNE signifies availability of a byte in DR.
 | 
			
		||||
       *
 | 
			
		||||
       * See table 198 (sec 27.4, p809) in STM document RM0008 rev 15.
 | 
			
		||||
       * We enable RXNEIE.
 | 
			
		||||
       */
 | 
			
		||||
      if ((regs->CR1 & USART_CR1_RXNEIE) && (regs->SR & USART_SR_RXNE)) {
 | 
			
		||||
        #ifdef USART_SAFE_INSERT
 | 
			
		||||
          /* If the buffer is full and the user defines USART_SAFE_INSERT,
 | 
			
		||||
@@ -63,15 +63,15 @@ class WifiSerial {
 | 
			
		||||
      }
 | 
			
		||||
      /* TXE signifies readiness to send a byte to DR. */
 | 
			
		||||
      if ((regs->CR1 & USART_CR1_TXEIE) && (regs->SR & USART_SR_TXE)) {
 | 
			
		||||
          if (!rb_is_empty(this->usart_device->wb))
 | 
			
		||||
              regs->DR=rb_remove(this->usart_device->wb);
 | 
			
		||||
          else
 | 
			
		||||
              regs->CR1 &= ~((uint32)USART_CR1_TXEIE); // disable TXEIE
 | 
			
		||||
        if (!rb_is_empty(this->usart_device->wb))
 | 
			
		||||
          regs->DR = rb_remove(this->usart_device->wb);
 | 
			
		||||
        else
 | 
			
		||||
          regs->CR1 &= ~((uint32)USART_CR1_TXEIE);         // disable TXEIE
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    int wifi_rb_is_full();
 | 
			
		||||
    struct usart_dev *usart_device;
 | 
			
		||||
    private:
 | 
			
		||||
  private:
 | 
			
		||||
    uint8 tx_pin;
 | 
			
		||||
    uint8 rx_pin;
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -55,13 +55,13 @@
 | 
			
		||||
#define WIFI_IO1_SET()    WRITE(WIFI_IO1_PIN, HIGH);
 | 
			
		||||
#define WIFI_IO1_RESET()  WRITE(WIFI_IO1_PIN, LOW);
 | 
			
		||||
 | 
			
		||||
extern uint8_t Explore_Disk (char *path , uint8_t recu_level);
 | 
			
		||||
extern uint8_t Explore_Disk(char *path, uint8_t recu_level);
 | 
			
		||||
 | 
			
		||||
extern uint8_t commands_in_queue;
 | 
			
		||||
extern uint8_t sel_id;
 | 
			
		||||
extern unsigned int  getTickDiff(unsigned int curTick, unsigned int  lastTick);
 | 
			
		||||
extern unsigned int getTickDiff(unsigned int curTick, unsigned int lastTick);
 | 
			
		||||
 | 
			
		||||
volatile SZ_USART_FIFO  WifiRxFifo;
 | 
			
		||||
volatile SZ_USART_FIFO WifiRxFifo;
 | 
			
		||||
 | 
			
		||||
#define WAIT_ESP_TRANS_TIMEOUT_TICK 10500
 | 
			
		||||
 | 
			
		||||
@@ -487,7 +487,7 @@ static bool longName2DosName(const char *longName, char *dosName) {
 | 
			
		||||
    if (len > UDISKBUFLEN) return 0;
 | 
			
		||||
 | 
			
		||||
    if (wifiDmaRcvFifo.state[tmpW] == udisk_buf_empty) {
 | 
			
		||||
      const int timeOut = 2000; //millisecond
 | 
			
		||||
      const int timeOut = 2000; // millisecond
 | 
			
		||||
      dmaTransmitBegin();
 | 
			
		||||
      if (HAL_DMA_PollForTransferCustomize(&wifiUsartDMArx, HAL_DMA_FULL_TRANSFER, timeOut) == HAL_OK) {
 | 
			
		||||
        memcpy((unsigned char *) wifiDmaRcvFifo.bufferAddr[tmpW], (uint8_t *)bufToCpy, len);
 | 
			
		||||
@@ -612,14 +612,14 @@ int package_to_wifi(WIFI_RET_TYPE type, uint8_t *buf, int len) {
 | 
			
		||||
      return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
   if (len > 0) {
 | 
			
		||||
    if (len > 0) {
 | 
			
		||||
      memcpy(&buf_to_wifi[4 + index_to_wifi], buf, len);
 | 
			
		||||
      index_to_wifi += len;
 | 
			
		||||
 | 
			
		||||
      if (index_to_wifi < 1)
 | 
			
		||||
        return 0;
 | 
			
		||||
 | 
			
		||||
       if (buf_to_wifi[index_to_wifi + 3] == '\n') {
 | 
			
		||||
      if (buf_to_wifi[index_to_wifi + 3] == '\n') {
 | 
			
		||||
        // mask "wait" "busy" "X:"
 | 
			
		||||
        if ( ((buf_to_wifi[4] == 'w') && (buf_to_wifi[5] == 'a') && (buf_to_wifi[6] == 'i') && (buf_to_wifi[7] == 't'))
 | 
			
		||||
          || ((buf_to_wifi[4] == 'b') && (buf_to_wifi[5] == 'u') && (buf_to_wifi[6] == 's') && (buf_to_wifi[7] == 'y'))
 | 
			
		||||
@@ -768,7 +768,7 @@ int write_to_file(char *buf, int len) {
 | 
			
		||||
  if (res == -1) {
 | 
			
		||||
    ZERO(public_buf);
 | 
			
		||||
    file_writer.write_index = 0;
 | 
			
		||||
    return  -1;
 | 
			
		||||
    return -1;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return 0;
 | 
			
		||||
@@ -840,7 +840,7 @@ uint8_t Explore_Disk(char *path , uint8_t recu_level) {
 | 
			
		||||
static void wifi_gcode_exec(uint8_t *cmd_line) {
 | 
			
		||||
  int8_t tempBuf[100] = { 0 };
 | 
			
		||||
  uint8_t *tmpStr = 0;
 | 
			
		||||
  int  cmd_value;
 | 
			
		||||
  int cmd_value;
 | 
			
		||||
  volatile int print_rate;
 | 
			
		||||
  if (strchr((char *)cmd_line, '\n') && (strchr((char *)cmd_line, 'G') || strchr((char *)cmd_line, 'M') || strchr((char *)cmd_line, 'T'))) {
 | 
			
		||||
    tmpStr = (uint8_t *)strchr((char *)cmd_line, '\n');
 | 
			
		||||
@@ -1492,7 +1492,7 @@ static void file_first_msg_handle(uint8_t * msg, uint16_t msgLen) {
 | 
			
		||||
 | 
			
		||||
  memcpy(file_writer.saveFileName, msg + 5, fileNameLen);
 | 
			
		||||
 | 
			
		||||
  utf8_2_unicode(file_writer.saveFileName,fileNameLen);
 | 
			
		||||
  utf8_2_unicode(file_writer.saveFileName, fileNameLen);
 | 
			
		||||
 | 
			
		||||
  ZERO(public_buf);
 | 
			
		||||
 | 
			
		||||
@@ -1745,7 +1745,7 @@ int32_t readWifiFifo(uint8_t *retBuf, uint32_t bufLen) {
 | 
			
		||||
 | 
			
		||||
void stopEspTransfer() {
 | 
			
		||||
  if (wifi_link_state == WIFI_TRANS_FILE)
 | 
			
		||||
  wifi_link_state = WIFI_CONNECTED;
 | 
			
		||||
    wifi_link_state = WIFI_CONNECTED;
 | 
			
		||||
 | 
			
		||||
  TERN_(SDSUPPORT, card.closefile());
 | 
			
		||||
 | 
			
		||||
@@ -2015,8 +2015,8 @@ void get_wifi_commands() {
 | 
			
		||||
          if (gpos) {
 | 
			
		||||
            switch (strtol(gpos + 1, nullptr, 10)) {
 | 
			
		||||
              case 0 ... 1:
 | 
			
		||||
              TERN_(ARC_SUPPORT, case 2 ... 3:)
 | 
			
		||||
              TERN_(BEZIER_CURVE_SUPPORT, case 5:)
 | 
			
		||||
                TERN_(ARC_SUPPORT, case 2 ... 3:)
 | 
			
		||||
                TERN_(BEZIER_CURVE_SUPPORT, case 5:)
 | 
			
		||||
                SERIAL_ECHOLNPGM(STR_ERR_STOPPED);
 | 
			
		||||
                LCD_MESSAGEPGM(MSG_STOPPED);
 | 
			
		||||
                break;
 | 
			
		||||
 
 | 
			
		||||
@@ -56,7 +56,7 @@
 | 
			
		||||
 | 
			
		||||
#define UDISKBUFLEN           1024
 | 
			
		||||
 | 
			
		||||
typedef enum{
 | 
			
		||||
typedef enum {
 | 
			
		||||
  udisk_buf_empty = 0,
 | 
			
		||||
  udisk_buf_full,
 | 
			
		||||
} UDISK_DATA_BUFFER_STATE;
 | 
			
		||||
@@ -74,41 +74,41 @@ typedef struct {
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
  uint8_t flag; // 0x0: no error;  0x01: error
 | 
			
		||||
  uint32_t start_tick; //error start time
 | 
			
		||||
  uint32_t start_tick; // error start time
 | 
			
		||||
  uint32_t now_tick;
 | 
			
		||||
} WIFI_TRANS_ERROR;
 | 
			
		||||
 | 
			
		||||
extern volatile WIFI_TRANS_ERROR wifiTransError;
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
  char ap_name[32];   //wifi-name
 | 
			
		||||
  char keyCode[64]; //wifi password
 | 
			
		||||
  int  decodeType;
 | 
			
		||||
  int  baud;
 | 
			
		||||
  int  mode;
 | 
			
		||||
  char ap_name[32];   // wifi-name
 | 
			
		||||
  char keyCode[64]; // wifi password
 | 
			
		||||
  int decodeType;
 | 
			
		||||
  int baud;
 | 
			
		||||
  int mode;
 | 
			
		||||
} WIFI_PARA;
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
  char state;
 | 
			
		||||
  char hostUrl[96];
 | 
			
		||||
  int  port;
 | 
			
		||||
  int port;
 | 
			
		||||
  char id[21];
 | 
			
		||||
} CLOUD_PARA;
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
  char  dhcp_flag;
 | 
			
		||||
  char  ip_addr[16];
 | 
			
		||||
  char  mask[16];
 | 
			
		||||
  char  gate[16];
 | 
			
		||||
  char  dns[16];
 | 
			
		||||
  char dhcp_flag;
 | 
			
		||||
  char ip_addr[16];
 | 
			
		||||
  char mask[16];
 | 
			
		||||
  char gate[16];
 | 
			
		||||
  char dns[16];
 | 
			
		||||
 | 
			
		||||
  char  dhcpd_flag;
 | 
			
		||||
  char  dhcpd_ip[16];
 | 
			
		||||
  char  dhcpd_mask[16];
 | 
			
		||||
  char  dhcpd_gate[16];
 | 
			
		||||
  char  dhcpd_dns[16];
 | 
			
		||||
  char  start_ip_addr[16];
 | 
			
		||||
  char  end_ip_addr[16];
 | 
			
		||||
  char dhcpd_flag;
 | 
			
		||||
  char dhcpd_ip[16];
 | 
			
		||||
  char dhcpd_mask[16];
 | 
			
		||||
  char dhcpd_gate[16];
 | 
			
		||||
  char dhcpd_dns[16];
 | 
			
		||||
  char start_ip_addr[16];
 | 
			
		||||
  char end_ip_addr[16];
 | 
			
		||||
} IP_PARA;
 | 
			
		||||
 | 
			
		||||
typedef enum {
 | 
			
		||||
@@ -144,8 +144,8 @@ extern volatile TRANSFER_STATE esp_state;
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
  char buf[20][80];
 | 
			
		||||
  int  rd_index;
 | 
			
		||||
  int  wt_index;
 | 
			
		||||
  int rd_index;
 | 
			
		||||
  int wt_index;
 | 
			
		||||
} QUEUE;
 | 
			
		||||
 | 
			
		||||
typedef enum {
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@
 | 
			
		||||
#define WIFI_IO1_SET()    WRITE(WIFI_IO1_PIN, HIGH);
 | 
			
		||||
#define WIFI_IO1_RESET()  WRITE(WIFI_IO1_PIN, LOW);
 | 
			
		||||
 | 
			
		||||
extern SZ_USART_FIFO  WifiRxFifo;
 | 
			
		||||
extern SZ_USART_FIFO WifiRxFifo;
 | 
			
		||||
 | 
			
		||||
extern int readUsartFifo(SZ_USART_FIFO *fifo, int8_t *buf, int32_t len);
 | 
			
		||||
extern int writeUsartFifo(SZ_USART_FIFO * fifo, int8_t * buf, int32_t len);
 | 
			
		||||
@@ -301,7 +301,7 @@ EspUploadResult readPacket(uint8_t op, uint32_t *valp, size_t *bodyLen, uint32_t
 | 
			
		||||
          return stat;
 | 
			
		||||
        }
 | 
			
		||||
        else if (state == header) {
 | 
			
		||||
          //store the header byte
 | 
			
		||||
          // store the header byte
 | 
			
		||||
          hdr[hdrIdx++] = c;
 | 
			
		||||
          if (hdrIdx >= headerLength) {
 | 
			
		||||
            // get the body length, prepare a buffer for it
 | 
			
		||||
@@ -423,7 +423,7 @@ EspUploadResult doCommand(uint8_t op, const uint8_t *data, size_t dataLen, uint3
 | 
			
		||||
EspUploadResult Sync(uint16_t timeout) {
 | 
			
		||||
  uint8_t buf[36];
 | 
			
		||||
  EspUploadResult stat;
 | 
			
		||||
  int i ;
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  // compose the data for the sync attempt
 | 
			
		||||
  memset(buf, 0x55, sizeof(buf));
 | 
			
		||||
@@ -449,8 +449,8 @@ EspUploadResult Sync(uint16_t timeout) {
 | 
			
		||||
      if (rc != success || bodyLen != 2) break;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  //DEBUG
 | 
			
		||||
  //else debug//printf("stat=%d\n", (int)stat);
 | 
			
		||||
  // DEBUG
 | 
			
		||||
  //else printf("stat=%d\n", (int)stat);
 | 
			
		||||
  return stat;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user