fix(ymodem): 修正发送 ACK 重试并统一异常清理 与串口V2在控制台下使用SY失败问题#11162
fix(ymodem): 修正发送 ACK 重试并统一异常清理 与串口V2在控制台下使用SY失败问题#11162wdfk-prog wants to merge 2 commits intoRT-Thread:masterfrom
Conversation
|
👋 感谢您对 RT-Thread 的贡献!Thank you for your contribution to RT-Thread! 为确保代码符合 RT-Thread 的编码规范,请在你的仓库中执行以下步骤运行代码格式化工作流(如果格式化CI运行失败)。 🛠 操作步骤 | Steps
完成后,提交将自动更新至 如有问题欢迎联系我们,再次感谢您的贡献!💐 |
📌 Code Review Assignment🏷️ Tag: componentsReviewers: Maihuanyi Changed Files (Click to expand)
🏷️ Tag: components_driver_serial_v2Reviewers: Ryan-CW-Code Changed Files (Click to expand)
🏷️ Tag: components_utilities_ymodemReviewers: wdfk-prog Changed Files (Click to expand)
📊 Current Review Status (Last Updated: 2026-02-01 17:06 CST)
📝 Review Instructions
|
- Accumulate short reads, mark finishing on EOF - Track begin/end callback states and cleanup on error paths - Add ACK handling with retry/error counting in send flow
There was a problem hiding this comment.
Pull request overview
Changes:
- Added YMODEM session lifecycle tracking with begin_called, end_called, and last_err fields to prevent resource leaks and allow callbacks to distinguish success from failure
- Implemented unified cleanup function (_rym_cleanup) that properly frees buffers and invokes end callbacks on all exit paths
- Added ACK retry logic with error counting (up to RYM_MAX_ERRORS) in _rym_do_send_trans to handle transient transmission failures
- Fixed _rym_send_data to correctly handle short reads and EOF by looping until buffer is filled or end-of-file is reached
- Removed redundant rt_device_set_rx_indicate calls from internal transfer functions (already set in outer functions)
- Modified serial V2 driver to only perform CRLF conversion when RT_DEVICE_FLAG_STREAM is set, removing special handling for console devices
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 5 comments.
| File | Description |
|---|---|
| components/utilities/ymodem/ymodem.h | Added session lifecycle fields (begin_called, end_called, last_err) to rym_ctx structure with documentation |
| components/utilities/ymodem/ymodem.c | Implemented _rym_cleanup function, added ACK retry logic, unified error handling with goto cleanup pattern, removed redundant rx_indicate calls |
| components/utilities/ymodem/ry_sy.c | Fixed file read loop to handle short reads and EOF correctly |
| components/drivers/serial/dev_serial_v2.c | Removed console device special case from _serial_poll_tx CRLF conversion logic |
拉取/合并请求描述:(PR description)
[
为什么提交这份PR (why to submit this PR)
本 PR 主要修复/增强 YMODEM 发送与会话清理流程,并调整串口 poll tx 的 CRLF 行为:
你的解决方案是什么 (what is your solution)
YMODEM 发送:改为循环读取文件数据,正确处理短读/EOF
YMODEM 会话:新增 begin/end 回调状态并统一 cleanup,避免 buf 泄漏
YMODEM 发送:增加 ACK 错误计数与重试逻辑
串口:poll tx 不再对 console 设备做额外 CR 插入,仅在 STREAM 模式下转换
\n优化发送一帧\r;导致sy 一帧1024的数据包长度超出标准协议与CRC校验失败请提供验证的bsp和config (provide the config and bsp)
sy file_path [uartX]发送大文件与小文件各一次ry file_path [uartX]接收,验证异常中断后资源释放/文件句柄关闭是否正常\n的日志,验证终端是否仍显示正常换行(确认 console open_flag 是否含 STREAM)]
当前拉取/合并请求的状态 Intent for your PR
必须选择一项 Choose one (Mandatory):
代码质量 Code Quality:
我在这个拉取/合并请求中已经考虑了 As part of this pull request, I've considered the following:
#if 0代码,不包含已经被注释了的代码 All redundant code is removed and cleaned up