⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 init.c

📁 RTEMS (Real-Time Executive for Multiprocessor Systems) is a free open source real-time operating sys
💻 C
📖 第 1 页 / 共 2 页
字号:
    printf( "\tCBAUDEX clear: What does this do?\n" );#endif    if( tp->c_cflag & CRTSCTS )    printf( "\tCRTSCTS: harware flow control enabled?\n" );  else    printf( "\tCRTSCTS: hardware flow control disabled?\n" );}void print_c_cc( struct termios * tp ){  int i;  char * cc_index_names [NCCS] = {    "[VINTR]   ",   /* 0 */    "[VQUIT]   ",   /* 1 */    "[VERASE]  ",   /* 2 */    "[VKILL]   ",   /* 3 */    "[VEOF]    ",   /* 4 */    "[VTIME]   ",   /* 5 */    "[VMIN]    ",   /* 6 */    "[VSWTC    ",   /* 7 */    "[VSTART]  ",   /* 8 */    "[VSTOP]   ",   /* 9 */    "[VSUSP]   ",   /* 10 */    "[VEOL]    ",   /* 11 */    "[VREPRINT]",   /* 12 */    "[VDISCARD]",   /* 13 */    "[VWERASE] ",   /* 14 */    "[VLNEXT   ",   /* 15 */    "[VEOL2]   ",   /* 16 */    "unknown   ",   /* 17 */    "unknown   ",   /* 18 */  };  for( i = 0; i < NCCS; i++ ) {    printf( "c_cc%s = 0x%08x\n", cc_index_names[i], tp->c_cc[i] );  }}void print_termios( struct termios *tp ){  printf( "\nLooking at the current termios settings:\n\n" );  print_c_iflag( tp );  print_c_oflag( tp );  print_c_cflag( tp );  print_c_lflag( tp );  print_c_cc( tp );  printf( "\n" );}unsigned long get_baud_rate( void ){  unsigned long baud_rate;    while( TRUE ) {    printf( "Enter the numerical value for the new baud rate.\n" );    printf( "Choices are: 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800\n" );    printf( "2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800\n" );    printf( "\nYour choice: " );    scanf( "%lu", &baud_rate );    printf( "\n" );    switch( baud_rate ) {      case 50:     return B50;      case 75:     return B75;      case 110:    return B110;      case 134:    return B134;      case 150:    return B150;      case 200:    return B200;      case 300:    return B300;      case 600:    return B600;      case 1200:   return B1200;      case 1800:   return B1800;      case 2400:   return B2400;      case 4800:   return B4800;      case 9600:   return B9600;      case 19200:  return B19200;      case 38400:  return B38400;      case 57600:  return B57600;      case 115200: return B115200;      case 230400: return B230400;      case 460800: return B460800;      default:        printf( "%lu is not a valid choice. Try again.\n\n", baud_rate );        break;    }  }}unsigned long get_parity(){  int parity;    while( TRUE ) {    printf( "Enter the numerical value for the new parity\n" );    printf( "Choices are: 0 for no parity, 1 for even parity, 2 for odd parity\n" );    printf( "\nYour choice: " );    scanf( "%d", &parity );    printf( "\n" );    switch( parity ) {      case 0:        return 0;      case 1:        return PARENB;      case 2:        return PARENB | PARODD;      default:        printf( "%d is not a valid choice. Try again.\n\n", parity );        break;    }  }}unsigned long get_stop_bits(){  int stop_bits;  while( TRUE ) {    printf( "Enter the numerical value for the new number of stop bits\n" );    printf( "Choices are: 1 or 2\n" );    printf( "\nYour choice: " );    scanf( "%d", &stop_bits );    printf( "\n" );    switch( stop_bits ) {      case 1:        return 0;              case 2:        return CSTOPB;      default:        printf( "%d is not a valid choice. Try again.\n\n", stop_bits );        break;    }  }}unsigned long get_data_bits(){  int data_bits;  while( TRUE ) {    printf( "Enter the numerical value for the new number of data bits\n" );    printf( "Choices are: 5, 6, 7 or 8\n" );    printf( "\nYour choice: " );    scanf( "%d", &data_bits );    printf( "\n" );    switch( data_bits ) {      case 5:        return CS5;              case 6:        return CS6;              case 7:        return CS7;              case 8:        return CS8;      default:        printf( "%d is not a valid choice. Try again.\n\n", data_bits );        break;    }  }}void change_line_settings( struct termios *tp ){  unsigned long baud_rate, parity, stop_bits, data_bits, sleep_time;      printf( "\nSetting line characteristics\n\n" );    baud_rate = get_baud_rate();  parity = get_parity();  stop_bits = get_stop_bits();  data_bits = get_data_bits();  printf( "NOTE: You will not see output until you switch your terminal settings!\n" );  printf( "WARNING: If you do not switch your terminal settings, your terminal may hang.\n" );  printf( "Enter the number of seconds the test will wait for you to switch your terminal\n" );  printf( "settings before it continues\n" );  printf( "Sleep time (in seconds): " );  scanf( "%lu", &sleep_time );  printf( "\n" );  printf( "Setting line to new termios settings in %lu seconds.\n", sleep_time );  sleep( sleep_time );    tp->c_cflag = CLOCAL | CREAD | parity | stop_bits | data_bits | baud_rate;  if( tcsetattr( fileno( stdin ), TCSADRAIN, tp ) < 0 ) {    perror( "change_line_settings(): tcsetattr() failed" );    rtems_test_exit( 1 );  }  printf( "Line settings set.\n" );}void canonical_input( struct termios *tp ){  char c, first_time = TRUE;      printf( "\nTesting canonical input\n\n" );  printf( "Setting line to canonical input mode.\n" );  tp->c_lflag = ISIG | ICANON | ECHO | ECHONL | ECHOK | ECHOE | ECHOPRT | ECHOCTL | IEXTEN;   tp->c_iflag = BRKINT | ICRNL | IXON | IMAXBEL;  if( tcsetattr( fileno( stdin ), TCSADRAIN, tp ) < 0 ) {    perror( "canonical_input(): tcsetattr() failed" );    rtems_test_exit( 1 );  }    while ( ( c = getchar () ) != '\n');  printf( "Testing getchar(). Type some text followed by carriage return\n" );  printf( "Each character you entered will be echoed back to you\n\n" );  while ( ( c = getchar () ) != '\n') {    if( first_time ) {      printf( "\nYou typed:\n");      first_time = FALSE;    }    printf( "%c", c );  }  printf( "\n\nCanonical input test done.\n" );}/* * Test raw (ICANON=0) input */void do_raw_input( int vmin, int vtime ){  int i;  struct termios old, new;  rtems_interval ticksPerSecond, then, now;  unsigned int msec;  unsigned long count;  int nread;  unsigned char cbuf[100];  printf( "Raw input test with VMIN=%d  VTIME=%d\n", vmin, vtime );    rtems_clock_get( RTEMS_CLOCK_GET_TICKS_PER_SECOND, &ticksPerSecond );  if ( tcgetattr( fileno ( stdin ), &old ) < 0 ) {    perror( "do_raw_input(): tcgetattr() failed" );    return;  }    new = old;  new.c_lflag &= ~( ICANON | ECHO | ECHONL | ECHOK | ECHOE | ECHOPRT | ECHOCTL );  new.c_cc[VMIN] = vmin;  new.c_cc[VTIME] = vtime;  if( tcsetattr( fileno( stdin ), TCSADRAIN, &new ) < 0 ) {    perror ("do_raw_input(): tcsetattr() failed" );    return;  }    do {    rtems_clock_get( RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &then );    count = 0;    for(;;) {      nread = read( fileno( stdin ), cbuf, sizeof cbuf );      if( nread < 0 ) {        perror( "do_raw_input(): read() failed" );        goto out;      }      count++;      if( nread != 0 )        break;    }    rtems_clock_get( RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &now );    msec = (now - then) * 1000 / ticksPerSecond;    printf( "Count:%-10lu  Interval:%3u.%3.3d  Char:",          count, msec / 1000, msec % 1000 );              for( i = 0 ; i < nread ; i++ )      printf (" 0x%2.2x", cbuf[i]);    printf ("\n");      } while( cbuf[0] != 'q' );  out:  if( tcsetattr( fileno( stdin ), TCSADRAIN, &old) < 0 )    perror("do_raw_input(): tcsetattr() failed: %s\n" );      printf ("*** End of Raw input  VMIN=%d  VTIME=%d ***\n", vmin, vtime);}static void raw_input( struct termios *tp ){  printf( "\nTesting raw input input\n\n" );  printf( "Hit 'q' to terminate the test\n" );  do_raw_input( 0, 0 );  do_raw_input( 0, 20 );  do_raw_input( 5, 0 );  do_raw_input( 5, 20 );    printf( "\nRaw input test done.\n" );}void usage( void ){  printf( "\nYou have the following choices:\n" );  printf( "  1 - Reset the struct termios\n" );  printf( "  2 - Look at the current termios setting\n" );  printf( "  3 - Change the line characteristics\n" );  printf( "  4 - Test canonical input\n" );  printf( "  5 - Test raw input\n" );  printf( "  9 - Exit\n" );  printf( "Enter your choice (1 to 5 or 9, followed by a carriage return): " );}/* * RTEMS Startup Task */rtems_taskInit (rtems_task_argument ignored){  char c ;  struct termios orig_termios, test_termios;    printf( "\n\n*** TEST OF TERMIOS INPUT CAPABILITIES ***\n" );  if( tcgetattr( fileno( stdin ), &orig_termios ) < 0 ) {    perror( "tcgetattr() failed" );    rtems_test_exit( 0 );  }  test_termios = orig_termios;  usage();  for(;;) {    switch( c = getchar() ) {      case '1':        printf( "\nResetting the line to the original termios setting\n\n" );        test_termios = orig_termios;        if( tcsetattr( fileno( stdin ), TCSADRAIN, &test_termios ) < 0 ) {          perror( "tcsetattr() failed" );          rtems_test_exit( 1 );        }        usage();        break;      case '2':        print_termios( &test_termios );        usage();        break;      case '3':        change_line_settings( &test_termios );        usage();        break;      case '4':        canonical_input( &test_termios );        usage();        break;      case '5':        raw_input( &test_termios );        usage();        break;      case '9':        rtems_test_exit( 1 );      case '\n':        break;                default:        printf( "\n%c is not a valid choice. Try again\n\n", c );        usage();        break;    }  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -