123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- /**
- * \file cli_demo.c
- *
- * This File contains the "main" function for the Demo application.
- */
- /*
- * Copyright (C) 2017. Mindtree Ltd.
- * All rights reserved.
- */
- #ifdef DEMO
- /* ------------------------------- Header File Inclusion */
- #include "MS_access_api.h"
- #include "MS_config_api.h"
- #include "MS_generic_onoff_api.h"
- #include "cliface.h"
- #include "blebrr.h"
- /* ------------------------------- Global Variables */
- /* Console Input/Output */
- #define CONSOLE_OUT(...) printf(__VA_ARGS__)
- #define CONSOLE_IN(...) scanf(__VA_ARGS__)
- /* Macro to declare a CLI Command Handler */
- #define CLI_CMD_HANDLER_DECL(x) \
- API_RESULT (x) (UINT32 arc, UCHAR * arv[])
- /* Macro to define an empty CLI Command Handler */
- #define CLI_CMD_HANDLER_EMPTY_DEF(x) \
- API_RESULT (x) (UINT32 argc, UCHAR * argv[]) \
- { \
- UINT32 index; \
- \
- CLI_APP_TRC(#x ". Argc %d\n", argc); \
- \
- for (index = 0; index < argc; index++) \
- { \
- CLI_APP_TRC("Argv[%d]: %s\n", index, argv[index]); \
- } \
- \
- return API_SUCCESS; \
- }
- /* CLI Command Handler declaration for configuration client */
- CLI_CMD_HANDLER_DECL( cli_help );
- CLI_CMD_HANDLER_DECL( cli_provisioning_mode_adv_set );
- CLI_CMD_HANDLER_DECL( cli_provisioning_mode_gatt_set );
- CLI_CMD_HANDLER_DECL( cli_proxy_mode_set );
- CLI_CMD_HANDLER_DECL( cli_provisioner_mode_set );
- CLI_CMD_HANDLER_DECL( cli_start_provisioning );
- CLI_CMD_HANDLER_DECL( cli_clear_persistent );
- CLI_CMD_HANDLER_DECL( cli_switchon );
- CLI_CMD_HANDLER_DECL( cli_switchoff );
- /* CLI Server command table */
- DECL_STATIC CLI_COMMAND cli_server_cmd_list[] =
- {
- /* Help */
- { "help", "Help Menu", cli_help },
- /* Set in provisioning mode */
- { "provadv", "Device for Provisioning over ADV", cli_provisioning_mode_adv_set },
- { "provgatt", "Device for Provisioning over GATT", cli_provisioning_mode_gatt_set },
- /* Switch to Proxy */
- { "proxy", "Device for Proxy", cli_proxy_mode_set},
- #ifdef DEMO_CLIENT
- { "on", "Switch ON Light", cli_switchon},
- { "off", "Switch OFF Light", cli_switchoff},
- #endif /* DEMO_CLIENT */
- /* Clear the Mesh Database from persistent store */
- { "reset", "Clear Persistent storage", cli_clear_persistent }
- };
- /* Debug Macros */
- /* TBD: Mapped with debug sub-system */
- #define CLI_APP_ERR(...) printf(__VA_ARGS__)
- #define CLI_APP_TRC(...) printf(__VA_ARGS__)
- #define CLI_APP_INF(...) printf(__VA_ARGS__)
- /* TODO: Remove */
- /* Current Test Case ID */
- UINT32 appl_mesh_test_id;
- #ifdef DEMO_CLIENT
- static MS_ACCESS_MODEL_HANDLE appl_generic_onoff_client_model_handle;
- API_RESULT appl_generic_onoff_client_cb
- (
- /* IN */ MS_ACCESS_MODEL_HANDLE * handle,
- /* IN */ UINT32 opcode,
- /* IN */ UCHAR * data_param,
- /* IN */ UINT16 data_len
- );
- #endif /* DEMO_CLIENT */
- /* ------------------------------- Functions */
- void cli_input (char * cmd, int size)
- {
- CLI_process_line
- (
- cmd,
- size,
- cli_server_cmd_list,
- (sizeof(cli_server_cmd_list) / sizeof(CLI_COMMAND))
- );
- }
- /* CLI Command Handler Defines */
- API_RESULT cli_help(UINT32 argc, UCHAR *argv[])
- {
- UINT32 index;
- /* Print all the available commands */
- for (index = 0; index < (sizeof(cli_server_cmd_list) / sizeof(CLI_COMMAND)); index++)
- {
- CONSOLE_OUT(" %s\n", cli_server_cmd_list[index].cmd);
- }
- return API_SUCCESS;
- }
- API_RESULT cli_demo_init(void)
- {
- MS_ACCESS_NODE_ID node_id;
- MS_ACCESS_ELEMENT_HANDLE element_handle;
- API_RESULT retval;
- /* Create Node */
- retval = MS_access_create_node(&node_id);
- if (API_SUCCESS == retval)
- {
- /* Register the Models */
- main_register_models();
- #ifndef DEMO_CLIENT
- /* Initialize Generic ON/OFF Server */
- main_generic_onoff_server_operations(MS_FALSE);
- #else /* DEMO_CLIENT */
- cli_modelc_generic_onoff_setup(0, NULL);
- #endif /* DEMO_CLIENT */
- }
- CONSOLE_OUT("Model Registration Status: 0x%04X\n", retval);
- return API_SUCCESS;
- }
- API_RESULT cli_provisioning_mode_adv_set(UINT32 argc, UCHAR *argv[])
- {
- appl_prov_register();
- appl_prov_setup(PROV_ROLE_DEVICE, PROV_BRR_ADV);
- return API_SUCCESS;
- }
- API_RESULT cli_provisioning_mode_gatt_set(UINT32 argc, UCHAR *argv[])
- {
- appl_prov_register();
- /* Set the role to Prov with bearer */
- blebrr_gatt_mode_set(BLEBRR_GATT_PROV_MODE);
- appl_prov_setup(PROV_ROLE_DEVICE, PROV_BRR_GATT);
- return API_SUCCESS;
- }
- API_RESULT cli_proxy_mode_set(UINT32 argc, UCHAR *argv[])
- {
- appl_proxy_register();
- appl_proxy_start_net_id_adv();
- return API_SUCCESS;
- }
- void appl_prov_register(void);
- void appl_prov_setup_provisioner(void);
- API_RESULT cli_provisioner_mode_set(UINT32 argc, UCHAR *argv[])
- {
- appl_prov_register();
- appl_prov_setup_provisioner();
- return API_SUCCESS;
- }
- void appl_prov_start_provisioning(void);
- API_RESULT cli_start_provisioning(UINT32 argc, UCHAR *argv[])
- {
- appl_prov_start_provisioning();
- return API_SUCCESS;
- }
- API_RESULT cli_config_gatt_proxy_get(UINT32 argc, UCHAR *argv[])
- {
- return MS_config_client_gatt_proxy_get();
- }
- API_RESULT cli_config_gatt_proxy_set(UINT32 argc, UCHAR *argv[])
- {
- ACCESS_CONFIG_GATT_PROXY_SET_PARAM proxy;
- proxy.proxy = 0x01;
- return MS_config_client_gatt_proxy_set(&proxy);
- }
- API_RESULT cli_clear_persistent(UINT32 argc, UCHAR *argv[])
- {
- nvs_reset();
- printf ("Persistent database Reset Success!");
- /* appl_set_prov_state(false); */
- return API_SUCCESS;
- }
- API_RESULT cli_switchon(UINT32 argc, UCHAR *argv[])
- {
- API_RESULT retval;
- MS_GENERIC_ONOFF_SET_STRUCT param;
- param.onoff= 0x01;
- param.tid= 0;
- param.optional_fields_present = 0x00;
- printf ("Switch ON!");
- retval = MS_generic_onoff_set_unacknowledged(¶m);
- printf ("Retval = 0x%04X\n", retval);
- return API_SUCCESS;
- }
- API_RESULT cli_switchoff(UINT32 argc, UCHAR *argv[])
- {
- API_RESULT retval;
- MS_GENERIC_ONOFF_SET_STRUCT param;
- param.onoff= 0x00;
- param.tid= 0;
- param.optional_fields_present = 0x00;
- printf ("Switch OFF!");
- retval = MS_generic_onoff_set_unacknowledged(¶m);
- printf ("Retval = 0x%04X\n", retval);
- return API_SUCCESS;
- }
- void appl_indicate_provisioning_state (void)
- {
- MS_NET_ADDR addr;
- MS_access_cm_get_primary_unicast_address (&addr);
- if (0x0000 == addr)
- {
- printf ("Device Not Provisioned!");
- /* Put device in provisioning over GATT */
- cli_provisioning_mode_gatt_set(0, NULL);
- }
- else
- {
- printf ("Device Provisioned!");
- /* Put device in Proxy over GATT */
- /* cli_proxy_mode_set(0, NULL); */
- }
- }
- #endif /* DEMO */
|