From a4bd223e20623a71946b400388f7d8d7b9b446c7 Mon Sep 17 00:00:00 2001 From: wdfk-prog <66928464+wdfk-prog@users.noreply.github.com> Date: Tue, 20 Sep 2022 22:31:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9Ymodem=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E4=B8=ADMSH=E7=9A=84ry=E5=91=BD=E4=BB=A4=EF=BC=8C=E5=B7=B2?= =?UTF-8?q?=E4=BE=BF=E4=BA=8E=E8=87=AA=E5=AE=9A=E4=B9=89=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=20(#6433)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 修改ry命令,已便于自定义保存路径 * modified: components/utilities/ymodem/ry_sy.c --- components/utilities/ymodem/ry_sy.c | 38 ++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/components/utilities/ymodem/ry_sy.c b/components/utilities/ymodem/ry_sy.c index d61b0cde58..0d22c48faa 100644 --- a/components/utilities/ymodem/ry_sy.c +++ b/components/utilities/ymodem/ry_sy.c @@ -36,9 +36,21 @@ static enum rym_code _rym_recv_begin( rt_size_t len) { struct custom_ctx *cctx = (struct custom_ctx *)ctx; - - cctx->fpath[0] = '/'; - rt_strncpy(&(cctx->fpath[1]), (const char *)buf, len - 1); + struct stat file_buf; + char insert_0 = '\0'; + char *ret; + rt_err_t err; + ret = strchr(cctx->fpath,insert_0); + if(ret) + { + *ret = '/'; + } + else + { + rt_kprintf("No end character\n"); + return RYM_ERR_ACK; + } + rt_strncpy(ret + 1, (const char *)buf, len - 1); cctx->fd = open(cctx->fpath, O_CREAT | O_WRONLY | O_TRUNC, 0); if (cctx->fd < 0) { @@ -154,7 +166,7 @@ static enum rym_code _rym_send_end( return RYM_CODE_SOH; } -static rt_err_t rym_download_file(rt_device_t idev) +static rt_err_t rym_download_file(rt_device_t idev,const char *file_path) { rt_err_t res; struct custom_ctx *ctx = rt_calloc(1, sizeof(*ctx)); @@ -165,6 +177,7 @@ static rt_err_t rym_download_file(rt_device_t idev) return RT_ENOMEM; } ctx->fd = -1; + rt_strncpy(ctx->fpath, file_path, DFS_PATH_MAX); RT_ASSERT(idev); res = rym_recv_on_device(&ctx->parent, idev, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX, _rym_recv_begin, _rym_recv_data, _rym_recv_end, 1000); @@ -201,9 +214,15 @@ static rt_err_t ry(uint8_t argc, char **argv) { rt_err_t res; rt_device_t dev; - - if (argc > 1) - dev = rt_device_find(argv[1]); + /* temporarily support 1 file*/ + const char *file_path; + if (argc < 2) + { + rt_kprintf("invalid file path.\n"); + return -RT_ERROR; + } + if (argc > 2) + dev = rt_device_find(argv[2]); else dev = rt_console_get_device(); if (!dev) @@ -211,11 +230,12 @@ static rt_err_t ry(uint8_t argc, char **argv) rt_kprintf("could not find device.\n"); return -RT_ERROR; } - res = rym_download_file(dev); + file_path = argv[1]; + res = rym_download_file(dev,file_path); return res; } -MSH_CMD_EXPORT(ry, YMODEM Receive e.g: ry [uart0] default by console.); +MSH_CMD_EXPORT(ry, YMODEM Receive e.g: ry file_path [uart0] default by console.); static rt_err_t sy(uint8_t argc, char **argv) { -- GitLab