summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwdfk-prog <[email protected]>2022-09-20 22:31:34 +0800
committerGitHub <[email protected]>2022-09-20 10:31:34 -0400
commita4bd223e20623a71946b400388f7d8d7b9b446c7 (patch)
tree6acd9cae6097960427ebef669ab9bcf0c804447b
parenta4829b1c004015cca489679cc335b6089aa9da31 (diff)
修改Ymodem组件中MSH的ry命令,已便于自定义保存路径 (#6433)
* 修改ry命令,已便于自定义保存路径 * modified: components/utilities/ymodem/ry_sy.c
-rw-r--r--components/utilities/ymodem/ry_sy.c38
1 files 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)
{