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

📄 stty.c

📁 MIPS下的boottloader yamon 的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
	sprintf( msg, "Stored: " );
    else
	*msg = '\0';

    strcat( msg, "baudrate=" );
    env_baudrate_num2s( baudrate, &s );
    strcat( msg, s );

    strcat( msg, ", parity=" );
    env_parity_num2s( parity, &s );
    strcat( msg, s );

    strcat( msg, ", databits=" );
    env_databits_num2s( databits, &s );
    strcat( msg, s );

    strcat( msg, ", stopbits=" );
    env_stopbits_num2s( stopbits, &s );
    strcat( msg, s );

    strcat( msg, ", flowcontrol=" );
    env_flowctrl_num2s( flowctrl, &s );
    strcat( msg, s );

    strcat( msg, "\n" );

    if( SHELL_PUTS( msg ) ) return OK;


    if( (action & ACTION_READ) == 0 )
    {	
        /******************************
        ** move settings to "CURRENT"
        */

	if( port == PORT_TTY0 )
	{
            SYSCON_write( SYSCON_COM_TTY0_BAUDRATE_ID,
		   	  (void *)&baudrate, 
			  sizeof( UINT8 ) );

            SYSCON_write( SYSCON_COM_TTY0_PARITY_ID,
		   	  (void *)&parity, 
			  sizeof( UINT8 ) );

            SYSCON_write( SYSCON_COM_TTY0_DATABITS_ID,
		   	  (void *)&databits, 
			  sizeof( UINT8 ) );

            SYSCON_write( SYSCON_COM_TTY0_STOPBITS_ID,
		   	  (void *)&stopbits, 
			  sizeof( UINT8 ) );
	}
	else
	{
            SYSCON_write( SYSCON_COM_TTY1_BAUDRATE_ID,
	  	          (void *)&baudrate, 
			  sizeof( UINT8 ) );

            SYSCON_write( SYSCON_COM_TTY1_PARITY_ID,
		   	  (void *)&parity, 
			  sizeof( UINT8 ) );

            SYSCON_write( SYSCON_COM_TTY1_DATABITS_ID,
		   	  (void *)&databits, 
			  sizeof( UINT8 ) );

            SYSCON_write( SYSCON_COM_TTY1_STOPBITS_ID,
		   	  (void *)&stopbits, 
			  sizeof( UINT8 ) );
	}
	    
        /*******************************
        ** apply "CURRENT" settings 
        */

	re_init_port(port);
    }

    return OK;
}


/************************************************************************
 *                          re_init_port
 ************************************************************************/
static void
re_init_port(
    UINT32 port )
{
    /* Reinitialise device in order for the settings 
     * to take effect.
     */
 
    UINT32 major, minor;

    SYSCON_read( (port == PORT_TTY0) ?
		     SYSCON_COM_TTY0_MAJOR : SYSCON_COM_TTY1_MAJOR,
	         (void *)(&major),
		 sizeof(UINT32) );

    SYSCON_read( (port == PORT_TTY0) ? 
		     SYSCON_COM_TTY0_MINOR : SYSCON_COM_TTY1_MINOR,
		 (void *)(&minor),
		 sizeof(UINT32) );

    if( port == DEFAULT_PORT )
    {
        SHELL_PUTS( "Reconfigure terminal program\n" );
        sys_wait_ms( 100 );
    }

    IO_init( major, minor, (void *)&port );
}


/************************************************************************
 *                          get_options
 *
 *  stty [-tty0|-tty1] [-b|-u| [-p][<baudrate>][n|o|e][7|8][1|2] ]
 *  legal syntaxes:      Action:           Output:
 *    stty * -b          _READ | _LIST     baud rate possibilities
 *    stty * -u          _UPDATE           new settings + "Reconfigure..."
 *    stty *             _READ             settings
 *    stty * -p          _READ | _STORE    settings
 *    stty * -p <parm>   _STORE            new settings + "Reconfigure..."
 *    stty * <parm>      0                 "Reconfigure terminal program"
 *    b <baudrate>       0                 "Reconfigure terminal program"
 *
 ************************************************************************/
static UINT32
get_options(
    UINT32 argc,
    char   **argv,
    UINT8  *action,
    UINT8  *port,
    UINT8  *baudrate,
    UINT8  *parity,
    UINT8  *databits,
    UINT8  *stopbits,
    bool   sdb )
{
    char   *token;
    bool   ok             = TRUE;
    bool   baudrate_valid = FALSE;
    bool   parity_valid   = FALSE;
    bool   databits_valid = FALSE;
    bool   stopbits_valid = FALSE;
    UINT32 arg;
    UINT32 error = SHELL_ERROR_SYNTAX;

    /* Setup defaults */
    *action   = ACTION_READ;
    *port     = DEFAULT_PORT;

    for( arg = 1; 
	          ok && 
	          (arg < argc) && 
		  (token = argv[arg]);
         arg++ )
    {
	 if( env_baudrate_s2num( token, baudrate, sizeof(UINT8)))
	 {             *action &= ~ACTION_READ;
             ok = !baudrate_valid;
             baudrate_valid = TRUE;
	 }
	 else if( sdb )
	 {
            if( *token == '-' )
	    {
	        error            = SHELL_ERROR_OPTION;
		shell_error_data = token;
		ok		 = FALSE;
	    }
         }
	 else if( strcmp( token, "-tty0" ) == 0 )
	 {
	     *port = PORT_TTY0;
	 }
	 else if( strcmp( token, "-tty1" ) == 0 )
	 {
	     *port = PORT_TTY1;
	 }
	 else if( strcmp( token, "-b" ) == 0 )
	 {
	     *action |= ACTION_LIST;
	 }
         else if( strcmp( token, "-u" ) == 0 )
	 {
             /* ACTION_READ is cleared below - after syntax checking */
	     *action |= ACTION_UPDATE;
	 }
         else if( strcmp( token, "-p" ) == 0 )
	 {
	     *action |= ACTION_STORE;
	 }
	 else if( env_parity_s2num( token, parity, sizeof(UINT8)))
	 {
             *action &= ~ACTION_READ;
             ok = !parity_valid;
             parity_valid = TRUE;
	 }
	 else if( env_databits_s2num( token, databits, sizeof(UINT8)))
	 {
             *action &= ~ACTION_READ;
             ok = !databits_valid;
             databits_valid = TRUE;
	 }
	 else if( env_stopbits_s2num( token, stopbits, sizeof(UINT8)))
	 {
             *action &= ~ACTION_READ;
             ok = !stopbits_valid;
             stopbits_valid = TRUE;
	 }
	 else
	 {
	    ok = FALSE;
	   
            if( *token == '-' )
	    {
	        error            = SHELL_ERROR_OPTION;
		shell_error_data = token;
	    }
	 }
    }

    /* Syntax check: Allow only legal combinations of options */
    if( sdb )
    {
        if (!(*action == 0 ) )
            ok = FALSE;
    }
    else
    {
        if (!(*action == 0 ||
              *action == (ACTION_READ)  ||
              *action == (ACTION_READ|ACTION_LIST)  ||
              *action == (ACTION_READ|ACTION_STORE)  ||
              *action == (ACTION_READ|ACTION_UPDATE)  ||
              *action == (ACTION_STORE) ) )
            ok = FALSE;
    }

    /* modify temporary action value used for syntax check */
    if (*action == (ACTION_READ|ACTION_UPDATE))
        *action &= ~ACTION_READ;

    if( !ok )
        return error;

    if( baudrate_valid )
    {
        /*  Validate baudrate for specific port.
         *  If the following write operation fails, the baudrate is
	 *  not supported.
	 */
	if( SYSCON_write( (*port == PORT_TTY0) ?
		              SYSCON_COM_TTY0_BAUDRATE_VERIFY_ID :
			      SYSCON_COM_TTY1_BAUDRATE_VERIFY_ID,
		          (void *)baudrate, sizeof(UINT8) ) != OK )
        {
	    return SHELL_ERROR_BAUDRATE;
	}
    }
    else
    {
        SYSCON_read( (*port == PORT_TTY0) ?
		          SYSCON_COM_TTY0_BAUDRATE_ID :
		          SYSCON_COM_TTY1_BAUDRATE_ID,
		     (void *)baudrate, sizeof(UINT8) );
    }

    if( !parity_valid )
    {
        SYSCON_read( (*port == PORT_TTY0) ?
		          SYSCON_COM_TTY0_PARITY_ID :
		          SYSCON_COM_TTY1_PARITY_ID,
		     (void *)parity, sizeof(UINT8) );
    }

    if( !databits_valid )
    {
        SYSCON_read( (*port == PORT_TTY0) ?
		          SYSCON_COM_TTY0_DATABITS_ID :
		          SYSCON_COM_TTY1_DATABITS_ID,
		     (void *)databits, sizeof(UINT8) );
    }

    if( !stopbits_valid )
    {
        SYSCON_read( (*port == PORT_TTY0) ?
		          SYSCON_COM_TTY0_STOPBITS_ID :
		          SYSCON_COM_TTY1_STOPBITS_ID,
		     (void *)stopbits, sizeof(UINT8) );
    }
    
    return ok ? OK : error;
}



/************************************************************************
 *  Implementation : Public functions
 ************************************************************************/

/************************************************************************
 *
 *                          shell_stty_init
 *  Description :
 *  -------------
 *
 *  Initialise command
 *
 *  Return values :
 *  ---------------
 *
 *  void
 *
 ************************************************************************/
t_cmd *
shell_stty_init( void )
{
    return &cmd_def;
}

/************************************************************************
 *
 *                          shell_stty_sdb_init
 *  Description :
 *  -------------
 *
 *  Initialise command
 *
 *  Return values :
 *  ---------------
 *
 *  void
 *
 ************************************************************************/
t_cmd *
shell_stty_sdb_init( void )
{
    return &cmd_def_sdb_lower;
}

⌨️ 快捷键说明

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