aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorRyan Mullen <rmmullen@gmail.com>2017-10-24 23:08:49 -0400
committerAlexis La Goutte <alexis.lagoutte@gmail.com>2017-10-25 18:48:18 +0000
commit091607f8eb336ff51f875918574c12256382c49e (patch)
treeccf53f515ab407ad5c60d0d897e2d02929ac1c2e /epan
parent0e7d2542b0fdc12ef4e0c223d5fe3ecf2b5d669c (diff)
rdm: Support NACK_REASON and fix a PD dissector
- Introduce support for the NACK_REASON response type - Tweak the PD dissector for DMX_PERSONALITY_DESCRIPTION, which misinterpreted the "Personality Requested" field and used the wrong length for the "DMX512 Slots Required" field Change-Id: If5bc64f82e531e6cfb03a508c335b0468bf6e836 Reviewed-on: https://code.wireshark.org/review/24048 Reviewed-by: Michael Mann <mmann78@netscape.net> Petri-Dish: Michael Mann <mmann78@netscape.net> Tested-by: Petri Dish Buildbot Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
Diffstat (limited to 'epan')
-rw-r--r--epan/dissectors/packet-rdm.c400
1 files changed, 228 insertions, 172 deletions
diff --git a/epan/dissectors/packet-rdm.c b/epan/dissectors/packet-rdm.c
index bdc146a0a8..c0c427ac67 100644
--- a/epan/dissectors/packet-rdm.c
+++ b/epan/dissectors/packet-rdm.c
@@ -82,6 +82,33 @@ static const value_string rdm_rt_vals[] = {
{ 0, NULL },
};
+#define RDM_NR_UNKNOWN_PID 0x0000
+#define RDM_NR_FORMAT_ERROR 0x0001
+#define RDM_NR_HARDWARE_FAULT 0x0002
+#define RDM_NR_PROXY_REJECT 0x0003
+#define RDM_NR_WRITE_PROTECT 0x0004
+#define RDM_NR_UNSUPPORTED_COMMAND_CLASS 0x0005
+#define RDM_NR_DATA_OUT_OF_RANGE 0x0006
+#define RDM_NR_BUFFER_FULL 0x0007
+#define RDM_NR_PACKET_SIZE_UNSUPPORTED 0x0008
+#define RDM_NR_SUB_DEVICE_OUT_OF_RANGE 0x0009
+#define RDM_NR_PROXY_BUFFER_FULL 0x000A
+
+static const value_string rdm_nr_vals[] = {
+ { RDM_NR_UNKNOWN_PID, "Unknown PID" },
+ { RDM_NR_FORMAT_ERROR, "Format Error" },
+ { RDM_NR_HARDWARE_FAULT, "Hardware Fault" },
+ { RDM_NR_PROXY_REJECT, "Proxy Reject" },
+ { RDM_NR_WRITE_PROTECT, "Write Protect" },
+ { RDM_NR_UNSUPPORTED_COMMAND_CLASS, "Unsupported Command Class" },
+ { RDM_NR_DATA_OUT_OF_RANGE, "Data Out Of Range" },
+ { RDM_NR_BUFFER_FULL, "Buffer Full" },
+ { RDM_NR_PACKET_SIZE_UNSUPPORTED, "Packet Size Unsupported" },
+ { RDM_NR_SUB_DEVICE_OUT_OF_RANGE, "Sub-Device Out Of Range" },
+ { RDM_NR_PROXY_BUFFER_FULL, "Proxy Buffer Full" },
+ { 0, NULL },
+};
+
#define RDM_PARAM_ID_DISC_UNIQUE_BRANCH 0x0001
#define RDM_PARAM_ID_DISC_MUTE 0x0002
#define RDM_PARAM_ID_DISC_UN_MUTE 0x0003
@@ -544,6 +571,8 @@ static int hf_rdm_checksum = -1;
static int hf_rdm_checksum_status = -1;
static int hf_rdm_trailer = -1;
+static int hf_rdm_pd_nack_reason = -1;
+
static int hf_rdm_pd_device_label = -1;
static int hf_rdm_pd_manu_label = -1;
@@ -651,7 +680,7 @@ static int hf_rdm_pd_product_detail_id_list = -1;
static int hf_rdm_pd_factory_defaults = -1;
static int hf_rdm_pd_dmx_pers_nr = -1;
static int hf_rdm_pd_dmx_pers_count = -1;
-static int hf_rdm_pd_dmx_pers_description = -1;
+static int hf_rdm_pd_dmx_pers_requested = -1;
static int hf_rdm_pd_dmx_pers_slots = -1;
static int hf_rdm_pd_dmx_pers_text = -1;
static int hf_rdm_pd_slot_offset = -1;
@@ -677,6 +706,20 @@ rdm_checksum(tvbuff_t *tvb, guint length)
}
static guint
+dissect_rdm_pd_nack_reason(tvbuff_t *tvb, guint offset, proto_tree *tree, guint8 cc, guint8 len _U_)
+{
+ switch(cc) {
+ case RDM_CC_GET_COMMAND_RESPONSE:
+ case RDM_CC_SET_COMMAND_RESPONSE:
+ proto_tree_add_item(tree, hf_rdm_pd_nack_reason, tvb, offset, 2, ENC_BIG_ENDIAN);
+ offset += 2;
+ break;
+ }
+
+ return offset;
+}
+
+static guint
dissect_rdm_pd_queued_message(tvbuff_t *tvb, guint offset, proto_tree *tree, guint8 cc, guint8 len _U_)
{
switch(cc) {
@@ -1340,18 +1383,18 @@ dissect_rdm_pd_dmx_personality_description(tvbuff_t *tvb, guint offset, proto_tr
{
switch(cc) {
case RDM_CC_GET_COMMAND:
- proto_tree_add_item(tree, hf_rdm_pd_dmx_pers_description, tvb,
- offset, 1, ENC_ASCII|ENC_NA);
+ proto_tree_add_item(tree, hf_rdm_pd_dmx_pers_requested, tvb,
+ offset, 1, ENC_BIG_ENDIAN);
offset += 1;
break;
case RDM_CC_GET_COMMAND_RESPONSE:
- proto_tree_add_item(tree, hf_rdm_pd_dmx_pers_description, tvb,
- offset, 1, ENC_ASCII|ENC_NA);
- offset += 1;
- proto_tree_add_item(tree, hf_rdm_pd_dmx_pers_slots, tvb,
+ proto_tree_add_item(tree, hf_rdm_pd_dmx_pers_requested, tvb,
offset, 1, ENC_BIG_ENDIAN);
offset += 1;
+ proto_tree_add_item(tree, hf_rdm_pd_dmx_pers_slots, tvb,
+ offset, 2, ENC_BIG_ENDIAN);
+ offset += 2;
proto_tree_add_item(tree, hf_rdm_pd_dmx_pers_text, tvb,
offset, (len - 3), ENC_ASCII|ENC_NA);
offset += (len - 3);
@@ -1767,6 +1810,7 @@ dissect_rdm_mdb(tvbuff_t *tvb, guint offset, proto_tree *tree)
{
guint8 cc;
guint16 param_id;
+ guint8 response_type = 0x00;
guint8 parameter_data_length;
proto_tree *hi,*si, *mdb_tree;
@@ -1784,6 +1828,7 @@ dissect_rdm_mdb(tvbuff_t *tvb, guint offset, proto_tree *tree)
case RDM_CC_DISCOVERY_COMMAND_RESPONSE:
case RDM_CC_GET_COMMAND_RESPONSE:
case RDM_CC_SET_COMMAND_RESPONSE:
+ response_type = tvb_get_guint8(tvb, offset);
proto_tree_add_item(tree, hf_rdm_response_type, tvb,
offset, 1, ENC_BIG_ENDIAN);
offset += 1;
@@ -1823,220 +1868,226 @@ dissect_rdm_mdb(tvbuff_t *tvb, guint offset, proto_tree *tree)
offset, parameter_data_length, ENC_NA);
si = proto_item_add_subtree(hi,ett_rdm);
- switch(param_id) {
- case RDM_PARAM_ID_SENSOR_VALUE:
- offset = dissect_rdm_pd_sensor_value(tvb, offset, si, cc, parameter_data_length);
- break;
+ if (response_type == RDM_RESPONSE_TYPE_NACK_REASON) {
+ offset = dissect_rdm_pd_nack_reason(tvb, offset, si, cc, parameter_data_length);
- case RDM_PARAM_ID_QUEUED_MESSAGE:
- offset = dissect_rdm_pd_queued_message(tvb, offset, si, cc, parameter_data_length);
- break;
+ } else {
- case RDM_PARAM_ID_DMX_START_ADDRESS:
- offset = dissect_rdm_pd_dmx_start_address(tvb, offset, si, cc, parameter_data_length);
- break;
+ switch(param_id) {
+ case RDM_PARAM_ID_SENSOR_VALUE:
+ offset = dissect_rdm_pd_sensor_value(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_DEVICE_INFO:
- offset = dissect_rdm_pd_device_info(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_QUEUED_MESSAGE:
+ offset = dissect_rdm_pd_queued_message(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_DEVICE_MODEL_DESCRIPTION:
- offset = dissect_rdm_pd_device_model_description(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_DMX_START_ADDRESS:
+ offset = dissect_rdm_pd_dmx_start_address(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_DEVICE_LABEL:
- offset = dissect_rdm_pd_device_label(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_DEVICE_INFO:
+ offset = dissect_rdm_pd_device_info(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_DEVICE_HOURS:
- offset = dissect_rdm_pd_device_hours(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_DEVICE_MODEL_DESCRIPTION:
+ offset = dissect_rdm_pd_device_model_description(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_LAMP_HOURS:
- offset = dissect_rdm_pd_lamp_hours(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_DEVICE_LABEL:
+ offset = dissect_rdm_pd_device_label(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_LAMP_STRIKES:
- offset = dissect_rdm_pd_lamp_strikes(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_DEVICE_HOURS:
+ offset = dissect_rdm_pd_device_hours(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_SENSOR_DEFINITION:
- offset = dissect_rdm_pd_sensor_definition(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_LAMP_HOURS:
+ offset = dissect_rdm_pd_lamp_hours(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_MANUFACTURER_LABEL:
- offset = dissect_rdm_pd_manufacturer_label(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_LAMP_STRIKES:
+ offset = dissect_rdm_pd_lamp_strikes(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_DISC_UNIQUE_BRANCH:
- offset = dissect_rdm_pd_disc_unique_branch(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_SENSOR_DEFINITION:
+ offset = dissect_rdm_pd_sensor_definition(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_DISC_MUTE:
- offset = dissect_rdm_pd_disc_mute(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_MANUFACTURER_LABEL:
+ offset = dissect_rdm_pd_manufacturer_label(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_DISC_UN_MUTE:
- offset = dissect_rdm_pd_disc_un_mute(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_DISC_UNIQUE_BRANCH:
+ offset = dissect_rdm_pd_disc_unique_branch(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_PROXIED_DEVICES:
- offset = dissect_rdm_pd_proxied_devices(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_DISC_MUTE:
+ offset = dissect_rdm_pd_disc_mute(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_PROXIED_DEVICE_COUNT:
- offset = dissect_rdm_pd_proxied_device_count(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_DISC_UN_MUTE:
+ offset = dissect_rdm_pd_disc_un_mute(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_COMMS_STATUS:
- offset = dissect_rdm_pd_comms_status(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_PROXIED_DEVICES:
+ offset = dissect_rdm_pd_proxied_devices(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_STATUS_MESSAGES:
- offset = dissect_rdm_pd_status_messages(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_PROXIED_DEVICE_COUNT:
+ offset = dissect_rdm_pd_proxied_device_count(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_STATUS_ID_DESCRIPTION:
- offset = dissect_rdm_pd_status_id_description(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_COMMS_STATUS:
+ offset = dissect_rdm_pd_comms_status(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_CLEAR_STATUS_ID:
- offset = dissect_rdm_pd_clear_status_id(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_STATUS_MESSAGES:
+ offset = dissect_rdm_pd_status_messages(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_SUB_DEVICE_STATUS_REPORT_THRESHOLD:
- offset = dissect_rdm_pd_sub_device_status_report_threshold(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_STATUS_ID_DESCRIPTION:
+ offset = dissect_rdm_pd_status_id_description(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_SUPPORTED_PARAMETERS:
- offset = dissect_rdm_pd_supported_parameters(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_CLEAR_STATUS_ID:
+ offset = dissect_rdm_pd_clear_status_id(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_PARAMETER_DESCRIPTION:
- offset = dissect_rdm_pd_parameter_description(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_SUB_DEVICE_STATUS_REPORT_THRESHOLD:
+ offset = dissect_rdm_pd_sub_device_status_report_threshold(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_PRODUCT_DETAIL_ID_LIST:
- offset = dissect_rdm_pd_product_detail_id_list(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_SUPPORTED_PARAMETERS:
+ offset = dissect_rdm_pd_supported_parameters(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_FACTORY_DEFAULTS:
- offset = dissect_rdm_pd_factory_defaults(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_PARAMETER_DESCRIPTION:
+ offset = dissect_rdm_pd_parameter_description(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_LANGUAGE_CAPABILITIES:
- offset = dissect_rdm_pd_language_capabilities(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_PRODUCT_DETAIL_ID_LIST:
+ offset = dissect_rdm_pd_product_detail_id_list(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_LANGUAGE:
- offset = dissect_rdm_pd_language(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_FACTORY_DEFAULTS:
+ offset = dissect_rdm_pd_factory_defaults(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_SOFTWARE_VERSION_LABEL:
- offset = dissect_rdm_pd_software_version_label(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_LANGUAGE_CAPABILITIES:
+ offset = dissect_rdm_pd_language_capabilities(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_BOOT_SOFTWARE_VERSION_ID:
- offset = dissect_rdm_pd_boot_software_version_id(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_LANGUAGE:
+ offset = dissect_rdm_pd_language(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_BOOT_SOFTWARE_VERSION_LABEL:
- offset = dissect_rdm_pd_boot_software_version_label(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_SOFTWARE_VERSION_LABEL:
+ offset = dissect_rdm_pd_software_version_label(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_DMX_PERSONALITY:
- offset = dissect_rdm_pd_dmx_personality(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_BOOT_SOFTWARE_VERSION_ID:
+ offset = dissect_rdm_pd_boot_software_version_id(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_DMX_PERSONALITY_DESCRIPTION:
- offset = dissect_rdm_pd_dmx_personality_description(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_BOOT_SOFTWARE_VERSION_LABEL:
+ offset = dissect_rdm_pd_boot_software_version_label(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_SLOT_INFO:
- offset = dissect_rdm_pd_slot_info(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_DMX_PERSONALITY:
+ offset = dissect_rdm_pd_dmx_personality(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_SLOT_DESCRIPTION:
- offset = dissect_rdm_pd_slot_description(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_DMX_PERSONALITY_DESCRIPTION:
+ offset = dissect_rdm_pd_dmx_personality_description(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_DEFAULT_SLOT_VALUE:
- offset = dissect_rdm_pd_slot_value(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_SLOT_INFO:
+ offset = dissect_rdm_pd_slot_info(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_RECORD_SENSORS:
- offset = dissect_rdm_pd_record_sensors(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_SLOT_DESCRIPTION:
+ offset = dissect_rdm_pd_slot_description(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_LAMP_STATE:
- offset = dissect_rdm_pd_lamp_state(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_DEFAULT_SLOT_VALUE:
+ offset = dissect_rdm_pd_slot_value(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_LAMP_ON_MODE:
- offset = dissect_rdm_pd_lamp_on_mode(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_RECORD_SENSORS:
+ offset = dissect_rdm_pd_record_sensors(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_DEVICE_POWER_CYCLES:
- offset = dissect_rdm_pd_device_power_cycles(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_LAMP_STATE:
+ offset = dissect_rdm_pd_lamp_state(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_DISPLAY_INVERT:
- offset = dissect_rdm_pd_display_invert(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_LAMP_ON_MODE:
+ offset = dissect_rdm_pd_lamp_on_mode(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_DISPLAY_LEVEL:
- offset = dissect_rdm_pd_display_level(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_DEVICE_POWER_CYCLES:
+ offset = dissect_rdm_pd_device_power_cycles(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_PAN_INVERT:
- offset = dissect_rdm_pd_pan_invert(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_DISPLAY_INVERT:
+ offset = dissect_rdm_pd_display_invert(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_TILT_INVERT:
- offset = dissect_rdm_pd_tilt_invert(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_DISPLAY_LEVEL:
+ offset = dissect_rdm_pd_display_level(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_PAN_TILT_SWAP:
- offset = dissect_rdm_pd_pan_tilt_swap(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_PAN_INVERT:
+ offset = dissect_rdm_pd_pan_invert(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_REAL_TIME_CLOCK:
- offset = dissect_rdm_pd_real_time_clock(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_TILT_INVERT:
+ offset = dissect_rdm_pd_tilt_invert(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_IDENTIFY_DEVICE:
- offset = dissect_rdm_pd_identify_device(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_PAN_TILT_SWAP:
+ offset = dissect_rdm_pd_pan_tilt_swap(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_RESET_DEVICE:
- offset = dissect_rdm_pd_reset_device(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_REAL_TIME_CLOCK:
+ offset = dissect_rdm_pd_real_time_clock(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_POWER_STATE:
- offset = dissect_rdm_pd_power_state(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_IDENTIFY_DEVICE:
+ offset = dissect_rdm_pd_identify_device(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_PERFORM_SELFTEST:
- offset = dissect_rdm_pd_perform_selftest(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_RESET_DEVICE:
+ offset = dissect_rdm_pd_reset_device(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_SELF_TEST_DESCRIPTION:
- offset = dissect_rdm_pd_self_test_description(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_POWER_STATE:
+ offset = dissect_rdm_pd_power_state(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_CAPTURE_PRESET:
- offset = dissect_rdm_pd_capture_preset(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_PERFORM_SELFTEST:
+ offset = dissect_rdm_pd_perform_selftest(tvb, offset, si, cc, parameter_data_length);
+ break;
- case RDM_PARAM_ID_PRESET_PLAYBACK:
- offset = dissect_rdm_pd_preset_playback(tvb, offset, si, cc, parameter_data_length);
- break;
+ case RDM_PARAM_ID_SELF_TEST_DESCRIPTION:
+ offset = dissect_rdm_pd_self_test_description(tvb, offset, si, cc, parameter_data_length);
+ break;
- default:
- proto_tree_add_item(si, hf_rdm_parameter_data_raw, tvb,
- offset, parameter_data_length, ENC_NA);
- offset += parameter_data_length;
- break;
+ case RDM_PARAM_ID_CAPTURE_PRESET:
+ offset = dissect_rdm_pd_capture_preset(tvb, offset, si, cc, parameter_data_length);
+ break;
+
+ case RDM_PARAM_ID_PRESET_PLAYBACK:
+ offset = dissect_rdm_pd_preset_playback(tvb, offset, si, cc, parameter_data_length);
+ break;
+
+ default:
+ proto_tree_add_item(si, hf_rdm_parameter_data_raw, tvb,
+ offset, parameter_data_length, ENC_NA);
+ offset += parameter_data_length;
+ break;
+ }
}
}
@@ -2206,6 +2257,11 @@ proto_register_rdm(void)
FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL }},
+ { &hf_rdm_pd_nack_reason,
+ { "NACK Reason", "rdm.pd.nack_reason",
+ FT_UINT16, BASE_HEX, VALS(rdm_nr_vals), 0x0,
+ NULL, HFILL }},
+
{ &hf_rdm_pd_queued_message_status,
{ "Status", "rdm.pd.queued_message.status",
FT_UINT8, BASE_HEX, VALS(rdm_status_vals), 0x0,
@@ -2692,9 +2748,9 @@ proto_register_rdm(void)
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }},
- { &hf_rdm_pd_dmx_pers_description,
- { "DMX Pers. Description", "rdm.pd.dmx_pers.description",
- FT_STRING, BASE_NONE, NULL, 0x0,
+ { &hf_rdm_pd_dmx_pers_requested,
+ { "DMX Pers. Requested", "rdm.pd.dmx_pers.requested",
+ FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }},
{ &hf_rdm_pd_dmx_pers_slots,