Added support for optional display of signed 16/32-bit integer Modbus register data

Change-Id: I2a81fdf426fdc20db200596ccd2eae26936fc81a
Reviewed-on: https://code.wireshark.org/review/9526
Reviewed-by: Graham Bloice <graham.bloice@trihedral.com>
Petri-Dish: Graham Bloice <graham.bloice@trihedral.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
This commit is contained in:
cbontje 2015-07-06 15:28:28 -06:00 committed by Pascal Quantin
parent b8f3888141
commit e9622175f7
2 changed files with 34 additions and 0 deletions

View File

@ -148,7 +148,9 @@ static int hf_modbus_next_object_id = -1;
static int hf_modbus_object_str_value = -1;
static int hf_modbus_object_value = -1;
static int hf_modbus_reg_uint16 = -1;
static int hf_modbus_reg_int16 = -1;
static int hf_modbus_reg_uint32 = -1;
static int hf_modbus_reg_int32 = -1;
static int hf_modbus_reg_ieee_float = -1;
static int hf_modbus_reg_modicon_float = -1;
static int hf_mbrtu_unitid = -1;
@ -389,7 +391,9 @@ static const value_string conformity_level_vals[] = {
static const enum_val_t mbus_register_format[] = {
{ "UINT16 ", "UINT16 ", MBTCP_PREF_REGISTER_FORMAT_UINT16 },
{ "INT16 ", "INT16 ", MBTCP_PREF_REGISTER_FORMAT_INT16 },
{ "UINT32 ", "UINT32 ", MBTCP_PREF_REGISTER_FORMAT_UINT32 },
{ "INT32 ", "INT32 ", MBTCP_PREF_REGISTER_FORMAT_INT32 },
{ "IEEE FLT ", "IEEE FLT ", MBTCP_PREF_REGISTER_FORMAT_IEEE_FLOAT },
{ "MODICON FLT", "MODICON FLT", MBTCP_PREF_REGISTER_FORMAT_MODICON_FLOAT },
{ NULL, NULL, 0 }
@ -763,6 +767,8 @@ dissect_modbus_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint8
gint payload_start, gint payload_len, guint8 register_format)
{
gint reported_len, data_offset, reg_num = 0;
gint16 data16s;
gint32 data32s;
guint16 data16, modflt_lo, modflt_hi;
guint32 data32, modflt_comb;
gfloat data_float, modfloat;
@ -812,6 +818,14 @@ dissect_modbus_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint8
register_item = proto_tree_add_uint(tree, hf_modbus_reg_uint16, next_tvb, data_offset, 2, data16);
proto_item_set_text(register_item, "Register %u (UINT16): %u", reg_num, data16);
data_offset += 2;
reg_num += 1;
break;
case MBTCP_PREF_REGISTER_FORMAT_INT16: /* Standard-size signed integer 16-bit register */
data16s = tvb_get_ntohs(next_tvb, data_offset);
register_item = proto_tree_add_int(tree, hf_modbus_reg_int16, next_tvb, data_offset, 2, data16s);
proto_item_set_text(register_item, "Register %u (INT16): %d", reg_num, data16s);
data_offset += 2;
reg_num += 1;
break;
@ -820,6 +834,14 @@ dissect_modbus_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint8
register_item = proto_tree_add_uint(tree, hf_modbus_reg_uint32, next_tvb, data_offset, 4, data32);
proto_item_set_text(register_item, "Register %u (UINT32): %u", reg_num, data32);
data_offset += 4;
reg_num += 2;
break;
case MBTCP_PREF_REGISTER_FORMAT_INT32: /* Double-size signed integer 2 x 16-bit registers */
data32s = tvb_get_ntohl(next_tvb, data_offset);
register_item = proto_tree_add_int(tree, hf_modbus_reg_int32, next_tvb, data_offset, 4, data32s);
proto_item_set_text(register_item, "Register %u (INT32): %d", reg_num, data32s);
data_offset += 4;
reg_num += 2;
break;
@ -1733,11 +1755,21 @@ proto_register_modbus(void)
FT_UINT16, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_modbus_reg_int16,
{ "Register (INT16)", "modbus.register.int16",
FT_INT16, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_modbus_reg_uint32,
{ "Register (UINT32)", "modbus.register.uint32",
FT_UINT32, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_modbus_reg_int32,
{ "Register (INT32)", "modbus.register.int32",
FT_INT32, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_modbus_reg_ieee_float,
{ "Register (IEEE Float)", "modbus.register.ieee_float",
FT_FLOAT, BASE_NONE, NULL, 0x0,

View File

@ -101,6 +101,8 @@
#define MBTCP_PREF_REGISTER_FORMAT_UINT32 1
#define MBTCP_PREF_REGISTER_FORMAT_IEEE_FLOAT 2
#define MBTCP_PREF_REGISTER_FORMAT_MODICON_FLOAT 3
#define MBTCP_PREF_REGISTER_FORMAT_INT16 4
#define MBTCP_PREF_REGISTER_FORMAT_INT32 5
#define MBTCP_PREF_REGISTER_ADDR_RAW 0
#define MBTCP_PREF_REGISTER_ADDR_MOD5 1