123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573 |
- /**
- * \file cli_model_server.c
- *
- * This File contains the "model server" handlers for the CLI application,
- * to exercise various functionalities of the Mindtree Mesh stack.
- */
- /*
- * Copyright (C) 2017. Mindtree Ltd.
- * All rights reserved.
- */
- /* ------------------------------- Header File Inclusion */
- #include "cli_main.h"
- /* Model server application entry point */
- void main_generic_battery_server_operations(/* IN */ UINT8 have_menu);
- void main_generic_default_transition_time_server_operations(/* IN */ UINT8 have_menu);
- void main_generic_level_server_operations(/* IN */ UINT8 have_menu);
- void main_generic_location_server_operations(/* IN */ UINT8 have_menu);
- void main_generic_onoff_server_operations(/* IN */ UINT8 have_menu);
- void main_generic_power_level_server_operations(/* IN */ UINT8 have_menu);
- void main_generic_power_onoff_server_operations(/* IN */ UINT8 have_menu);
- void main_generic_property_server_operations(/* IN */ UINT8 have_menu);
- void main_health_server_operations(/* IN */ UINT8 have_menu);
- API_RESULT main_health_server_log_fault
- (
- /* IN */ UINT8 test_id,
- /* IN */ UINT8 fault
- );
- void main_light_ctl_server_operations(/* IN */ UINT8 have_menu);
- void main_light_hsl_server_operations(/* IN */ UINT8 have_menu);
- void main_light_lc_server_operations(/* IN */ UINT8 have_menu);
- void main_light_lightness_server_operations(/* IN */ UINT8 have_menu);
- void main_light_xyl_server_operations(/* IN */ UINT8 have_menu);
- void main_scene_server_operations(/* IN */ UINT8 have_menu);
- API_RESULT appl_model_light_lc_server_set_default_trans_timeout_in_ms(/* IN */ UINT32 time_in_ms);
- /* ------------------------------- Global Variables */
- /* Level - Model - Server */
- DECL_CONST CLI_COMMAND cli_models_cmd_list[] =
- {
- /* Help */
- { "help", "Help", cli_help },
- /* Back */
- { "back", "One Level Up", cli_back },
- /* Root */
- { "root", "Back to Root", cli_root },
- /* Reset */
- { "reset", "Emulate Reset", cli_models_reset },
- /* Foundation Model Setup */
- { "foundation", "Foundation Server Models Initialization", cli_models_foundation },
- #ifdef CLI_HEALTH_SERVER_MODEL
- /* Health Server Model Setup */
- { "health", "Health Server Options", cli_models_health },
- #endif /* CLI_HEALTH_SERVER_MODEL */
- #ifdef CLI_GENERICS_SERVER_MODEL
- /* Generics */
- { "generics", "Generic Server Options", cli_models_generics },
- #endif /* CLI_GENERICS_SERVER_MODEL */
- #if (defined CLI_GENERICS_SERVER_MODEL || defined CLI_LIGHTINGS_SERVER_MODEL)
- /* Scene */
- { "scene", "Scene Server Model Initialization", cli_models_scene },
- #endif /* (defined CLI_GENERICS_SERVER_MODEL || defined CLI_LIGHTINGS_SERVER_MODEL) */
- #ifdef CLI_LIGHTINGS_SERVER_MODEL
- /* Light */
- { "light", "Light Server Options", cli_models_light },
- #endif /* CLI_LIGHTINGS_SERVER_MODEL */
- #ifdef HAVE_VENDOR_MODEL_EXAMPLE_1
- /* Vendor Specific */
- { "vendor", "Vendor Specific", cli_models_vendor },
- #endif /* HAVE_VENDOR_MODEL_EXAMPLE_1 */
- };
- #ifdef CLI_HEALTH_SERVER_MODEL
- /* Level - Model = Server - Health */
- DECL_CONST CLI_COMMAND cli_models_health_cmd_list[] =
- {
- /* Help */
- { "help", "Help", cli_help },
- /* Back */
- { "back", "One Level Up", cli_back },
- /* Root */
- { "root", "Back to Root", cli_root },
- /* Model Server - Health - Log Fault */
- { "logfault", "Log Fault Values", cli_models_health_log_fault },
- /* Health - TODO: Temporary till model publication period is triggered */
- { "publishstatus", "Publish Health status", cli_health_status_publish }
- };
- #endif /* CLI_HEALTH_SERVER_MODEL */
- #ifdef CLI_GENERICS_SERVER_MODEL
- /* Level - Model = Server - Generics */
- DECL_CONST CLI_COMMAND cli_models_generics_cmd_list[] =
- {
- /* Help */
- { "help", "Help", cli_help },
- /* Back */
- { "back", "One Level Up", cli_back },
- /* Root */
- { "root", "Back to Root", cli_root },
- #ifdef CLI_GENERICS_ONOFF_SERVER_MODEL
- /* Model Server - Generics - OnOff */
- { "onoff", "OnOff Server Model Initialization", cli_models_generics_onoff },
- #endif /* CLI_GENERICS_ONOFF_SERVER_MODEL */
-
- #ifdef CLI_GENERICS_LEVEL_SERVER_MODEL
- /* Model Server - Generics - Level */
- { "level", "Level Server Model Initialization", cli_models_generics_level },
- #endif /* CLI_GENERICS_LEVEL_SERVER_MODEL */
-
- #ifdef CLI_GENERICS_TRANSITIONTIME_SERVER_MODEL
- /* Model Server - Generics - Default Transition Time */
- { "transitiontime", "Default Transition Time Server Model Initialization", cli_models_generics_default_transition_time },
- #endif /* CLI_GENERICS_TRANSITIONTIME_SERVER_MODEL */
-
- #ifdef CLI_GENERICS_PWRONOFF_SERVER_MODEL
- /* Model Server - Generics - Power OnOff */
- { "poweronoff", "Power OnOff Server Model Initialization", cli_models_generics_power_onoff },
- #endif /* CLI_GENERICS_PWRONOFF_SERVER_MODEL */
-
- #ifdef CLI_GENERICS_PWRLEVEL_SERVER_MODEL
- /* Model Server - Generics - Power Level */
- { "powerlevel", "Power Level Server Model Initialization", cli_models_generics_power_level },
- #endif /* CLI_GENERICS_PWRLEVEL_SERVER_MODEL */
-
- #ifdef CLI_GENERICS_BATTERY_SERVER_MODEL
- /* Model Server - Generics - Battery */
- { "battery", "Battery Server Model Initialization", cli_models_generics_battery },
- #endif /* CLI_GENERICS_BATTERY_SERVER_MODEL */
-
- #ifdef CLI_GENERICS_LOCATION_SERVER_MODEL
- /* Model Server - Generics - Location */
- { "location", "Location Server Model Initialization", cli_models_generics_location },
- #endif /* CLI_GENERICS_LOCATION_SERVER_MODEL */
-
- #ifdef CLI_GENERICS_PROPERTY_SERVER_MODEL
- /* Model Server - Generics - Property */
- { "property", "Property Server Model Initialization", cli_models_generics_property },
- #endif /* CLI_GENERICS_PROPERTY_SERVER_MODEL */
- };
- #endif /* CLI_GENERICS_SERVER_MODEL */
- #ifdef CLI_LIGHTINGS_SERVER_MODEL
- /* Level - Model = Server - Light */
- DECL_CONST CLI_COMMAND cli_models_light_cmd_list[] =
- {
- /* Help */
- { "help", "Help", cli_help },
- /* Back */
- { "back", "One Level Up", cli_back },
- /* Root */
- { "root", "Back to Root", cli_root },
- #ifdef CLI_LIGHTINGS_LIGHTNESS_SERVER_MODEL
- /* Model Server - Light Lightness */
- { "lightness", "Lightness Server Model Initialization", cli_models_light_lightness },
- #endif /* CLI_LIGHTINGS_LIGHTNESS_SERVER_MODEL */
-
- #ifdef CLI_LIGHTINGS_CTL_SERVER_MODEL
- /* Model Server - Light CTL */
- { "ctl", "CTL Server Model Initialization", cli_models_light_ctl },
- #endif /* CLI_LIGHTINGS_CTL_SERVER_MODEL */
-
- #ifdef CLI_LIGHTINGS_HSL_SERVER_MODEL
- /* Model Server - Light HSL */
- { "hsl", "HSL Server Model Initialization", cli_models_light_hsl },
- #endif /* CLI_LIGHTINGS_HSL_SERVER_MODEL */
-
- #ifdef CLI_LIGHTINGS_XYL_SERVER_MODEL
- /* Model Server - Light xyL */
- { "xyl", "xyL Server Model Initialization", cli_models_light_xyl },
- #endif /* CLI_LIGHTINGS_XYL_SERVER_MODEL */
-
- #ifdef CLI_LIGHTINGS_LC_SERVER_MODEL
- /* Model Server - Light LC */
- { "lc", "LC Server Model Initialization", cli_models_light_lc },
-
- /* Model Server - Set Default Transition Time in ms */
- { "lcsettranstime", "LC Set Default Transition time in ms", cli_models_light_lc_set_default_trans_timeout_in_ms}
- #endif /* CLI_LIGHTINGS_LC_SERVER_MODEL */
- };
- #endif /* CLI_LIGHTINGS_SERVER_MODEL */
- /* ------------------------------- Functions */
- /* Model Server */
- API_RESULT cli_model_server(UINT32 argc, UCHAR *argv[])
- {
- CONSOLE_OUT("In Model Server\n");
- cli_cmd_stack_push((CLI_COMMAND *)cli_models_cmd_list, sizeof(cli_models_cmd_list) / sizeof(CLI_COMMAND));
- cli_help(argc, argv);
- return API_SUCCESS;
- }
- /* Model Server - Foundation Models */
- #ifndef HSL_DONT_USE_MULTI_ELEMENTS
- /* Two additional elements are registerd for HSL Server */
- MS_ACCESS_ELEMENT_HANDLE sec_element_handle;
- MS_ACCESS_ELEMENT_HANDLE ter_element_handle;
- #endif /* HSL_DONT_USE_MULTI_ELEMENTS */
- API_RESULT cli_models_foundation(UINT32 argc, UCHAR *argv[])
- {
- MS_ACCESS_NODE_ID node_id;
- MS_ACCESS_ELEMENT_DESC element;
- MS_ACCESS_ELEMENT_HANDLE element_handle;
- MS_ACCESS_MODEL_HANDLE config_server_model_handle;
- API_RESULT retval;
- CONSOLE_OUT("In Model Server - Foundation Models\n");
- /* Create Node */
- retval = MS_access_create_node(&node_id);
- /* Register Element */
- /**
- * TBD: Define GATT Namespace Descriptions from
- * https://www.bluetooth.com/specifications/assigned-numbers/gatt-namespace-descriptors
- *
- * Using 'main' (0x0106) as Location temporarily.
- */
- element.loc = 0x0106;
- retval = MS_access_register_element
- (
- node_id,
- &element,
- &element_handle
- );
- #ifdef CLI_CONFIG_SERVER_MODEL
- if (API_SUCCESS == retval)
- {
- retval = MS_config_server_init(element_handle, &config_server_model_handle);
- }
- #endif /* CLI_CONFIG_SERVER_MODEL */
-
- CONSOLE_OUT("Model Registration Status: 0x%04X\n", retval);
- #ifdef CLI_HEALTH_SERVER_MODEL
- /* Health Server */
- main_health_server_operations(MS_FALSE);
- #endif /* CLI_HEALTH_SERVER_MODEL */
- #ifndef HSL_DONT_USE_MULTI_ELEMENTS
- /* Two additional elements are registerd for HSL Server */
- retval = MS_access_register_element
- (
- node_id,
- &element,
- &sec_element_handle
- );
- if (API_SUCCESS == retval)
- {
- CONSOLE_OUT("Secondary Element Handle Registered @: 0x%04X\n", sec_element_handle);
- }
- retval = MS_access_register_element
- (
- node_id,
- &element,
- &ter_element_handle
- );
- if (API_SUCCESS == retval)
- {
- CONSOLE_OUT("Tertiary Element Handle Registered @: 0x%04X\n", ter_element_handle);
- }
- #endif /* HSL_DONT_USE_MULTI_ELEMENTS */
- (void) config_server_model_handle;
- return API_SUCCESS;
- }
- #ifdef CLI_HEALTH_SERVER_MODEL
- /* Model Server - Health */
- API_RESULT cli_models_health(UINT32 argc, UCHAR *argv[])
- {
- CONSOLE_OUT("In Model Server - Health\n");
- cli_cmd_stack_push((CLI_COMMAND *)cli_models_health_cmd_list, sizeof(cli_models_health_cmd_list) / sizeof(CLI_COMMAND));
- cli_help(argc, argv);
- return API_SUCCESS;
- }
- /* Model Server - Health - Log Fault */
- API_RESULT cli_models_health_log_fault(UINT32 argc, UCHAR *argv[])
- {
- API_RESULT retval;
- int choice;
- UINT8 test_id, fault;
- CONSOLE_OUT("In Model Server - Health - Log Fault\n");
- retval = API_FAILURE;
- if (2 == argc)
- {
- choice = CLI_strtoi(argv[0], CLI_strlen(argv[0]), 16);
- test_id = (UINT8)choice;
- CONSOLE_OUT("Test ID (8-bit in HEX): 0x%02X\n", test_id);
- choice = CLI_strtoi(argv[1], CLI_strlen(argv[1]), 16);
- fault = (UINT8)choice;
- CONSOLE_OUT("Fault Value (8-bit in HEX): 0x%02X\n", fault);
- retval = main_health_server_log_fault(test_id, fault);
- }
- else
- {
- CONSOLE_OUT("Usage: logfault <test_id> <fault_code>\n");
- retval = API_FAILURE;
- }
- CONSOLE_OUT
- ("retval = 0x%04X\n", retval);
- return retval;
- }
- /* Health - TODO: Temporary till model publication period is triggered */
- API_RESULT cli_health_status_publish(UINT32 argc, UCHAR *argv[])
- {
- UCHAR current_status[4] = { 0x00, 0x6A, 0x00, 0x00 };
- if (1 != argc)
- {
- CONSOLE_OUT("Usage: publishstatus <current status>\n");
- return API_FAILURE;
- }
- current_status[0] = (UCHAR)CLI_strtoi(argv[0], CLI_strlen(argv[0]), 16);
- return MS_health_server_publish_current_status(current_status, sizeof(current_status));
- }
- #endif /* CLI_HEALTH_SERVER_MODEL */
- #ifdef CLI_GENERICS_SERVER_MODEL
- /* Model Server - Generics */
- API_RESULT cli_models_generics(UINT32 argc, UCHAR *argv[])
- {
- CONSOLE_OUT("In Model Server - Generics\n");
- cli_cmd_stack_push((CLI_COMMAND *)cli_models_generics_cmd_list, sizeof(cli_models_generics_cmd_list) / sizeof(CLI_COMMAND));
- cli_help(argc, argv);
- return API_SUCCESS;
- }
- /* Model Server - Generics - OnOff */
- API_RESULT cli_models_generics_onoff(UINT32 argc, UCHAR *argv[])
- {
- CONSOLE_OUT("In Model Server - Generics - OnOff\n");
- main_generic_onoff_server_operations(MS_FALSE);
- return API_SUCCESS;
- }
- /* Model Server - Generics - Level */
- API_RESULT cli_models_generics_level(UINT32 argc, UCHAR *argv[])
- {
- CONSOLE_OUT("In Model Server - Generics - Level\n");
- main_generic_level_server_operations(MS_FALSE);
- return API_SUCCESS;
- }
- /* Model Server - Generics - Default Transition Time */
- API_RESULT cli_models_generics_default_transition_time(UINT32 argc, UCHAR *argv[])
- {
- CONSOLE_OUT("In Model Server - Generics - Default Transition Time\n");
- main_generic_default_transition_time_server_operations(MS_FALSE);
- return API_SUCCESS;
- }
- /* Model Server - Generics - Power OnOff */
- API_RESULT cli_models_generics_power_onoff(UINT32 argc, UCHAR *argv[])
- {
- CONSOLE_OUT("In Model Server - Generics - Power OnOff\n");
- main_generic_power_onoff_server_operations(MS_FALSE);
- return API_SUCCESS;
- }
- /* Model Server - Generics - Power Level */
- API_RESULT cli_models_generics_power_level(UINT32 argc, UCHAR *argv[])
- {
- CONSOLE_OUT("In Model Server - Generics - Power Level\n");
- main_generic_power_level_server_operations(MS_FALSE);
- return API_SUCCESS;
- }
- /* Model Server - Generics - Battery */
- API_RESULT cli_models_generics_battery(UINT32 argc, UCHAR *argv[])
- {
- CONSOLE_OUT("In Model Server - Generics - Battery\n");
- main_generic_battery_server_operations(MS_FALSE);
- return API_SUCCESS;
- }
- /* Model Server - Generics - Location */
- API_RESULT cli_models_generics_location(UINT32 argc, UCHAR *argv[])
- {
- CONSOLE_OUT("In Model Server - Generics - Location\n");
- main_generic_location_server_operations(MS_FALSE);
- return API_SUCCESS;
- }
- /* Model Server - Generics - Property */
- API_RESULT cli_models_generics_property(UINT32 argc, UCHAR *argv[])
- {
- CONSOLE_OUT("In Model Server - Generics - Property\n");
- main_generic_property_server_operations(MS_FALSE);
- return API_SUCCESS;
- }
- #endif /* CLI_GENERICS_SERVER_MODEL */
- #if (defined CLI_GENERICS_SERVER_MODEL || defined CLI_LIGHTINGS_SERVER_MODEL)
- /* Model Server - Time and Scene */
- /* Model Server - Scene */
- API_RESULT cli_models_scene(UINT32 argc, UCHAR *argv[])
- {
- CONSOLE_OUT("In Model Server - Scene\n");
- main_scene_server_operations(MS_FALSE);
- return API_SUCCESS;
- }
- #endif /* (defined CLI_GENERICS_SERVER_MODEL || defined CLI_LIGHTINGS_SERVER_MODEL) */
- #ifdef CLI_LIGHTINGS_SERVER_MODEL
- /* Model Server - Light */
- API_RESULT cli_models_light(UINT32 argc, UCHAR *argv[])
- {
- CONSOLE_OUT("In Model Server - Light\n");
- cli_cmd_stack_push((CLI_COMMAND *)cli_models_light_cmd_list, sizeof(cli_models_light_cmd_list) / sizeof(CLI_COMMAND));
- cli_help(argc, argv);
- return API_SUCCESS;
- }
- /* Model Server - Light Lightness */
- API_RESULT cli_models_light_lightness(UINT32 argc, UCHAR *argv[])
- {
- CONSOLE_OUT("In Model Server - Light - Lightness\n");
- main_light_lightness_server_operations(MS_FALSE);
- return API_SUCCESS;
- }
- /* Model Server - Light CTL */
- API_RESULT cli_models_light_ctl(UINT32 argc, UCHAR *argv[])
- {
- CONSOLE_OUT("In Model Server - Light - CTL\n");
- main_light_ctl_server_operations(MS_FALSE);
- return API_SUCCESS;
- }
- /* Model Server - Light HSL */
- API_RESULT cli_models_light_hsl(UINT32 argc, UCHAR *argv[])
- {
- CONSOLE_OUT("In Model Server - Light - HSL\n");
- main_light_hsl_server_operations(MS_FALSE);
- return API_SUCCESS;
- }
- /* Model Server - Light xyL */
- API_RESULT cli_models_light_xyl(UINT32 argc, UCHAR *argv[])
- {
- CONSOLE_OUT("In Model Server - Light - xyL\n");
- main_light_xyl_server_operations(MS_FALSE);
- return API_SUCCESS;
- }
- /* Model Server - Light LC */
- API_RESULT cli_models_light_lc(UINT32 argc, UCHAR *argv[])
- {
- CONSOLE_OUT("In Model Server - Light - LC\n");
- main_light_lc_server_operations(MS_FALSE);
- return API_SUCCESS;
- }
- /* Model Server - Set Default Transition Time in ms */
- API_RESULT cli_models_light_lc_set_default_trans_timeout_in_ms(UINT32 argc, UCHAR *argv[])
- {
- UINT32 time_in_ms;
- CONSOLE_OUT("In Model Server - Light - LC - Set Default Timeout in ms\n");
- CONSOLE_OUT("In Core Provision Setup\n");
- if (1 != argc)
- {
- CONSOLE_OUT("Usage: lcsettranstime <timeout in ms in HEX>\n");
- return API_FAILURE;
- }
- time_in_ms = CLI_strtoi(argv[0], CLI_strlen(argv[0]), 16);
- appl_model_light_lc_server_set_default_trans_timeout_in_ms(time_in_ms);
- return API_SUCCESS;
- }
- #endif /* CLI_LIGHTINGS_SERVER_MODEL */
- #ifdef HAVE_VENDOR_MODEL_EXAMPLE_1
- /* Model Server - Vendor Example 1 */
- API_RESULT cli_models_vendor(UINT32 argc, UCHAR *argv[])
- {
- CONSOLE_OUT("In Model Server - Vendor\n");
- main_vendor_example_1_server_operations(MS_FALSE);
- return API_SUCCESS;
- }
- #endif /* HAVE_VENDOR_MODEL_EXAMPLE_1 */
- /* Reset */
- /* TODO: Shall be part of common reset called from root */
- API_RESULT cli_models_reset(UINT32 argc, UCHAR *argv[])
- {
- CONSOLE_OUT("In Model Server - calling RESET\n");
- appl_model_power_cycle();
- return API_SUCCESS;
- }
|