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;
}
Exemple #2
0
/* 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);       
}
Exemple #4
0
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 );
}