固件 0.1.14~0.1.16-c5:Hub 按需启停(hubctl)、开机长按统一 5 s

Co-Authored-By: Claude Opus 5.5 <[email protected]>
这个提交包含在:
zhou yang
2026-10-04 19:24:31 +08:00
共同撰写人 Claude Opus 5.5
父节点 92f38c2328
当前提交 c41d1ec931
共修改 21 个文件,包含 764 行新增和 18 行删除
+33
查看文件
@@ -9,6 +9,7 @@
#include "cmd_priv.h"
#include "evlog.h"
#include "hal_time.h"
#include "hubctl.h"
#include "i2cbus.h"
#include "rail.h"
#include "rail_cfg.h"
@@ -359,6 +360,38 @@ void cmd_chgmode_tick(uint32_t now)
}
}
/* 0.1.14:Hub 按需启停(hubctl.h)。整板命令,两条链路都收。
`{"cmd":"hub","mode":"auto"|"on"}` —— 改模式,存 NVS;
`{"cmd":"hub","min":30}` —— 保持 30 分钟(1~240),要用 ESP32 的 USB 控制台 / 烧录时用;
`{"cmd":"hub","min":0}` —— 取消保持并结束 idle 窗口:没别的理由就下一拍关。
两个键可以同时给,至少给一个。回应带 `"hub":{...}`(同 status)。
⚠️ 下一拍(执行器循环,≤ 几十 ms)才真的动引脚,回应里的 on 是命令执行前那一拍的。 */
cmd_err_t do_hub(ctx_t *c)
{
const char *ms = NULL;
int64_t min = 0;
const int gm = cj_get_str(c->o, "mode", &ms);
const int gn = cj_get_int(c->o, "min", &min);
if (gm < 0 || gn < 0 || (gm == 0 && gn == 0)) {
return CMD_ERR_ARG;
}
hub_mode_t mode = HUB_MODE_AUTO;
if (gm == 1 && !hub_mode_parse(ms, &mode)) {
return CMD_ERR_ARG;
}
if (gn == 1 && (min < 0 || min > HUB_HOLD_MAX_MIN)) {
return reject(c, CMD_ERR_RANGE, min);
}
if (gm == 1) {
(void)hubctl_set_mode(mode);
}
if (gn == 1) {
(void)hubctl_hold((uint32_t)min, hal_time_now_ms());
}
cmd_report_hub(c->w);
return CMD_OK;
}
cmd_err_t do_fan(ctx_t *c)
{
int64_t duty = 0;