master dd allow arbitrary descriptor sizes

This commit is contained in:
aleks
2025-08-21 12:54:46 +02:00
parent 36b9ab1dff
commit 2f3c5727fe
2 changed files with 8 additions and 4 deletions

View File

@@ -133,10 +133,11 @@ typedef enum {
PARAM_SIZE_FLOAT = 0x04, /*!< Float 32 size */
PARAM_SIZE_ASCII = 0x08, /*!< ASCII size default*/
PARAM_SIZE_ASCII24 = 0x18, /*!< ASCII24 size */
PARAM_SIZE_ASCII_MAX = 0xFF, /*!< ASCII maximum size */
PARAM_SIZE_I64 = 0x08, /*!< Signed integer 64 size */
PARAM_SIZE_U64 = 0x08, /*!< Unsigned integer 64 size */
PARAM_SIZE_DOUBLE = 0x08, /*!< Double 64 size */
PARAM_MAX_SIZE
PARAM_SIZE_MAX = 0x7FFF
} mb_descr_size_t;
/**
@@ -169,7 +170,7 @@ typedef struct {
uint16_t mb_size; /*!< Size of mb parameter in registers */
uint32_t param_offset; /*!< Parameter name (OFFSET in the parameter structure or address of instance) */
mb_descr_type_t param_type; /*!< Float, U8, U16, U32, ASCII, etc. */
mb_descr_size_t param_size; /*!< Number of bytes in the parameter. */
size_t param_size; /*!< Number of bytes in the parameter. */
mb_parameter_opt_t param_opts; /*!< Parameter options used to check limits and etc. */
mb_param_perms_t access; /*!< Access permissions based on mode */
} mb_parameter_descriptor_t;

View File

@@ -16,7 +16,8 @@ enum {
// Enumeration of all supported CIDs for device (used in parameter definition table)
enum {
CID_DEV_REG0 = 0
CID_DEV_REG0 = 0,
CID_DEV_STRING
};
#define STR(fieldname) ((const char*)( fieldname ))
@@ -26,11 +27,13 @@ static void *pmaster_handle = nullptr;
static void *pslave_handle = nullptr;
// Example Data (Object) Dictionary for Modbus parameters
const mb_parameter_descriptor_t dummy_dict[] = {
constexpr mb_parameter_descriptor_t dummy_dict[] = {
// CID, Name, Units, Modbus addr, register type, Modbus Reg Start Addr, Modbus Reg read length,
// Instance offset (NA), Instance type, Instance length (bytes), Options (NA), Permissions
{ CID_DEV_REG0, STR("MB_hold_reg-0"), STR("Data"), MB_DEVICE_ADDR1, MB_PARAM_HOLDING, 0, 1,
0, PARAM_TYPE_U16, PARAM_SIZE_U16, OPTS( 0,0,0 ), PAR_PERMS_READ_WRITE_TRIGGER },
{ CID_DEV_STRING, STR("MB_hold_reg string"), STR("String"), MB_DEVICE_ADDR1, MB_PARAM_HOLDING, 2, 30,
0, PARAM_TYPE_ASCII, 60, OPTS( 0,0,0 ), PAR_PERMS_READ_WRITE_TRIGGER }
};
// Calculate number of parameters in the table