/******************************************************************************
 *
 *  <:copyright-BRCM:2016:DUAL/GPL:standard
 *
 *     Copyright (c) 2016 Broadcom
 *     All Rights Reserved
 *
 *  Unless you and Broadcom execute a separate written software license
 *  agreement governing use of this software, this software is licensed
 *  to you under the terms of the GNU General Public License version 2
 *  (the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
 *  with the following added to such license:
 *
 *     As a special exception, the copyright holders of this software give
 *     you permission to link this software with independent modules, and
 *     to copy and distribute the resulting executable under terms of your
 *     choice, provided that you also meet, for each linked independent
 *     module, the terms and conditions of the license of that module.
 *     An independent module is a module which is not derived from this
 *     software.  The special exception does not apply to any modifications
 *     of the software.
 *
 *  Not withstanding the above, under no circumstances may you combine
 *  this software in any way with any other Broadcom software provided
 *  under a license other than the GPL, without Broadcom's express prior
 *  written consent.
 *
 *  :>
 *
 *****************************************************************************/

/**
 * @file bal_cli.h
 * @brief All functions and definitions supplied by the Sample CLI
 *
 */


#ifndef BAL_CLI_H
#define BAL_CLI_H

#include <bcmcli.h>
#include <bcmos_cli.h>
#include <bal_core.h>
/*@{*/

extern bcmos_errno bcmbal_cli_init(bcmbal_exit_cb exit_cb);
extern void bcmbal_cli_stop(void);
extern bcmos_errno bcmbal_cli_finish(void);
extern bcmos_errno bcmbal_cli_exec_init_script(void);
extern bcmos_errno bcmbal_cli_exec_script(const char *filename);
extern bcmos_bool  bcmbal_cli_is_terminated(void);
extern bcmcli_session *current_session;


/*@}*/

#endif /* BAL_CLI_H */

