diff --git a/components/utilities/ymodem/ymodem.c b/components/utilities/ymodem/ymodem.c index f5ebeab832f7e2f389f9506f2fff8b5cf8064e9f..3af1528024138ae60081643079dffb1144f69c84 100644 --- a/components/utilities/ymodem/ymodem.c +++ b/components/utilities/ymodem/ymodem.c @@ -197,7 +197,7 @@ static rt_err_t _rym_do_trans(struct rym_ctx *ctx) { rt_err_t err; enum rym_code code; - rt_size_t data_sz; + rt_size_t data_sz, i; code = _rym_read_code(ctx, RYM_WAIT_PKG_TICK); @@ -223,8 +223,9 @@ static rt_err_t _rym_do_trans(struct rym_ctx *ctx) { case RYM_CODE_CAN: /* the spec require multiple CAN */ - _rym_putchar(ctx, RYM_CODE_CAN); - _rym_putchar(ctx, RYM_CODE_CAN); + for (i = 0; i < RYM_END_SESSION_SEND_CAN_NUM; i++) { + _rym_putchar(ctx, RYM_CODE_CAN); + } return -RYM_ERR_CAN; case RYM_CODE_ACK: _rym_putchar(ctx, RYM_CODE_ACK); diff --git a/components/utilities/ymodem/ymodem.h b/components/utilities/ymodem/ymodem.h index 43ee6f5c10fbd39d94c8909b5adfdfcdac9020fe..d82e76d93614479f19c760d28aea05287c25496a 100644 --- a/components/utilities/ymodem/ymodem.h +++ b/components/utilities/ymodem/ymodem.h @@ -55,6 +55,9 @@ enum rym_code { #define RYM_CHD_INTV_TICK (RT_TICK_PER_SECOND * 3) #endif +/* how many CAN be sent when user active end the session. */ +#define RYM_END_SESSION_SEND_CAN_NUM 0x07 + enum rym_stage { RYM_STAGE_NONE, /* set when C is send */ @@ -129,7 +132,7 @@ struct rym_ctx * second. */ rt_err_t rym_recv_on_device(struct rym_ctx *ctx, rt_device_t dev, - rym_callback on_begin, rym_callback on_data, rym_callback on_end, - int handshake_timeout); + rt_uint16_t oflag, rym_callback on_begin, rym_callback on_data, + rym_callback on_end, int handshake_timeout); #endif