#pragma once #include typedef struct { char directory[256]; int socket; int data_socket; /* FTP 鉴权会话态(每会话 memset 0 = 未登录;跨会话锁定计数在 * lftpd.c 的 s_auth_state,不在此处) */ char auth_user[32]; /* USER 阶段暂存的用户名 */ uint8_t auth_user_ok; /* 1 = 用户名与 [ftp] user 匹配 */ uint8_t auth_logged_in; /* 1 = PASS 校验通过 */ } lftpd_client_t; typedef struct { const char *directory; int port; int server_socket; lftpd_client_t *client; } lftpd_t; int lftpd_start(const char *directory, int port, lftpd_t *lftpd); int lftpd_stop(lftpd_t *lftpd); /* * 看门狗心跳钩子(弱符号,默认空实现见 lftpd_inet.c): * lftpd 事件循环与长等待点周期调用,为 ftpTask 喂任务心跳; * 应用层(App/util/task_watchdog.c)提供强符号路由到 * task_wd_beat(TASK_WD_FTP),驱动层因此不向上依赖应用层 * (分层铁律);未接线的构建(如模拟器)空实现生效、行为不变。 * 2026-10-02 台架:FTP 心跳缺失致 IWDG 复位循环,本钩子为修复的一部分。 */ void lftpd_task_wd_beat(void);