Merge pull request #341 from armink/master
[YModem] YModem optimization; [BSP] Add more error handling in STM32F1 bsp.
This commit is contained in:
commit
e41fe36a08
|
@ -163,7 +163,10 @@ void USART1_IRQHandler(void)
|
|||
/* clear interrupt */
|
||||
USART_ClearITPendingBit(uart->uart_device, USART_IT_TC);
|
||||
}
|
||||
|
||||
if (USART_GetFlagStatus(uart->uart_device, USART_FLAG_ORE) == SET)
|
||||
{
|
||||
stm32_getc(&serial1);
|
||||
}
|
||||
/* leave interrupt */
|
||||
rt_interrupt_leave();
|
||||
}
|
||||
|
@ -197,6 +200,10 @@ void USART2_IRQHandler(void)
|
|||
/* clear interrupt */
|
||||
USART_ClearITPendingBit(uart->uart_device, USART_IT_TC);
|
||||
}
|
||||
if (USART_GetFlagStatus(uart->uart_device, USART_FLAG_ORE) == SET)
|
||||
{
|
||||
stm32_getc(&serial2);
|
||||
}
|
||||
|
||||
/* leave interrupt */
|
||||
rt_interrupt_leave();
|
||||
|
@ -204,7 +211,7 @@ void USART2_IRQHandler(void)
|
|||
#endif /* RT_USING_UART2 */
|
||||
|
||||
#if defined(RT_USING_UART3)
|
||||
/* UART1 device driver structure */
|
||||
/* UART3 device driver structure */
|
||||
struct stm32_uart uart3 =
|
||||
{
|
||||
USART3,
|
||||
|
@ -231,6 +238,10 @@ void USART3_IRQHandler(void)
|
|||
/* clear interrupt */
|
||||
USART_ClearITPendingBit(uart->uart_device, USART_IT_TC);
|
||||
}
|
||||
if (USART_GetFlagStatus(uart->uart_device, USART_FLAG_ORE) == SET)
|
||||
{
|
||||
stm32_getc(&serial3);
|
||||
}
|
||||
|
||||
/* leave interrupt */
|
||||
rt_interrupt_leave();
|
||||
|
@ -282,7 +293,7 @@ static void GPIO_Configuration(void)
|
|||
/* Configure USART Rx/tx PIN */
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
|
||||
GPIO_InitStructure.GPIO_Pin = UART2_GPIO_RX;
|
||||
GPIO_Init(UART1_GPIO, &GPIO_InitStructure);
|
||||
GPIO_Init(UART2_GPIO, &GPIO_InitStructure);
|
||||
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
|
||||
GPIO_InitStructure.GPIO_Pin = UART2_GPIO_TX;
|
||||
|
|
|
@ -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 */
|
||||
for (i = 0; i < RYM_END_SESSION_SEND_CAN_NUM; i++) {
|
||||
_rym_putchar(ctx, RYM_CODE_CAN);
|
||||
_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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue