Skip to content

Commit

Permalink
Offload API request loop to core 0
Browse files Browse the repository at this point in the history
  • Loading branch information
suchmememanyskill committed Dec 15, 2023
1 parent 7a430f8 commit 34c6a5e
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 11 deletions.
68 changes: 58 additions & 10 deletions CYD-Klipper/src/core/data_setup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,33 @@ const char *printer_state_messages[] = {

Printer printer = {0};
int klipper_request_consecutive_fail_count = 0;
char filename_buff[512] = {0};
SemaphoreHandle_t freezeRenderThreadSemaphore, freezeRequestThreadSemaphore;
long last_data_update = 0;
const long data_update_interval = 800;

void semaphore_init(){
freezeRenderThreadSemaphore = xSemaphoreCreateMutex();
freezeRequestThreadSemaphore = xSemaphoreCreateMutex();
xSemaphoreGive(freezeRenderThreadSemaphore);
xSemaphoreGive(freezeRequestThreadSemaphore);
}

void freeze_request_thread(){
xSemaphoreTake(freezeRequestThreadSemaphore, portMAX_DELAY);
}

void unfreeze_request_thread(){
xSemaphoreGive(freezeRequestThreadSemaphore);
}

void freeze_render_thread(){
xSemaphoreTake(freezeRenderThreadSemaphore, portMAX_DELAY);
}

void unfreeze_render_thread(){
xSemaphoreGive(freezeRenderThreadSemaphore);
}

void send_gcode(bool wait, const char *gcode)
{
Expand All @@ -36,10 +63,10 @@ void send_gcode(bool wait, const char *gcode)
}
}

char filename_buff[512] = {0};

void fetch_printer_data()
{
bool frozen = true;
freeze_request_thread();
char buff[256] = {};
sprintf(buff, "http://%s:%d/printer/objects/query?extruder&heater_bed&toolhead&gcode_move&virtual_sdcard&print_stats&webhooks", global_config.klipperHost, global_config.klipperPort);
HTTPClient client;
Expand All @@ -55,6 +82,10 @@ void fetch_printer_data()
bool emit_state_update = false;
int printer_state = printer.state;

unfreeze_request_thread();
frozen = false;
freeze_render_thread();

if (status.containsKey("webhooks"))
{
const char *state = status["webhooks"]["state"];
Expand Down Expand Up @@ -164,23 +195,40 @@ void fetch_printer_data()
klipper_request_consecutive_fail_count++;
Serial.printf("Failed to fetch printer data: %d\n", httpCode);
}
}

long last_data_update = 0;
const long data_update_interval = 1500;
if (frozen)
unfreeze_request_thread();

unfreeze_render_thread();
}

void data_loop()
{
if (millis() - last_data_update < data_update_interval)
return;
// Causes other threads that are trying to lock the thread to actually lock it
unfreeze_render_thread();
delay(1);
freeze_render_thread();
}

fetch_printer_data();
last_data_update = millis();
void data_loop_background(void * param){
while (true){
delay(100);
if (millis() - last_data_update < data_update_interval)
continue;

fetch_printer_data();
last_data_update = millis();
}
}

TaskHandle_t background_loop;

void data_setup()
{
semaphore_init();
printer.print_filename = filename_buff;
fetch_printer_data();
macros_query_setup();
}
freeze_render_thread();
xTaskCreatePinnedToCore(data_loop_background, "data_loop_background", 5000, NULL, 1, &background_loop, 0);
}
5 changes: 4 additions & 1 deletion CYD-Klipper/src/core/data_setup.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,7 @@ extern int klipper_request_consecutive_fail_count;

void data_loop();
void data_setup();
void send_gcode(bool wait, const char* gcode);
void send_gcode(bool wait, const char* gcode);

void freeze_request_thread();
void unfreeze_request_thread();
4 changes: 4 additions & 0 deletions CYD-Klipper/src/core/files_query.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include <list>
#include "files_query.h"
#include "../conf/global_config.h"
#include "data_setup.h"
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <HardwareSerial.h>
Expand All @@ -9,6 +10,8 @@
FILESYSTEM_FILE* last_query = NULL;

FILESYSTEM_FILE* get_files(){
freeze_request_thread();

if (last_query != NULL){
FILESYSTEM_FILE* current = last_query;

Expand Down Expand Up @@ -59,5 +62,6 @@ FILESYSTEM_FILE* get_files(){
result += 1;
}

unfreeze_request_thread();
return last_query;
}
2 changes: 2 additions & 0 deletions CYD-Klipper/src/ui/ip_setup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,9 @@ void ip_init(){

void ip_ok(){
if (klipper_request_consecutive_fail_count > 5){
freeze_request_thread();
ip_init();
unfreeze_request_thread();
klipper_request_consecutive_fail_count = 0;
lv_msg_send(DATA_PRINTER_STATE, &printer);
}
Expand Down

0 comments on commit 34c6a5e

Please sign in to comment.