merged add-ax5100 into ms300

This commit is contained in:
dbraun1981
2021-11-26 19:24:07 +01:00
23 changed files with 2709 additions and 487 deletions

View File

@@ -37,11 +37,19 @@
#include "lcec_el70x1.h"
#include "lcec_el7411.h"
typedef enum {
MODPARAM_TYPE_BIT,
MODPARAM_TYPE_U32,
MODPARAM_TYPE_S32,
MODPARAM_TYPE_FLOAT,
MODPARAM_TYPE_STRING
} LCEC_CONF_MODPARAM_TYPE_T;
typedef struct {
const char *name;
int id;
hal_type_t type;
int pdoMappingCount;
LCEC_CONF_MODPARAM_TYPE_T type;
} LCEC_CONF_MODPARAM_DESC_T;
typedef struct {
@@ -56,13 +64,15 @@ typedef struct {
} LCEC_CONF_HAL_T;
static const LCEC_CONF_MODPARAM_DESC_T slaveStMDS5kParams[] = {
{ "isMultiturn", LCEC_STMDS5K_PARAM_MULTITURN, HAL_BIT, 0 } ,
{ "extEnc", LCEC_STMDS5K_PARAM_EXTENC, HAL_U32, LCEC_STMDS5K_EXTINC_PDOS } ,
{ "isMultiturn", LCEC_STMDS5K_PARAM_MULTITURN, MODPARAM_TYPE_BIT } ,
{ "extEnc", LCEC_STMDS5K_PARAM_EXTENC, MODPARAM_TYPE_U32 } ,
{ NULL }
};
static const LCEC_CONF_MODPARAM_DESC_T slaveEL6900Params[] = {
{ "fsoeSlaveIdx", LCEC_EL6900_PARAM_SLAVEID, HAL_U32, LCEC_EL6900_PARAM_SLAVEID_PDOS } ,
{ "fsoeSlaveIdx", LCEC_EL6900_PARAM_SLAVEID, MODPARAM_TYPE_U32 } ,
{ "stdInName", LCEC_EL6900_PARAM_STDIN_NAME, MODPARAM_TYPE_STRING } ,
{ "stdOutName", LCEC_EL6900_PARAM_STDOUT_NAME, MODPARAM_TYPE_STRING } ,
{ NULL }
};
@@ -116,6 +126,7 @@ static const LCEC_CONF_TYPELIST_T slaveTypes[] = {
{ "generic", lcecSlaveTypeGeneric, NULL },
// AX5000 servo drives
{ "AX5112", lcecSlaveTypeAX5112, NULL },
{ "AX5203", lcecSlaveTypeAX5203, NULL },
{ "AX5206", lcecSlaveTypeAX5206, NULL },
@@ -249,6 +260,7 @@ static const LCEC_CONF_TYPELIST_T slaveTypes[] = {
{ "EL1918_LOGIC", lcecSlaveTypeEL1918_LOGIC, slaveEL1918_LOGICParams },
{ "EL1904", lcecSlaveTypeEL1904, NULL },
{ "EL2904", lcecSlaveTypeEL2904, NULL },
{ "AX5805", lcecSlaveTypeAX5805, NULL },
// multi axis interface
{ "EM7004", lcecSlaveTypeEM7004, NULL },
@@ -1477,7 +1489,7 @@ static void parseModParamAttrs(LCEC_CONF_XML_INST_T *inst, int next, const char
// try to parse value
char *s = NULL;
switch (modParams->type) {
case HAL_BIT:
case MODPARAM_TYPE_BIT:
if ((strcmp("1", pval) == 0) || (strcasecmp("TRUE", pval) == 0)) {
p->value.bit = 1;
} else if ((strcmp("0", pval) == 0) || (strcasecmp("FALSE", pval)) == 0) {
@@ -1488,7 +1500,8 @@ static void parseModParamAttrs(LCEC_CONF_XML_INST_T *inst, int next, const char
return;
}
break;
case HAL_U32:
case MODPARAM_TYPE_U32:
p->value.u32 = strtoul(pval, &s, 0);
if (*s != 0) {
fprintf(stderr, "%s: ERROR: Invalid modParam u32 value '%s' for param '%s'\n", modname, pval, pname);
@@ -1496,7 +1509,8 @@ static void parseModParamAttrs(LCEC_CONF_XML_INST_T *inst, int next, const char
return;
}
break;
case HAL_S32:
case MODPARAM_TYPE_S32:
p->value.s32 = strtol(pval, &s, 0);
if (*s != 0) {
fprintf(stderr, "%s: ERROR: Invalid modParam s32 value '%s' for param '%s'\n", modname, pval, pname);
@@ -1504,7 +1518,8 @@ static void parseModParamAttrs(LCEC_CONF_XML_INST_T *inst, int next, const char
return;
}
break;
case HAL_FLOAT:
case MODPARAM_TYPE_FLOAT:
p->value.flt = strtod(pval, &s);
if (*s != 0) {
fprintf(stderr, "%s: ERROR: Invalid modParam float value '%s' for param '%s'\n", modname, pval, pname);
@@ -1512,12 +1527,16 @@ static void parseModParamAttrs(LCEC_CONF_XML_INST_T *inst, int next, const char
return;
}
break;
case MODPARAM_TYPE_STRING:
strncpy(p->value.str, pval, LCEC_CONF_STR_MAXLEN - 1);
break;
default:
p->value.u32 = 0;
break;
}
(state->currSlave->pdoMappingCount) += modParams->pdoMappingCount;
(state->currSlave->modParamCount)++;
}