| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- /*********************************************************************
- * _ _ _
- * _ __ | |_ _ | | __ _ | |__ ___
- * | '__|| __|(_)| | / _` || '_ \ / __|
- * | | | |_ _ | || (_| || |_) |\__ \
- * |_| \__|(_)|_| \__,_||_.__/ |___/
- *
- * www.rt-labs.com
- * Copyright 2021 rt-labs AB, Sweden.
- *
- * This software is dual-licensed under GPLv3 and a commercial
- * license. See the file LICENSE.md distributed with this software for
- * full license information.
- ********************************************************************/
- #include "sampleapp_common.h"
- #include "app_utils.h"
- #include "app_gsdml.h"
- #include "app_log.h"
- #include "osal.h"
- #include "pnal.h"
- #include <pnet_api.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- /******************* Supported modules ***************************/
- static const app_gsdml_module_t dap_1 = {
- .id = PNET_MOD_DAP_IDENT,
- .name = "DAP 1",
- .submodules = {
- PNET_SUBMOD_DAP_IDENT,
- PNET_SUBMOD_DAP_INTERFACE_1_PORT_1_IDENT,
- PNET_SUBMOD_DAP_INTERFACE_1_PORT_2_IDENT,
- PNET_SUBMOD_DAP_INTERFACE_1_PORT_3_IDENT,
- PNET_SUBMOD_DAP_INTERFACE_1_PORT_4_IDENT,
- 0}};
- static const app_gsdml_module_t module_digital_in = {
- .id = APP_GSDML_MOD_ID_8_0_DIGITAL_IN,
- .name = "DI 8xLogicLevel",
- .submodules = {APP_GSDML_SUBMOD_ID_DIGITAL_IN, 0},
- };
- static const app_gsdml_module_t module_digital_out = {
- .id = APP_GSDML_MOD_ID_0_8_DIGITAL_OUT,
- .name = "DO 8xLogicLevel",
- .submodules = {APP_GSDML_SUBMOD_ID_DIGITAL_OUT, 0}};
- static const app_gsdml_module_t module_digital_in_out = {
- .id = APP_GSDML_MOD_ID_8_8_DIGITAL_IN_OUT,
- .name = "DIO 8xLogicLevel",
- .submodules = {APP_GSDML_SUBMOD_ID_DIGITAL_IN_OUT, 0}};
- static const app_gsdml_module_t module_echo = {
- .id = APP_GSDML_MOD_ID_ECHO,
- .name = "Echo module",
- .submodules = {APP_GSDML_SUBMOD_ID_ECHO, 0}};
- /******************* Supported submodules ************************/
- static const app_gsdml_submodule_t dap_indentity_1 = {
- .name = "DAP Identity 1",
- .api = APP_GSDML_API,
- .id = PNET_SUBMOD_DAP_IDENT,
- .data_dir = PNET_DIR_NO_IO,
- .insize = 0,
- .outsize = 0,
- .parameters = {0}};
- static const app_gsdml_submodule_t dap_interface_1 = {
- .name = "DAP Interface 1",
- .api = APP_GSDML_API,
- .id = PNET_SUBMOD_DAP_INTERFACE_1_IDENT,
- .data_dir = PNET_DIR_NO_IO,
- .insize = 0,
- .outsize = 0,
- .parameters = {0}};
- static const app_gsdml_submodule_t dap_port_1 = {
- .name = "DAP Port 1",
- .api = APP_GSDML_API,
- .id = PNET_SUBMOD_DAP_INTERFACE_1_PORT_1_IDENT,
- .data_dir = PNET_DIR_NO_IO,
- .insize = 0,
- .outsize = 0,
- .parameters = {0}};
- static const app_gsdml_submodule_t dap_port_2 = {
- .name = "DAP Port 2",
- .api = APP_GSDML_API,
- .id = PNET_SUBMOD_DAP_INTERFACE_1_PORT_2_IDENT,
- .data_dir = PNET_DIR_NO_IO,
- .insize = 0,
- .outsize = 0,
- .parameters = {0}};
- static const app_gsdml_submodule_t dap_port_3 = {
- .name = "DAP Port 3",
- .api = APP_GSDML_API,
- .id = PNET_SUBMOD_DAP_INTERFACE_1_PORT_3_IDENT,
- .data_dir = PNET_DIR_NO_IO,
- .insize = 0,
- .outsize = 0,
- .parameters = {0}};
- static const app_gsdml_submodule_t dap_port_4 = {
- .name = "DAP Port 4",
- .api = APP_GSDML_API,
- .id = PNET_SUBMOD_DAP_INTERFACE_1_PORT_4_IDENT,
- .data_dir = PNET_DIR_NO_IO,
- .insize = 0,
- .outsize = 0,
- .parameters = {0}};
- static const app_gsdml_submodule_t submod_digital_in = {
- .id = APP_GSDML_SUBMOD_ID_DIGITAL_IN,
- .name = "Digital Input",
- .api = APP_GSDML_API,
- .data_dir = PNET_DIR_INPUT,
- .insize = APP_GSDML_INPUT_DATA_DIGITAL_SIZE,
- .outsize = 0,
- .parameters = {0}};
- static const app_gsdml_submodule_t submod_digital_out = {
- .id = APP_GSDML_SUBMOD_ID_DIGITAL_OUT,
- .name = "Digital Output",
- .api = APP_GSDML_API,
- .data_dir = PNET_DIR_OUTPUT,
- .insize = 0,
- .outsize = APP_GSDML_OUTPUT_DATA_DIGITAL_SIZE,
- .parameters = {0}};
- static const app_gsdml_submodule_t submod_digital_inout = {
- .id = APP_GSDML_SUBMOD_ID_DIGITAL_IN_OUT,
- .name = "Digital Input/Output",
- .api = APP_GSDML_API,
- .data_dir = PNET_DIR_IO,
- .insize = APP_GSDML_INPUT_DATA_DIGITAL_SIZE,
- .outsize = APP_GSDML_OUTPUT_DATA_DIGITAL_SIZE,
- .parameters = {APP_GSDML_PARAMETER_1_IDX, APP_GSDML_PARAMETER_2_IDX, 0}};
- static const app_gsdml_submodule_t submod_echo = {
- .id = APP_GSDML_SUBMOD_ID_ECHO,
- .name = "Echo submodule",
- .api = APP_GSDML_API,
- .data_dir = PNET_DIR_IO,
- .insize = APP_GSDML_INPUT_DATA_ECHO_SIZE,
- .outsize = APP_GSDML_OUTPUT_DATA_ECHO_SIZE,
- .parameters = {APP_GSDML_PARAMETER_ECHO_IDX, 0}};
- /** List of supported modules */
- static const app_gsdml_module_t * app_gsdml_modules[] = {
- &dap_1,
- &module_digital_in,
- &module_digital_out,
- &module_digital_in_out,
- &module_echo};
- /** List of supported submodules */
- static const app_gsdml_submodule_t * app_gsdml_submodules[] = {
- &dap_indentity_1,
- &dap_interface_1,
- &dap_port_1,
- &dap_port_2,
- &dap_port_3,
- &dap_port_4,
- &submod_digital_in,
- &submod_digital_out,
- &submod_digital_inout,
- &submod_echo,
- };
- /* List of supported parameters.
- * Note that parameters are submodule attributes.
- * This list contain all parameters while each
- * submodule list its supported parameters using
- * their indexes.
- */
- static app_gsdml_param_t app_gsdml_parameters[] = {
- {
- .index = APP_GSDML_PARAMETER_1_IDX,
- .name = "Demo 1",
- .length = APP_GSDML_PARAMETER_LENGTH,
- },
- {
- .index = APP_GSDML_PARAMETER_2_IDX,
- .name = "Demo 2",
- .length = APP_GSDML_PARAMETER_LENGTH,
- },
- {
- .index = APP_GSDML_PARAMETER_ECHO_IDX,
- .name = "Echo gain setting",
- .length = APP_GSDML_PARAMETER_LENGTH,
- }};
- const app_gsdml_module_t * app_gsdml_get_module_cfg (uint32_t id)
- {
- uint32_t i;
- for (i = 0; i < NELEMENTS (app_gsdml_modules); i++)
- {
- if (app_gsdml_modules[i]->id == id)
- {
- return app_gsdml_modules[i];
- }
- }
- return NULL;
- }
- const app_gsdml_submodule_t * app_gsdml_get_submodule_cfg (uint32_t id)
- {
- uint32_t i;
- for (i = 0; i < NELEMENTS (app_gsdml_submodules); i++)
- {
- if (app_gsdml_submodules[i]->id == id)
- {
- return app_gsdml_submodules[i];
- }
- }
- return NULL;
- }
- const app_gsdml_param_t * app_gsdml_get_parameter_cfg (
- uint32_t submodule_id,
- uint32_t index)
- {
- uint16_t i;
- uint16_t j;
- const app_gsdml_submodule_t * submodule_cfg =
- app_gsdml_get_submodule_cfg (submodule_id);
- if (submodule_cfg == NULL)
- {
- /* Unsupported submodule id */
- return NULL;
- }
- /* Search for parameter index in submodule configuration */
- for (i = 0; submodule_cfg->parameters[i] != 0; i++)
- {
- if (submodule_cfg->parameters[i] == index)
- {
- /* Find parameter configuration */
- for (j = 0; j < NELEMENTS (app_gsdml_parameters); j++)
- {
- if (app_gsdml_parameters[j].index == index)
- {
- return &app_gsdml_parameters[j];
- }
- }
- }
- }
- return NULL;
- }
|