新增手动控制风扇选项,并关闭控制台

This commit is contained in:
Nanako 2024-07-12 06:23:13 +08:00
parent 1bb6530b29
commit 96102eba80
4 changed files with 63 additions and 29 deletions

View File

@ -15,11 +15,15 @@ add_subdirectory(third_party/cpp-httplib)
set(ALL_FILES "")
retrieve_files(${CMAKE_CURRENT_SOURCE_DIR}/src ALL_FILES)
add_executable(${PROJECT_NAME} ${ALL_FILES})
if (WIN32)
add_executable(${PROJECT_NAME} WIN32 ${ALL_FILES})
else ()
add_executable(${PROJECT_NAME} ${ALL_FILES})
endif ()
target_link_libraries(${PROJECT_NAME} imgui httplib)
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
# windows
add_link_options(-mwindows)
add_link_options(${PROJECT_NAME} PRIVATE -mwindows)
# resourcesbuild
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/resources DESTINATION ${CMAKE_CURRENT_BINARY_DIR})

View File

@ -23,11 +23,11 @@ enum class fan_status {
};
struct fan_info {
int id;
int present;
fan_status status;
int speed_percent;
int speed_rpm;
int id = -1;
int present = -1;
fan_status status = fan_status::absent;
int speed_percent = -1;
int speed_rpm = -1;
static fan_info from_json(const rapidjson::Value& obj) {
fan_info out{
.id = obj["Id"].GetInt(),
@ -47,9 +47,18 @@ struct fan_info {
}
};
struct fan_mode_info {
bool manual_mode= false;
static fan_mode_info from_json(const rapidjson::Value& obj) {
return {
.manual_mode = obj["fanMode"].GetInt() == 1
};
}
};
struct running_time {
int days;
int hours;
int days = -1;
int hours = -1;
static running_time from_json(const rapidjson::Value& obj) {
return {
.days = obj["Days"].GetInt(),
@ -59,22 +68,22 @@ struct running_time {
};
struct psu_status {
int id;
int present;
int power_status;
int temperature;
int pwr_in_watts;
int input_power;
int input_volt;
int output_volt;
int input_current;
int output_current;
int err_status;
std::string fw_version;
int output_power_max;
std::string mfr_model;
std::string mfr_id;
std::string sn;
int id = -1;
int present = -1;
int power_status = -1;
int temperature = -1;
int pwr_in_watts = -1;
int input_power = -1;
int input_volt = -1;
int output_volt = -1;
int input_current = -1;
int output_current = -1;
int err_status = -1;
std::string fw_version = "unknown";
int output_power_max = -1;
std::string mfr_model = "unknown";
std::string mfr_id = "unknown";
std::string sn = "unknown";
static psu_status from_json(const rapidjson::Value& obj) {
return {

View File

@ -137,7 +137,18 @@ public:
}
};
class set_fan_mode_task : public post_task<void> {
public:
set_fan_mode_task() : post_task("setfanmode") {}
void setup(bool manual_mode) {
httplib::Params params;
params.emplace("MODE", std::to_string(manual_mode ? 1 : 0));
set_params(params);
}
};
SIMPLE_GET_TASK(get_fan_info_task, "getfaninfo", std::vector<fan_info>)
SIMPLE_GET_TASK(get_running_time_task, "getrunningtime", running_time)
SIMPLE_GET_TASK(get_psu_info_task, "getallpsuinfo", std::vector<psu_status>)
SIMPLE_GET_TASK(get_fan_mode, "getfanmode", fan_mode_info)
SIMPLE_GET_TASK(logout_task, "WEBSES/logout", void)

View File

@ -4,6 +4,8 @@
#include "imgui.h"
#include "request_task.h"
inline std::vector<std::function<void()>> g_tasks;
#define FUTURE_PARAM(task_type, name) \
inline std::future<task_type::result_type> name##_future; \
inline task_type::result_type name##_; \
@ -15,16 +17,22 @@
} else { \
name##_future = task_executor<task_type>::run_task(); \
} \
}
} \
struct name##_task_register { \
name##_task_register() { \
g_tasks.emplace_back(update_##name); \
} \
} name##_task_register_instance;
FUTURE_PARAM(get_fan_info_task, fan_infos)
FUTURE_PARAM(get_fan_mode, fan_mode)
FUTURE_PARAM(get_running_time_task, running_time)
FUTURE_PARAM(get_psu_info_task, psu_status)
inline void update_infos() {
update_fan_infos();
update_running_time();
update_psu_status();
for (const auto& task : g_tasks) {
task();
}
}
inline void draw_running_time() {
@ -45,6 +53,8 @@ inline ImU32 get_fan_status_color(fan_status status) {
}
inline void draw_fan_infos() {
if (ImGui::Checkbox("Manual Mode", &fan_mode_.manual_mode))
task_executor<set_fan_mode_task>::run_task(fan_mode_.manual_mode);
for (auto& fan_info : fan_infos_) {
// 根据风扇状态绘制不同的颜色 和 启用/禁用输入框
ImGui::PushStyleColor(ImGuiCol_Text, get_fan_status_color(fan_info.status));