53 lines
2.0 KiB
Diff
53 lines
2.0 KiB
Diff
diff --git a/src/lcec_conf.c b/src/lcec_conf.c
|
|
index b0e9ad1..607c6d7 100644
|
|
--- a/src/lcec_conf.c
|
|
+++ b/src/lcec_conf.c
|
|
@@ -1267,6 +1267,11 @@ static void parsePdoEntryAttrs(LCEC_CONF_XML_INST_T *inst, int next, const char
|
|
p->halType = HAL_FLOAT;
|
|
continue;
|
|
}
|
|
+ if (strcasecmp(val, "float-lreal") == 0) {
|
|
+ p->subType = lcecPdoEntTypeFloatLREAL;
|
|
+ p->halType = HAL_FLOAT;
|
|
+ continue;
|
|
+ }
|
|
fprintf(stderr, "%s: ERROR: Invalid pdoEntry halType %s\n", modname, val);
|
|
XML_StopParser(inst->parser, 0);
|
|
return;
|
|
diff --git a/src/lcec_conf.h b/src/lcec_conf.h
|
|
index 5d9943c..2620938 100644
|
|
--- a/src/lcec_conf.h
|
|
+++ b/src/lcec_conf.h
|
|
@@ -56,7 +56,8 @@ typedef enum {
|
|
lcecPdoEntTypeFloatSigned,
|
|
lcecPdoEntTypeFloatUnsigned,
|
|
lcecPdoEntTypeComplex,
|
|
- lcecPdoEntTypeFloatIeee
|
|
+ lcecPdoEntTypeFloatIeee,
|
|
+ lcecPdoEntTypeFloatLREAL
|
|
} LCEC_PDOENT_TYPE_T;
|
|
|
|
typedef enum {
|
|
diff --git a/src/lcec_generic.c b/src/lcec_generic.c
|
|
index dfddf73..dde7164 100644
|
|
--- a/src/lcec_generic.c
|
|
+++ b/src/lcec_generic.c
|
|
@@ -78,7 +78,7 @@ int lcec_generic_init(int comp_id, struct lcec_slave *slave, ec_pdo_entry_reg_t
|
|
|
|
case HAL_FLOAT:
|
|
// check data size
|
|
- if (hal_data->bitLength > 32) {
|
|
+ if (!(hal_data->bitLength == 32 || hal_data->bitLength == 64)) {
|
|
rtapi_print_msg(RTAPI_MSG_WARN, LCEC_MSG_PFX "unable to export pin %s.%s.%s.%s: invalid process data bitlen!\n", LCEC_MODULE_NAME, master->name, slave->name, hal_data->name);
|
|
continue;
|
|
}
|
|
@@ -133,6 +133,8 @@ void lcec_generic_read(struct lcec_slave *slave, long period) {
|
|
fval = lcec_generic_read_u32(pd, hal_data);
|
|
} else if(hal_data->subType == lcecPdoEntTypeFloatIeee){
|
|
fval = EC_READ_REAL(&pd[hal_data->pdo_os]);
|
|
+ } else if(hal_data->subType == lcecPdoEntTypeFloatLREAL){
|
|
+ fval = EC_READ_LREAL(&pd[hal_data->pdo_os]);
|
|
} else {
|
|
fval = lcec_generic_read_s32(pd, hal_data);
|
|
}
|