c9fe825657
1. Добавил скрипт build.sh - собирает библиотеку pnet и группирует получившиеся файлы в папку install, туда же помещает библиотеку osal. Теперь все библиотеки и их заголовки в одном месте, а не распизаны по папкам в папке build. 2. Добавил проект sample_app в папку profinet_test. Он отвязан от процесса сборки pnet и использует уже собранную библиотеку из папки install.
261 lines
6.9 KiB
C
261 lines
6.9 KiB
C
/*********************************************************************
|
|
* _ _ _
|
|
* _ __ | |_ _ | | __ _ | |__ ___
|
|
* | '__|| __|(_)| | / _` || '_ \ / __|
|
|
* | | | |_ _ | || (_| || |_) |\__ \
|
|
* |_| \__|(_)|_| \__,_||_.__/ |___/
|
|
*
|
|
* 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;
|
|
}
|