Lines Matching +full:0 +full:- +full:dev

3  * This file is part of RT-Thread RTOS
4 * COPYRIGHT (C) 2010, RT-Thread Development Team
8 * http://www.rt-thread.org/license/LICENSE
12 * 2009-02-05 Bernard first version
13 * 2009-10-25 Bernard fix rt_serial_read bug when there is no data
15 * 2010-03-29 Bernard cleanup code.
16 * 2010-03-30 Kyle Ported from STM32 to AVR32.
36 /* RT-Thread Device Interface */
37 static rt_err_t rt_serial_init (rt_device_t dev) in rt_serial_init() argument
39 struct avr32_serial_device* uart = (struct avr32_serial_device*) dev->user_data; in rt_serial_init()
41 if (!(dev->flag & RT_DEVICE_FLAG_ACTIVATED)) in rt_serial_init()
43 if (dev->flag & RT_DEVICE_FLAG_INT_RX) in rt_serial_init()
45 rt_memset(uart->int_rx->rx_buffer, 0, sizeof(uart->int_rx->rx_buffer)); in rt_serial_init()
46 uart->int_rx->read_index = 0; in rt_serial_init()
47 uart->int_rx->save_index = 0; in rt_serial_init()
50 dev->flag |= RT_DEVICE_FLAG_ACTIVATED; in rt_serial_init()
56 static rt_err_t rt_serial_open(rt_device_t dev, rt_uint16_t oflag) in rt_serial_open() argument
61 static rt_err_t rt_serial_close(rt_device_t dev) in rt_serial_close() argument
66 static rt_size_t rt_serial_read (rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t size) in rt_serial_read() argument
74 uart = (struct avr32_serial_device*)dev->user_data; in rt_serial_read()
76 if (dev->flag & RT_DEVICE_FLAG_INT_RX) in rt_serial_read()
86 if (uart->int_rx->read_index != uart->int_rx->save_index) in rt_serial_read()
89 *ptr++ = uart->int_rx->rx_buffer[uart->int_rx->read_index]; in rt_serial_read()
90 size--; in rt_serial_read()
93 uart->int_rx->read_index ++; in rt_serial_read()
94 if (uart->int_rx->read_index >= UART_RX_BUFFER_SIZE) in rt_serial_read()
95 uart->int_rx->read_index = 0; in rt_serial_read()
100 err_code = -RT_EEMPTY; in rt_serial_read()
114 while ((rt_uint32_t)ptr - (rt_uint32_t)buffer < size) in rt_serial_read()
116 while (usart_test_hit(uart->uart_device)) in rt_serial_read()
118 *ptr = uart->uart_device->rhr & 0xff; in rt_serial_read()
126 return (rt_uint32_t)ptr - (rt_uint32_t)buffer; in rt_serial_read()
129 static rt_size_t rt_serial_write (rt_device_t dev, rt_off_t pos, const void* buffer, rt_size_t size) in rt_serial_write() argument
137 uart = (struct avr32_serial_device*)dev->user_data; in rt_serial_write()
139 if (dev->flag & RT_DEVICE_FLAG_INT_TX) in rt_serial_write()
142 RT_ASSERT(0); in rt_serial_write()
147 if (dev->flag & RT_DEVICE_FLAG_STREAM) in rt_serial_write()
152 usart_putchar(uart->uart_device, (int) *ptr); in rt_serial_write()
154 ++ptr; --size; in rt_serial_write()
162 usart_bw_write_char(uart->uart_device, (int) *ptr); in rt_serial_write()
164 ++ptr; --size; in rt_serial_write()
172 return (rt_uint32_t)ptr - (rt_uint32_t)buffer; in rt_serial_write()
175 static rt_err_t rt_serial_control (rt_device_t dev, int cmd, void *args) in rt_serial_control() argument
179 RT_ASSERT(dev != RT_NULL); in rt_serial_control()
181 uart = (struct avr32_serial_device*)dev->user_data; in rt_serial_control()
186 dev->flag |= RT_DEVICE_FLAG_SUSPENDED; in rt_serial_control()
191 dev->flag &= ~RT_DEVICE_FLAG_SUSPENDED; in rt_serial_control()
209 RT_ASSERT(0); in rt_hw_serial_register()
212 device->type = RT_Device_Class_Char; in rt_hw_serial_register()
213 device->rx_indicate = RT_NULL; in rt_hw_serial_register()
214 device->tx_complete = RT_NULL; in rt_hw_serial_register()
215 device->init = rt_serial_init; in rt_hw_serial_register()
216 device->open = rt_serial_open; in rt_hw_serial_register()
217 device->close = rt_serial_close; in rt_hw_serial_register()
218 device->read = rt_serial_read; in rt_hw_serial_register()
219 device->write = rt_serial_write; in rt_hw_serial_register()
220 device->control = rt_serial_control; in rt_hw_serial_register()
221 device->user_data = serial; in rt_hw_serial_register()
233 if (usart_test_hit(uart->uart_device)) in rt_hw_serial_isr()
236 RT_ASSERT(device->flag & RT_DEVICE_FLAG_INT_RX); in rt_hw_serial_isr()
242 uart->int_rx->rx_buffer[uart->int_rx->save_index] = uart->uart_device->rhr & 0xff; in rt_hw_serial_isr()
243 uart->int_rx->save_index ++; in rt_hw_serial_isr()
244 if (uart->int_rx->save_index >= UART_RX_BUFFER_SIZE) in rt_hw_serial_isr()
245 uart->int_rx->save_index = 0; in rt_hw_serial_isr()
248 if (uart->int_rx->save_index == uart->int_rx->read_index) in rt_hw_serial_isr()
250 uart->int_rx->read_index ++; in rt_hw_serial_isr()
251 if (uart->int_rx->read_index >= UART_RX_BUFFER_SIZE) in rt_hw_serial_isr()
252 uart->int_rx->read_index = 0; in rt_hw_serial_isr()
264 rx_length = uart->int_rx->read_index > uart->int_rx->save_index ? in rt_hw_serial_isr()
265 UART_RX_BUFFER_SIZE - uart->int_rx->read_index + uart->int_rx->save_index : in rt_hw_serial_isr()
266 uart->int_rx->save_index - uart->int_rx->read_index; in rt_hw_serial_isr()
273 usart_reset_status(uart->uart_device); in rt_hw_serial_isr()