static rt_err_t wrtnode2r_spi_bridge_open(rt_device_t dev, rt_uint16_t oflag) { dev->flag = oflag | RT_DEVICE_FLAG_INT_RX; dev->open_flag = oflag & 0xff; rt_ringbuffer_init(&spi_bridge.read_buf, spi_bridge.read_buf_pool, WRTNODE2R_SPI_MAX_DATA_LEN); rt_ringbuffer_init(&spi_bridge.write_buf, spi_bridge.write_buf_pool, WRTNODE2R_SPI_MAX_DATA_LEN); spi1.beginSlave(); return RT_EOK; }
/* telnet server */ void telnet_srv(void) { rt_thread_t tid; if (telnet == RT_NULL) { rt_uint8_t *ptr; telnet = rt_malloc(sizeof(struct telnet_session)); if (telnet == RT_NULL) { rt_kprintf("telnet: no memory\n"); return; } /* init ringbuffer */ ptr = rt_malloc(RX_BUFFER_SIZE); if (ptr) { rt_ringbuffer_init(&telnet->rx_ringbuffer, ptr, RX_BUFFER_SIZE); } else { rt_kprintf("telnet: no memory\n"); return; } ptr = rt_malloc(TX_BUFFER_SIZE); if (ptr) { rt_ringbuffer_init(&telnet->tx_ringbuffer, ptr, TX_BUFFER_SIZE); } else { rt_kprintf("telnet: no memory\n"); return; } /* create tx ringbuffer lock */ telnet->tx_ringbuffer_lock = rt_mutex_create("telnet_tx", RT_IPC_FLAG_FIFO); /* create rx ringbuffer lock */ telnet->rx_ringbuffer_lock = rt_mutex_create("telnet_rx", RT_IPC_FLAG_FIFO); tid = rt_thread_create("telnet", telnet_thread, RT_NULL, 2048, 25, 5); if (tid != RT_NULL) rt_thread_startup(tid); } else { rt_kprintf("telnet: already running\n"); } }
static void rt_usb_vcom_init(struct ufunction *func) { rt_err_t result = RT_EOK; struct serial_configure config; struct vcom *data = (struct vcom*)func->user_data; /* initialize ring buffer */ rt_ringbuffer_init(&data->rx_ringbuffer, data->rx_rbp, CDC_RX_BUFSIZE); config.baud_rate = BAUD_RATE_115200; config.bit_order = BIT_ORDER_LSB; config.data_bits = DATA_BITS_8; config.parity = PARITY_NONE; config.stop_bits = STOP_BITS_1; config.invert = NRZ_NORMAL; data->serial.ops = &usb_vcom_ops; data->serial.int_rx = &data->vcom_int_rx; data->serial.config = config; /* register vcom device */ rt_hw_serial_register(&data->serial, VCOM_DEVICE, RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_INT_TX, func); /* create an vcom message queue */ rt_mq_init(&vcom_tx_thread_mq, "vcomq", vcom_tx_thread_mq_pool, VCOM_MQ_MSG_SZ, sizeof(vcom_tx_thread_mq_pool), RT_IPC_FLAG_FIFO); /* init usb device thread */ rt_thread_init(&vcom_thread, "vcom", vcom_tx_thread_entry, RT_NULL, vcom_thread_stack, 512, 8, 20); result = rt_thread_startup(&vcom_thread); RT_ASSERT(result == RT_EOK); }
int uart_console_init(void) { struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; struct console_uart* uart; struct rt_serial_device* serial; uart = &_console_uart; serial = &_serial; uart->rx_ready = 0; serial->ops = &console_uart_ops; serial->config = config; /* initialize ring buffer */ rt_ringbuffer_init(&uart->rb, uart->rx_buffer, sizeof(uart->rx_buffer)); /* register UART device */ rt_hw_serial_register(serial, "console", RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, uart); console_lowlevel_init(); return 0; }
void USART1_IRQHandler(void) { rt_uint8_t ch; rt_interrupt_enter(); if( USART_GetITStatus( USART1, USART_IT_RXNE ) != RESET ) { ch = USART_ReceiveData( USART1 ); USART_ClearITPendingBit( USART1, USART_IT_RXNE ); //rt_ringbuffer_putchar(&rb_vuart,ch); if(flag_bd_upgrade_uart==0) { rt_ringbuffer_putchar(&rb_vuart,ch); //if (dev_vuart.rx_indicate != RT_NULL) /*默认finsh使用*/ { dev_vuart.rx_indicate(&dev_vuart,1); } } #if 1 else /*接收升级数据,由于串口波特率可变,需要同步到正确的数据头*/ { switch(bd_packet_status) { case BD_SYNC_40: if(ch==0x40) { rt_ringbuffer_init(&rb_vuart,vuart_rxbuf,VUART_RXBUF_SIZE); rt_ringbuffer_putchar(&rb_vuart,ch); bd_packet_status=BD_SYNC_0D; } break; case BD_SYNC_0D: if(ch==0x0D) bd_packet_status=BD_SYNC_0A; rt_ringbuffer_putchar(&rb_vuart,ch); break; case BD_SYNC_0A: if(ch==0x0A) bd_packet_status=BD_SYNC_40; else bd_packet_status=BD_SYNC_0D; rt_ringbuffer_putchar(&rb_vuart,ch); break; } } #endif } rt_interrupt_leave(); }
void rt_usb_serial_init(void) { struct serial_configure config; /* initialize ring buffer */ rt_ringbuffer_init(&rx_ringbuffer, rx_rbp, CDC_RX_BUFSIZE); rt_ringbuffer_init(&tx_ringbuffer, tx_rbp, CDC_TX_BUFSIZE); config.baud_rate = BAUD_RATE_115200; config.bit_order = BIT_ORDER_LSB; config.data_bits = DATA_BITS_8; config.parity = PARITY_NONE; config.stop_bits = STOP_BITS_1; config.invert = NRZ_NORMAL; vcom_serial.ops = &usb_vcom_ops; vcom_serial.int_rx = &vcom_int_rx; vcom_serial.config = config; /* register vcom device */ rt_hw_serial_register(&vcom_serial, "vcom", RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, RT_NULL); }
void rt_hw_usart_init() { /*初始化接收缓冲区*/ rt_ringbuffer_init(&rb_vuart,vuart_rxbuf,VUART_RXBUF_SIZE); dev_vuart.type = RT_Device_Class_Char; dev_vuart.init = dev_vuart_init; dev_vuart.open = dev_vuart_open; dev_vuart.close = dev_vuart_close; dev_vuart.read = dev_vuart_read; dev_vuart.write = dev_vuart_write; dev_vuart.control = dev_vuart_control; dev_vuart.rx_indicate = RT_NULL; dev_vuart.tx_complete = RT_NULL; rt_device_register( &dev_vuart, "vuart", RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_STREAM ); rt_device_init( &dev_vuart ); }