CPU_BOOLEAN  ASCII_IsPrint (CPU_CHAR  c)
{
    CPU_BOOLEAN  print;


    print = ASCII_IS_PRINT(c);

    return (print);
}
Exemple #2
0
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);
}