Example #1
0
/**
 * This function read a character from serial without interrupt enable mode 
 *
 * @return the read char
 */
char rt_serial_getc(void)
{
	return rt_keyboard_getc();

#if 0
	while(!(inb(COM1+COMSTATUS) & COMDATA));
	
	return inb(COM1+COMREAD);
#endif
}
Example #2
0
static void rt_console_isr(int vector, void* param)
{
    char c;
	rt_bool_t ret;
    rt_base_t level;

	if(INTUART0_RX == vector)
	{
		c = rt_serial_getc();
		ret = RT_TRUE;
	}
	else
	{
		rt_keyboard_isr();

		ret = rt_keyboard_getc(&c);
	}

	if(ret == RT_FALSE)
	{
		/* do nothing */
	}
	else
	{
		/* disable interrupt */
		level = rt_hw_interrupt_disable();

		/* save character */
		rx_buffer[save_index] = c;
		save_index ++;
		if (save_index >= CONSOLE_RX_BUFFER_SIZE)
			save_index = 0;

		/* if the next position is read index, discard this 'read char' */
		if (save_index == read_index)
		{
			read_index ++;
			if (read_index >= CONSOLE_RX_BUFFER_SIZE)
				read_index = 0;
		}

		/* enable interrupt */
		rt_hw_interrupt_enable(level);
	}

    /* invoke callback */
    if (console_device.rx_indicate != RT_NULL)
    {
        rt_size_t rx_length;

        /* get rx length */
        rx_length = read_index > save_index ?
			CONSOLE_RX_BUFFER_SIZE - read_index + save_index :
			save_index - read_index;

        if(rx_length > 0)
        {
            console_device.rx_indicate(&console_device, rx_length);
        }
    }
    else
    {

    }
}