RT-Thread RTOS
An open source embedded real-time operating system
+ Collaboration diagram for Serial:

Data Structures

struct  rt_serial_rx_fifo
 
struct  rt_serial_tx_fifo
 
struct  rt_serial_device
 
struct  rt_uart_ops
 

Typedefs

typedef void(* rt_hw_serial_rxind_hookproto_t) (rt_device_t dev, rt_size_t size)
 

Functions

void rt_hw_serial_isr (struct rt_serial_device *serial, int event)
 
rt_err_t rt_hw_serial_register (struct rt_serial_device *serial, const char *name, rt_uint32_t flag, void *data)
 
rt_err_t rt_hw_serial_register_tty (struct rt_serial_device *serial)
 

Detailed Description

Serial driver api.

Example

#include <rtthread.h>
#define SAMPLE_UART_NAME "uart2"
static struct rt_semaphore rx_sem;
static rt_device_t serial;
static rt_err_t uart_input(rt_device_t dev, rt_size_t size)
{
rt_sem_release(&rx_sem);
return RT_EOK;
}
static void serial_thread_entry(void *parameter)
{
char ch;
while (1)
{
while (rt_device_read(serial, -1, &ch, 1) != 1)
{
rt_sem_take(&rx_sem, RT_WAITING_FOREVER);
}
ch = ch + 1;
rt_device_write(serial, 0, &ch, 1);
}
}
static int uart_sample(int argc, char *argv[])
{
rt_err_t ret = RT_EOK;
char uart_name[RT_NAME_MAX];
char str[] = "hello RT-Thread!\r\n";
if (argc == 2)
{
rt_strncpy(uart_name, argv[1], RT_NAME_MAX);
}
else
{
rt_strncpy(uart_name, SAMPLE_UART_NAME, RT_NAME_MAX);
}
serial = rt_device_find(uart_name);
if (!serial)
{
rt_kprintf("find %s failed!\n", uart_name);
return -RT_ERROR;
}
rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO);
rt_device_open(serial, RT_DEVICE_FLAG_INT_RX);
rt_device_set_rx_indicate(serial, uart_input);
rt_device_write(serial, 0, str, (sizeof(str) - 1));
rt_thread_t thread = rt_thread_create("serial", serial_thread_entry, RT_NULL, 1024, 25, 10);
if (thread != RT_NULL)
{
}
else
{
ret = -RT_ERROR;
}
return ret;
}
MSH_CMD_EXPORT(uart_sample, uart device sample);
#define RT_DEVICE_FLAG_INT_RX
Definition: rtdef.h:1297
#define RT_IPC_FLAG_FIFO
Definition: rtdef.h:972
#define RT_WAITING_FOREVER
Definition: rtdef.h:980
rt_err_t rt_thread_startup(rt_thread_t thread)
This function will start a thread and put it to system ready queue.
Definition: thread.c:393
rt_thread_t rt_thread_create(const char *name, void(*entry)(void *parameter), void *parameter, rt_uint32_t stack_size, rt_uint8_t priority, rt_uint32_t tick)
This function will create a thread object and allocate thread object memory. and stack.
Definition: thread.c:523
#define MSH_CMD_EXPORT(...)
Definition: finsh.h:142
rt_err_t rt_sem_init(rt_sem_t sem, const char *name, rt_uint32_t value, rt_uint8_t flag)
This function will initialize a static semaphore object.
Definition: ipc.c:376
rt_err_t rt_sem_release(rt_sem_t sem)
This function will release a semaphore. If there is thread suspended on the semaphore,...
Definition: ipc.c:695
Definition: rtdef.h:1370
Definition: rtdef.h:1003
Definition: rtdef.h:852

Typedef Documentation

◆ rt_hw_serial_rxind_hookproto_t

typedef void(* rt_hw_serial_rxind_hookproto_t) (rt_device_t dev, rt_size_t size)

Sets a hook function when RX indicate is called.

Function Documentation

◆ rt_hw_serial_isr()

void rt_hw_serial_isr ( struct rt_serial_device serial,
int  event 
)

Serial interrupt service routine.

Parameters
serialserial device
eventevent mask

◆ rt_hw_serial_register()

rt_err_t rt_hw_serial_register ( struct rt_serial_device serial,
const char *  name,
rt_uint32_t  flag,
void *  data 
)

Register a serial device to device list.

Parameters
serialserial device
namedevice name
flagdevice flag
datadevice private data
Returns
rt_err_t error code
Note
This function will register a serial device to system device list, and add a device object to system object list.

◆ rt_hw_serial_register_tty()

rt_err_t rt_hw_serial_register_tty ( struct rt_serial_device serial)

register a serial device to system device list and add a device object to system object list

Parameters
serialserial device
Returns
rt_err_t error code