示例#1
0
文件: main.c 项目: wdauwen/msp430-soc
int main(void) {
	int i;

    WDTCTL = WDTPW | WDTHOLD;          // Disable watchdog timer

	// enable fifo
	iowrite16(STAT_FIFO_EN, BASE_UART0+SER_STATUS);
	iowrite16(BAUD_115200, BASE_UART0+SER_BAUD);

	iowrite16(STAT_FIFO_EN, BASE_UART1+SER_STATUS);
	iowrite16(BAUD_115200, BASE_UART1+SER_BAUD);

	printf("\r\n====== UART loopback example ======\r\n");

	iowrite16(0xFF, BASE_GPIO0+GPIO_DIR);
	iowrite16(0x80, BASE_GPIO0+GPIO_OUT);

    while(1) { 
		/* echo loop */
		if ( serial_getchar_check(BASE_UART0) ) {
			i = serial_getchar(BASE_UART0);
			serial_putchar(BASE_UART0, i);

			iowrite16( (ioread16(BASE_GPIO0+GPIO_OUT) ^ 0x1), BASE_GPIO0+GPIO_OUT);
		}

		if ( serial_getchar_check(BASE_UART1) ) {
			i = serial_getchar(BASE_UART1);
			serial_putchar(BASE_UART1, i);

			iowrite16( (ioread16(BASE_GPIO0+GPIO_OUT) ^ 0x2), BASE_GPIO0+GPIO_OUT);
		}
	}
}
示例#2
0
文件: serial.c 项目: mikesma/fit-cvut
int
main ()
{
	pl2303_init ();
	led_init ();
	disp_init ();

	serial_init (9600);

	while (1)
	{
		int c;
		switch ((c = serial_getchar ()))
		{
		case '!':
			led_all_off ();
			break;
		case '&':
			switch (serial_getchar ())
			{
			case 'R': led_on  (LED_R); break;
			case 'G': led_on  (LED_G); break;
			case 'B': led_on  (LED_B); break;
			case 'r': led_off (LED_R); break;
			case 'g': led_off (LED_G); break;
			case 'b': led_off (LED_B); break;

			case 'i':
				serial_puts ("Pripravek PIC24f Starter Kit;");
				break;
			case 's':
				disp_clear ();
				disp_at (1, 1);
				while ((c = serial_getchar ()) != ';')
					disp_char (c);
				break;
			default:
				disp_clear ();
				disp_at (1, 1);
				disp_str ("unrecognized '");
				disp_char (c);
				disp_char ('\'');
			}
		}
	}

	return 0;
}
示例#3
0
文件: main.c 项目: zhangsen/rasp-os
int main()
{
    u32 depth = 16;
    //u32 depth = 24; // true color doesn't work?
    struct fb_info *fb;

    /* initialize early so we can use it for debugging */
    serial_init();
    mem_init();

    fb = fb_init(depth);
    if (fb) {
        printk("hello world\n");
        printk("resolution: %dx%d\n", fb->width, fb->height);
    }

    printk("firmware revision: 0x%x\n", get_firmware_revision());
    printk("board model: 0x%x\n", get_board_model());
    printk("board revision: 0x%x\n", get_board_revision());

    exception_init();

    init();
    while (1) {
        int c;
        serial_printk("$ ");
        c = serial_getchar();
        serial_printk("got this char: %c (%d) (0x%x)\n", c, c, c);
    }

    while(1) ;
    return 0;
}
示例#4
0
文件: serial.c 项目: dromer/msp3n1s
int
main(void)
{
	watchdog_off();
	clock_init_1MHz();

	/* set all pins to output high */
	port1_direction = 0xFF;
	port1_output = 0xFF;

	/* initialize serial clock, tx and rx parts */
	serial_init_clock();
	serial_init_tx();
	serial_init_rx();

	/* enable interrupts */
	__eint();

	pin_low(LED1);
	pin_high(LED2);

	while (1) {
		unsigned char c;

		pin_toggle(LED1);
		pin_toggle(LED2);

		c = serial_getchar();
		serial_putchar(c);
		if (c == '\r')
			serial_putchar('\n');
	}
}
示例#5
0
文件: main.c 项目: PlugaruT/PAIIP
int main(void)
{
	char ch;
	serial_init(51);
	LED_init();
	
	while(1)
	{
		//print messages on the screen
		printf("Press 1 to turn LED on. \r");
		printf("Press 0 to turn LED off. \r\r");
		//get the input char from keyboard
		ch = serial_getchar();
		
		switch(ch)
		{
			case '0':
				//turn off LED
				printf("LED off!\r");
				LED_off();
				break;
			case '1':
				//turn on LED
				printf("LED on!\r");
				LED_on();
				break;
			default:
				printf("Wrong key!\r");
				break;
		}
	}
}
示例#6
0
static void
handle_serial_input(void)
{
	while (1) {
		switch (serial_getchar()) {
		case '\0':
			cli();
			if (!serial_available())
				events &= ~EV_SERIAL;
			sei();
			return;

		case 'O': /* open */
			pin_low(PIN_GREEN_LED);
			pin_low(PIN_OPEN_LOCK);
			_delay_ms(500);
			pin_high(PIN_OPEN_LOCK);
			serial_print("OPENAKCK\n");
			pin_high(PIN_GREEN_LED);
			break;

		case 'D': /* day */
			pin_low(PIN_GREEN_LED);
			pin_low(PIN_DAYMODE);     /* day mode   */
			pin_high(PIN_STATUS_LED); /* status on  */
			break;

		case 'N': /* night */
			pin_high(PIN_GREEN_LED);
			pin_high(PIN_DAYMODE);    /* nightmode  */
			pin_low(PIN_STATUS_LED);  /* status off */
			break;

		case 'R': /* rejected */
			pin_low(PIN_YELLOW_LED);
			_delay_ms(200);
			pin_high(PIN_YELLOW_LED);
			_delay_ms(200);
			pin_low(PIN_YELLOW_LED);
			_delay_ms(200);
			pin_high(PIN_YELLOW_LED);
			break;

		case 'V': /* validated */
			pin_low(PIN_GREEN_LED);
			_delay_ms(300);
			pin_high(PIN_GREEN_LED);
			_delay_ms(200);
			pin_low(PIN_GREEN_LED);
			_delay_ms(300);
			pin_high(PIN_GREEN_LED);
			_delay_ms(200);
			pin_low(PIN_GREEN_LED);
			_delay_ms(300);
			pin_high(PIN_GREEN_LED);
			break;
		}
	}
}
示例#7
0
static void poll_dials ( int id )
{
    int data;
    static int dial_state = DIAL_NEW;
    static int dial_which;
    static int dial_value;
    static int dials[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };

    if ( !dialbox_port ) return;

    while ( (data=serial_getchar(dialbox_port)) != EOF )
    {
        if ( ( dial_state > DIAL_WHICH_DEVICE ) || IS_DIAL_EVENT ( data ) )
        {
            switch ( dial_state )
            {
            case DIAL_WHICH_DEVICE:
                dial_which = data - DIAL_BASE;
                dial_state++;
                break;
            case DIAL_VALUE_HIGH:
                dial_value = ( data << 8 );
                dial_state++;
                break;
            case DIAL_VALUE_LOW:
                dial_value |= data;
                if ( dial_value & 0x8000 ) dial_value -= 0x10000;
                dials[dial_which] = dial_value;
                send_dial_event ( dial_which + 1, dial_value * 360 / 256 );
                dial_state = DIAL_WHICH_DEVICE;
                break;
            default:
                /* error: Impossible state value! */
                break;
            }
        }
        else if ( data == DIAL_INITIALIZED )
        {
            fgState.InputDevsInitialised = GL_TRUE;
            dial_state = DIAL_WHICH_DEVICE;
            serial_putchar(dialbox_port,DIAL_SET_AUTO_DIALS);
            serial_putchar(dialbox_port,0xff);
            serial_putchar(dialbox_port,0xff);
        }
        else  /* Unknown data; try flushing. */
            serial_flush(dialbox_port);
    }

    glutTimerFunc ( 2, poll_dials, 0 );
}
示例#8
0
int getkey()
{
    while (!kbhit())
        ;
    // return the next character from the console input device
//    return usb_serial_getchar();
    if(USB_SERIAL_ON && (usb_serial_available() != 0)) {
	return usb_serial_getchar();
    }
#ifdef USE_UART
    return serial_getchar();
#endif
    return 0;
}
示例#9
0
文件: main.c 项目: PlugaruT/PAIIP
int main ()
{
	serial_init(51) ;
	LM20_init();
	timer_init();
	lcd_init(LCD_DISP_ON);
	sei();
	while(1)
	{			
		unsigned char ch = serial_getchar();
		LM20_setTemperature(ch);	
	}
return 0;
}
示例#10
0
文件: demo.c 项目: makapuf/bitbox
void game_frame()
{
    // if button pressed, send 'a' quickly
    if (button_state())
    	serial_putchar('a'); // low level output

    if (vga_frame%16) return;
    led=1-led;
    set_led(led);

    // echo input first character
    if (serial_rx_ready())
    	serial_putchar(serial_getchar()); // could block 
}
示例#11
0
文件: conio.c 项目: psas/lpc-kit
/*
 * serial_getline
 * --------------------------------------
 * receive chars from the serial port until
 * \n, then return a string.
 * Maximum length of line is 120 chars.
 * copy string from pointer to new variable,
 * static declaration here is to avoid global declaration.
 * HOWEVER, the pointer is globally accessed too...shrug.
 */
char* serial_getline (void)  {
 
    char current=' ';
    U16 index=0;
    static char _LINEBUFFER[MAXBUFFER];

    while((current != '\n' && current != '\r') && index < MAXBUFFER-1) {
	current=serial_getchar();
	_LINEBUFFER[index]=current;
	++index;
    }
    _LINEBUFFER[index]='\0';

    return (_LINEBUFFER);
}
示例#12
0
static int curses_getchar(int _delay)
{
#if CONFIG(LP_USB_HID) || CONFIG(LP_PC_KEYBOARD) || \
	CONFIG(LP_SERIAL_CONSOLE)
	unsigned short c;
#endif

	do {
#if CONFIG(LP_USB_HID)
		usb_poll();
		if ((curses_flags & F_ENABLE_CONSOLE) &&
		    usbhid_havechar()) {
			c = usbhid_getchar();
			if (c != 0) return c;
		}
#endif
#if CONFIG(LP_PC_KEYBOARD)
		if ((curses_flags & F_ENABLE_CONSOLE) &&
		    keyboard_havechar()) {
			c = keyboard_getchar();
			if (c != 0) return c;
		}
#endif

#if CONFIG(LP_SERIAL_CONSOLE)
		if ((curses_flags & F_ENABLE_SERIAL) &&
		    serial_havechar()) {
			c = serial_getchar();
			return cook_serial(c);
		}
#endif

		if (_delay == 0) {
			break;
		} else if (_delay >= 10) {
			mdelay(10);
			_delay -= 10;
		} else if (_delay > 0) {
			mdelay(_delay);
			_delay = 0;
		}
	} while (1);

	return ERR;
}
示例#13
0
static int curses_getchar(int _delay)
{
#if defined(CONFIG_USB_HID) || defined(CONFIG_PC_KEYBOARD) || defined(CONFIG_SERIAL_CONSOLE)
	unsigned short c;
#endif

	do {
#ifdef CONFIG_USB_HID
		usb_poll();
		if ((curses_flags & F_ENABLE_CONSOLE) &&
		    usbhid_havechar()) {
			c = usbhid_getchar();
			if (c != 0) return c;
		}
#endif
#ifdef CONFIG_PC_KEYBOARD
		if ((curses_flags & F_ENABLE_CONSOLE) &&
		    keyboard_havechar()) {
			c = keyboard_getchar();
			if (c != 0) return c;
		}
#endif

#ifdef CONFIG_SERIAL_CONSOLE
		if ((curses_flags & F_ENABLE_SERIAL) &&
		    serial_havechar()) {
			c = serial_getchar();
			return cook_serial(c);
		}
#endif

		if (_delay == 0)
			break;

		if (_delay > 0) {
			mdelay(1);
			_delay--;
		}


	} while (1);

	return ERR;
}
示例#14
0
static int getkeyseq(char *buffer, int len, int max)
{
	int i;

	while (1) {
		for(i = 0; i < 75; i++) {
			if (serial_havechar())
				break;
			mdelay(1);
		}

		if (i == 75)
			return len;

		buffer[len++] = serial_getchar();
		if (len == max)
			return len;
	}
}
示例#15
0
文件: serial.c 项目: GNsunghokim/rtos
static bool event(void* data) {
	int ch;
	if(serial_enabled) {
		while(serial_havechar()) {
			ch = serial_getchar();
			// TODO: process other special keys
			if(ch == '\r') {
				// Serial mode of QEMU is cooked mode. 
				// Line feed('\r') expected for new line('\n') 
				stdio_putchar((const char)'\n');
			} else {
				stdio_putchar((const char)ch);
			}

		}
	}

	if(callback)
		callback();

	return true;
}
示例#16
0
文件: pdckbd.c 项目: B-Rich/coreboot
int PDC_get_key(void)
{
    int c = 0;

#ifdef CONFIG_USB_HID
    usb_poll();
    if ((curses_flags & F_ENABLE_CONSOLE) &&
        usbhid_havechar()) {
        c = usbhid_getchar();
    }
#endif

#ifdef CONFIG_PC_KEYBOARD
    if ((curses_flags & F_ENABLE_CONSOLE) &&
        keyboard_havechar() && (c==0)) {
        c = keyboard_getchar();
    }
#endif

#ifdef CONFIG_SERIAL_CONSOLE
    if ((curses_flags & F_ENABLE_SERIAL) &&
        serial_havechar() && (c==0)) {
        c = cook_serial(serial_getchar());
    }
#endif

    SP->key_code = FALSE;

    if (c == 0) {
        c = ERR;
    }
    if (c >= KEY_MIN) {
        SP->key_code = TRUE;
    }

    return c;
}
示例#17
0
short console_getline(console_color_t color, char *str, unsigned short *len) {
  unsigned short i=0;
  char c;
  unsigned char c233 = vga_color233(vga_console_color(color));

  while (i < *len-1) {
    if ((sysio[0] & 0x2) == 0x2)
      c = keyboard_getchar();
    else
      c = serial_getchar(0);
    if (c >= ' ' && c <= '~') {
      if ((sysio[0] & 0x2) == 0x2)
	vga_putchar(c233,c);
      else
	serial_putchar(0, c);
      str[i++] = c;
    }
    if (c == '\r' || c == '\n') {
      str[i] = '\0';
      return i;
    }
    if (c == 0x03) {
      str[0] = '\0';
      return -1;
    }
    if ((c == 0x7f || c == 0x08) && i > 0) {
      if ((sysio[0] & 0x2) == 0x2)
	vga_putchar(c233, c);
      else
	serial_putchar(0, c);
      i--;
    }
  }
  str[i+1] = '\0';
  return i;
}
示例#18
0
文件: main.c 项目: esar/hdmilight-v1
char readcmd(char** argv, char maxargs)
{
	static char cmdbuf[256] = {0, 0};
	static unsigned char current = 0;
	unsigned char history = 0;
	unsigned char pos = current + 1;
	unsigned char end = current + 2;
	unsigned char arg;

	while(1)
	{
		int c = serial_getchar();
		if(c == -1)
			continue;

		switch(c)
		{
			case 0x1B:
				while((c = serial_getchar()) == -1)
					;
				if(c == '[')
				{
					while((c = serial_getchar()) == -1)
						;
					switch(c)
					{
						case 'A': goto UP;
						case 'B': goto DOWN;
						case 'C': goto RIGHT;
						case 'D': goto LEFT;
					}
				}
				break;
			LEFT:
			case 0x02: // left
				if(pos - 1 != current)
				{
					--pos;
					printf("\x1B[D"); // move left
				}
				else
					serial_putchar(BELL);
				break;
			case 0x08: // backspace
			case 0x7f:
				if(pos > 0)
				{
					memmove(cmdbuf + pos - 1, cmdbuf + pos, end - pos);
					--pos; --end;
					printf("\x1B[D%s \x1B[%dD", cmdbuf + pos, end - pos); // move left
				}
				else
					serial_putchar(BELL);
				break;
			RIGHT:
			case 0x06: // right
				if(pos + 1 != end)
				{
					++pos;
					printf("\x1B[C"); // move right
				}
				else
					serial_putchar(BELL);
				break;
			case '\n':
			case '\r':
				goto DONE;
			UP:
			case 0x10:
				if(1)
				{
					unsigned char p = current;
					unsigned char len = 0;
					unsigned char i;

					for(i = 0; i < history + 1; ++i)
					{
						len = cmdbuf[p];
						if(len == 0)
							break;
						p -= len;
					}
					if(i == history + 1)
					{
						++history;
						for(i = 0; i < len - 1; ++i)
							cmdbuf[current + 1 + i] = (cmdbuf[p + 1 + i] == '\0' ? 
							                           ' ' : cmdbuf[p + 1 + i]);
						cmdbuf[current + len - 1] = '\0';
						printf(" \x1B[%dD%s", pos - current, cmdbuf + current + 1);
						if(end - (current + len) > 0)
							printf("%*s\x1B[%dD", end - (current + len), "", end - (current + len));
						end = current + len;
						pos = end - 1;
					}
					else
						serial_putchar(BELL);
				}
				break;
			DOWN:
			case 0x0E:
				if(history > 1)
				{
					unsigned char p = current;
					unsigned char len;
					unsigned char i;

					--history;
					for(i = 0; i < history; ++i)
					{
						len = cmdbuf[p];
						if(len == 0)
							break;
						p -= len;
					}

					for(i = 0; i < len - 1; ++i)
						cmdbuf[current + 1 + i] = (cmdbuf[p + 1 + i] == '\0' ? 
									   ' ' : cmdbuf[p + 1 + i]);
					cmdbuf[current + len - 1] = '\0';
					printf(" \x1B[%dD%s", pos - current, cmdbuf + current + 1);
					if(end - (current + len) > 0)
						printf("%*s\x1B[%dD", end - (current + len), "", end - (current + len));
					end = current + len;
					pos = end - 1;
				}
				else if(history == 1)
				{
				}
				else
					serial_putchar(BELL);
				break;
			default:
				if(end + 1 != current)
				{
					int i;
					for(i = end; i > pos; --i)
						cmdbuf[i] = cmdbuf[i - 1];
					cmdbuf[pos] = c;
					printf("%s \x1B[%dD", cmdbuf + pos, end - pos);
					++pos;
					++end;

				}
				else
					serial_putchar(BELL);
				break;
		}
	}

DONE:
	pos = current + 1;
	for(arg = 0; arg < maxargs; ++arg)
	{
		if(cmdbuf[pos] == '\0')
			break; 

		while(cmdbuf[pos] == ' ')
			cmdbuf[pos++] = '\0';

		argv[arg] = cmdbuf + pos;

		while(cmdbuf[pos] != ' ' && cmdbuf[pos] != '\0')
			++pos;
	}
	
	cmdbuf[end] = end - current;
	cmdbuf[end + 1] = '\0';
	current = end;
	
	return arg;
}
示例#19
0
int ubreadline_into_buffer(const char *const prompt, char *buffer, int timeout)
{
	char *p = buffer;
	unsigned int len = CONFIG_SYS_CBSIZE;
	int rc;
	static int initted = 0;

	/*
	 * History uses a global array which is not
	 * writable until after relocation to RAM.
	 * Revert to non-history version if still
	 * running from flash.
	 */
	if (0) {
		if (!initted) {
			hist_init();
			initted = 1;
		}

		if (prompt)
			printf (prompt);

		rc = cread_line(prompt, p, &len, timeout);
		return rc < 0 ? rc : len;

	} else {
	char * p_buf = p;
	int	n = 0;				/* buffer index		*/
	int	plen = 0;			/* prompt length	*/
	int	col;				/* output column cnt	*/
	char	c;

	/* print prompt */
	if (prompt) {
		plen = strlen (prompt);
		printf (prompt);
	}
	col = plen;

	for (;;) {

		c = serial_getchar();

		/*
		 * Special character handling
		 */
		switch (c) {
		case '\r':			/* Enter		*/
		case '\n':
			*p = '\0';
			printf ("\r\n");
			return p - p_buf;

		case '\0':			/* nul			*/
			continue;

		case 0x03:			/* ^C - break		*/
			p_buf[0] = '\0';	/* discard input */
			return -1;

		case 0x15:			/* ^U - erase line	*/
			while (col > plen) {
				printf (erase_seq);
				--col;
			}
			p = p_buf;
			n = 0;
			continue;

		case 0x17:			/* ^W - erase word	*/
			p=delete_char(p_buf, p, &col, &n, plen);
			while ((n > 0) && (*p != ' ')) {
				p=delete_char(p_buf, p, &col, &n, plen);
			}
			continue;

		case 0x08:			/* ^H  - backspace	*/
		case 0x7F:			/* DEL - backspace	*/
			p=delete_char(p_buf, p, &col, &n, plen);
			continue;

		default:
			/*
			 * Must be a normal character then
			 */
			if (n < CONFIG_SYS_CBSIZE-2) {
				if (c == '\t') {	/* expand TABs */
					/* if auto completion triggered just continue */
					*p = '\0';
					if (cmd_auto_complete(prompt, console_buffer, &n, &col)) {
						p = p_buf + n;	/* reset */
						continue;
					}
					printf (tab_seq+(col&07));
					col += 8 - (col&07);
				} else {
					char buf[2];

					/*
					 * Echo input using printf() to force an
					 * LCD flush if we are using an LCD
					 */
					++col;
					buf[0] = c;
					buf[1] = '\0';
					printf(buf);
				}
				*p++ = c;
				++n;
			} else {			/* Buffer full		*/
				serial_putchar('\a');
			}
		}
	}
	}
}
示例#20
0
int
main(void)
{
	watchdog_off();
	clock_init_1MHz();

	port1_direction = 0xFC; // 1111 1011 --> p1.2 is Rx
  port2_direction = 0xFF; // 1111 1111
  port1_output   &= 0x00; // turn off motors or it'll heat up!
  port2_output   &= 0x00; // turn off motors or it'll heat up!

  delay(0xffff); // wait for initialization or something

	/* initialize serial clock, tx and rx parts */
	serial_init_clock();
	serial_init_tx();
	serial_init_rx();

	/* enable interrupts */
	__eint();

	while (1) {
	  unsigned int i;
    unsigned char c;

    c = serial_getchar();
    //debug_char(c);

    if (c == 'o') { // open
      flash();
      for (i=0; i<ROTATE_AMOUNT; i++) {
        port1_output = 0x20; // 0010 0000
        port2_output = 0x05; // 0000 0101
        delay(DELAY);
        port1_output = 0x28; // 0010 1000
        port2_output = 0x04; // 0000 0100
        delay(DELAY);
        port1_output = 0x20; // 0010 0000
        port2_output = 0x06; // 0000 0110
        delay(DELAY);
        port1_output = 0x30; // 0011 0000
        port2_output = 0x04; // 0000 0100
        delay(DELAY);
      }
      port1_output &= 0x00; // turn off motors!
      port2_output &= 0x00; // turn off motors!
    }

    else if (c == 'c') { // close
      flash();
      flash();
      for (i=0; i<ROTATE_AMOUNT; i++) {
        port1_output = 0x30; // 0011 0000
        port2_output = 0x04; // 0000 0100
        delay(DELAY);
        port1_output = 0x20; // 0010 0000
        port2_output = 0x06; // 0000 0110
        delay(DELAY);
        port1_output = 0x28; // 0010 1000
        port2_output = 0x04; // 0000 0100
        delay(DELAY);
        port1_output = 0x20; // 0010 0000
        port2_output = 0x05; // 0000 0101
        delay(DELAY);
      }
      port1_output &= 0x00; // turn off motors!
      port2_output &= 0x00; // turn off motors!
    }

	}
}