Improve Touch Calibration screen (#20524)
This commit is contained in:
		
							parent
							
								
									5e3be83dbb
								
							
						
					
					
						commit
						91730d71ff
					
				| @ -55,6 +55,11 @@ | ||||
|   #include "../../../../feature/pause.h" | ||||
| #endif | ||||
| 
 | ||||
| #if ENABLED(TOUCH_SCREEN_CALIBRATION) | ||||
|   #include "../../../tft_io/touch_calibration.h" | ||||
|   #include "draw_touch_calibration.h" | ||||
| #endif | ||||
| 
 | ||||
| extern lv_group_t *g; | ||||
| static lv_obj_t *scr, *tempText1, *filament_bar; | ||||
| 
 | ||||
| @ -161,7 +166,16 @@ static void btn_ok_event_cb(lv_obj_t *btn, lv_event_t event) { | ||||
|   else if (DIALOG_IS(REVERT_EEPROM_TIPS)) { | ||||
|     TERN_(EEPROM_SETTINGS, (void)settings.reset()); | ||||
|     clear_cur_ui(); | ||||
|     draw_return_ui(); | ||||
|     #if ENABLED(TOUCH_SCREEN_CALIBRATION) | ||||
|       const bool do_draw_cal = touch_calibration.need_calibration(); | ||||
|       if (do_draw_cal) { | ||||
|         disp_state_stack._disp_index--; // We are asynchronous from the dialog, so let's remove the dialog from the stack
 | ||||
|         lv_draw_touch_calibration_screen(); | ||||
|       } | ||||
|     #else | ||||
|       constexpr bool do_draw_cal = false; | ||||
|     #endif | ||||
|     if (!do_draw_cal) draw_return_ui(); | ||||
|   } | ||||
|   else if (DIALOG_IS(WIFI_CONFIG_TIPS)) { | ||||
|     uiCfg.configWifi = 1; | ||||
| @ -181,9 +195,7 @@ static void btn_ok_event_cb(lv_obj_t *btn, lv_event_t event) { | ||||
| static void btn_cancel_event_cb(lv_obj_t *btn, lv_event_t event) { | ||||
|   if (event != LV_EVENT_RELEASED) return; | ||||
|   if (DIALOG_IS(PAUSE_MESSAGE_OPTION)) { | ||||
|     #if ENABLED(ADVANCED_PAUSE_FEATURE) | ||||
|       pause_menu_response = PAUSE_RESPONSE_RESUME_PRINT; | ||||
|     #endif | ||||
|     TERN_(ADVANCED_PAUSE_FEATURE, pause_menu_response = PAUSE_RESPONSE_RESUME_PRINT); | ||||
|   } | ||||
|   else if (DIALOG_IS(TYPE_FILAMENT_LOAD_HEAT, TYPE_FILAMENT_UNLOAD_HEAT, TYPE_FILAMENT_HEAT_LOAD_COMPLETED, TYPE_FILAMENT_HEAT_UNLOAD_COMPLETED)) { | ||||
|     thermalManager.temp_hotend[uiCfg.curSprayerChoose].target= uiCfg.desireSprayerTempBak; | ||||
|  | ||||
| @ -39,6 +39,11 @@ | ||||
| #include "../../../../module/temperature.h" | ||||
| #include "../../../../inc/MarlinConfig.h" | ||||
| 
 | ||||
| #if ENABLED(TOUCH_SCREEN_CALIBRATION) | ||||
|   #include "../../../tft_io/touch_calibration.h" | ||||
|   #include "draw_touch_calibration.h" | ||||
| #endif | ||||
| 
 | ||||
| #include <stdio.h> | ||||
| 
 | ||||
| //static lv_obj_t *buttonPrint, *buttonTool, *buttonSet;
 | ||||
| @ -215,6 +220,14 @@ void lv_draw_ready_print(void) { | ||||
|     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); | ||||
|   } | ||||
| 
 | ||||
|   #if ENABLED(TOUCH_SCREEN_CALIBRATION) | ||||
|     // If calibration is required, let's trigger it now, handles the case when there is default value in configuration files
 | ||||
|     if (!touch_calibration.calibration_loaded()) { | ||||
|       lv_clear_ready_print(); | ||||
|       lv_draw_touch_calibration_screen(); | ||||
|     } | ||||
|   #endif | ||||
| } | ||||
| 
 | ||||
| void lv_clear_ready_print() { | ||||
|  | ||||
| @ -95,14 +95,12 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { | ||||
|     case ID_TC_RETURN: | ||||
|       TERN_(MKS_TEST, curent_disp_ui = 1); | ||||
|       lv_clear_touch_calibration_screen(); | ||||
|       lv_draw_ready_print(); | ||||
|       draw_return_ui(); | ||||
|       break; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| void lv_draw_touch_calibration_screen() { | ||||
|   disp_state_stack._disp_index = 0; | ||||
|   ZERO(disp_state_stack._disp_state); | ||||
|   scr = lv_screen_create(TOUCH_CALIBRATION_UI, ""); | ||||
| 
 | ||||
|   status_label = lv_label_create(scr, ""); | ||||
|  | ||||
| @ -217,12 +217,7 @@ void tft_lvgl_init() { | ||||
|   #endif | ||||
| 
 | ||||
|   if (ready) { | ||||
|     #if ENABLED(TOUCH_SCREEN_CALIBRATION) | ||||
|       if (touch_calibration.need_calibration()) lv_draw_touch_calibration_screen(); | ||||
|       else lv_draw_ready_print(); | ||||
|     #else | ||||
|       lv_draw_ready_print(); | ||||
|     #endif | ||||
|     lv_draw_ready_print(); | ||||
|   } | ||||
| 
 | ||||
|   if (mks_test_flag == 0x1E) | ||||
|  | ||||
| @ -28,6 +28,7 @@ TouchCalibration touch_calibration; | ||||
| touch_calibration_t TouchCalibration::calibration; | ||||
| calibrationState TouchCalibration::calibration_state = CALIBRATION_NONE; | ||||
| touch_calibration_point_t TouchCalibration::calibration_points[4]; | ||||
| uint8_t TouchCalibration::failed_count; | ||||
| 
 | ||||
| void TouchCalibration::validate_calibration() { | ||||
|   const bool landscape = validate_precision_x(0, 1) && validate_precision_x(2, 3) && validate_precision_y(0, 2) && validate_precision_y(1, 3); | ||||
| @ -44,6 +45,8 @@ void TouchCalibration::validate_calibration() { | ||||
|   else { | ||||
|     calibration_state = CALIBRATION_FAIL; | ||||
|     calibration_reset(); | ||||
|     // Retry up to 5 times before reporting the failure
 | ||||
|     if (need_calibration() && failed_count++ < 5) calibration_state = CALIBRATION_TOP_LEFT; | ||||
|   } | ||||
| 
 | ||||
|   if (calibration_state == CALIBRATION_SUCCESS) { | ||||
|  | ||||
| @ -61,6 +61,7 @@ public: | ||||
|   static void validate_calibration(); | ||||
| 
 | ||||
|   static touch_calibration_t calibration; | ||||
|   static uint8_t             failed_count; | ||||
|   static void calibration_reset() { calibration = { TOUCH_CALIBRATION_X, TOUCH_CALIBRATION_Y, TOUCH_OFFSET_X, TOUCH_OFFSET_Y, TOUCH_ORIENTATION }; } | ||||
|   static bool need_calibration() { return !calibration.offset_x && !calibration.offset_y && !calibration.x && !calibration.y; } | ||||
| 
 | ||||
| @ -75,10 +76,15 @@ public: | ||||
|     calibration_points[CALIBRATION_TOP_RIGHT].y = 30; | ||||
|     calibration_points[CALIBRATION_BOTTOM_RIGHT].x = TFT_WIDTH - 31; | ||||
|     calibration_points[CALIBRATION_BOTTOM_RIGHT].y = TFT_HEIGHT - 31; | ||||
|     failed_count = 0; | ||||
|     return calibration_state; | ||||
|   } | ||||
|   static void calibration_end() { calibration_state = CALIBRATION_NONE; } | ||||
|   static calibrationState get_calibration_state() { return calibration_state; } | ||||
|   static bool calibration_loaded() { | ||||
|     if (need_calibration()) calibration_reset(); | ||||
|     return !need_calibration(); | ||||
|   } | ||||
| 
 | ||||
|   static bool handleTouch(uint16_t x, uint16_t y); | ||||
| }; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user