1/*******************************************************************************
2**+--------------------------------------------------------------------------+**
3**|                                                                          |**
4**| Copyright 1998-2008 Texas Instruments, Inc. - http://www.ti.com/         |**
5**|                                                                          |**
6**| Licensed under the Apache License, Version 2.0 (the "License");          |**
7**| you may not use this file except in compliance with the License.         |**
8**| You may obtain a copy of the License at                                  |**
9**|                                                                          |**
10**|     http://www.apache.org/licenses/LICENSE-2.0                           |**
11**|                                                                          |**
12**| Unless required by applicable law or agreed to in writing, software      |**
13**| distributed under the License is distributed on an "AS IS" BASIS,        |**
14**| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |**
15**| See the License for the specific language governing permissions and      |**
16**| limitations under the License.                                           |**
17**|                                                                          |**
18**+--------------------------------------------------------------------------+**
19*******************************************************************************/
20
21#ifndef tiwlan_console_h
22#define tiwlan_console_h
23
24#include <stdio.h>
25#include <assert.h>
26/*
27 * --------------------- *
28 *     error codes
29 * --------------------- *
30 */
31typedef enum
32{
33   E_OK = 0
34   , E_BADPARM
35   , E_TOOMANY
36   , E_NOMEMORY
37   , E_NOT_FOUND
38   , E_EXISTS
39   , E_DUMMY
40} consoleErr_t;
41
42typedef consoleErr_t  consoleErr;
43
44typedef void *                   handle_t;
45
46typedef unsigned char            U8;
47typedef signed char              S8;
48typedef unsigned short           U16;
49typedef signed short             S16;
50typedef unsigned long            U32;
51typedef signed long              S32;
52
53
54
55#ifdef __cplusplus
56extern "C" {
57#endif /* __cplusplus */
58
59/* Monitor parameter flags */
60#define CON_PARM_OPTIONAL    0x01  /* Parameter is optional */
61#define CON_PARM_DEFVAL      0x02  /* Default value is set */
62#define CON_PARM_RANGE       0x04  /* Range is set */
63#define CON_PARM_STRING      0x08  /* String parm */
64#define CON_PARM_LINE        0x10  /* String from the current parser position till EOL */
65#define CON_PARM_SIGN        0x20  /* Signed param */
66#define CON_PARM_NOVAL       0x80  /* Internal flag: parameter is anassigned */
67
68/* Function parameter structure */
69typedef struct ConParm_t
70{
71   const char *name;             /* Parameter name. Shouldn't be allocated on stack! */
72   U8 flags;                     /* Combination of CON_PARM_??? flags */
73   U32 low_val;                  /* Low val for range checking */
74   U32 hi_val;                   /* Hi val for range checking/max length of string */
75   U32 value;                    /* Value/address of string parameter */
76} ConParm_t;
77
78#define CON_LAST_PARM       { NULL, 0, 0, 0, 0 }
79
80/* Monitor command handler prototype */
81typedef void (*FuncToken_t)(ConParm_t parm[], U16 nParms);
82
83/* Add subdirectory to the p_root directory
84   Returns the new directory handle
85*/
86handle_t consoleAddDirExt(
87                       handle_t   hRoot,          /* Upper directory handle. NULL=root */
88                       const char *name,          /* New directory name */
89                       const char *desc );    /* Optional directory description */
90
91/* Add token */
92consoleErr consoleAddToken( handle_t     hDir,     /* Directory handle. NULL=root */
93                      const char    *name,    /* Token name. Shouldn't be allocated on stack! */
94                      const char    *help,    /* Token help. Shouldn't be allocated on stack! */
95                      FuncToken_t   p_func,   /* Token handler */
96                      ConParm_t     p_parms[]);/* Array of token parameters. */
97                                              /* The last array element has parameter */
98                                              /* name = NULL */
99
100/* Monitor driver.
101   Calls XX_Gets in infinite loop to get input string.
102   Gives the string to console_ParseString for processing.
103   Monitor token handler can call consoleStop() to exit the
104   consoleStart.
105*/
106void consoleStart( void );
107
108/* Parse the given input string and exit.
109   All commands in the input string are executed one by one.
110*/
111void console_ParseString( char *input_string );
112
113/* Stop monitor driver */
114void consoleStop( void );
115
116/* Execute commands from 'script_file' */
117int consoleRunScript( char *script_file );
118
119#ifdef _WINDOWS
120#endif
121
122#ifdef __cplusplus
123}
124#endif
125
126/* ----------------------------------------------------- */
127
128#define ALIAS_LEN                1
129
130#define MAX_NAME_LEN       80
131#define MAX_HELP_LEN       80
132#define MAX_PARM_LEN       20
133#define MAX_NUM_OF_PARMS   30
134
135#define TOKEN_UP           ".."
136#define TOKEN_ROOT         "/"
137#define TOKEN_BREAK        "#"
138#define TOKEN_HELP         "?"
139#define TOKEN_DIRHELP      "help"
140
141#ifndef FALSE
142	#define FALSE    0
143#endif
144
145#ifndef TRUE
146	#define TRUE    1
147#endif
148
149#ifndef __LINUX__ // TRS:WDK
150	#define perror(str) printf("\nError at %s:%d  - %s.\n", __FILE__, __LINE__, (str))
151#endif /* __LINUX__ */
152//TRS end
153#ifdef    __cplusplus
154	extern "C" {
155#endif   /* __cplusplus */
156
157#ifndef _WINDOWS /* TRS:WDK __LINUX__ */
158	#ifdef ERRCHK
159		# define ASSERT(p) assert(p)
160	#else
161		# define ASSERT(p) do {} while (0)
162	#endif
163#endif /* TRS:WDK __LINUX__ */
164
165#ifdef __cplusplus
166}
167#endif
168
169typedef enum { Dir, Token } ConEntry_type_t;
170
171/* Parameter name and format */
172typedef char (ParmName_t)[MAX_NAME_LEN+1];
173
174/* Monitor token structure */
175typedef struct ConEntry_t
176{
177   struct ConEntry_t   *next;
178   char                name[MAX_NAME_LEN+1];    /* Entry name */
179   char                help[MAX_HELP_LEN+1];    /* Help string */
180   char                *alias;                  /* Alias - always in upper case*/
181   ConEntry_type_t     sel;                   /* Entry selector */
182
183   union {
184      struct
185      {
186         struct ConEntry_t   *upper;            /* Upper directory */
187         struct ConEntry_t   *first;            /* First entry */
188      } dir;
189      struct t_Token
190      {
191         FuncToken_t    f_tokenFunc;            /* Token handler */
192         ConParm_t      parm[MAX_NUM_OF_PARMS]; /* Parameters array */
193         ParmName_t     name[MAX_NUM_OF_PARMS]; /* Parameter name */
194      } token;
195   } u;
196} ConEntry_t;
197
198/* Token types */
199typedef enum
200{
201   EmptyToken,
202   UpToken,
203   RootToken,
204   BreakToken,
205   HelpToken,
206   DirHelpToken,
207   NameToken
208} t_TokenType;
209
210char * console_strlwr( char *s );
211int    console_stricmp( char *s1, char *s2, U16 len );
212char * console_ltrim( char *s );
213
214#endif /* #ifndef tiwlan_console_h */
215