CPU_BOOLEAN ASCII_IsPrint (CPU_CHAR c) { CPU_BOOLEAN print; print = ASCII_IS_PRINT(c); return (print); }
CPU_SIZE_T BSP_SerRdLine(CPU_DATA port_id, void *p_dest, CPU_SIZE_T size) { LM3SXXXX_STRUCT_UART *uart; CPU_INT08U *p_dest_08; CPU_SIZE_T cnt; CPU_INT08U datum; CPU_INT32U fr; CPU_BOOLEAN print; if (port_id > BSP_SER_PORT_NBR_MAX) { return (DEF_NO); } switch (port_id) { case BSP_SER_ID_UART0: uart = (LM3SXXXX_STRUCT_UART *)LM3SXXXX_BASE_UART0; break; #if (BSP_SER_PORT_NBR_MAX >= BSP_SER_ID_UART1) case BSP_SER_ID_UART1: uart = (LM3SXXXX_STRUCT_UART *)LM3SXXXX_BASE_UART1; break; #endif #if (BSP_SER_PORT_NBR_MAX >= BSP_SER_ID_UART2) case BSP_SER_ID_UART2: uart = (LM3SXXXX_STRUCT_UART *)LM3SXXXX_BASE_UART2; break; #endif default: return (0u); } p_dest_08 = (CPU_INT08U *)p_dest; cnt = 0u; while (cnt < size - 1u) { fr = uart->FR; while (DEF_BIT_IS_SET(fr, LM3SXXXX_BIT_UARTFR_RXFE) == DEF_YES) { BSP_OS_Dly_ms(1u); fr = uart->FR; } datum = (CPU_INT08U)uart->DR; print = ASCII_IS_PRINT(datum); if (print == DEF_YES) { *p_dest_08 = datum; p_dest_08++; BSP_SerWr(port_id, (void *)&datum, 1); } else { if (datum == ASCII_CHAR_BACKSPACE) { if (cnt > 0u) { BSP_SerWr(port_id, (void *)"\b \b", 3); cnt--; } } else if (datum == ASCII_CHAR_CARRIAGE_RETURN) { *p_dest_08 = (CPU_CHAR)ASCII_CHAR_NULL; return (cnt); } } cnt++; } *p_dest_08 = (CPU_CHAR)ASCII_CHAR_NULL; return (cnt); }