diff options
| author | Bernard Xiong <[email protected]> | 2014-09-14 19:42:32 +0800 |
|---|---|---|
| committer | Bernard Xiong <[email protected]> | 2014-09-14 19:42:32 +0800 |
| commit | e41fe36a088d0b4944799f2f8627d13c835544bd (patch) | |
| tree | 6106ddf20b460941cfbdecf31e1401476ab2aabb /components | |
| parent | 521f24f1093ab3eeeb914648b71ad21d7e0e782d (diff) | |
| parent | 762f18d743580b4b8f3a7954d481dcbe1d2ecf30 (diff) | |
Merge pull request #341 from armink/master
[YModem] YModem optimization;
[BSP] Add more error handling in STM32F1 bsp.
Diffstat (limited to 'components')
| -rw-r--r-- | components/utilities/ymodem/ymodem.c | 11 | ||||
| -rw-r--r-- | components/utilities/ymodem/ymodem.h | 7 |
2 files changed, 12 insertions, 6 deletions
diff --git a/components/utilities/ymodem/ymodem.c b/components/utilities/ymodem/ymodem.c index f5ebeab832..7e8ad12419 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); @@ -310,6 +311,7 @@ static rt_err_t _rym_do_recv( rt_err_t rym_recv_on_device( struct rym_ctx *ctx, rt_device_t dev, + rt_uint16_t oflag, rym_callback on_begin, rym_callback on_data, rym_callback on_end, @@ -340,7 +342,7 @@ rt_err_t rym_recv_on_device( dev->flag &= ~RT_DEVICE_FLAG_STREAM; rt_hw_interrupt_enable(int_lvl); - res = rt_device_open(dev, 0); + res = rt_device_open(dev, oflag); if (res != RT_EOK) goto __exit; @@ -363,4 +365,3 @@ __exit: return res; } - diff --git a/components/utilities/ymodem/ymodem.h b/components/utilities/ymodem/ymodem.h index 43ee6f5c10..09b5bae791 100644 --- a/components/utilities/ymodem/ymodem.h +++ b/components/utilities/ymodem/ymodem.h @@ -55,6 +55,11 @@ 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. */ +#ifndef RYM_END_SESSION_SEND_CAN_NUM +#define RYM_END_SESSION_SEND_CAN_NUM 0x07 +#endif + enum rym_stage { RYM_STAGE_NONE, /* set when C is send */ @@ -128,7 +133,7 @@ struct rym_ctx * @param handshake_timeout the timeout when hand shaking. The unit is in * second. */ -rt_err_t rym_recv_on_device(struct rym_ctx *ctx, rt_device_t dev, +rt_err_t rym_recv_on_device(struct rym_ctx *ctx, rt_device_t dev, rt_uint16_t oflag, rym_callback on_begin, rym_callback on_data, rym_callback on_end, int handshake_timeout); |
