/* SPDX-License-Identifier: LGPL-2.1-only OR BSD-3-Clause */
/******************************************************************************
 *
 * This file is provided under a dual license.  When you use or
 * distribute this software, you may choose to be licensed under
 * version 2.1 of the GNU Lesser General Public License 
 * ("LGPLv2.1 License") or BSD License.
 *
 * LGPLv2.1 License
 *
 * Copyright(C) 2019 MediaTek Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of version 2.1 of the GNU Lesser General Public 
 * License as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html for more
 * details.
 *
 * BSD LICENSE
 *
 * Copyright(C) 2019 MediaTek Inc.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *  * Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *  * Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *  * Neither the name of the copyright holder nor the names of its
 *    contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *****************************************************************************/

#ifndef X_MID_CLI_H
#define X_MID_CLI_H

#if 1 /* 1 is used driver cli, 0 is used middleware cli. */

#include "x_drv_cli.h"

/* CLI category definition */
typedef enum
{
    CLI_CAT_ROOT = 0,
    CLI_CAT_BASIC,    
    CLI_CAT_APP,	
    CLI_CAT_MW,
    CLI_CAT_DRV,		
    CLI_CAT_TEST,   /* For test use only */ 			
    CLI_CAT_MTK_TOOL,		
    CLI_CAT_MAX
}   CLI_CAT_T;

#define CLI_GRP_NONE                ((UINT64)   0x00000000)
#define CLI_GRP_DRV                 ((UINT64)   0x00000008)

extern INT32 x_cli_attach_cmd_tbl(CLI_EXEC_T* pt_tbl,
                                  CLI_CAT_T   e_category,
                                  UINT64      ui8_group_mask);

#else

#include "x_cli.h"


/******************************************************************************
* cli command respond value
******************************************************************************/
#define CLI_COMMAND_OK					CLIR_OK
#define CLI_UNKNOWN_CMD					CLIR_CMD_NOT_FOUND

/******************************************************************************
* cli command access right
******************************************************************************/



/******************************************************************************
* cli command structure
******************************************************************************/

#define pszCmdStr       ps_cmd_str
#define pszCmdAbbrStr   ps_cmd_abbr_str
#define pfExecFun       pf_exec_fct
#define prCmdNextLevel  pt_next_level
#define pszCmdHelpStr   ps_cmd_help_str
#define eAccessRight    e_access_right

/******************************************************************************
* cli command table get function
******************************************************************************/

typedef CLI_EXEC_T* (*ClI_GET_CMD_TBL_FUNC)(void);
// #define ClI_GET_CMD_TBL_FUNC    x_cli_exec

#define CLI_Init()
// #define CLI_GetDefaultCmdTbl()
// #define CLI_PromptParser    cli_parser
// #define CLI_CmdTblAttach    x_cli_attach_cmd_tbl
extern INT32 CLI_CmdTblAttach(CLI_EXEC_T* pTbl);

#define CLI_AliasAttach     x_cli_attach_alias
#define CLI_Parser          x_cli_parser
#define CLI_Parser_Arg      x_cli_parser_arg

#endif /* 1/0 */
#endif /* X_MID_CLI_H */
