diff --git a/CYD-Klipper/src/core/screen_driver.cpp b/CYD-Klipper/src/core/screen_driver.cpp index 8b6adb7..ce6bfa8 100644 --- a/CYD-Klipper/src/core/screen_driver.cpp +++ b/CYD-Klipper/src/core/screen_driver.cpp @@ -100,12 +100,20 @@ void screen_timer_wake() lv_timer_reset(screenSleepTimer); isScreenInSleep = false; set_screen_brightness(); + + // Reset cpu freq + setCpuFrequencyMhz(CPU_FREQ_HIGH); + Serial.printf("CPU Speed: %d MHz\n", ESP.getCpuFreqMHz()); } void screen_timer_sleep(lv_timer_t *timer) { screen_setBrightness(0); isScreenInSleep = true; + + // Screen is off, no need to make the cpu run fast, the user won't notice ;) + setCpuFrequencyMhz(CPU_FREQ_LOW); + Serial.printf("CPU Speed: %d MHz\n", ESP.getCpuFreqMHz()); } void screen_timer_setup() diff --git a/CYD-Klipper/src/core/screen_driver.h b/CYD-Klipper/src/core/screen_driver.h index 6b68fcd..90f808e 100644 --- a/CYD-Klipper/src/core/screen_driver.h +++ b/CYD-Klipper/src/core/screen_driver.h @@ -4,6 +4,9 @@ #ifndef _SCREEN_DRIVER_INIT #define _SCREEN_DRIVER_INIT +#define CPU_FREQ_HIGH 240 +#define CPU_FREQ_LOW 80 + #include #include diff --git a/CYD-Klipper/src/main.cpp b/CYD-Klipper/src/main.cpp index 89851ff..1e03eb6 100644 --- a/CYD-Klipper/src/main.cpp +++ b/CYD-Klipper/src/main.cpp @@ -25,7 +25,7 @@ void setup() { Serial.println("Screen init done"); wifi_init(); - ip_setup(); + ip_init(); data_setup(); nav_style_setup(); diff --git a/CYD-Klipper/src/ui/ip_setup.cpp b/CYD-Klipper/src/ui/ip_setup.cpp index 2acb3db..65c8a9e 100644 --- a/CYD-Klipper/src/ui/ip_setup.cpp +++ b/CYD-Klipper/src/ui/ip_setup.cpp @@ -9,12 +9,15 @@ lv_obj_t * ipEntry; lv_obj_t * portEntry; lv_obj_t * label = NULL; +void ip_init_inner(); + bool verify_ip(){ HTTPClient client; String url = "http://" + String(global_config.klipperHost) + ":" + String(global_config.klipperPort) + "/printer/info"; int httpCode; try { Serial.println(url); + client.setTimeout(500); client.begin(url.c_str()); httpCode = client.GET(); return httpCode == 200; @@ -25,17 +28,6 @@ bool verify_ip(){ } } -bool retry_ip_verify(){ - for (int i = 0; i < 5; i++){ - if (verify_ip()){ - return true; - } - delay(1000); - } - - return false; -} - static void ta_event_cb(lv_event_t * e) { lv_event_code_t code = lv_event_get_code(e); lv_obj_t * ta = lv_event_get_target(e); @@ -53,8 +45,8 @@ static void ta_event_cb(lv_event_t * e) { { strcpy(global_config.klipperHost, lv_textarea_get_text(ipEntry)); global_config.klipperPort = atoi(lv_textarea_get_text(portEntry)); - bool result = verify_ip(); - if (result) + + if (verify_ip()) { global_config.ipConfigured = true; WriteGlobalConfig(); @@ -67,9 +59,33 @@ static void ta_event_cb(lv_event_t * e) { } } -void ip_setup_inner(){ +static void reset_btn_event_handler(lv_event_t * e){ + lv_event_code_t code = lv_event_get_code(e); + + if(code == LV_EVENT_CLICKED) { + global_config.ipConfigured = false; + ip_init_inner(); + } +} + +void ip_init_inner(){ lv_obj_clean(lv_scr_act()); + if (global_config.ipConfigured) { + label = lv_label_create(lv_scr_act()); + lv_label_set_text(label, "Connecting to Klipper"); + lv_obj_align(label, LV_ALIGN_CENTER, 0, 0); + + lv_obj_t * resetBtn = lv_btn_create(lv_scr_act()); + lv_obj_add_event_cb(resetBtn, reset_btn_event_handler, LV_EVENT_ALL, NULL); + lv_obj_align(resetBtn, LV_ALIGN_CENTER, 0, 40); + + lv_obj_t * btnLabel = lv_label_create(resetBtn); + lv_label_set_text(btnLabel, "Reset"); + lv_obj_center(btnLabel); + return; + } + lv_obj_t * keyboard = lv_keyboard_create(lv_scr_act()); label = lv_label_create(lv_scr_act()); lv_label_set_text(label, "Enter Klipper IP and Port"); @@ -95,18 +111,26 @@ void ip_setup_inner(){ lv_keyboard_set_textarea(keyboard, ipEntry); } -void ip_setup(){ +long last_data_update_ip = -10000; +const long data_update_interval_ip = 10000; +int retry_count = 0; + +void ip_init(){ connect_ok = false; - if (global_config.ipConfigured && retry_ip_verify()){ - return; - } - - ip_setup_inner(); + ip_init_inner(); while (!connect_ok) { lv_timer_handler(); lv_task_handler(); + + if (!connect_ok && global_config.ipConfigured && (millis() - last_data_update_ip) > data_update_interval_ip){ + connect_ok = verify_ip(); + last_data_update_ip = millis(); + retry_count++; + String retry_count_text = "Connecting to Klipper (Try " + String(retry_count + 1) + ")"; + lv_label_set_text(label, retry_count_text.c_str()); + } } } \ No newline at end of file diff --git a/CYD-Klipper/src/ui/ip_setup.h b/CYD-Klipper/src/ui/ip_setup.h index 25ce25a..aa41ec1 100644 --- a/CYD-Klipper/src/ui/ip_setup.h +++ b/CYD-Klipper/src/ui/ip_setup.h @@ -1 +1 @@ -void ip_setup(); \ No newline at end of file +void ip_init(); \ No newline at end of file diff --git a/CYD-Klipper/src/ui/wifi_setup.cpp b/CYD-Klipper/src/ui/wifi_setup.cpp index a64f65d..c86c5fd 100644 --- a/CYD-Klipper/src/ui/wifi_setup.cpp +++ b/CYD-Klipper/src/ui/wifi_setup.cpp @@ -77,12 +77,11 @@ static void wifi_btn_event_handler(lv_event_t * e){ void wifi_init_inner(){ WiFi.disconnect(); + lv_obj_clean(lv_scr_act()); if (global_config.wifiConfigured){ WiFi.begin(global_config.wifiSSID, global_config.wifiPassword); - lv_obj_clean(lv_scr_act()); - lv_obj_t * label = lv_label_create(lv_scr_act()); lv_label_set_text(label, "Connecting to WiFi"); lv_obj_align(label, LV_ALIGN_CENTER, 0, 0); @@ -98,8 +97,6 @@ void wifi_init_inner(){ return; } - lv_obj_clean(lv_scr_act()); - lv_obj_t * label = lv_label_create(lv_scr_act()); lv_label_set_text(label, "Scanning for networks..."); lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);