summaryrefslogtreecommitdiff
path: root/wl1271/CUDK/configurationutility/src/console.c
diff options
context:
space:
mode:
Diffstat (limited to 'wl1271/CUDK/configurationutility/src/console.c')
-rw-r--r--wl1271/CUDK/configurationutility/src/console.c1073
1 files changed, 0 insertions, 1073 deletions
diff --git a/wl1271/CUDK/configurationutility/src/console.c b/wl1271/CUDK/configurationutility/src/console.c
deleted file mode 100644
index ef645da..0000000
--- a/wl1271/CUDK/configurationutility/src/console.c
+++ /dev/null
@@ -1,1073 +0,0 @@
-/*
- * console.c
- *
- * Copyright 2001-2009 Texas Instruments, Inc. - http://www.ti.com/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/****************************************************************************
-*
-* MODULE: console.c
-*
-* PURPOSE:
-*
-* DESCRIPTION:
-* ============
-*
-*
-****************************************************************************/
-
-/* includes */
-/************/
-#include <stdio.h>
-#include "cu_osapi.h"
-#include "console.h"
-#include "cu_cmd.h"
-
-/* defines */
-/***********/
-#define INBUF_LENGTH 2100
-#define MAX_NAME_LEN 64
-#define MAX_HELP_LEN 40
-#define MAX_PARM_LEN 20
-#define ALIAS_LEN 1
-
-#define TOKEN_UP ".."
-#define TOKEN_ROOT "/"
-#define TOKEN_BREAK "#"
-#define TOKEN_HELP "?"
-#define TOKEN_DIRHELP "help"
-#define TOKEN_QUIT "q1"
-
-/* local types */
-/***************/
-
-typedef enum
-{
- Dir,
- Token
-} ConEntry_type_t;
-
-/* Token types */
-typedef enum
-{
- EmptyToken,
- UpToken,
- RootToken,
- BreakToken,
- HelpToken,
- DirHelpToken,
- QuitToken,
- NameToken
-} TokenType_t;
-
-
-/* Monitor token structure */
-typedef struct ConEntry_t
-{
- struct ConEntry_t *next;
- S8 name[MAX_NAME_LEN+1]; /* Entry name */
- S8 help[MAX_HELP_LEN+1]; /* Help string */
- PS8 alias; /* Alias - always in upper case*/
- ConEntry_type_t sel; /* Entry selector */
-
- union
- {
- struct
- {
- struct ConEntry_t *upper; /* Upper directory */
- struct ConEntry_t *first; /* First entry */
- } dir;
- struct t_Token
- {
- FuncToken_t f_tokenFunc; /* Token handler */
- S32 totalParams;
- ConParm_t *parm; /* Parameters array with totalParams size */
- PS8 *name; /* Parameter name with totalParams size */
- } token;
- } u;
-} ConEntry_t;
-
-/* Module control block */
-typedef struct Console_t
-{
- THandle hCuCmd;
-
- S32 isDeviceOpen;
-
- ConEntry_t *p_mon_root;
- ConEntry_t *p_cur_dir;
- PS8 p_inbuf;
- volatile S32 stop_UI_Monitor;
-} Console_t;
-
-/* local variables */
-/*******************/
-
-/* local fucntions */
-/*******************/
-static VOID Console_allocRoot(Console_t* pConsole);
-int consoleRunScript( char *script_file, THandle hConsole);
-
-
-/* Remove leading blanks */
-static PS8 Console_ltrim(PS8 s)
-{
- while( *s == ' ' || *s == '\t' ) s++;
- return s;
-}
-
-/*
-Make a preliminary analizis of <name> token.
-Returns a token type (Empty, Up, Root, Break, Name)
-*/
-static TokenType_t Console_analizeToken( PS8 name )
-{
- if (!name[0])
- return EmptyToken;
-
- if (!os_strcmp(name, (PS8)TOKEN_UP ) )
- return UpToken;
-
- if (!os_strcmp(name, (PS8)TOKEN_ROOT ) )
- return RootToken;
-
- if (!os_strcmp(name, (PS8)TOKEN_BREAK ) )
- return BreakToken;
-
- if (!os_strcmp(name, (PS8)TOKEN_HELP ) )
- return HelpToken;
-
- if (!os_strcmp(name, (PS8)TOKEN_DIRHELP ) )
- return DirHelpToken;
-
- if (!os_strcmp(name, (PS8)TOKEN_QUIT ) )
- return QuitToken;
-
- return NameToken;
-
-}
-
-/* Compare strings case insensitive */
-static S32 Console_stricmp( PS8 s1, PS8 s2, U16 len )
-{
- S32 i;
-
- for( i=0; i<len && s1[i] && s2[i]; i++ )
- {
- if (os_tolower(s1[i]) != os_tolower(s2[i] ))
- break;
- }
-
- return ( (len - i) * (s1[i] - s2[i]) );
-}
-
-/* Convert string s to lower case. Return pointer to s */
-static PS8 Console_strlwr( PS8 s )
-{
- PS8 s0=s;
-
- while( *s )
- {
- *s = (S8)os_tolower(*s );
- ++s;
- }
-
- return s0;
-}
-
-/* free the entries tree */
-static VOID Console_FreeEntry(ConEntry_t *pEntry)
-{
- ConEntry_t *pEntryTemp,*pEntryTemp1;
-
- if(pEntry->sel == Dir)
- {
- pEntryTemp = pEntry->u.dir.first;
-
- while (pEntryTemp)
- {
- pEntryTemp1 = pEntryTemp->next;
- Console_FreeEntry(pEntryTemp);
- pEntryTemp = pEntryTemp1;
- }
- }
-
- /* free the current entry */
- os_MemoryFree(pEntry);
-}
-
-
-/* Allocate root directory */
-static VOID Console_allocRoot(Console_t* pConsole)
-{
- /* The very first call. Allocate root structure */
- if ((pConsole->p_mon_root=(ConEntry_t *)os_MemoryCAlloc(sizeof( ConEntry_t ), 1) ) == NULL)
- {
- os_error_printf(CU_MSG_ERROR, (PS8)( "ERROR - Console_allocRoot(): cant allocate root\n") );
- return;
- }
- os_strcpy((PS8)pConsole->p_mon_root->name, (PS8)("\\") );
- pConsole->p_mon_root->sel = Dir;
- pConsole->p_cur_dir = pConsole->p_mon_root;
-}
-
-/* Display current directory */
-static VOID Console_displayDir(Console_t* pConsole)
-{
- S8 out_buf[512];
- ConEntry_t *p_token;
- ConEntry_t *p_dir = pConsole->p_cur_dir;
-
- os_sprintf((PS8)out_buf, (PS8)("%s%s> "), (PS8)(p_dir==pConsole->p_mon_root)? (PS8)("") : (PS8)(".../"), (PS8)p_dir->name );
- p_token = p_dir->u.dir.first;
- while( p_token )
- {
- if( (os_strlen(out_buf) + os_strlen(p_token->name) + 2)>= sizeof(out_buf) )
- {
- os_error_printf(CU_MSG_ERROR, ( (PS8)"ERROR - Console_displayDir(): buffer too small....\n") );
- break;
- }
- os_strcat(out_buf, p_token->name );
- if ( p_token->sel == Dir )
- os_strcat((PS8)out_buf, (PS8)("/" ) );
- p_token = p_token->next;
- if (p_token)
- os_strcat((PS8)out_buf, (PS8)(", ") );
- }
-
- os_error_printf(CU_MSG_INFO2, (PS8)("%s\n"), (PS8)out_buf );
-}
-
-
-/*
-Cut the first U16 from <p_inbuf>.
-Return the U16 in <name> and updated <p_inbuf>
-*/
-static TokenType_t Console_getWord(Console_t* pConsole, PS8 name, U16 len )
-{
- U16 i=0;
- TokenType_t tType;
-
- pConsole->p_inbuf = Console_ltrim(pConsole->p_inbuf);
-
- while( *pConsole->p_inbuf && *pConsole->p_inbuf!=' ' && i<len )
- name[i++] = *(pConsole->p_inbuf++);
-
- if (i<len)
- name[i] = 0;
-
- tType = Console_analizeToken( name );
-
- return tType;
-}
-
-static TokenType_t Console_getStrParam(Console_t* pConsole, PS8 buf, ConParm_t *param )
-{
- TokenType_t tType;
- U32 i, len = param->hi_val;
- PS8 end_buf;
-
- pConsole->p_inbuf = Console_ltrim(pConsole->p_inbuf);
-
- if( param->flags & CON_PARM_LINE )
- {
- os_strcpy(buf, (PS8)pConsole->p_inbuf );
- pConsole->p_inbuf += os_strlen(pConsole->p_inbuf);
- }
- else
- {
- if( *pConsole->p_inbuf == '\"' )
- {
- end_buf = os_strchr(pConsole->p_inbuf+1, '\"' );
- if( !end_buf )
- {
- os_error_printf(CU_MSG_ERROR, (PS8)("ERROR - invalid string param: '%s'\n"), (PS8)pConsole->p_inbuf );
- pConsole->p_inbuf += os_strlen(pConsole->p_inbuf);
- return EmptyToken;
- }
- if( (end_buf - pConsole->p_inbuf - 1) > (int)len )
- {
- os_error_printf(CU_MSG_ERROR, (PS8)("ERROR - param is too long: '%s'\n"), (PS8)pConsole->p_inbuf );
- pConsole->p_inbuf += os_strlen(pConsole->p_inbuf);
- return EmptyToken;
- }
- *end_buf = 0;
- os_strcpy( buf, (PS8)(pConsole->p_inbuf+1 ) );
- pConsole->p_inbuf = end_buf + 1;
- }
- else
- {
- for( i=0; *pConsole->p_inbuf && *pConsole->p_inbuf!=' ' && i<len; i++ )
- buf[i] = *(pConsole->p_inbuf++);
-
- buf[i] = 0;
- if( *pConsole->p_inbuf && *pConsole->p_inbuf != ' ' )
- {
- os_error_printf(CU_MSG_ERROR, (PS8)("ERROR - param is too long: '%s'\n"), (PS8)( pConsole->p_inbuf-os_strlen( buf) ) );
- pConsole->p_inbuf += os_strlen(pConsole->p_inbuf);
- return EmptyToken;
- }
- }
- }
-
- tType = Console_analizeToken( buf );
-
- return tType;
-}
-
-/* Returns number of parameters of the given token
-*/
-static U16 Console_getNParms( ConEntry_t *p_token )
-{
- U16 i;
- if ( !p_token->u.token.parm )
- return 0;
- for( i=0;
- (i<p_token->u.token.totalParams) &&
- p_token->u.token.parm[i].name &&
- p_token->u.token.parm[i].name[0];
- i++ )
- ;
- return i;
-}
-
-/* Parse p_inbuf string based on parameter descriptions in <p_token>.
-Fill parameter values in <p_token>.
-Returns the number of parameters filled.
-To Do: add a option of one-by-one user input of missing parameters.
-*/
-static S32 Console_parseParms(Console_t* pConsole, ConEntry_t *p_token, U16 *pnParms )
-{
- U16 nTotalParms = Console_getNParms( p_token );
- U16 nParms=0;
- PS8 end_buf = NULL;
- S8 parm[INBUF_LENGTH];
- U16 i, print_params = 0;
- U32 val = 0;
- S32 sval = 0;
-
- /* Mark all parameters as don't having an explicit value */
- for( i=0; i<nTotalParms; i++ )
- p_token->u.token.parm[i].flags |= CON_PARM_NOVAL;
-
- /* ----------------- */
- pConsole->p_inbuf = Console_ltrim(pConsole->p_inbuf);
- if( pConsole->p_inbuf[0] == '!' && pConsole->p_inbuf[1] == '!' )
- {
- pConsole->p_inbuf += 2; print_params = 1;
- }
- /* ----------------- */
-
- /* Build a format string */
- for( i=0; i<nTotalParms; i++ )
- {
- if (p_token->u.token.parm[i].flags & (CON_PARM_STRING | CON_PARM_LINE) )
- {
- /* For a string parameter value is the string address */
- /* and hi_val is the string length */
- if (Console_getStrParam(pConsole, parm, &p_token->u.token.parm[i] ) != NameToken)
- break;
- if( os_strlen( parm) > p_token->u.token.parm[i].hi_val ||
- (p_token->u.token.parm[i].low_val && p_token->u.token.parm[i].low_val > os_strlen( parm) ) )
- {
- os_error_printf(CU_MSG_ERROR, (PS8)("ERROR - param '%s' must be %ld..%ld chars\n"), (PS8)p_token->u.token.parm[i].name,
- (PS8)p_token->u.token.parm[i].low_val, (PS8)p_token->u.token.parm[i].hi_val);
- return FALSE;
- }
- os_strcpy((PS8)(char *)p_token->u.token.parm[i].value, (PS8)parm);
- }
- else
- {
- if (Console_getWord(pConsole, parm, MAX_PARM_LEN ) != NameToken)
- break;
-
- if (p_token->u.token.parm[i].flags & CON_PARM_SIGN)
- {
- sval = os_strtol( parm, &end_buf, 0 );
- }
- else
- {
- val = os_strtoul( parm, &end_buf, 0 );
- }
- if( end_buf <= parm )
- break;
-
- /* Check value */
- if (p_token->u.token.parm[i].flags & CON_PARM_RANGE)
- {
- if (p_token->u.token.parm[i].flags & CON_PARM_SIGN)
- {
- if ((sval < (S32)p_token->u.token.parm[i].low_val) ||
- (sval > (S32)p_token->u.token.parm[i].hi_val) )
- {
- os_error_printf(CU_MSG_ERROR, (PS8)("%s: %d out of range (%d, %d)\n"),
- (PS8)p_token->u.token.parm[i].name, (int)sval,
- (int)p_token->u.token.parm[i].low_val, (int)p_token->u.token.parm[i].hi_val );
- return FALSE;
- }
-
- }
- else
- {
- if ((val < p_token->u.token.parm[i].low_val) ||
- (val > p_token->u.token.parm[i].hi_val) )
- {
- os_error_printf(CU_MSG_ERROR , (PS8)("%s: %ld out of range (%ld, %ld)\n"),
- (PS8)p_token->u.token.parm[i].name, (PS8)val,
- (PS8)p_token->u.token.parm[i].low_val, (PS8)p_token->u.token.parm[i].hi_val );
- return FALSE;
- }
- }
- }
-
- if (p_token->u.token.parm[i].flags & CON_PARM_SIGN)
- p_token->u.token.parm[i].value = sval;
- else
- p_token->u.token.parm[i].value = val;
- }
-
- p_token->u.token.parm[i].flags &= ~CON_PARM_NOVAL;
- ++nParms;
- }
-
- /* Process default values */
- for( ; i<nTotalParms; i++ )
- {
- if ((p_token->u.token.parm[i].flags & CON_PARM_DEFVAL) != 0)
- {
- p_token->u.token.parm[i].flags &= ~CON_PARM_NOVAL;
- ++nParms;
- }
- else if (!(p_token->u.token.parm[i].flags & CON_PARM_OPTIONAL) )
- {
- /* Mandatory parameter missing */
- return FALSE;
- }
- }
-
- if( print_params )
- {
- os_error_printf((S32)CU_MSG_INFO2, (PS8)("Params: %d\n"), nParms );
- for (i=0; i<nParms; i++ )
- {
- os_error_printf(CU_MSG_INFO2, (PS8)("%d: %s - flags:%d"),
- i+1, (PS8)p_token->u.token.parm[i].name,
- p_token->u.token.parm[i].flags);
-
- if (p_token->u.token.parm[i].flags & CON_PARM_SIGN)
- os_error_printf(CU_MSG_INFO2, (PS8)("min:%d, max:%d, value:%d "),(PS8)p_token->u.token.parm[i].low_val, (PS8)p_token->u.token.parm[i].hi_val,
- (PS8)p_token->u.token.parm[i].value);
- else
- os_error_printf(CU_MSG_INFO2, (PS8)("min:%ld, max:%ld, value:%ld "),(PS8)p_token->u.token.parm[i].low_val, (PS8)p_token->u.token.parm[i].hi_val,
- (PS8)p_token->u.token.parm[i].value);
-
- os_error_printf(CU_MSG_INFO2, (PS8)("(%#lx)"),(PS8)p_token->u.token.parm[i].value );
-
- if( p_token->u.token.parm[i].flags & (CON_PARM_LINE | CON_PARM_STRING ))
- {
- os_error_printf(CU_MSG_INFO2, (PS8)(" - '%s'"), (PS8)(char *) p_token->u.token.parm[i].value );
- }
- os_error_printf(CU_MSG_INFO2, (PS8)("\n") );
- }
-
- }
- *pnParms = nParms;
-
- return TRUE;
-}
-
-/* Serach a token by name in the current directory */
-static ConEntry_t *Console_searchToken( ConEntry_t *p_dir, PS8 name )
-{
- ConEntry_t *p_token;
- U16 name_len = (U16)os_strlen( name );
-
- /* Check alias */
- p_token = p_dir->u.dir.first;
- while( p_token )
- {
- if (p_token->alias &&
- (name_len == ALIAS_LEN) &&
- !Console_stricmp( p_token->alias, name, ALIAS_LEN ) )
- return p_token;
- p_token = p_token->next;
- }
-
- /* Check name */
- p_token = p_dir->u.dir.first;
- while( p_token )
- {
- if (!Console_stricmp( p_token->name, name, name_len ) )
- break;
- p_token = p_token->next;
- }
-
- return p_token;
-}
-
-
-/* Display help for each entry in the current directory */
-VOID Console_dirHelp(Console_t* pConsole)
-{
- ConEntry_t *p_token;
- S8 print_str[80];
-
- p_token = pConsole->p_cur_dir->u.dir.first;
-
- while( p_token )
- {
- if (p_token->sel == Dir)
- os_sprintf( print_str, (PS8)"%s: directory\n", (PS8)p_token->name );
- else
- os_sprintf( print_str, (PS8)("%s(%d parms): %s\n"),
- (PS8)p_token->name, Console_getNParms(p_token), p_token->help );
- os_error_printf(CU_MSG_INFO2, (PS8)print_str );
- p_token = p_token->next;
- }
-
- os_error_printf(CU_MSG_INFO2, (PS8)("Type ? <name> for command help, \"/\"-root, \"..\"-upper\n") );
-}
-
-
-/* Display help a token */
-static VOID Console_displayHelp(Console_t* pConsole, ConEntry_t *p_token )
-{
- S8 bra, ket;
- U16 nTotalParms = Console_getNParms( p_token );
- U16 i;
-
-
- os_error_printf(CU_MSG_INFO2, (PS8)("%s: %s "), (PS8)p_token->help, (PS8)p_token->name );
- for( i=0; i<nTotalParms; i++ )
- {
- if (p_token->u.token.parm[i].flags & CON_PARM_OPTIONAL)
- {
- bra = '['; ket=']';
- }
- else
- {
- bra = '<'; ket='>';
- }
- os_error_printf(CU_MSG_INFO2, (PS8)("%c%s"), bra, (PS8)p_token->u.token.parm[i].name );
- if (p_token->u.token.parm[i].flags & CON_PARM_DEFVAL)
- {
- os_error_printf(CU_MSG_INFO2, (PS8)("=%lu"), (PS8)p_token->u.token.parm[i].value);
- }
- if (p_token->u.token.parm[i].flags & CON_PARM_RANGE)
- {
- os_error_printf(CU_MSG_INFO2, (PS8)(p_token->u.token.parm[i].flags & CON_PARM_SIGN) ? (PS8)(" (%d..%d%s)") : (PS8)(" (%lu..%lu%s)"),
- (PS8)p_token->u.token.parm[i].low_val,
- (PS8)p_token->u.token.parm[i].hi_val,
- (PS8)(p_token->u.token.parm[i].flags & (CON_PARM_STRING | CON_PARM_LINE)) ? (PS8)(" chars") : (PS8)("") );
-
- }
- os_error_printf(CU_MSG_INFO2, (PS8)("%c \n"),ket );
- }
-}
-
-/* Choose unique alias for <name> in <p_dir> */
-/* Currently only single-character aliases are supported */
-static S32 Console_chooseAlias( ConEntry_t *p_dir, ConEntry_t *p_new_token )
-{
- ConEntry_t *p_token;
- S32 i;
- S8 c;
- PS8 new_alias = NULL;
-
- /* find alias given from user */
- for(i=0; p_new_token->name[i]; i++ )
- {
- if( os_isupper( p_new_token->name[i]) )
- {
- new_alias = &p_new_token->name[i];
- break;
- }
- }
-
- Console_strlwr( p_new_token->name );
-
- if( new_alias )
- {
- p_token = p_dir->u.dir.first;
-
- while( p_token )
- {
- if (p_token->alias && (os_tolower(*p_token->alias ) == *new_alias) )
- {
- os_error_printf(CU_MSG_ERROR, (PS8)("Error - duplicated alias '%c' in <%s> and <%s>**\n"), *new_alias,
- (PS8)p_token->name, (PS8)p_new_token->name );
- return 0;
- }
- p_token = p_token->next;
- }
- *new_alias = (S8)os_toupper(*new_alias);
- p_new_token->alias = new_alias;
- return 1;
- }
-
- i = 0;
- while( p_new_token->name[i] )
- {
- c = p_new_token->name[i];
- p_token = p_dir->u.dir.first;
-
- while( p_token )
- {
- if (p_token->alias &&
- (os_tolower(*p_token->alias ) == c) )
- break;
- p_token = p_token->next;
- }
- if (p_token)
- ++i;
- else
- {
- p_new_token->name[i] = (S8)os_toupper( c );
- p_new_token->alias = &p_new_token->name[i];
- break;
- }
- }
- return 1;
-}
-
-/* Parse the given input string and exit.
-All commands in the input string are executed one by one.
-*/
-static U8 Console_ParseString(Console_t* pConsole, PS8 input_string )
-{
- ConEntry_t *p_token;
- S8 name[MAX_NAME_LEN];
- TokenType_t tType;
- U16 nParms;
-
- if (!pConsole->p_mon_root)
- return 1;
-
- if(!pConsole->isDeviceOpen)
- {
- Console_GetDeviceStatus(pConsole);
- if(!pConsole->isDeviceOpen)
- {
- os_error_printf(CU_MSG_ERROR, (PS8)("ERROR - Console_ParseString - Device isn't loaded !!!\n") );
- return 1;
- }
- }
-
- if( input_string[os_strlen( input_string)-1] == '\n' )
- {
- PS8 s = &input_string[os_strlen( input_string)-1];
- *s = 0;
- }
- pConsole->p_inbuf = input_string;
- pConsole->stop_UI_Monitor = FALSE;
-
- /* Interpret empty string as "display directory" */
- if ( pConsole->p_inbuf && !*pConsole->p_inbuf )
- Console_displayDir(pConsole);
-
- while(!pConsole->stop_UI_Monitor && pConsole->p_inbuf && *pConsole->p_inbuf)
- {
- tType = Console_getWord(pConsole, name, MAX_NAME_LEN );
- switch( tType )
- {
-
- case NameToken:
- p_token = Console_searchToken( pConsole->p_cur_dir, name );
- if (p_token == NULL)
- {
- os_error_printf(CU_MSG_ERROR, (PS8)("**Error: '%s'**\n"),name);
- pConsole->p_inbuf = NULL;
- }
- else if (p_token->sel == Dir)
- {
- pConsole->p_cur_dir = p_token;
- Console_displayDir(pConsole);
- }
- else
- { /* Function token */
- if (!Console_parseParms(pConsole, p_token, &nParms ))
- {
- Console_displayHelp(pConsole, p_token );
- }
- else
- {
- p_token->u.token.f_tokenFunc(pConsole->hCuCmd, p_token->u.token.parm, nParms );
- }
- }
- break;
-
- case UpToken: /* Go to upper directory */
- if (pConsole->p_cur_dir->u.dir.upper)
- pConsole->p_cur_dir = pConsole->p_cur_dir->u.dir.upper;
- Console_displayDir(pConsole);
- break;
-
- case RootToken: /* Go to the root directory */
- if (pConsole->p_cur_dir->u.dir.upper)
- pConsole->p_cur_dir = pConsole->p_mon_root;
- Console_displayDir(pConsole);
- break;
-
- case HelpToken: /* Display help */
- if (( Console_getWord(pConsole, name, MAX_NAME_LEN ) == NameToken ) &&
- ((p_token = Console_searchToken( pConsole->p_cur_dir, name )) != NULL ) &&
- (p_token->sel == Token) )
- Console_displayHelp(pConsole, p_token);
- else
- Console_dirHelp(pConsole);
- break;
-
- case DirHelpToken:
- Console_displayDir(pConsole);
- os_error_printf(CU_MSG_INFO2, (PS8)("Type ? <name> for command help, \"/\"-root, \"..\"-upper\n") );
- break;
-
- case BreakToken: /* Clear buffer */
- pConsole->p_inbuf = NULL;
- break;
-
- case QuitToken: /* Go to upper directory */
- return 1;
-
- case EmptyToken:
- break;
-
- }
- }
- return 0;
-}
-
-/* functions */
-/*************/
-
-THandle Console_Create(const PS8 device_name, S32 BypassSupplicant, PS8 pSupplIfFile)
-{
- Console_t* pConsole = (Console_t*)os_MemoryCAlloc(sizeof(Console_t), sizeof(U8));
- if(pConsole == NULL)
- {
- os_error_printf(CU_MSG_ERROR, (PS8)("Error - Console_Create - cant allocate control block\n") );
- return NULL;
- }
-
- pConsole->hCuCmd = CuCmd_Create(device_name, pConsole, BypassSupplicant, pSupplIfFile);
- if(pConsole->hCuCmd == NULL)
- {
- Console_Destroy(pConsole);
- return NULL;
- }
-
- Console_allocRoot(pConsole);
-
- pConsole->isDeviceOpen = FALSE;
-
- return pConsole;
-}
-
-VOID Console_Destroy(THandle hConsole)
-{
- Console_t* pConsole = (Console_t*)hConsole;
-
- if(pConsole->hCuCmd)
- {
- CuCmd_Destroy(pConsole->hCuCmd);
- }
- if (pConsole->p_mon_root)
- {
- Console_FreeEntry(pConsole->p_mon_root);
- }
- os_MemoryFree(pConsole);
-}
-
-VOID Console_Stop(THandle hConsole)
-{
- ((Console_t*)hConsole)->stop_UI_Monitor = TRUE;
-}
-
-/* Monitor driver */
-VOID Console_Start(THandle hConsole)
-{
- Console_t* pConsole = (Console_t*)hConsole;
- S8 inbuf[INBUF_LENGTH];
- S32 res;
-
- if (!pConsole->p_mon_root)
- return;
-
- pConsole->stop_UI_Monitor = FALSE;
- Console_displayDir(pConsole);
-
- while(!pConsole->stop_UI_Monitor)
- {
- /* get input string */
- res = os_getInputString(inbuf, sizeof(inbuf));
- if (res == FALSE)
- {
- if(pConsole->stop_UI_Monitor)
- {
- continue;
- }
- else
- {
- return;
- }
- }
-
- if(res == OS_GETINPUTSTRING_CONTINUE)
- continue;
-
- /* change to NULL terminated strings */
- if( inbuf[os_strlen(inbuf)-1] == '\n' )
- inbuf[os_strlen(inbuf)-1] = 0;
-
- /* parse the string */
- Console_ParseString(pConsole, inbuf);
- }
-
-}
-
-VOID Console_GetDeviceStatus(THandle hConsole)
-{
- Console_t* pConsole = (Console_t*)hConsole;
-
- if(OK == CuCmd_GetDeviceStatus(pConsole->hCuCmd))
- {
- pConsole->isDeviceOpen = TRUE;
- }
-}
-
-
-/***************************************************************
-
- Function : consoleAddDirExt
-
- Description: Add subdirectory
-
- Parameters: p_root - root directory handle (might be NULL)
- name - directory name
-
- Output: the new created directory handle
- =NULL - failure
-***************************************************************/
-THandle Console_AddDirExt(THandle hConsole,
- THandle hRoot, /* Upper directory handle. NULL=root */
- const PS8 name, /* New directory name */
- const PS8 desc ) /* Optional dir description */
-{
- Console_t* pConsole = (Console_t*)hConsole;
- ConEntry_t *p_root = (ConEntry_t *)hRoot;
- ConEntry_t *p_dir;
- ConEntry_t **p_e;
-
- if (!p_root)
- p_root = pConsole->p_mon_root;
-
- if(!( p_root && (p_root->sel == Dir)))
- return NULL;
-
- if ( (p_dir=(ConEntry_t *)os_MemoryAlloc(sizeof( ConEntry_t )) ) == NULL)
- return NULL;
-
- os_memset( p_dir, 0, sizeof( ConEntry_t ) );
- os_strncpy( p_dir->name, name, MAX_NAME_LEN );
- os_strncpy( p_dir->help, desc, MAX_HELP_LEN );
- p_dir->sel = Dir;
-
- Console_chooseAlias( p_root, p_dir );
-
- /* Add new directory to the root's list */
- p_dir->u.dir.upper = p_root;
- p_e = &(p_root->u.dir.first);
- while (*p_e)
- p_e = &((*p_e)->next);
- *p_e = p_dir;
-
- return p_dir;
-}
-
-/***************************************************************
-
- Function : consoleAddToken
-
- Description: Add token
-
- Parameters: p_dir - directory handle (might be NULL=root)
- name - token name
- help - help string
- p_func - token handler
- p_parms- array of parameter descriptions.
- Must be terminated with {0}.
- Each parm descriptor is a struct
- { "myname", - name
- 10, - low value
- 20, - high value
- 0 } - default value =-1 no default
- or address for string parameter
-
- Output: E_OK - OK
- !=0 - error
-***************************************************************/
-consoleErr Console_AddToken( THandle hConsole,
- THandle hDir,
- const PS8 name,
- const PS8 help,
- FuncToken_t p_func,
- ConParm_t p_parms[] )
-{
- Console_t* pConsole = (Console_t*)hConsole;
- ConEntry_t *p_dir = (ConEntry_t *)hDir;
- ConEntry_t *p_token;
- ConEntry_t **p_e;
- U16 i;
-
- if (!pConsole->p_mon_root)
- Console_allocRoot(pConsole);
-
- if (!p_dir)
- p_dir = pConsole->p_mon_root;
-
- if(!( p_dir && (p_dir->sel == Dir)))
- return E_ERROR;
-
-
- /* Initialize token structure */
- if((p_token = (ConEntry_t *)os_MemoryCAlloc(1,sizeof(ConEntry_t))) == NULL)
- {
- os_error_printf(CU_MSG_ERROR, (PS8)("** no memory **\n") );
- return E_NOMEMORY;
- }
-
-
- /* Copy name */
- os_strncpy( p_token->name, name, MAX_NAME_LEN );
- os_strncpy( p_token->help, help, MAX_HELP_LEN );
- p_token->sel = Token;
- p_token->u.token.f_tokenFunc = p_func;
- p_token->u.token.totalParams = 0;
-
- /* Convert name to lower case and choose alias */
- Console_chooseAlias( p_dir, p_token );
-
- /* Copy parameters */
- if ( p_parms )
- {
- ConParm_t *p_tmpParms = p_parms;
-
- /* find the number of params */
- while( p_tmpParms->name && p_tmpParms->name[0] )
- {
- p_token->u.token.totalParams++;
- p_tmpParms++;
- }
- /* allocate the parameters info */
- p_token->u.token.parm = (ConParm_t *)os_MemoryAlloc(p_token->u.token.totalParams * sizeof(ConParm_t));
- p_token->u.token.name = (PS8*)os_MemoryAlloc(p_token->u.token.totalParams * sizeof(PS8));
- if ((p_token->u.token.parm == NULL) || (p_token->u.token.name == NULL))
- {
- os_error_printf(CU_MSG_ERROR, (PS8)("** no memory for params\n") );
- os_MemoryFree(p_token);
- return E_NOMEMORY;
- }
- for (i=0; i < p_token->u.token.totalParams; i++)
- {
- ConParm_t *p_token_parm = &p_token->u.token.parm[i];
-
- /* String parameter must have an address */
- if(p_parms->flags & (CON_PARM_STRING | CON_PARM_LINE))
- {
- if ( p_parms->hi_val >= INBUF_LENGTH )
- {
- os_error_printf(CU_MSG_ERROR, (PS8)("** buffer too big: %s/%s\n"), p_dir->name, name);
- os_MemoryFree(p_token->u.token.parm);
- os_MemoryFree(p_token->u.token.name);
- os_MemoryFree(p_token);
- return E_NOMEMORY;
-
- }
- if (p_parms->hi_val == 0 || (p_parms->flags & CON_PARM_RANGE) )
- {
- os_error_printf(CU_MSG_ERROR, (PS8)("** Bad string param definition: %s/%s\n"), p_dir->name, name );
- os_MemoryFree(p_token->u.token.parm);
- os_MemoryFree(p_token->u.token.name);
- os_MemoryFree(p_token);
- return E_BADPARM;
- }
- p_parms->value = (U32)os_MemoryCAlloc(1,p_parms->hi_val+1);
- if( !p_parms->value )
- {
- os_error_printf(CU_MSG_ERROR, (PS8)("** No memory: %s/%s (max.size=%ld)\n"), p_dir->name, name, p_parms->hi_val );
- os_MemoryFree(p_token->u.token.parm);
- os_MemoryFree(p_token->u.token.name);
- os_MemoryFree(p_token);
- return E_NOMEMORY;
- }
- }
-
- /* Copy parameter */
- *p_token_parm = *p_parms;
- if( p_token_parm->hi_val || p_token_parm->low_val )
- p_token_parm->flags |= CON_PARM_RANGE;
-
- p_token->u.token.name[i] = os_MemoryAlloc(os_strlen(p_parms->name));
- if (p_token->u.token.name[i] == NULL)
- {
- os_error_printf(CU_MSG_ERROR, (PS8)("** Error allocate param name\n"));
- os_MemoryFree(p_token->u.token.parm);
- os_MemoryFree(p_token->u.token.name);
- os_MemoryFree(p_token);
- return E_NOMEMORY;
- }
- p_token_parm->name = (PS8)p_token->u.token.name[i];
- os_strncpy( p_token->u.token.name[i], p_parms->name, os_strlen(p_parms->name) );
- ++p_parms;
- } /*end of for loop*/
- }
-
- /* Add token to the directory */
- p_e = &(p_dir->u.dir.first);
- while (*p_e)
- p_e = &((*p_e)->next);
- *p_e = p_token;
-
- return E_OK;
-}
-
-int consoleRunScript( char *script_file, THandle hConsole)
-{
- FILE *hfile = fopen(script_file, "r" );
- U8 status = 0;
- Console_t* pConsole = (Console_t*)hConsole;
-
- if( hfile )
- {
- char buf[INBUF_LENGTH];
- pConsole->stop_UI_Monitor = FALSE;
-
- while( fgets(buf, sizeof(buf), hfile ) )
- {
- status = Console_ParseString(pConsole, buf);
- if (status == 1)
- return TRUE;
- if( pConsole->stop_UI_Monitor )
- break;
- }
-
- fclose(hfile);
- }
- else
- {
- os_error_printf(CU_MSG_ERROR, (PS8)("ERROR in script: %s \n"), (PS8)script_file);
- }
- return pConsole->stop_UI_Monitor;
-}