Skip to content

Commit 0ebac80

Browse files
shufpsPmaxsd
andauthored
move fan mode into board class like pid settings (#674)
Co-authored-by: Pmaxsd <pmaxsd80@gmail.com>
1 parent d48904e commit 0ebac80

10 files changed

Lines changed: 27 additions & 14 deletions

File tree

main/boards/board.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ void Board::loadSettings()
4545
m_vrFrequency = Config::getVrFrequency(m_defaultVrFrequency);
4646

4747
for (int ch = 0; ch < 2; ch++) {
48+
m_fanMode[ch] = Config::getFanMode(ch, m_fanMode[ch]);
4849
m_pidSettings[ch].targetTemp = Config::getFanPidTargetTemp(ch, m_pidSettings[ch].targetTemp);
4950
m_pidSettings[ch].p = Config::getFanPidP(ch, m_pidSettings[ch].p);
5051
m_pidSettings[ch].i = Config::getFanPidI(ch, m_pidSettings[ch].i);

main/boards/board.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@ class Board {
5151
// ch1 base defaults (overridden in subclass ctors where needed): 65°C, p=6, i=0.1, d=10.
5252
PidSettings m_pidSettings[2] = {{}, {65, 600, 10, 1000}};
5353

54+
// Fan control mode per channel (0=manual, 2=PID, 3=linked). Initialized to
55+
// the default here and overwritten from NVS in loadSettings() — same
56+
// handling as m_pidSettings. ch0 = global Kconfig default, ch1 = linked.
57+
int m_fanMode[2] = {CONFIG_AUTO_FAN_SPEED_VALUE, 3};
58+
5459
// Human-readable connector labels shown in the web UI
5560
const char* m_fanLabels[2] = {"Fan 1", "Fan 2"};
5661

@@ -314,6 +319,10 @@ class Board {
314319
return &m_pidSettings[ch];
315320
}
316321

322+
int getFanMode(int ch) {
323+
return m_fanMode[ch];
324+
}
325+
317326
const char* getFanLabel(int ch) const {
318327
if (ch < 0 || ch >= m_numFans) return "";
319328
return m_fanLabels[ch];

main/boards/q1373.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,14 @@ Q1373B::Q1373B() : Q1370B()
3434

3535
m_asicFrequencies = {250, 275, 300, 325, 350, 375, 400, 425, 475, 500, 550};
3636
m_asicVoltages = {980, 990, 1000, 1010, 1020, 1030, 1040, 1050, 1060, 1070, 1080};
37-
m_defaultAsicFrequency = m_asicFrequency = 350;
37+
m_defaultAsicFrequency = m_asicFrequency = 425;
3838
m_defaultAsicVoltageMillis = m_asicVoltageMillis = 1010;
3939
m_absMaxAsicFrequency = 730;
4040
m_absMinAsicVoltageMillis = 900;
4141
m_absMaxAsicVoltageMillis = 1200;
4242
m_initVoltageMillis = 1050;
4343

44-
m_pidSettings[0].targetTemp = 55;
44+
m_pidSettings[0].targetTemp = 60;
4545
m_pidSettings[0].p = 600; // 6.00
4646
m_pidSettings[0].i = 10; // 0.10
4747
m_pidSettings[0].d = 1000; // 10.00
@@ -51,6 +51,10 @@ Q1373B::Q1373B() : Q1370B()
5151
m_pidSettings[1].i = 10; // 0.10
5252
m_pidSettings[1].d = 1000; // 10.00
5353

54+
// ship with PID fan control by default (ch1 stays linked); with target 60°C
55+
// the fan holds max(ASIC, VReg) for good out-of-the-box efficiency
56+
m_fanMode[0] = 2; // PID
57+
5458
m_asicMaxDifficulty = 4096;
5559
m_asicMinDifficulty = 1024;
5660
m_asicMinDifficultyDualPool = 512;

main/displays/displayDriver.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ DisplayDriver::DisplayDriver() {
7676
void DisplayDriver::loadSettings() {
7777
PThreadGuard lock(m_lvglMutex);
7878
m_isAutoScreenOffEnabled = Config::isAutoScreenOffEnabled();
79-
m_tempControlMode = Config::getTempControlMode();
79+
m_tempControlMode = SYSTEM_MODULE.getBoard()->getFanMode(0);
8080
m_fanSpeed = Config::getFanSpeed();
8181
m_showFoundBlockEnabled = Config::isShowBlockFoundEnabled();
8282

main/fan_controller.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ void FanController::loadSettings()
7272
for (int ch = 0; ch < m_numChannels; ch++) {
7373
PidSettings* bp = m_board->getPidSettings(ch);
7474

75-
m_config[ch].mode = static_cast<Mode>(Config::getFanMode(ch));
75+
m_config[ch].mode = static_cast<Mode>(m_board->getFanMode(ch));
7676
m_config[ch].manualSpeed = Config::getFanManualSpeed(ch);
7777
m_config[ch].overheatTemp = Config::getFanOverheatTemp(ch);
7878
m_config[ch].pid.targetTemp = Config::getFanPidTargetTemp(ch, bp->targetTemp);

main/http_server/handler_can_swarm.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ esp_err_t GET_can_nodes(httpd_req_t *req)
9999
JsonArray fans = master["fans"].to<JsonArray>();
100100
for (int ch = 0; ch < numFans; ch++) {
101101
JsonObject fan = fans.add<JsonObject>();
102-
fan["mode"] = Config::getFanMode(ch);
102+
fan["mode"] = board->getFanMode(ch);
103103
fan["manualSpeed"] = Config::getFanManualSpeed(ch);
104104
fan["overheatTemp"]= Config::getFanOverheatTemp(ch);
105105
fan["targetTemp"] = board->getPidSettings(ch)->targetTemp;

main/http_server/handler_system.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ esp_err_t GET_system_info(httpd_req_t *req)
187187
PidSettings* fanPid = board->getPidSettings(ch);
188188
JsonObject fan = fans.add<JsonObject>();
189189
fan["label"] = board->getFanLabel(ch);
190-
fan["mode"] = Config::getFanMode(ch);
190+
fan["mode"] = board->getFanMode(ch);
191191
fan["manualSpeed"] = Config::getFanManualSpeed(ch);
192192
fan["overheatTemp"] = Config::getFanOverheatTemp(ch);
193193
fan["rpm"] = POWER_MANAGEMENT_MODULE.getFanRPM(ch);
@@ -228,7 +228,7 @@ esp_err_t GET_system_info(httpd_req_t *req)
228228
doc["invertscreen"] = Config::isInvertScreenEnabled() ? 1 : 0; // unused?
229229
doc["autoscreenoff"] = Config::isAutoScreenOffEnabled() ? 1 : 0;
230230
doc["invertfanpolarity"] = board->isInvertFanPolarityEnabled() ? 1 : 0;
231-
doc["autofanspeed"] = Config::getTempControlMode();
231+
doc["autofanspeed"] = board->getFanMode(0);
232232
doc["stratum_keep"] = Config::isStratumKeepaliveEnabled() ? 1 : 0;
233233
#ifdef VR_FREQUENCY_ENABLED
234234
doc["vrFrequency"] = board->getVrFrequency();

main/http_server/v2/handler_v2_settings.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ esp_err_t GET_V2_settings(httpd_req_t *req)
131131
PidSettings* fanPid = board->getPidSettings(ch);
132132
JsonObject fan = fans.add<JsonObject>();
133133
fan["label"] = board->getFanLabel(ch);
134-
fan["mode"] = Config::getFanMode(ch);
134+
fan["mode"] = board->getFanMode(ch);
135135
fan["manualSpeed"] = Config::getFanManualSpeed(ch);
136136
fan["overheatTemp"] = Config::getFanOverheatTemp(ch);
137137
JsonObject pid_obj = fan["pid"].to<JsonObject>();

main/nvs_config.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,6 @@ namespace Config {
189189
inline uint16_t getFanSpeed() { return cfgGetU16(NVS_CONFIG_FAN_SPEED, CONFIG_FAN_SPEED); }
190190
inline uint16_t getOverheatTemp() { return cfgGetU16(NVS_CONFIG_OVERHEAT_TEMP, CONFIG_OVERHEAT_TEMP); }
191191
inline uint16_t getInfluxPort() { return cfgGetU16(NVS_CONFIG_INFLUX_PORT, CONFIG_INFLUX_PORT); }
192-
inline uint16_t getTempControlMode() { return cfgGetU16(NVS_CONFIG_AUTO_FAN_SPEED, CONFIG_AUTO_FAN_SPEED_VALUE); }
193192
inline uint16_t getPoolMode() { return cfgGetU16(NVS_CONFIG_POOL_MODE, 0); }
194193
inline uint16_t getPoolBalance() { return cfgGetU16(NVS_CONFIG_POOL_MODE_BALANCE, 50); }
195194

@@ -214,9 +213,9 @@ namespace Config {
214213
// Indexed fan-channel getters (ch=0 → ch0 NVS keys, ch=1 → fan1 NVS keys)
215214
// ch0 defaults: mode=CONFIG_AUTO_FAN_SPEED_VALUE, speed=CONFIG_FAN_SPEED, overheat=CONFIG_OVERHEAT_TEMP
216215
// ch1 defaults: mode=3 (linked), speed=100%, overheat=80°C
217-
inline uint16_t getFanMode(int ch) {
218-
return ch == 0 ? cfgGetU16(NVS_CONFIG_AUTO_FAN_SPEED, CONFIG_AUTO_FAN_SPEED_VALUE)
219-
: cfgGetU16(NVS_CONFIG_FAN1_MODE, 3);
216+
inline uint16_t getFanMode(int ch, uint16_t def) {
217+
return ch == 0 ? cfgGetU16(NVS_CONFIG_AUTO_FAN_SPEED, def)
218+
: cfgGetU16(NVS_CONFIG_FAN1_MODE, def);
220219
}
221220
inline uint16_t getFanManualSpeed(int ch) {
222221
return ch == 0 ? cfgGetU16(NVS_CONFIG_FAN_SPEED, CONFIG_FAN_SPEED)

main/tasks/can_slave_task.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,11 +106,11 @@ static void send_slave_config(uint8_t slave_id)
106106
strncpy(c.fwVersion, app->version, sizeof(c.fwVersion) - 1);
107107
c.freqMhz = (uint16_t) Config::getAsicFrequency(board->getDefaultAsicFrequency());
108108
c.voltageMv = (uint16_t) Config::getAsicVoltage(board->getDefaultAsicVoltageMillis());
109-
c.fan0Mode = (uint8_t) Config::getFanMode(0);
109+
c.fan0Mode = (uint8_t) board->getFanMode(0);
110110
c.fan0Speed = (uint8_t) Config::getFanManualSpeed(0);
111111
c.fan0TargetTemp = (uint8_t) Config::getFanPidTargetTemp(0, board->getPidSettings(0)->targetTemp);
112112
c.fan0Overheat = (uint8_t) Config::getFanOverheatTemp(0);
113-
c.fan1Mode = (uint8_t) Config::getFanMode(1);
113+
c.fan1Mode = (uint8_t) board->getFanMode(1);
114114
c.fan1Speed = (uint8_t) Config::getFanManualSpeed(1);
115115
c.fan1TargetTemp = (uint8_t) Config::getFanPidTargetTemp(1, board->getPidSettings(1)->targetTemp);
116116
c.fan1Overheat = (uint8_t) Config::getFanOverheatTemp(1);

0 commit comments

Comments
 (0)