int platform_uart_exists( unsigned id );

Checks if the platform has the hardware UART specified as argument. Implemented in src/common.c, it uses the NUM_UART macro that must be defined in the platform's platform_conf.h file (see here for details). For example:

This function is used to initialize the parameters of the UART interface.

Arguments:

id - UART interface ID.

baud - baud rate.

databits - number of databits (maximum 8).

parity - parity type (can be either PLATFORM_UART_PARITY_EVEN, PLATFORM_UART_PARITY_ODD or PLATFORM_UART_PARITY_NONE, see here).

stopbits - number of stop bits (can be either PLATFORM_UART_STOPBITS_1, PLATFORM_UART_STOPBITS_1_5 or PLATFORM_UART_STOPBITS_2, see here).

Returns: the actual baud rate. Depending on the hardware, this may have a different value than the baud argument.

void platform_uart_send( unsigned id, u8 data );

Send data to an UART interface. This is a blocking operation (it doesn't return until the data was sent). This function is "split" in two parts: a platform-independent part that is implemented in src/common.c and a platform-dependent part that must be implemented by each platform in a function named platform_s_uart_send.

Arguments:

id - UART interface ID.

data - data to be sent.

Returns: nothing.

void platform_s_uart_send( unsigned id, u8 data );

This is the platform-dependent part of platform_uart_send. It doesn't need to take care of virtual UARTs or other system configuration parameters, it just needs to instruct the CPU to send the data on the specified ID. This function will always be called with a physical uart ID.

Receive data from the UART interface (blocking/non blocking with timeout/immediate). This function is "split" in two parts: a platform-independent part that is implemented in src/common.c and a platform-dependent part that must be implemented by each platform in a function named platform_s_uart_recv.

Arguments:

id - UART interface ID.

timer_id - the ID of the timer used in this operation (see here for details). See also the description of the timeout argument.

timeout - specifies a timeout for the receive operation as follows:

timeout > 0: the timer with the specified timer_id will be used to timeout the receive operation after timeout microseconds.

timeout = 0: the function returns immediately regardless of data being available or not. timer_id is ignored.

timeout = PLATFORM_UART_INFINITE_TIMEOUT: the function waits indefinitely for UART data to be available and returns it. In this mode the function doesn't time out, so timer_id is ignored.

Returns:

if timeout > 0 and data from the UART is available in timeout microseconds of less it is returned, otherwise -1 is returned

if timeout = 0 and data from the UART is available when the function is called it is returned, otherwise -1 is returned

int platform_s_uart_recv( unsigned id, s32 timeout );

This is the platform-dependent part of the UART receive function platform_uart_recv and is in fact a "subset" of the full function (thus being easier to implement by each platform in part). In particular, it never needs to deal with the timeout &gt; 0 case, which is handled by platform_uart_recv.

Arguments:

id - UART interface ID.

timeout - specifies a timeout for the receive operation as follows:

timeout = 0: the function returns immediately regardless of data being available or not.

int platform_uart_set_flow_control( unsigned id, int type );

Sets the flow control type. This function is "split" in two parts: a platform independent part that is implemented in src/common.c and a platform-dependent part that must be implemented by each platform in a function named platform_s_uart_set_flow_control.

Arguments:

id - UART interface ID.

type - the desired flow control. It can be either PLATFORM_UART_FLOW_NONE, PLATFORM_UART_FLOW_RTS or PLATFORM_UART_FLOW_CTS or a bitwise combination of these constants (see here for details).

int platform_s_uart_set_flow_control( unsigned id, int type );

This is the platform-dependent part of the UART set flow control function platform_uart_set_flow_control and is in fact a "subset" of the full function (thus being easier to implement by each platform in part). In particular, it never needs to deal with virtual UARTs.

Arguments:

id - UART interface ID.

type - the desired flow control. It can be either PLATFORM_UART_FLOW_NONE, PLATFORM_UART_FLOW_RTS or PLATFORM_UART_FLOW_CTS or a bitwise combination of these constants (see here for details).