123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 |
- /**
- * \file cli_main.c
- *
- * This File contains the "main" function for the CLI application,
- * to exercise various functionalities of the Mindtree Mesh stack.
- */
- /*
- * Copyright (C) 2017. Mindtree Ltd.
- * All rights reserved.
- */
- #ifndef DEMO
- /* ------------------------------- Header File Inclusion */
- #include "cli_main.h"
- #include "nvs.h"
- #include "common.h"
- /* ------------------------------- Global Variables */
- #ifndef CLI_NO_MAIN
- DECL_STATIC UCHAR r_buf[1024];
- #else
- void cli_input (char * cmd, int size);
- #endif /* CLI_NO_MAIN */
- /* Level - Root */
- DECL_CONST CLI_COMMAND cli_root_cmd_list[] =
- {
- /* Help */
- { "help", "Help", cli_help },
- /* Core */
- { "core", "Core Options", cli_core },
- /* Model */
- { "model", "Model Options", cli_model },
- /* Reset */
- { "reset", "Reset Node", cli_reset },
- /* Persistent Storage */
- { "ps", "Persistent Storage", cli_ps },
- /* Mesh ADV/GATT bearer Operations */
- { "brr", "Mesh bearer Operations", cli_brr },
- /* Set Log Level */
- { "loglevel", "Set Log Level <ERR/INF/TRC/ALL>", cli_set_log_level }
- };
- /* Command List Stack */
- typedef struct _CLI_COMMAND_STACK_FRAME
- {
- CLI_COMMAND * cmd_list;
- UINT16 cmd_list_len;
- } CLI_COMMAND_STACK_FRAME;
- #define CLI_CMD_LIST_MAX_DEPTH 10
- DECL_STATIC UINT16 cli_cmd_list_sp;
- DECL_STATIC CLI_COMMAND_STACK_FRAME cli_cmd_list_stack[CLI_CMD_LIST_MAX_DEPTH];
- /* ------------------------------- Functions */
- /* Common Utility Routines */
- void cli_cmd_stack_push(/* IN */ CLI_COMMAND *cmd_list, /* IN */ UINT16 cmd_list_len)
- {
- cli_cmd_list_sp++;
- cli_cmd_list_stack[cli_cmd_list_sp].cmd_list = cmd_list;
- cli_cmd_list_stack[cli_cmd_list_sp].cmd_list_len = cmd_list_len;
- }
- void cli_cmd_stack_pop(void)
- {
- /* Check if the Stack point in not 0. Decrement by one */
- if (0 != cli_cmd_list_sp)
- {
- cli_cmd_list_sp--;
- }
- else
- {
- CONSOLE_OUT("Already at Root Level\n");
- }
- }
- API_RESULT cli_reset(UINT32 argc, UCHAR *argv[])
- {
- MS_IGNORE_UNUSED_PARAM(argc);
- MS_IGNORE_UNUSED_PARAM(argv);
- CONSOLE_OUT ("Clearing Storage\n");
- nvs_reset(NVS_BANK_PERSISTENT);
- return API_SUCCESS;
- }
- extern uint8 llState;
- extern uint8 llSecondaryState;
- extern UCHAR blebrr_state;
- extern uint32 blebrr_advscan_timeout_count;
- /* Help */
- API_RESULT cli_help(UINT32 argc, UCHAR *argv[])
- {
- UINT32 index;
- UINT32 sum = 0;
- MS_IGNORE_UNUSED_PARAM(argc);
- MS_IGNORE_UNUSED_PARAM(argv);
- CONSOLE_OUT("In Help\n");
- /* Print all the available commands */
- for (index = 0; index < cli_cmd_list_stack[cli_cmd_list_sp].cmd_list_len; index++)
- {
- CONSOLE_OUT(" %s: %s\n",
- cli_cmd_list_stack[cli_cmd_list_sp].cmd_list[index].cmd,
- cli_cmd_list_stack[cli_cmd_list_sp].cmd_list[index].desc);
- }
-
- sum = osal_memory_statics();
- printf("osal_memory sum = %d\r\n", sum);
- printf("\r\n===== internal status ============\r\n");
- printf("llState = %d, llSecondaryState = %d\r\n", llState, llSecondaryState);
- printf("blebrr_state = %d\r\n", blebrr_state);
- printf("blebrr_advscan_timeout_count = %d\r\n", blebrr_advscan_timeout_count);
- return API_SUCCESS;
- }
- /* Back */
- API_RESULT cli_back(UINT32 argc, UCHAR *argv[])
- {
- CONSOLE_OUT("Going Back \n");
- cli_cmd_stack_pop();
- /* Print Help of the new level */
- cli_help(argc, argv);
- return API_SUCCESS;
- }
- /* Root */
- API_RESULT cli_root(UINT32 argc, UCHAR *argv[])
- {
- CONSOLE_OUT("Level - Root\n");
- /* Set Stack Pointer to Root */
- cli_cmd_list_sp = 0;
- cli_cmd_list_stack[cli_cmd_list_sp].cmd_list = (CLI_COMMAND *)cli_root_cmd_list;
- cli_cmd_list_stack[cli_cmd_list_sp].cmd_list_len = sizeof(cli_root_cmd_list) / sizeof(CLI_COMMAND);
- /* Print Help of the Root level */
- cli_help(argc, argv);
- return API_SUCCESS;
- }
- /* Log Level */
- API_RESULT cli_set_log_level(UINT32 argc, UCHAR *argv[])
- {
- UINT32 index;
- UCHAR * log_levels[4] = { "ERR", "TRC", "INF", "ALL" };
- CONSOLE_OUT("In Set Log Level\n");
- if (1 == argc)
- {
- for (index = 0; index < 4; index++)
- {
- if (0 == CLI_STR_COMPARE(argv[0], log_levels[index]))
- {
- break;
- }
- }
- if (index > 3)
- {
- CONSOLE_OUT("Invalid Argument:%s\n", argv[0]);
- return API_FAILURE;
- }
- if (index < 3)
- {
- index += 1;
- }
- EM_set_debug_level((UCHAR)index);
- CONSOLE_OUT("Set Log Level:0x%02X\n", (UCHAR)index);
- }
- else
- {
- CONSOLE_OUT("Invalid Number of Arguments:0x%04X\n", argc);
- }
- return API_SUCCESS;
- }
- /* Module related Utility Routines */
- void cli_gatt_bearer_iface_event_pl_cb
- (
- UCHAR ev_name,
- UCHAR ev_param
- )
- {
- switch(ev_name)
- {
- /* GATT Bearer BLE Link Layer Disconnected */
- case BLEBRR_GATT_IFACE_DOWN:
- CONSOLE_OUT("\r\n >> GATT Bearer BLE Link Layer Disconnection Event Received!\r\n");
- CONSOLE_OUT("Invoke relevant CLI Commands! \r\n");
- break;
- /* GATT Bearer BLE Link Layer Connected */
- case BLEBRR_GATT_IFACE_UP:
- CONSOLE_OUT("\r\n >> GATT Bearer BLE Link Layer Connection Event Received!\r\n");
- /**
- * TODO:
- * Check if this only when DUT is Unprovisioned Device!
- * also check if this needs to be done.
- */
- MS_prov_stop_interleave_timer();
- MS_brr_bcast_end(BRR_BCON_TYPE_UNPROV_DEVICE, BRR_BCON_ACTIVE);
- break;
- /* GATT Bearer Service Enabled for Communication */
- case BLEBRR_GATT_IFACE_ENABLE:
- CONSOLE_OUT("\r\n >> GATT Bearer Active Event Received!\r\n");
- {
- if (BLEBRR_GATT_PROV_MODE == ev_param)
- {
- /* Call to bind with the selected device */
- /**
- * TODO:
- * This needs to be made role Specific.
- * For Provisioner role, this below function needs to be
- * updated. Typically for Provisioner Role, "Bind" needs
- * to happen from the CLI command pointing to the desired
- * PROV_DEVICE_S of Remote Unprovisioned Device.
- */
- appl_prov_bind_device(PROV_BRR_GATT);
- }
- }
- break;
- /* GATT Bearer Service Disabled for Communication */
- case BLEBRR_GATT_IFACE_DISABLE:
- CONSOLE_OUT("\r\n >> GATT Bearer Inactive Event Received!\r\n");
- CONSOLE_OUT("Invoke relevant CLI Commands! \r\n");
- break;
- /* Unknown Event! */
- default:
- CONSOLE_OUT("\r\n >> GATT Bearer BLE Link Layer Unknown Event 0x%02X Received!\r\n", ev_name);
- break;
- }
- }
- #ifndef CLI_NO_MAIN
- int main (int argc, char **argv)
- {
- MS_IGNORE_UNUSED_PARAM(argc);
- MS_IGNORE_UNUSED_PARAM(argv);
- /* Initialize CLI */
- CLI_init();
- /* Set Root Command List and Length */
- cli_root(0, NULL);
- MS_LOOP_FOREVER()
- {
- /* */
- fgets(r_buf, sizeof(r_buf), stdin);
- CLI_process_line
- (
- r_buf,
- CLI_strlen(r_buf),
- cli_cmd_list_stack[cli_cmd_list_sp].cmd_list,
- cli_cmd_list_stack[cli_cmd_list_sp].cmd_list_len
- );
- }
- return 0;
- }
- #else /* CLI_NO_MAIN */
- void cli_input (char * cmd, int size)
- {
- CLI_process_line
- (
- (UCHAR *) cmd,
- size,
- cli_cmd_list_stack[cli_cmd_list_sp].cmd_list,
- cli_cmd_list_stack[cli_cmd_list_sp].cmd_list_len
- );
- }
- #endif /* CLI_NO_MAIN */
- #endif /* DEMO */
|