RDM: Add ACK timer and ACK overflow handling
Change-Id: I1531e84b91becba97300cf30f8bbfd12290ced61 Signed-off-by: Erwin Rol <erwin@erwinrol.com> Reviewed-on: https://code.wireshark.org/review/24396 Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
This commit is contained in:
parent
65bab716be
commit
0bba9fb60f
|
@ -52,6 +52,8 @@ void proto_reg_handoff_rdm(void);
|
|||
#define RDM_SC_RDM 0xCC
|
||||
#define RDM_SC_SUB_MESSAGE 0x01
|
||||
|
||||
#define RDM_CC_COMMAND_RESPONSE_FLAG 0x01
|
||||
|
||||
#define RDM_CC_DISCOVERY_COMMAND 0x10
|
||||
#define RDM_CC_DISCOVERY_COMMAND_RESPONSE 0x11
|
||||
#define RDM_CC_GET_COMMAND 0x20
|
||||
|
@ -571,7 +573,9 @@ 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_ack_timer_estimated_response_time = -1;
|
||||
static int hf_rdm_pd_ack_overflow_uid = -1;
|
||||
static int hf_rdm_pd_nack_reason_code = -1;
|
||||
|
||||
static int hf_rdm_pd_device_label = -1;
|
||||
|
||||
|
@ -705,20 +709,6 @@ rdm_checksum(tvbuff_t *tvb, guint length)
|
|||
return sum;
|
||||
}
|
||||
|
||||
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_)
|
||||
{
|
||||
|
@ -1805,34 +1795,303 @@ dissect_rdm_pd_preset_playback(tvbuff_t *tvb, guint offset, proto_tree *tree, gu
|
|||
return offset;
|
||||
}
|
||||
|
||||
static guint
|
||||
dissect_rdm_mdb_param_data(tvbuff_t *tvb, guint offset, proto_tree *tree, guint8 cc, guint16 param_id, guint8 pdl)
|
||||
{
|
||||
switch(param_id) {
|
||||
case RDM_PARAM_ID_SENSOR_VALUE:
|
||||
offset = dissect_rdm_pd_sensor_value(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_QUEUED_MESSAGE:
|
||||
offset = dissect_rdm_pd_queued_message(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_DMX_START_ADDRESS:
|
||||
offset = dissect_rdm_pd_dmx_start_address(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_DEVICE_INFO:
|
||||
offset = dissect_rdm_pd_device_info(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_DEVICE_MODEL_DESCRIPTION:
|
||||
offset = dissect_rdm_pd_device_model_description(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_DEVICE_LABEL:
|
||||
offset = dissect_rdm_pd_device_label(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_DEVICE_HOURS:
|
||||
offset = dissect_rdm_pd_device_hours(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_LAMP_HOURS:
|
||||
offset = dissect_rdm_pd_lamp_hours(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_LAMP_STRIKES:
|
||||
offset = dissect_rdm_pd_lamp_strikes(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_SENSOR_DEFINITION:
|
||||
offset = dissect_rdm_pd_sensor_definition(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_MANUFACTURER_LABEL:
|
||||
offset = dissect_rdm_pd_manufacturer_label(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_DISC_UNIQUE_BRANCH:
|
||||
offset = dissect_rdm_pd_disc_unique_branch(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_DISC_MUTE:
|
||||
offset = dissect_rdm_pd_disc_mute(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_DISC_UN_MUTE:
|
||||
offset = dissect_rdm_pd_disc_un_mute(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_PROXIED_DEVICES:
|
||||
offset = dissect_rdm_pd_proxied_devices(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_PROXIED_DEVICE_COUNT:
|
||||
offset = dissect_rdm_pd_proxied_device_count(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_COMMS_STATUS:
|
||||
offset = dissect_rdm_pd_comms_status(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_STATUS_MESSAGES:
|
||||
offset = dissect_rdm_pd_status_messages(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_STATUS_ID_DESCRIPTION:
|
||||
offset = dissect_rdm_pd_status_id_description(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_CLEAR_STATUS_ID:
|
||||
offset = dissect_rdm_pd_clear_status_id(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_SUB_DEVICE_STATUS_REPORT_THRESHOLD:
|
||||
offset = dissect_rdm_pd_sub_device_status_report_threshold(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_SUPPORTED_PARAMETERS:
|
||||
offset = dissect_rdm_pd_supported_parameters(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_PARAMETER_DESCRIPTION:
|
||||
offset = dissect_rdm_pd_parameter_description(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_PRODUCT_DETAIL_ID_LIST:
|
||||
offset = dissect_rdm_pd_product_detail_id_list(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_FACTORY_DEFAULTS:
|
||||
offset = dissect_rdm_pd_factory_defaults(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_LANGUAGE_CAPABILITIES:
|
||||
offset = dissect_rdm_pd_language_capabilities(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_LANGUAGE:
|
||||
offset = dissect_rdm_pd_language(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_SOFTWARE_VERSION_LABEL:
|
||||
offset = dissect_rdm_pd_software_version_label(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_BOOT_SOFTWARE_VERSION_ID:
|
||||
offset = dissect_rdm_pd_boot_software_version_id(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_BOOT_SOFTWARE_VERSION_LABEL:
|
||||
offset = dissect_rdm_pd_boot_software_version_label(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_DMX_PERSONALITY:
|
||||
offset = dissect_rdm_pd_dmx_personality(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_DMX_PERSONALITY_DESCRIPTION:
|
||||
offset = dissect_rdm_pd_dmx_personality_description(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_SLOT_INFO:
|
||||
offset = dissect_rdm_pd_slot_info(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_SLOT_DESCRIPTION:
|
||||
offset = dissect_rdm_pd_slot_description(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_DEFAULT_SLOT_VALUE:
|
||||
offset = dissect_rdm_pd_slot_value(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_RECORD_SENSORS:
|
||||
offset = dissect_rdm_pd_record_sensors(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_LAMP_STATE:
|
||||
offset = dissect_rdm_pd_lamp_state(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_LAMP_ON_MODE:
|
||||
offset = dissect_rdm_pd_lamp_on_mode(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_DEVICE_POWER_CYCLES:
|
||||
offset = dissect_rdm_pd_device_power_cycles(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_DISPLAY_INVERT:
|
||||
offset = dissect_rdm_pd_display_invert(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_DISPLAY_LEVEL:
|
||||
offset = dissect_rdm_pd_display_level(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_PAN_INVERT:
|
||||
offset = dissect_rdm_pd_pan_invert(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_TILT_INVERT:
|
||||
offset = dissect_rdm_pd_tilt_invert(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_PAN_TILT_SWAP:
|
||||
offset = dissect_rdm_pd_pan_tilt_swap(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_REAL_TIME_CLOCK:
|
||||
offset = dissect_rdm_pd_real_time_clock(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_IDENTIFY_DEVICE:
|
||||
offset = dissect_rdm_pd_identify_device(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_RESET_DEVICE:
|
||||
offset = dissect_rdm_pd_reset_device(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_POWER_STATE:
|
||||
offset = dissect_rdm_pd_power_state(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_PERFORM_SELFTEST:
|
||||
offset = dissect_rdm_pd_perform_selftest(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_SELF_TEST_DESCRIPTION:
|
||||
offset = dissect_rdm_pd_self_test_description(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_CAPTURE_PRESET:
|
||||
offset = dissect_rdm_pd_capture_preset(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_PRESET_PLAYBACK:
|
||||
offset = dissect_rdm_pd_preset_playback(tvb, offset, tree, cc, pdl);
|
||||
break;
|
||||
|
||||
default:
|
||||
proto_tree_add_item(tree, hf_rdm_parameter_data_raw, tvb,
|
||||
offset, pdl, ENC_NA);
|
||||
offset += pdl;
|
||||
break;
|
||||
}
|
||||
|
||||
return offset;
|
||||
}
|
||||
|
||||
static guint
|
||||
dissect_rdm_pd_ack_overflow(tvbuff_t *tvb, guint offset, proto_tree *tree, guint8 cc, guint16 param_id _U_, guint8 pdl)
|
||||
{
|
||||
if (pdl > 0) {
|
||||
int i;
|
||||
|
||||
switch(cc) {
|
||||
case RDM_CC_GET_COMMAND_RESPONSE:
|
||||
case RDM_CC_SET_COMMAND_RESPONSE:
|
||||
for (i = 0; i < (pdl / 6); i++) {
|
||||
proto_tree_add_item(tree, hf_rdm_pd_ack_overflow_uid, tvb,
|
||||
offset, 6, ENC_NA);
|
||||
offset += 6;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return offset;
|
||||
}
|
||||
|
||||
static guint
|
||||
dissect_rdm_pd_ack_timer(tvbuff_t *tvb, guint offset, proto_tree *tree, guint8 cc, guint16 param_id _U_, guint8 pdl)
|
||||
{
|
||||
if (pdl == 2) {
|
||||
switch(cc) {
|
||||
case RDM_CC_GET_COMMAND_RESPONSE:
|
||||
case RDM_CC_SET_COMMAND_RESPONSE:
|
||||
proto_tree_add_item(tree, hf_rdm_pd_ack_timer_estimated_response_time, tvb,
|
||||
offset, 2, ENC_BIG_ENDIAN);
|
||||
offset += 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return offset;
|
||||
}
|
||||
|
||||
static guint
|
||||
dissect_rdm_pd_nack_reason(tvbuff_t *tvb, guint offset, proto_tree *tree, guint8 cc, guint16 param_id _U_, guint8 pdl _U_)
|
||||
{
|
||||
if (pdl == 2) {
|
||||
switch(cc) {
|
||||
case RDM_CC_GET_COMMAND_RESPONSE:
|
||||
case RDM_CC_SET_COMMAND_RESPONSE:
|
||||
proto_tree_add_item(tree, hf_rdm_pd_nack_reason_code, tvb,
|
||||
offset, 2, ENC_BIG_ENDIAN);
|
||||
offset += 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return offset;
|
||||
}
|
||||
|
||||
static guint
|
||||
dissect_rdm_mdb(tvbuff_t *tvb, guint offset, proto_tree *tree)
|
||||
{
|
||||
guint8 cc;
|
||||
guint8 cc;
|
||||
guint8 rt;
|
||||
guint16 param_id;
|
||||
guint8 response_type = 0x00;
|
||||
guint8 parameter_data_length;
|
||||
proto_tree *hi,*si, *mdb_tree;
|
||||
|
||||
rt = tvb_get_guint8(tvb, offset);
|
||||
cc = tvb_get_guint8(tvb, offset + 4);
|
||||
|
||||
switch (cc) {
|
||||
case RDM_CC_DISCOVERY_COMMAND:
|
||||
case RDM_CC_GET_COMMAND:
|
||||
case RDM_CC_SET_COMMAND:
|
||||
proto_tree_add_item(tree, hf_rdm_port_id, tvb,
|
||||
offset, 1, ENC_BIG_ENDIAN);
|
||||
offset += 1;
|
||||
break;
|
||||
|
||||
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);
|
||||
if ((cc & RDM_CC_COMMAND_RESPONSE_FLAG) == RDM_CC_COMMAND_RESPONSE_FLAG) {
|
||||
proto_tree_add_item(tree, hf_rdm_response_type, tvb,
|
||||
offset, 1, ENC_BIG_ENDIAN);
|
||||
offset += 1;
|
||||
break;
|
||||
offset, 1, ENC_BIG_ENDIAN);
|
||||
offset += 1;
|
||||
|
||||
} else {
|
||||
proto_tree_add_item(tree, hf_rdm_port_id, tvb,
|
||||
offset, 1, ENC_BIG_ENDIAN);
|
||||
offset += 1;
|
||||
}
|
||||
|
||||
proto_tree_add_item(tree, hf_rdm_message_count, tvb,
|
||||
|
@ -1847,7 +2106,6 @@ dissect_rdm_mdb(tvbuff_t *tvb, guint offset, proto_tree *tree)
|
|||
offset, -1, ENC_NA);
|
||||
mdb_tree = proto_item_add_subtree(hi,ett_rdm);
|
||||
|
||||
|
||||
proto_tree_add_item(mdb_tree, hf_rdm_command_class, tvb,
|
||||
offset, 1, ENC_BIG_ENDIAN);
|
||||
offset += 1;
|
||||
|
@ -1864,230 +2122,30 @@ dissect_rdm_mdb(tvbuff_t *tvb, guint offset, proto_tree *tree)
|
|||
proto_item_set_len( mdb_tree, parameter_data_length + 4);
|
||||
|
||||
if (parameter_data_length > 0) {
|
||||
|
||||
hi = proto_tree_add_item(mdb_tree, hf_rdm_parameter_data, tvb,
|
||||
offset, parameter_data_length, ENC_NA);
|
||||
si = proto_item_add_subtree(hi,ett_rdm);
|
||||
|
||||
if (response_type == RDM_RESPONSE_TYPE_NACK_REASON) {
|
||||
offset = dissect_rdm_pd_nack_reason(tvb, offset, si, cc, parameter_data_length);
|
||||
if ((cc & RDM_CC_COMMAND_RESPONSE_FLAG) == RDM_CC_COMMAND_RESPONSE_FLAG) {
|
||||
|
||||
} else {
|
||||
|
||||
switch(param_id) {
|
||||
case RDM_PARAM_ID_SENSOR_VALUE:
|
||||
offset = dissect_rdm_pd_sensor_value(tvb, offset, si, cc, parameter_data_length);
|
||||
switch(rt) {
|
||||
case RDM_RESPONSE_TYPE_ACK:
|
||||
offset = dissect_rdm_mdb_param_data(tvb, offset, si, cc, param_id, parameter_data_length);
|
||||
break;
|
||||
|
||||
case RDM_PARAM_ID_QUEUED_MESSAGE:
|
||||
offset = dissect_rdm_pd_queued_message(tvb, offset, si, cc, parameter_data_length);
|
||||
case RDM_RESPONSE_TYPE_ACK_TIMER:
|
||||
offset = dissect_rdm_pd_ack_timer(tvb, offset, si, cc, param_id, 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);
|
||||
case RDM_RESPONSE_TYPE_NACK_REASON:
|
||||
offset = dissect_rdm_pd_nack_reason(tvb, offset, si, cc, param_id, 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_MODEL_DESCRIPTION:
|
||||
offset = dissect_rdm_pd_device_model_description(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_HOURS:
|
||||
offset = dissect_rdm_pd_device_hours(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_LAMP_STRIKES:
|
||||
offset = dissect_rdm_pd_lamp_strikes(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_MANUFACTURER_LABEL:
|
||||
offset = dissect_rdm_pd_manufacturer_label(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_DISC_MUTE:
|
||||
offset = dissect_rdm_pd_disc_mute(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_PROXIED_DEVICES:
|
||||
offset = dissect_rdm_pd_proxied_devices(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_COMMS_STATUS:
|
||||
offset = dissect_rdm_pd_comms_status(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_STATUS_ID_DESCRIPTION:
|
||||
offset = dissect_rdm_pd_status_id_description(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_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_SUPPORTED_PARAMETERS:
|
||||
offset = dissect_rdm_pd_supported_parameters(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_PRODUCT_DETAIL_ID_LIST:
|
||||
offset = dissect_rdm_pd_product_detail_id_list(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_LANGUAGE_CAPABILITIES:
|
||||
offset = dissect_rdm_pd_language_capabilities(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_SOFTWARE_VERSION_LABEL:
|
||||
offset = dissect_rdm_pd_software_version_label(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_BOOT_SOFTWARE_VERSION_LABEL:
|
||||
offset = dissect_rdm_pd_boot_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_DMX_PERSONALITY_DESCRIPTION:
|
||||
offset = dissect_rdm_pd_dmx_personality_description(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_SLOT_DESCRIPTION:
|
||||
offset = dissect_rdm_pd_slot_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_RECORD_SENSORS:
|
||||
offset = dissect_rdm_pd_record_sensors(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_LAMP_ON_MODE:
|
||||
offset = dissect_rdm_pd_lamp_on_mode(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_DISPLAY_INVERT:
|
||||
offset = dissect_rdm_pd_display_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_INVERT:
|
||||
offset = dissect_rdm_pd_pan_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_PAN_TILT_SWAP:
|
||||
offset = dissect_rdm_pd_pan_tilt_swap(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_IDENTIFY_DEVICE:
|
||||
offset = dissect_rdm_pd_identify_device(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_POWER_STATE:
|
||||
offset = dissect_rdm_pd_power_state(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_SELF_TEST_DESCRIPTION:
|
||||
offset = dissect_rdm_pd_self_test_description(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_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;
|
||||
case RDM_RESPONSE_TYPE_ACK_OVERFLOW:
|
||||
offset = dissect_rdm_pd_ack_overflow(tvb, offset, si, cc, param_id, parameter_data_length);
|
||||
break;
|
||||
}
|
||||
|
||||
} else {
|
||||
offset = dissect_rdm_mdb_param_data(tvb, offset, si, cc, param_id, parameter_data_length);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2257,8 +2315,18 @@ proto_register_rdm(void)
|
|||
FT_BYTES, BASE_NONE, NULL, 0x0,
|
||||
NULL, HFILL }},
|
||||
|
||||
{ &hf_rdm_pd_nack_reason,
|
||||
{ "NACK Reason", "rdm.pd.nack_reason",
|
||||
{ &hf_rdm_pd_ack_overflow_uid,
|
||||
{ "UID", "rdm.pd.ack_overflow.uid",
|
||||
FT_BYTES, BASE_NONE, NULL, 0x0,
|
||||
NULL, HFILL }},
|
||||
|
||||
{ &hf_rdm_pd_ack_timer_estimated_response_time,
|
||||
{ "Estimated Response Time", "rdm.pd.ack_timer.estimated_response_time",
|
||||
FT_INT16, BASE_DEC, NULL, 0x0,
|
||||
NULL, HFILL }},
|
||||
|
||||
{ &hf_rdm_pd_nack_reason_code,
|
||||
{ "NACK Reason Code", "rdm.pd.nack_reason.code",
|
||||
FT_UINT16, BASE_HEX, VALS(rdm_nr_vals), 0x0,
|
||||
NULL, HFILL }},
|
||||
|
||||
|
|
Loading…
Reference in New Issue