2012-05-02 11:05:35 +00:00
/* packet-llrp.c
* Routines for Low Level Reader Protocol dissection
* Copyright 2012 , Evan Huus < eapache @ gmail . com >
2012-08-23 03:03:54 +00:00
* Copyright 2012 , Martin Kupec < martin . kupec @ kupson . cz >
2014-07-10 11:08:34 +00:00
* Copyright 2014 , Petr Stetiar < petr . stetiar @ gaben . cz >
2012-05-02 11:05:35 +00:00
*
* http : //www.gs1.org/gsmp/kc/epcglobal/llrp
*
* Wireshark - Network traffic analyzer
* By Gerald Combs < gerald @ wireshark . org >
* Copyright 1998 Gerald Combs
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License along
* with this program ; if not , write to the Free Software Foundation , Inc . ,
* 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA .
*/
# include "config.h"
# include <epan/packet.h>
# include <epan/expert.h>
2014-12-20 21:23:59 +00:00
# include "packet-tcp.h"
2012-05-02 11:05:35 +00:00
2013-12-14 12:45:57 +00:00
void proto_register_llrp ( void ) ;
void proto_reg_handoff_llrp ( void ) ;
2012-05-02 11:05:35 +00:00
# define LLRP_PORT 5084
/* Initialize the protocol and registered fields */
2012-08-28 02:01:25 +00:00
static int proto_llrp = - 1 ;
static int hf_llrp_version = - 1 ;
static int hf_llrp_type = - 1 ;
static int hf_llrp_length = - 1 ;
static int hf_llrp_id = - 1 ;
static int hf_llrp_cur_ver = - 1 ;
static int hf_llrp_sup_ver = - 1 ;
static int hf_llrp_req_cap = - 1 ;
static int hf_llrp_req_conf = - 1 ;
static int hf_llrp_rospec = - 1 ;
static int hf_llrp_antenna_id = - 1 ;
static int hf_llrp_gpi_port = - 1 ;
static int hf_llrp_gpo_port = - 1 ;
static int hf_llrp_rest_fact = - 1 ;
static int hf_llrp_accessspec = - 1 ;
static int hf_llrp_vendor = - 1 ;
static int hf_llrp_impinj_msg_type = - 1 ;
static int hf_llrp_tlv_type = - 1 ;
static int hf_llrp_tv_type = - 1 ;
static int hf_llrp_tlv_len = - 1 ;
static int hf_llrp_param = - 1 ;
static int hf_llrp_num_gpi = - 1 ;
static int hf_llrp_num_gpo = - 1 ;
static int hf_llrp_microseconds = - 1 ;
static int hf_llrp_max_supported_antenna = - 1 ;
static int hf_llrp_can_set_antenna_prop = - 1 ;
static int hf_llrp_has_utc_clock = - 1 ;
static int hf_llrp_device_manufacturer = - 1 ;
static int hf_llrp_model = - 1 ;
static int hf_llrp_firmware_version = - 1 ;
static int hf_llrp_max_receive_sense = - 1 ;
static int hf_llrp_index = - 1 ;
static int hf_llrp_receive_sense = - 1 ;
static int hf_llrp_receive_sense_index_min = - 1 ;
static int hf_llrp_receive_sense_index_max = - 1 ;
static int hf_llrp_num_protocols = - 1 ;
static int hf_llrp_protocol_id = - 1 ;
static int hf_llrp_can_do_survey = - 1 ;
static int hf_llrp_can_report_buffer_warning = - 1 ;
static int hf_llrp_support_client_opspec = - 1 ;
static int hf_llrp_can_stateaware = - 1 ;
static int hf_llrp_support_holding = - 1 ;
static int hf_llrp_max_priority_supported = - 1 ;
static int hf_llrp_client_opspec_timeout = - 1 ;
static int hf_llrp_max_num_rospec = - 1 ;
static int hf_llrp_max_num_spec_per_rospec = - 1 ;
static int hf_llrp_max_num_inventory_per_aispec = - 1 ;
static int hf_llrp_max_num_accessspec = - 1 ;
static int hf_llrp_max_num_opspec_per_accressspec = - 1 ;
static int hf_llrp_country_code = - 1 ;
static int hf_llrp_comm_standard = - 1 ;
static int hf_llrp_transmit_power = - 1 ;
static int hf_llrp_hopping = - 1 ;
static int hf_llrp_hop_table_id = - 1 ;
static int hf_llrp_rfu = - 1 ;
static int hf_llrp_num_hops = - 1 ;
static int hf_llrp_frequency = - 1 ;
static int hf_llrp_num_freqs = - 1 ;
static int hf_llrp_min_freq = - 1 ;
static int hf_llrp_max_freq = - 1 ;
static int hf_llrp_rospec_id = - 1 ;
static int hf_llrp_priority = - 1 ;
static int hf_llrp_cur_state = - 1 ;
static int hf_llrp_rospec_start_trig_type = - 1 ;
static int hf_llrp_offset = - 1 ;
static int hf_llrp_period = - 1 ;
static int hf_llrp_gpi_event = - 1 ;
static int hf_llrp_timeout = - 1 ;
static int hf_llrp_rospec_stop_trig_type = - 1 ;
static int hf_llrp_duration_trig = - 1 ;
static int hf_llrp_antenna_count = - 1 ;
static int hf_llrp_antenna = - 1 ;
static int hf_llrp_aispec_stop_trig_type = - 1 ;
static int hf_llrp_trig_type = - 1 ;
static int hf_llrp_number_of_tags = - 1 ;
static int hf_llrp_number_of_attempts = - 1 ;
static int hf_llrp_t = - 1 ;
static int hf_llrp_inventory_spec_id = - 1 ;
static int hf_llrp_start_freq = - 1 ;
static int hf_llrp_stop_freq = - 1 ;
static int hf_llrp_stop_trig_type = - 1 ;
static int hf_llrp_n_4 = - 1 ;
static int hf_llrp_duration = - 1 ;
static int hf_llrp_accessspec_id = - 1 ;
static int hf_llrp_access_cur_state = - 1 ;
static int hf_llrp_access_stop_trig_type = - 1 ;
static int hf_llrp_operation_count = - 1 ;
static int hf_llrp_opspec_id = - 1 ;
static int hf_llrp_conf_value = - 1 ;
static int hf_llrp_id_type = - 1 ;
static int hf_llrp_reader_id = - 1 ;
static int hf_llrp_gpo_data = - 1 ;
static int hf_llrp_keepalive_trig_type = - 1 ;
static int hf_llrp_time_iterval = - 1 ;
static int hf_llrp_antenna_connected = - 1 ;
static int hf_llrp_antenna_gain = - 1 ;
static int hf_llrp_receiver_sense = - 1 ;
static int hf_llrp_channel_idx = - 1 ;
static int hf_llrp_gpi_config = - 1 ;
static int hf_llrp_gpi_state = - 1 ;
static int hf_llrp_hold_events_and_reports = - 1 ;
static int hf_llrp_ro_report_trig = - 1 ;
static int hf_llrp_n_2 = - 1 ;
static int hf_llrp_enable_rospec_id = - 1 ;
static int hf_llrp_enable_spec_idx = - 1 ;
static int hf_llrp_enable_inv_spec_id = - 1 ;
static int hf_llrp_enable_antenna_id = - 1 ;
static int hf_llrp_enable_channel_idx = - 1 ;
static int hf_llrp_enable_peak_rssi = - 1 ;
static int hf_llrp_enable_first_seen = - 1 ;
static int hf_llrp_enable_last_seen = - 1 ;
static int hf_llrp_enable_seen_count = - 1 ;
static int hf_llrp_enable_accessspec_id = - 1 ;
static int hf_llrp_access_report_trig = - 1 ;
static int hf_llrp_length_bits = - 1 ;
static int hf_llrp_epc = - 1 ;
static int hf_llrp_spec_idx = - 1 ;
static int hf_llrp_peak_rssi = - 1 ;
static int hf_llrp_tag_count = - 1 ;
static int hf_llrp_bandwidth = - 1 ;
static int hf_llrp_average_rssi = - 1 ;
static int hf_llrp_notif_state = - 1 ;
static int hf_llrp_event_type = - 1 ;
static int hf_llrp_next_chan_idx = - 1 ;
static int hf_llrp_roevent_type = - 1 ;
static int hf_llrp_prem_rospec_id = - 1 ;
static int hf_llrp_buffer_full_percentage = - 1 ;
static int hf_llrp_message = - 1 ;
static int hf_llrp_rfevent_type = - 1 ;
static int hf_llrp_aievent_type = - 1 ;
static int hf_llrp_antenna_event_type = - 1 ;
static int hf_llrp_conn_status = - 1 ;
static int hf_llrp_loop_count = - 1 ;
static int hf_llrp_status_code = - 1 ;
static int hf_llrp_error_desc = - 1 ;
static int hf_llrp_field_num = - 1 ;
static int hf_llrp_error_code = - 1 ;
static int hf_llrp_parameter_type = - 1 ;
static int hf_llrp_can_support_block_erase = - 1 ;
static int hf_llrp_can_support_block_write = - 1 ;
static int hf_llrp_can_support_block_permalock = - 1 ;
static int hf_llrp_can_support_tag_recomm = - 1 ;
static int hf_llrp_can_support_UMI_method2 = - 1 ;
static int hf_llrp_can_support_XPC = - 1 ;
static int hf_llrp_max_num_filter_per_query = - 1 ;
static int hf_llrp_mode_ident = - 1 ;
static int hf_llrp_DR = - 1 ;
static int hf_llrp_hag_conformance = - 1 ;
static int hf_llrp_mod = - 1 ;
static int hf_llrp_flm = - 1 ;
static int hf_llrp_m = - 1 ;
static int hf_llrp_bdr = - 1 ;
static int hf_llrp_pie = - 1 ;
static int hf_llrp_min_tari = - 1 ;
static int hf_llrp_max_tari = - 1 ;
static int hf_llrp_step_tari = - 1 ;
static int hf_llrp_inventory_state_aware = - 1 ;
static int hf_llrp_trunc = - 1 ;
static int hf_llrp_mb = - 1 ;
static int hf_llrp_pointer = - 1 ;
static int hf_llrp_tag_mask = - 1 ;
static int hf_llrp_aware_filter_target = - 1 ;
static int hf_llrp_aware_filter_action = - 1 ;
static int hf_llrp_unaware_filter_action = - 1 ;
static int hf_llrp_mode_idx = - 1 ;
static int hf_llrp_tari = - 1 ;
static int hf_llrp_session = - 1 ;
static int hf_llrp_tag_population = - 1 ;
static int hf_llrp_tag_transit_time = - 1 ;
static int hf_llrp_sing_i = - 1 ;
static int hf_llrp_sing_s = - 1 ;
static int hf_llrp_sing_a = - 1 ;
static int hf_llrp_match = - 1 ;
static int hf_llrp_tag_data = - 1 ;
static int hf_llrp_access_pass = - 1 ;
static int hf_llrp_word_pointer = - 1 ;
static int hf_llrp_word_count = - 1 ;
static int hf_llrp_write_data = - 1 ;
static int hf_llrp_kill_pass = - 1 ;
static int hf_llrp_kill_3 = - 1 ;
static int hf_llrp_kill_2 = - 1 ;
static int hf_llrp_kill_l = - 1 ;
static int hf_llrp_privilege = - 1 ;
static int hf_llrp_data_field = - 1 ;
static int hf_llrp_block_pointer = - 1 ;
static int hf_llrp_block_mask = - 1 ;
static int hf_llrp_length_words = - 1 ;
static int hf_llrp_block_range = - 1 ;
static int hf_llrp_enable_crc = - 1 ;
static int hf_llrp_enable_pc = - 1 ;
static int hf_llrp_enable_xpc = - 1 ;
static int hf_llrp_pc_bits = - 1 ;
static int hf_llrp_xpc_w1 = - 1 ;
static int hf_llrp_xpc_w2 = - 1 ;
static int hf_llrp_crc = - 1 ;
static int hf_llrp_num_coll = - 1 ;
static int hf_llrp_num_empty = - 1 ;
static int hf_llrp_access_result = - 1 ;
static int hf_llrp_read_data = - 1 ;
static int hf_llrp_num_words_written = - 1 ;
static int hf_llrp_permlock_status = - 1 ;
static int hf_llrp_vendor_id = - 1 ;
2017-03-16 19:31:24 +00:00
static int hf_llrp_vendor_unknown = - 1 ;
2012-08-28 02:01:25 +00:00
static int hf_llrp_impinj_param_type = - 1 ;
static int hf_llrp_save_config = - 1 ;
static int hf_llrp_impinj_req_data = - 1 ;
static int hf_llrp_impinj_reg_region = - 1 ;
static int hf_llrp_impinj_search_mode = - 1 ;
static int hf_llrp_impinj_en_tag_dir = - 1 ;
static int hf_llrp_impinj_antenna_conf = - 1 ;
static int hf_llrp_decision_time = - 1 ;
static int hf_llrp_impinj_tag_dir = - 1 ;
static int hf_llrp_confidence = - 1 ;
static int hf_llrp_impinj_fix_freq_mode = - 1 ;
static int hf_llrp_num_channels = - 1 ;
static int hf_llrp_channel = - 1 ;
static int hf_llrp_impinj_reduce_power_mode = - 1 ;
static int hf_llrp_impinj_low_duty_mode = - 1 ;
static int hf_llrp_empty_field_timeout = - 1 ;
static int hf_llrp_field_ping_interval = - 1 ;
static int hf_llrp_model_name = - 1 ;
static int hf_llrp_serial_number = - 1 ;
static int hf_llrp_soft_ver = - 1 ;
static int hf_llrp_firm_ver = - 1 ;
static int hf_llrp_fpga_ver = - 1 ;
static int hf_llrp_pcba_ver = - 1 ;
static int hf_llrp_height_thresh = - 1 ;
static int hf_llrp_zero_motion_thresh = - 1 ;
static int hf_llrp_board_manufacturer = - 1 ;
static int hf_llrp_fw_ver_hex = - 1 ;
static int hf_llrp_hw_ver_hex = - 1 ;
static int hf_llrp_gpi_debounce = - 1 ;
static int hf_llrp_temperature = - 1 ;
static int hf_llrp_impinj_link_monitor_mode = - 1 ;
static int hf_llrp_link_down_thresh = - 1 ;
static int hf_llrp_impinj_report_buff_mode = - 1 ;
static int hf_llrp_permalock_result = - 1 ;
static int hf_llrp_block_permalock_result = - 1 ;
static int hf_llrp_impinj_data_profile = - 1 ;
static int hf_llrp_impinj_access_range = - 1 ;
static int hf_llrp_impinj_persistence = - 1 ;
static int hf_llrp_set_qt_config_result = - 1 ;
static int hf_llrp_get_qt_config_result = - 1 ;
static int hf_llrp_impinj_serialized_tid_mode = - 1 ;
static int hf_llrp_impinj_rf_phase_mode = - 1 ;
static int hf_llrp_impinj_peak_rssi_mode = - 1 ;
static int hf_llrp_impinj_gps_coordinates_mode = - 1 ;
static int hf_llrp_impinj_tid = - 1 ;
static int hf_llrp_phase_angle = - 1 ;
static int hf_llrp_rssi = - 1 ;
static int hf_llrp_latitude = - 1 ;
static int hf_llrp_longitude = - 1 ;
static int hf_llrp_gga_sentence = - 1 ;
static int hf_llrp_rmc_sentence = - 1 ;
static int hf_llrp_impinj_optim_read_mode = - 1 ;
static int hf_llrp_impinj_rf_doppler_mode = - 1 ;
static int hf_llrp_retry_count = - 1 ;
static int hf_llrp_impinj_access_spec_ordering = - 1 ;
static int hf_llrp_impinj_gpo_mode = - 1 ;
static int hf_llrp_gpo_pulse_dur = - 1 ;
2014-07-10 11:08:34 +00:00
static int hf_llrp_impinj_hub_id = - 1 ;
static int hf_llrp_impinj_hub_fault_type = - 1 ;
static int hf_llrp_impinj_hub_connected_type = - 1 ;
2012-05-02 11:05:35 +00:00
/* Initialize the subtree pointers */
static gint ett_llrp = - 1 ;
static gint ett_llrp_param = - 1 ;
2013-09-02 23:32:31 +00:00
static expert_field ei_llrp_req_conf = EI_INIT ;
static expert_field ei_llrp_invalid_length = EI_INIT ;
2012-05-02 11:05:35 +00:00
/* Message Types */
2013-04-01 15:29:49 +00:00
# define LLRP_TYPE_GET_READER_CAPABILITIES 1
2012-05-02 11:05:35 +00:00
# define LLRP_TYPE_GET_READER_CONFIG 2
# define LLRP_TYPE_SET_READER_CONFIG 3
# define LLRP_TYPE_CLOSE_CONNECTION_RESPONSE 4
2013-04-01 15:33:42 +00:00
# define LLRP_TYPE_GET_READER_CAPABILITIES_RESPONSE 11
2012-05-02 11:05:35 +00:00
# define LLRP_TYPE_GET_READER_CONFIG_RESPONSE 12
# define LLRP_TYPE_SET_READER_CONFIG_RESPONSE 13
# define LLRP_TYPE_CLOSE_CONNECTION 14
# define LLRP_TYPE_ADD_ROSPEC 20
# define LLRP_TYPE_DELETE_ROSPEC 21
# define LLRP_TYPE_START_ROSPEC 22
# define LLRP_TYPE_STOP_ROSPEC 23
# define LLRP_TYPE_ENABLE_ROSPEC 24
# define LLRP_TYPE_DISABLE_ROSPEC 25
# define LLRP_TYPE_GET_ROSPECS 26
# define LLRP_TYPE_ADD_ROSPEC_RESPONSE 30
# define LLRP_TYPE_DELETE_ROSPEC_RESPONSE 31
# define LLRP_TYPE_START_ROSPEC_RESPONSE 32
# define LLRP_TYPE_STOP_ROSPEC_RESPONSE 33
# define LLRP_TYPE_ENABLE_ROSPEC_RESPONSE 34
# define LLRP_TYPE_DISABLE_ROSPEC_RESPONSE 35
# define LLRP_TYPE_GET_ROSPECS_RESPONSE 36
# define LLRP_TYPE_ADD_ACCESSSPEC 40
# define LLRP_TYPE_DELETE_ACCESSSPEC 41
# define LLRP_TYPE_ENABLE_ACCESSSPEC 42
# define LLRP_TYPE_DISABLE_ACCESSSPEC 43
# define LLRP_TYPE_GET_ACCESSSPECS 44
# define LLRP_TYPE_CLIENT_REQUEST_OP 45
# define LLRP_TYPE_GET_SUPPORTED_VERSION 46
# define LLRP_TYPE_SET_PROTOCOL_VERSION 47
# define LLRP_TYPE_ADD_ACCESSSPEC_RESPONSE 50
# define LLRP_TYPE_DELETE_ACCESSSPEC_RESPONSE 51
# define LLRP_TYPE_ENABLE_ACCESSSPEC_RESPONSE 52
# define LLRP_TYPE_DISABLE_ACCESSSPEC_RESPONSE 53
# define LLRP_TYPE_GET_ACCESSSPECS_RESPONSE 54
# define LLRP_TYPE_CLIENT_RESQUEST_OP_RESPONSE 55
# define LLRP_TYPE_GET_SUPPORTED_VERSION_RESPONSE 56
# define LLRP_TYPE_SET_PROTOCOL_VERSION_RESPONSE 57
# define LLRP_TYPE_GET_REPORT 60
# define LLRP_TYPE_RO_ACCESS_REPORT 61
# define LLRP_TYPE_KEEPALIVE 62
# define LLRP_TYPE_READER_EVENT_NOTIFICATION 63
# define LLRP_TYPE_ENABLE_EVENTS_AND_REPORTS 64
# define LLRP_TYPE_KEEPALIVE_ACK 72
# define LLRP_TYPE_ERROR_MESSAGE 100
# define LLRP_TYPE_CUSTOM_MESSAGE 1023
static const value_string message_types [ ] = {
2013-04-01 15:29:49 +00:00
{ LLRP_TYPE_GET_READER_CAPABILITIES , " Get Reader Capabilities " } ,
2012-05-02 11:05:35 +00:00
{ LLRP_TYPE_GET_READER_CONFIG , " Get Reader Config " } ,
{ LLRP_TYPE_SET_READER_CONFIG , " Set Reader Config " } ,
{ LLRP_TYPE_CLOSE_CONNECTION_RESPONSE , " Close Connection Response " } ,
2013-04-01 15:29:49 +00:00
{ LLRP_TYPE_GET_READER_CAPABILITIES_RESPONSE , " Get Reader Capabilities Response " } ,
2012-05-02 11:05:35 +00:00
{ LLRP_TYPE_GET_READER_CONFIG_RESPONSE , " Get Reader Config Response " } ,
{ LLRP_TYPE_SET_READER_CONFIG_RESPONSE , " Set Reader Config Response " } ,
{ LLRP_TYPE_CLOSE_CONNECTION , " Close Connection " } ,
{ LLRP_TYPE_ADD_ROSPEC , " Add ROSpec " } ,
{ LLRP_TYPE_DELETE_ROSPEC , " Delete ROSpec " } ,
{ LLRP_TYPE_START_ROSPEC , " Start ROSpec " } ,
{ LLRP_TYPE_STOP_ROSPEC , " Stop ROSpec " } ,
{ LLRP_TYPE_ENABLE_ROSPEC , " Enable ROSpec " } ,
{ LLRP_TYPE_DISABLE_ROSPEC , " Disable ROSpec " } ,
{ LLRP_TYPE_GET_ROSPECS , " Get ROSpecs " } ,
{ LLRP_TYPE_ADD_ROSPEC_RESPONSE , " Add ROSpec Response " } ,
{ LLRP_TYPE_DELETE_ROSPEC_RESPONSE , " Delete ROSpec Response " } ,
{ LLRP_TYPE_START_ROSPEC_RESPONSE , " Start ROSpec Response " } ,
{ LLRP_TYPE_STOP_ROSPEC_RESPONSE , " Stop ROSpec Response " } ,
{ LLRP_TYPE_ENABLE_ROSPEC_RESPONSE , " Enable ROSpec Response " } ,
{ LLRP_TYPE_DISABLE_ROSPEC_RESPONSE , " Disable ROSpec Response " } ,
{ LLRP_TYPE_GET_ROSPECS_RESPONSE , " Get ROSpecs Response " } ,
{ LLRP_TYPE_ADD_ACCESSSPEC , " Add AccessSpec " } ,
{ LLRP_TYPE_DELETE_ACCESSSPEC , " Delete AccessSpec " } ,
{ LLRP_TYPE_ENABLE_ACCESSSPEC , " Enable AccessSpec " } ,
{ LLRP_TYPE_DISABLE_ACCESSSPEC , " Disable AccessSpec " } ,
{ LLRP_TYPE_GET_ACCESSSPECS , " Get AccessSpecs " } ,
{ LLRP_TYPE_CLIENT_REQUEST_OP , " Client Request OP " } ,
{ LLRP_TYPE_GET_SUPPORTED_VERSION , " Get Supported Version " } ,
{ LLRP_TYPE_SET_PROTOCOL_VERSION , " Set Protocol Version " } ,
{ LLRP_TYPE_ADD_ACCESSSPEC_RESPONSE , " Add AccessSpec Response " } ,
{ LLRP_TYPE_DELETE_ACCESSSPEC_RESPONSE , " Delete AccessSpec Response " } ,
{ LLRP_TYPE_ENABLE_ACCESSSPEC_RESPONSE , " Enable AccessSpec Response " } ,
{ LLRP_TYPE_DISABLE_ACCESSSPEC_RESPONSE , " Disable AccessSpec Response " } ,
{ LLRP_TYPE_GET_ACCESSSPECS_RESPONSE , " Get AccessSpecs Response " } ,
{ LLRP_TYPE_CLIENT_RESQUEST_OP_RESPONSE , " Client Resquest OP Response " } ,
{ LLRP_TYPE_GET_SUPPORTED_VERSION_RESPONSE , " Get Supported Version Response " } ,
{ LLRP_TYPE_SET_PROTOCOL_VERSION_RESPONSE , " Set Protocol Version Response " } ,
{ LLRP_TYPE_GET_REPORT , " Get Report " } ,
{ LLRP_TYPE_RO_ACCESS_REPORT , " RO Access Report " } ,
{ LLRP_TYPE_KEEPALIVE , " Keepalive " } ,
{ LLRP_TYPE_READER_EVENT_NOTIFICATION , " Reader Event Notification " } ,
{ LLRP_TYPE_ENABLE_EVENTS_AND_REPORTS , " Enable Events And Reports " } ,
{ LLRP_TYPE_KEEPALIVE_ACK , " Keepalive Ack " } ,
{ LLRP_TYPE_ERROR_MESSAGE , " Error Message " } ,
{ LLRP_TYPE_CUSTOM_MESSAGE , " Custom Message " } ,
{ 0 , NULL }
} ;
2012-07-24 14:47:19 +00:00
static value_string_ext message_types_ext = VALUE_STRING_EXT_INIT ( message_types ) ;
2012-05-02 11:05:35 +00:00
/* Versions */
# define LLRP_VERS_1_0_1 0x01
# define LLRP_VERS_1_1 0x02
static const value_string llrp_versions [ ] = {
{ LLRP_VERS_1_0_1 , " 1.0.1 " } ,
{ LLRP_VERS_1_1 , " 1.1 " } ,
{ 0 , NULL }
} ;
/* Capabilities */
# define LLRP_CAP_ALL 0
# define LLRP_CAP_GENERAL_DEVICE 1
# define LLRP_CAP_LLRP 2
# define LLRP_CAP_REGULATORY 3
# define LLRP_CAP_AIR_PROTOCOL 4
static const value_string capabilities_request [ ] = {
{ LLRP_CAP_ALL , " All " } ,
{ LLRP_CAP_GENERAL_DEVICE , " General Device Capabilities " } ,
2013-04-01 15:29:49 +00:00
{ LLRP_CAP_LLRP , " LLRP Capabilities " } ,
2012-05-02 11:05:35 +00:00
{ LLRP_CAP_REGULATORY , " Regulatory Capabilities " } ,
{ LLRP_CAP_AIR_PROTOCOL , " Air Protocol LLRP Capabilities " } ,
{ 0 , NULL }
} ;
/* Configurations */
# define LLRP_CONF_ALL 0
# define LLRP_CONF_IDENTIFICATION 1
# define LLRP_CONF_ANTENNA_PROPERTIES 2
# define LLRP_CONF_ANTENNA_CONFIGURATION 3
# define LLRP_CONF_RO_REPORT_SPEC 4
# define LLRP_CONF_READER_EVENT_NOTIFICATION_SPEC 5
# define LLRP_CONF_ACCESS_REPORT_SPEC 6
# define LLRP_CONF_LLRP_CONFIGURATION_STATE 7
# define LLRP_CONF_KEEPALIVE_SPEC 8
# define LLRP_CONF_GPI_PORT_CURRENT_STATE 9
# define LLRP_CONF_GPO_WRITE_DATA 10
# define LLRP_CONF_EVENTS_AND_REPORTS 11
static const value_string config_request [ ] = {
{ LLRP_CONF_ALL , " All " } ,
{ LLRP_CONF_IDENTIFICATION , " Identification " } ,
{ LLRP_CONF_ANTENNA_PROPERTIES , " Antenna Properties " } ,
{ LLRP_CONF_ANTENNA_CONFIGURATION , " Antenna Configuration " } ,
{ LLRP_CONF_RO_REPORT_SPEC , " RO Report Spec " } ,
{ LLRP_CONF_READER_EVENT_NOTIFICATION_SPEC , " Reader Event Notification Spec " } ,
{ LLRP_CONF_ACCESS_REPORT_SPEC , " Access Report Spec " } ,
{ LLRP_CONF_LLRP_CONFIGURATION_STATE , " LLRP Configuration State " } ,
{ LLRP_CONF_KEEPALIVE_SPEC , " Keepalive Spec " } ,
{ LLRP_CONF_GPI_PORT_CURRENT_STATE , " GPI Port Current State " } ,
{ LLRP_CONF_GPO_WRITE_DATA , " GPO Write Data " } ,
{ LLRP_CONF_EVENTS_AND_REPORTS , " Events and Reports " } ,
{ 0 , NULL }
} ;
2012-07-24 14:47:19 +00:00
static value_string_ext config_request_ext = VALUE_STRING_EXT_INIT ( config_request ) ;
2012-05-02 11:05:35 +00:00
/* TLV Parameter Types */
# define LLRP_TLV_UTC_TIMESTAMP 128
# define LLRP_TLV_UPTIME 129
# define LLRP_TLV_GENERAL_DEVICE_CAP 137
# define LLRP_TLV_RECEIVE_SENSE_ENTRY 139
# define LLRP_TLV_ANTENNA_AIR_PROTO 140
# define LLRP_TLV_GPIO_CAPABILITIES 141
# define LLRP_TLV_LLRP_CAPABILITIES 142
# define LLRP_TLV_REGU_CAPABILITIES 143
# define LLRP_TLV_UHF_CAPABILITIES 144
# define LLRP_TLV_XMIT_POWER_LEVEL_ENTRY 145
# define LLRP_TLV_FREQ_INFORMATION 146
# define LLRP_TLV_FREQ_HOP_TABLE 147
# define LLRP_TLV_FIXED_FREQ_TABLE 148
# define LLRP_TLV_ANTENNA_RCV_SENSE_RANGE 149
# define LLRP_TLV_RO_SPEC 177
# define LLRP_TLV_RO_BOUND_SPEC 178
# define LLRP_TLV_RO_SPEC_START_TRIGGER 179
# define LLRP_TLV_PER_TRIGGER_VAL 180
# define LLRP_TLV_GPI_TRIGGER_VAL 181
# define LLRP_TLV_RO_SPEC_STOP_TRIGGER 182
# define LLRP_TLV_AI_SPEC 183
# define LLRP_TLV_AI_SPEC_STOP 184
# define LLRP_TLV_TAG_OBSERV_TRIGGER 185
# define LLRP_TLV_INVENTORY_PARAM_SPEC 186
# define LLRP_TLV_RF_SURVEY_SPEC 187
# define LLRP_TLV_RF_SURVEY_SPEC_STOP_TR 188
# define LLRP_TLV_ACCESS_SPEC 207
# define LLRP_TLV_ACCESS_SPEC_STOP_TRIG 208
# define LLRP_TLV_ACCESS_COMMAND 209
# define LLRP_TLV_CLIENT_REQ_OP_SPEC 210
# define LLRP_TLV_CLIENT_REQ_RESPONSE 211
# define LLRP_TLV_LLRP_CONF_STATE_VAL 217
# define LLRP_TLV_IDENT 218
# define LLRP_TLV_GPO_WRITE_DATA 219
# define LLRP_TLV_KEEPALIVE_SPEC 220
# define LLRP_TLV_ANTENNA_PROPS 221
# define LLRP_TLV_ANTENNA_CONF 222
# define LLRP_TLV_RF_RECEIVER 223
# define LLRP_TLV_RF_TRANSMITTER 224
# define LLRP_TLV_GPI_PORT_CURRENT_STATE 225
# define LLRP_TLV_EVENTS_AND_REPORTS 226
# define LLRP_TLV_RO_REPORT_SPEC 237
# define LLRP_TLV_TAG_REPORT_CONTENT_SEL 238
# define LLRP_TLV_ACCESS_REPORT_SPEC 239
# define LLRP_TLV_TAG_REPORT_DATA 240
# define LLRP_TLV_EPC_DATA 241
# define LLRP_TLV_RF_SURVEY_REPORT_DATA 242
# define LLRP_TLV_FREQ_RSSI_LEVEL_ENTRY 243
# define LLRP_TLV_READER_EVENT_NOTI_SPEC 244
# define LLRP_TLV_EVENT_NOTIF_STATE 245
# define LLRP_TLV_READER_EVENT_NOTI_DATA 246
# define LLRP_TLV_HOPPING_EVENT 247
# define LLRP_TLV_GPI_EVENT 248
# define LLRP_TLV_RO_SPEC_EVENT 249
# define LLRP_TLV_REPORT_BUF_LEVEL_WARN 250
# define LLRP_TLV_REPORT_BUF_OVERFLOW_ERR 251
# define LLRP_TLV_READER_EXCEPTION_EVENT 252
# define LLRP_TLV_RF_SURVEY_EVENT 253
# define LLRP_TLV_AI_SPEC_EVENT 254
# define LLRP_TLV_ANTENNA_EVENT 255
# define LLRP_TLV_CONN_ATTEMPT_EVENT 256
# define LLRP_TLV_CONN_CLOSE_EVENT 257
# define LLRP_TLV_LLRP_STATUS 287
# define LLRP_TLV_FIELD_ERROR 288
# define LLRP_TLV_PARAM_ERROR 289
# define LLRP_TLV_C1G2_LLRP_CAP 327
# define LLRP_TLV_C1G2_UHF_RF_MD_TBL 328
# define LLRP_TLV_C1G2_UHF_RF_MD_TBL_ENT 329
# define LLRP_TLV_C1G2_INVENTORY_COMMAND 330
# define LLRP_TLV_C1G2_FILTER 331
# define LLRP_TLV_C1G2_TAG_INV_MASK 332
# define LLRP_TLV_C1G2_TAG_INV_AWARE_FLTR 333
# define LLRP_TLV_C1G2_TAG_INV_UNAWR_FLTR 334
# define LLRP_TLV_C1G2_RF_CONTROL 335
# define LLRP_TLV_C1G2_SINGULATION_CTRL 336
# define LLRP_TLV_C1G2_TAG_INV_AWARE_SING 337
# define LLRP_TLV_C1G2_TAG_SPEC 338
# define LLRP_TLV_C1G2_TARGET_TAG 339
# define LLRP_TLV_C1G2_READ 341
# define LLRP_TLV_C1G2_WRITE 342
# define LLRP_TLV_C1G2_KILL 343
# define LLRP_TLV_C1G2_LOCK 344
# define LLRP_TLV_C1G2_LOCK_PAYLOAD 345
# define LLRP_TLV_C1G2_BLK_ERASE 346
# define LLRP_TLV_C1G2_BLK_WRITE 347
# define LLRP_TLV_C1G2_EPC_MEMORY_SLCTOR 348
# define LLRP_TLV_C1G2_READ_OP_SPEC_RES 349
# define LLRP_TLV_C1G2_WRT_OP_SPEC_RES 350
# define LLRP_TLV_C1G2_KILL_OP_SPEC_RES 351
# define LLRP_TLV_C1G2_LOCK_OP_SPEC_RES 352
# define LLRP_TLV_C1G2_BLK_ERS_OP_SPC_RES 353
# define LLRP_TLV_C1G2_BLK_WRT_OP_SPC_RES 354
# define LLRP_TLV_LOOP_SPEC 355
2012-08-23 03:03:54 +00:00
# define LLRP_TLV_SPEC_LOOP_EVENT 356
# define LLRP_TLV_C1G2_RECOMMISSION 357
# define LLRP_TLV_C1G2_BLK_PERMALOCK 358
# define LLRP_TLV_C1G2_GET_BLK_PERMALOCK 359
# define LLRP_TLV_C1G2_RECOM_OP_SPEC_RES 360
# define LLRP_TLV_C1G2_BLK_PRL_OP_SPC_RES 361
# define LLRP_TLV_C1G2_BLK_PRL_STAT_RES 362
2012-05-02 11:05:35 +00:00
# define LLRP_TLV_MAX_RECEIVE_SENSE 363
# define LLRP_TLV_RF_SURVEY_FREQ_CAP 365
2012-08-23 03:03:54 +00:00
# define LLRP_TLV_CUSTOM_PARAMETER 1023
2012-05-02 11:05:35 +00:00
static const value_string tlv_type [ ] = {
{ LLRP_TLV_UTC_TIMESTAMP , " UTC Timestamp " } ,
{ LLRP_TLV_UPTIME , " Uptime " } ,
{ LLRP_TLV_GENERAL_DEVICE_CAP , " General Device Capabilities " } ,
{ LLRP_TLV_RECEIVE_SENSE_ENTRY , " Receive Sensitivity Entry " } ,
{ LLRP_TLV_ANTENNA_AIR_PROTO , " Antenna Air Protocol " } ,
{ LLRP_TLV_GPIO_CAPABILITIES , " GPIO Capabilities " } ,
{ LLRP_TLV_LLRP_CAPABILITIES , " LLRP Capabilities " } ,
{ LLRP_TLV_REGU_CAPABILITIES , " REGU Capabilities " } ,
{ LLRP_TLV_UHF_CAPABILITIES , " UHF Capabilities " } ,
{ LLRP_TLV_XMIT_POWER_LEVEL_ENTRY , " Transmit Power Level Entry " } ,
{ LLRP_TLV_FREQ_INFORMATION , " Frequency Information " } ,
{ LLRP_TLV_FREQ_HOP_TABLE , " Frequenct Hop Table " } ,
{ LLRP_TLV_FIXED_FREQ_TABLE , " Fixed Frequency Table " } ,
{ LLRP_TLV_ANTENNA_RCV_SENSE_RANGE , " Antenna RCV Sensitivity Range " } ,
{ LLRP_TLV_RO_SPEC , " RO Spec " } ,
{ LLRP_TLV_RO_BOUND_SPEC , " RO Bound Spec " } ,
{ LLRP_TLV_RO_SPEC_START_TRIGGER , " RO Spec Start Trigger " } ,
{ LLRP_TLV_PER_TRIGGER_VAL , " PER Trigger Value " } ,
{ LLRP_TLV_GPI_TRIGGER_VAL , " GPI Trigger Value " } ,
{ LLRP_TLV_RO_SPEC_STOP_TRIGGER , " RO Spec Stop Trigger " } ,
{ LLRP_TLV_AI_SPEC , " AI Spec " } ,
{ LLRP_TLV_AI_SPEC_STOP , " AI Spec Stop " } ,
{ LLRP_TLV_TAG_OBSERV_TRIGGER , " Tag Observation Trigger " } ,
{ LLRP_TLV_INVENTORY_PARAM_SPEC , " Inventory Parameter Spec ID " } ,
{ LLRP_TLV_RF_SURVEY_SPEC , " RF Survey Spec " } ,
{ LLRP_TLV_RF_SURVEY_SPEC_STOP_TR , " RF Survey Spec Stop Trigger " } ,
{ LLRP_TLV_ACCESS_SPEC , " Access Spec " } ,
{ LLRP_TLV_ACCESS_SPEC_STOP_TRIG , " Access Spec Stop Trigger " } ,
{ LLRP_TLV_ACCESS_COMMAND , " Access Command " } ,
{ LLRP_TLV_CLIENT_REQ_OP_SPEC , " Client Request Op Spec " } ,
{ LLRP_TLV_CLIENT_REQ_RESPONSE , " Client Request Response " } ,
{ LLRP_TLV_LLRP_CONF_STATE_VAL , " LLRP Configuration State Value " } ,
{ LLRP_TLV_IDENT , " Identification " } ,
{ LLRP_TLV_GPO_WRITE_DATA , " GPO Write Data " } ,
{ LLRP_TLV_KEEPALIVE_SPEC , " Keepalive Spec " } ,
{ LLRP_TLV_ANTENNA_PROPS , " Antenna Properties " } ,
{ LLRP_TLV_ANTENNA_CONF , " Antenna Configuration " } ,
{ LLRP_TLV_RF_RECEIVER , " RF Receiver " } ,
{ LLRP_TLV_RF_TRANSMITTER , " RF Transmitter " } ,
{ LLRP_TLV_GPI_PORT_CURRENT_STATE , " GPI Port Current State " } ,
{ LLRP_TLV_EVENTS_AND_REPORTS , " Events And Reports " } ,
{ LLRP_TLV_RO_REPORT_SPEC , " RO Report Spec " } ,
{ LLRP_TLV_TAG_REPORT_CONTENT_SEL , " Tag Report Content Selector " } ,
{ LLRP_TLV_ACCESS_REPORT_SPEC , " Access Report Spec " } ,
{ LLRP_TLV_TAG_REPORT_DATA , " Tag Report Data " } ,
{ LLRP_TLV_EPC_DATA , " EPC Data " } ,
{ LLRP_TLV_RF_SURVEY_REPORT_DATA , " RF Survey Report Data " } ,
{ LLRP_TLV_FREQ_RSSI_LEVEL_ENTRY , " Frequency RSSI Level Entry " } ,
{ LLRP_TLV_READER_EVENT_NOTI_SPEC , " Reader Event Notification Spec " } ,
{ LLRP_TLV_EVENT_NOTIF_STATE , " Event Notification State " } ,
{ LLRP_TLV_READER_EVENT_NOTI_DATA , " Reader Event Notification Data " } ,
{ LLRP_TLV_HOPPING_EVENT , " Hopping Event " } ,
{ LLRP_TLV_GPI_EVENT , " GPI Event " } ,
{ LLRP_TLV_RO_SPEC_EVENT , " RO Spec Event " } ,
{ LLRP_TLV_REPORT_BUF_LEVEL_WARN , " Report Buffer Level Warning Event " } ,
{ LLRP_TLV_REPORT_BUF_OVERFLOW_ERR , " Report Buffer Overflow Error Event " } ,
{ LLRP_TLV_READER_EXCEPTION_EVENT , " Reader Exception Event " } ,
{ LLRP_TLV_RF_SURVEY_EVENT , " RF Survey Event " } ,
{ LLRP_TLV_AI_SPEC_EVENT , " AI Spec Event " } ,
{ LLRP_TLV_ANTENNA_EVENT , " ANTENNA Event " } ,
{ LLRP_TLV_CONN_ATTEMPT_EVENT , " CONN Attempt Event " } ,
{ LLRP_TLV_CONN_CLOSE_EVENT , " CONN Close Event " } ,
{ LLRP_TLV_LLRP_STATUS , " LLRP Status " } ,
{ LLRP_TLV_FIELD_ERROR , " Field Error " } ,
{ LLRP_TLV_PARAM_ERROR , " Param Error " } ,
{ LLRP_TLV_C1G2_LLRP_CAP , " C1G2 LLRP Capabilities " } ,
{ LLRP_TLV_C1G2_UHF_RF_MD_TBL , " C1G2 UHF RF Mode Table " } ,
{ LLRP_TLV_C1G2_UHF_RF_MD_TBL_ENT , " C1G2 UHF RF Mode Table Entry " } ,
{ LLRP_TLV_C1G2_INVENTORY_COMMAND , " C1G2 Inventory Command " } ,
{ LLRP_TLV_C1G2_FILTER , " C1G2 Filter " } ,
{ LLRP_TLV_C1G2_TAG_INV_MASK , " C1G2 Tag Inventory Mask " } ,
2016-01-06 00:58:42 +00:00
{ LLRP_TLV_C1G2_TAG_INV_AWARE_FLTR , " C1G2 Tag Inventory State-Aware Filter Action " } ,
2012-05-02 11:05:35 +00:00
{ LLRP_TLV_C1G2_TAG_INV_UNAWR_FLTR , " C1G2 Tag Inventory State-Unaware Filter Action " } ,
{ LLRP_TLV_C1G2_RF_CONTROL , " C1G2 RF Control " } ,
{ LLRP_TLV_C1G2_SINGULATION_CTRL , " C1G2 Singulation Control " } ,
{ LLRP_TLV_C1G2_TAG_INV_AWARE_SING , " C1G2 Tag Inventory State-Aware Singulation " } ,
{ LLRP_TLV_C1G2_TAG_SPEC , " C1G2 Tag Spec " } ,
{ LLRP_TLV_C1G2_TARGET_TAG , " C1G2 Target Tag " } ,
{ LLRP_TLV_C1G2_READ , " C1G2 Read " } ,
{ LLRP_TLV_C1G2_WRITE , " C1G2 Write " } ,
{ LLRP_TLV_C1G2_KILL , " C1G2 Kill " } ,
{ LLRP_TLV_C1G2_LOCK , " C1G2 Lock " } ,
{ LLRP_TLV_C1G2_LOCK_PAYLOAD , " C1G2 Lock Payload " } ,
{ LLRP_TLV_C1G2_BLK_ERASE , " C1G2 Block Erase " } ,
{ LLRP_TLV_C1G2_BLK_WRITE , " C1G2 Block Write " } ,
{ LLRP_TLV_C1G2_EPC_MEMORY_SLCTOR , " C1G2 EPC Memory Selector " } ,
{ LLRP_TLV_C1G2_READ_OP_SPEC_RES , " C1G2 Read Op Spec Result " } ,
{ LLRP_TLV_C1G2_WRT_OP_SPEC_RES , " C1G2 Write Op Spec Result " } ,
{ LLRP_TLV_C1G2_KILL_OP_SPEC_RES , " C1G2 Kill Op Spec Result " } ,
{ LLRP_TLV_C1G2_LOCK_OP_SPEC_RES , " C1G2 Lock Op Spec Result " } ,
{ LLRP_TLV_C1G2_BLK_ERS_OP_SPC_RES , " C1G2 Block Erase Op Spec Result " } ,
{ LLRP_TLV_C1G2_BLK_WRT_OP_SPC_RES , " C1G2 Block Write Op Spec Result " } ,
{ LLRP_TLV_LOOP_SPEC , " Loop Spec " } ,
2012-08-23 03:03:54 +00:00
{ LLRP_TLV_SPEC_LOOP_EVENT , " Spec loop event " } ,
{ LLRP_TLV_C1G2_RECOMMISSION , " C1G2 Recommission " } ,
{ LLRP_TLV_C1G2_BLK_PERMALOCK , " C1G2 Block Permalock " } ,
{ LLRP_TLV_C1G2_GET_BLK_PERMALOCK , " C1G2 Get Block Permalock Status " } ,
{ LLRP_TLV_C1G2_RECOM_OP_SPEC_RES , " C1G2 Recommission Op Spec Result " } ,
{ LLRP_TLV_C1G2_BLK_PRL_OP_SPC_RES , " C1G2 Block Permalock Op Spec Result " } ,
{ LLRP_TLV_C1G2_BLK_PRL_STAT_RES , " C1G2 Block Permalock Status Op Spec Result " } ,
2012-05-02 11:05:35 +00:00
{ LLRP_TLV_MAX_RECEIVE_SENSE , " Maximum Receive Sensitivity " } ,
{ LLRP_TLV_RF_SURVEY_FREQ_CAP , " RF Survey Frequency Capabilities " } ,
2012-08-23 03:03:54 +00:00
{ LLRP_TLV_CUSTOM_PARAMETER , " Custom parameter " } ,
2012-05-02 11:05:35 +00:00
{ 0 , NULL }
} ;
2012-07-24 14:47:19 +00:00
static value_string_ext tlv_type_ext = VALUE_STRING_EXT_INIT ( tlv_type ) ;
2012-05-02 11:05:35 +00:00
/* TV Parameter Types */
# define LLRP_TV_ANTENNA_ID 1
# define LLRP_TV_FIRST_SEEN_TIME_UTC 2
# define LLRP_TV_FIRST_SEEN_TIME_UPTIME 3
# define LLRP_TV_LAST_SEEN_TIME_UTC 4
# define LLRP_TV_LAST_SEEN_TIME_UPTIME 5
# define LLRP_TV_PEAK_RSSI 6
# define LLRP_TV_CHANNEL_INDEX 7
# define LLRP_TV_TAG_SEEN_COUNT 8
# define LLRP_TV_RO_SPEC_ID 9
# define LLRP_TV_INVENTORY_PARAM_SPEC_ID 10
# define LLRP_TV_C1G2_CRC 11
# define LLRP_TV_C1G2_PC 12
# define LLRP_TV_EPC96 13
# define LLRP_TV_SPEC_INDEX 14
# define LLRP_TV_CLIENT_REQ_OP_SPEC_RES 15
# define LLRP_TV_ACCESS_SPEC_ID 16
# define LLRP_TV_OP_SPEC_ID 17
# define LLRP_TV_C1G2_SINGULATION_DET 18
# define LLRP_TV_C1G2_XPC_W1 19
# define LLRP_TV_C1G2_XPC_W2 20
/* Since TV's don't have a length field,
* use these values instead */
# define LLRP_TV_LEN_ANTENNA_ID 2
# define LLRP_TV_LEN_FIRST_SEEN_TIME_UTC 8
# define LLRP_TV_LEN_FIRST_SEEN_TIME_UPTIME 8
# define LLRP_TV_LEN_LAST_SEEN_TIME_UTC 8
# define LLRP_TV_LEN_LAST_SEEN_TIME_UPTIME 8
# define LLRP_TV_LEN_PEAK_RSSI 1
# define LLRP_TV_LEN_CHANNEL_INDEX 2
# define LLRP_TV_LEN_TAG_SEEN_COUNT 2
# define LLRP_TV_LEN_RO_SPEC_ID 4
# define LLRP_TV_LEN_INVENTORY_PARAM_SPEC_ID 2
# define LLRP_TV_LEN_C1G2_CRC 2
# define LLRP_TV_LEN_C1G2_PC 2
2012-08-23 03:03:54 +00:00
# define LLRP_TV_LEN_EPC96 12
2012-05-02 11:05:35 +00:00
# define LLRP_TV_LEN_SPEC_INDEX 2
# define LLRP_TV_LEN_CLIENT_REQ_OP_SPEC_RES 2
# define LLRP_TV_LEN_ACCESS_SPEC_ID 4
# define LLRP_TV_LEN_OP_SPEC_ID 2
# define LLRP_TV_LEN_C1G2_SINGULATION_DET 4
# define LLRP_TV_LEN_C1G2_XPC_W1 2
# define LLRP_TV_LEN_C1G2_XPC_W2 2
static const value_string tv_type [ ] = {
{ LLRP_TV_ANTENNA_ID , " Antenna ID " } ,
{ LLRP_TV_FIRST_SEEN_TIME_UTC , " First Seen Timestamp UTC " } ,
{ LLRP_TV_FIRST_SEEN_TIME_UPTIME , " First Seen Timestamp Uptime " } ,
{ LLRP_TV_LAST_SEEN_TIME_UTC , " Last Seen Timestamp UTC " } ,
{ LLRP_TV_LAST_SEEN_TIME_UPTIME , " Last Seen Timestamp Uptime " } ,
{ LLRP_TV_PEAK_RSSI , " Peak RSSI " } ,
{ LLRP_TV_CHANNEL_INDEX , " Channel Index " } ,
{ LLRP_TV_TAG_SEEN_COUNT , " Tag Seen Count " } ,
{ LLRP_TV_RO_SPEC_ID , " RO Spec ID " } ,
{ LLRP_TV_INVENTORY_PARAM_SPEC_ID , " Inventory Parameter Spec ID " } ,
{ LLRP_TV_C1G2_CRC , " C1G2 CRC " } ,
{ LLRP_TV_C1G2_PC , " C1G2 PC " } ,
{ LLRP_TV_EPC96 , " EPC-96 " } ,
{ LLRP_TV_SPEC_INDEX , " Spec Index " } ,
{ LLRP_TV_CLIENT_REQ_OP_SPEC_RES , " Client Request Op Spec Result " } ,
{ LLRP_TV_ACCESS_SPEC_ID , " Access Spec ID " } ,
{ LLRP_TV_OP_SPEC_ID , " Op Spec ID " } ,
{ LLRP_TV_C1G2_SINGULATION_DET , " C1G2 Singulation Details " } ,
{ LLRP_TV_C1G2_XPC_W1 , " C1G2 XPC W1 " } ,
{ LLRP_TV_C1G2_XPC_W2 , " C1G2 XPC W2 " } ,
{ 0 , NULL }
} ;
2012-07-24 14:47:19 +00:00
static value_string_ext tv_type_ext = VALUE_STRING_EXT_INIT ( tv_type ) ;
2012-05-02 11:05:35 +00:00
2012-08-23 03:03:54 +00:00
/* Protocol IDs */
# define LLRP_PROT_ID_UNSPECIFIED 0
# define LLRP_PROT_ID_EPC_C1G2 1
static const range_string protocol_id [ ] = {
{ LLRP_PROT_ID_UNSPECIFIED , LLRP_PROT_ID_UNSPECIFIED , " Unspecified protocol " } ,
{ LLRP_PROT_ID_EPC_C1G2 , LLRP_PROT_ID_EPC_C1G2 , " EPCGlobal Class 1 Gen 2 " } ,
{ LLRP_PROT_ID_EPC_C1G2 + 1 , 255 , " Reserved for furure use " } ,
{ 0 , 0 , NULL }
} ;
/* Communication standards */
# define LLRP_COMM_STANDARD_UNSPECIFIED 0
# define LLRP_COMM_STANDARD_US_FCC_PART_15 1
# define LLRP_COMM_STANDARD_ETSI_302_208 2
# define LLRP_COMM_STANDARD_ETSI_300_220 3
# define LLRP_COMM_STANDARD_AUSTRALIA_LIPD_1W 4
# define LLRP_COMM_STANDARD_AUSTRALIA_LIPD_4W 5
# define LLRP_COMM_STANDARD_JAPAN_ARIB_STD_T89 6
# define LLRP_COMM_STANDARD_HONG_KONG_OFTA_1049 7
# define LLRP_COMM_STANDARD_TAIWAN_DGT_LP0002 8
# define LLRP_COMM_STANDARD_KOREA_MIC_ARTICLE_5_2 9
static const value_string comm_standard [ ] = {
{ LLRP_COMM_STANDARD_UNSPECIFIED , " Unspecified " } ,
{ LLRP_COMM_STANDARD_US_FCC_PART_15 , " US FCC Part 15 " } ,
{ LLRP_COMM_STANDARD_ETSI_302_208 , " ETSI 302 208 " } ,
{ LLRP_COMM_STANDARD_ETSI_300_220 , " ETSI 300 220 " } ,
{ LLRP_COMM_STANDARD_AUSTRALIA_LIPD_1W , " Australia LIPD 1W " } ,
{ LLRP_COMM_STANDARD_AUSTRALIA_LIPD_4W , " Australia LIPD 4W " } ,
{ LLRP_COMM_STANDARD_JAPAN_ARIB_STD_T89 , " Japan_ARIB STD T89 " } ,
{ LLRP_COMM_STANDARD_HONG_KONG_OFTA_1049 , " Hong_Kong OFTA 1049 " } ,
{ LLRP_COMM_STANDARD_TAIWAN_DGT_LP0002 , " Taiwan DGT LP0002 " } ,
{ LLRP_COMM_STANDARD_KOREA_MIC_ARTICLE_5_2 , " Korea MIC Article 5 2 " } ,
{ 0 , NULL }
} ;
static value_string_ext comm_standard_ext = VALUE_STRING_EXT_INIT ( comm_standard ) ;
/* ID type */
# define LLRP_ID_TYPE_MAC 0
# define LLRP_ID_TYPE_EPC 1
static const value_string id_type [ ] = {
{ LLRP_ID_TYPE_MAC , " MAC " } ,
{ LLRP_ID_TYPE_EPC , " EPC " } ,
{ 0 , NULL }
} ;
/* KeepAlive type */
# define LLRP_KEEPALIVE_TYPE_NULL 0
# define LLRP_KEEPALIVE_TYPE_PERIODIC 1
static const value_string keepalive_type [ ] = {
{ LLRP_KEEPALIVE_TYPE_NULL , " Null " } ,
{ LLRP_KEEPALIVE_TYPE_PERIODIC , " Periodic " } ,
{ 0 , NULL }
} ;
/* Notification Event type */
# define LLRP_NOTIFICATION_EVENT_TYPE_UPON_HOPPING_TO_NEXT_CHANNEL 0
# define LLRP_NOTIFICATION_EVENT_TYPE_GPI_EVENT 1
# define LLRP_NOTIFICATION_EVENT_TYPE_ROSPEC_EVENT 2
# define LLRP_NOTIFICATION_EVENT_TYPE_REPORT_BUFFER_FILL_WARNING 3
# define LLRP_NOTIFICATION_EVENT_TYPE_READER_EXCEPTION_EVENT 4
# define LLRP_NOTIFICATION_EVENT_TYPE_RFSURVEY_EVENT 5
# define LLRP_NOTIFICATION_EVENT_TYPE_AISPEC_EVENT 6
# define LLRP_NOTIFICATION_EVENT_TYPE_AISPEC_EVENT_WITH_DETAILS 7
# define LLRP_NOTIFICATION_EVENT_TYPE_ANTENNA_EVENT 8
# define LLRP_NOTIFICATION_EVENT_TYPE_SPEC_LOOP_EVENT 9
static const value_string event_type [ ] = {
{ LLRP_NOTIFICATION_EVENT_TYPE_UPON_HOPPING_TO_NEXT_CHANNEL , " Upon hopping to next channel " } ,
{ LLRP_NOTIFICATION_EVENT_TYPE_GPI_EVENT , " GPI event " } ,
{ LLRP_NOTIFICATION_EVENT_TYPE_ROSPEC_EVENT , " ROSpec event " } ,
{ LLRP_NOTIFICATION_EVENT_TYPE_REPORT_BUFFER_FILL_WARNING , " Report buffer fill warning " } ,
{ LLRP_NOTIFICATION_EVENT_TYPE_READER_EXCEPTION_EVENT , " Reader exception event " } ,
{ LLRP_NOTIFICATION_EVENT_TYPE_RFSURVEY_EVENT , " RFSurvey event " } ,
{ LLRP_NOTIFICATION_EVENT_TYPE_AISPEC_EVENT , " AISpec event " } ,
{ LLRP_NOTIFICATION_EVENT_TYPE_AISPEC_EVENT_WITH_DETAILS , " AISpec event with details " } ,
{ LLRP_NOTIFICATION_EVENT_TYPE_ANTENNA_EVENT , " Antenna event " } ,
{ LLRP_NOTIFICATION_EVENT_TYPE_SPEC_LOOP_EVENT , " SpecLoop event " } ,
{ 0 , NULL }
} ;
static value_string_ext event_type_ext = VALUE_STRING_EXT_INIT ( event_type ) ;
/* ROSpec event type */
# define LLRP_ROSPEC_EVENT_TYPE_START_OF_ROSPEC 0
# define LLRP_ROSPEC_EVENT_TYPE_END_OF_ROSPEC 1
# define LLRP_ROSPEC_EVENT_TYPE_PREEMPTION_OF_ROSPEC 2
static const value_string roevent_type [ ] = {
{ LLRP_ROSPEC_EVENT_TYPE_START_OF_ROSPEC , " Start of ROSpec " } ,
{ LLRP_ROSPEC_EVENT_TYPE_END_OF_ROSPEC , " End of ROSpec " } ,
{ LLRP_ROSPEC_EVENT_TYPE_PREEMPTION_OF_ROSPEC , " Preemption of ROSpec " } ,
{ 0 , NULL }
} ;
/* ROSpec event type */
# define LLRP_RF_SURVEY_EVENT_TYPE_START_OF_SURVEY 0
# define LLRP_RF_SURVEY_EVENT_TYPE_END_OF_SURVEY 1
static const value_string rfevent_type [ ] = {
{ LLRP_RF_SURVEY_EVENT_TYPE_START_OF_SURVEY , " Start of survey " } ,
{ LLRP_RF_SURVEY_EVENT_TYPE_END_OF_SURVEY , " End of survey " } ,
{ 0 , NULL }
} ;
/* AISpec event type */
# define LLRP_AISPEC_EVENT_TYPE_END_OF_AISPEC 0
static const value_string aievent_type [ ] = {
{ LLRP_AISPEC_EVENT_TYPE_END_OF_AISPEC , " End of AISpec " } ,
{ 0 , NULL }
} ;
/* Antenna event type */
# define LLRP_ANTENNA_EVENT_DISCONNECTED 0
# define LLRP_ANTENNA_EVENT_CONNECTED 1
static const value_string antenna_event_type [ ] = {
{ LLRP_ANTENNA_EVENT_DISCONNECTED , " Antenna disconnected " } ,
{ LLRP_ANTENNA_EVENT_CONNECTED , " Antenna connected " } ,
{ 0 , NULL }
} ;
/* Connection status */
# define LLRP_CONNECTION_SUCCESS 0
# define LLRP_CONNECTION_FAILED_READER_INITIATE_ALREADY_EXISTS 1
# define LLRP_CONNECTION_FAILED_CLIENT_INITIATE_ALREADY_EXISTS 2
# define LLRP_CONNECTION_FAILED_OTHER_REASON_THAN_ALREADY_EXISTS 3
# define LLRP_CONNECTION_ANOTHER_CONNECTION_ATTEMPTED 4
static const value_string connection_status [ ] = {
{ LLRP_CONNECTION_SUCCESS , " Success " } ,
{ LLRP_CONNECTION_FAILED_READER_INITIATE_ALREADY_EXISTS , " Failed a reader initiated connection already exists " } ,
{ LLRP_CONNECTION_FAILED_CLIENT_INITIATE_ALREADY_EXISTS , " Failed a client initiated connection already exists " } ,
{ LLRP_CONNECTION_FAILED_OTHER_REASON_THAN_ALREADY_EXISTS , " Failed reason other than a connection already exists " } ,
{ LLRP_CONNECTION_ANOTHER_CONNECTION_ATTEMPTED , " Another connection attempted " } ,
{ 0 , NULL }
} ;
/* Status code */
# define LLRP_STATUS_CODE_M_SUCCESS 0
# define LLRP_STATUS_CODE_M_PARAMETERERROR 100
# define LLRP_STATUS_CODE_M_FIELDERROR 101
# define LLRP_STATUS_CODE_M_UNEXPECTEDPARAMETER 102
# define LLRP_STATUS_CODE_M_MISSINGPARAMETER 103
# define LLRP_STATUS_CODE_M_DUPLICATEPARAMETER 104
# define LLRP_STATUS_CODE_M_OVERFLOWPARAMETER 105
# define LLRP_STATUS_CODE_M_OVERFLOWFIELD 106
# define LLRP_STATUS_CODE_M_UNKNOWNPARAMETER 107
# define LLRP_STATUS_CODE_M_UNKNOWNFIELD 108
# define LLRP_STATUS_CODE_M_UNSUPPORTEDMESSAGE 109
# define LLRP_STATUS_CODE_M_UNSUPPORTEDVERSION 110
# define LLRP_STATUS_CODE_M_UNSUPPORTEDPARAMETER 111
# define LLRP_STATUS_CODE_P_PARAMETERERROR 200
# define LLRP_STATUS_CODE_P_FIELDERROR 201
# define LLRP_STATUS_CODE_P_UNEXPECTEDPARAMETER 202
# define LLRP_STATUS_CODE_P_MISSINGPARAMETER 203
# define LLRP_STATUS_CODE_P_DUPLICATEPARAMETER 204
# define LLRP_STATUS_CODE_P_OVERFLOWPARAMETER 205
# define LLRP_STATUS_CODE_P_OVERFLOWFIELD 206
# define LLRP_STATUS_CODE_P_UNKNOWNPARAMETER 207
# define LLRP_STATUS_CODE_P_UNKNOWNFIELD 208
# define LLRP_STATUS_CODE_P_UNSUPPORTEDPARAMETER 209
# define LLRP_STATUS_CODE_A_INVALID 300
# define LLRP_STATUS_CODE_A_OUTOFRANGE 301
# define LLRP_STATUS_CODE_R_DEVICEERROR 401
static const value_string status_code [ ] = {
{ LLRP_STATUS_CODE_M_SUCCESS , " M_Success " } ,
{ LLRP_STATUS_CODE_M_PARAMETERERROR , " M_ParameterError " } ,
{ LLRP_STATUS_CODE_M_FIELDERROR , " M_FieldError " } ,
{ LLRP_STATUS_CODE_M_UNEXPECTEDPARAMETER , " M_UnexpectedParameter " } ,
{ LLRP_STATUS_CODE_M_MISSINGPARAMETER , " M_MissingParameter " } ,
{ LLRP_STATUS_CODE_M_DUPLICATEPARAMETER , " M_DuplicateParameter " } ,
{ LLRP_STATUS_CODE_M_OVERFLOWPARAMETER , " M_OverflowParameter " } ,
{ LLRP_STATUS_CODE_M_OVERFLOWFIELD , " M_OverflowField " } ,
{ LLRP_STATUS_CODE_M_UNKNOWNPARAMETER , " M_UnknownParameter " } ,
{ LLRP_STATUS_CODE_M_UNKNOWNFIELD , " M_UnknownField " } ,
{ LLRP_STATUS_CODE_M_UNSUPPORTEDMESSAGE , " M_UnsupportedMessage " } ,
{ LLRP_STATUS_CODE_M_UNSUPPORTEDVERSION , " M_UnsupportedVersion " } ,
{ LLRP_STATUS_CODE_M_UNSUPPORTEDPARAMETER , " M_UnsupportedParameter " } ,
{ LLRP_STATUS_CODE_P_PARAMETERERROR , " P_ParameterError " } ,
{ LLRP_STATUS_CODE_P_FIELDERROR , " P_FieldError " } ,
{ LLRP_STATUS_CODE_P_UNEXPECTEDPARAMETER , " P_UnexpectedParameter " } ,
{ LLRP_STATUS_CODE_P_MISSINGPARAMETER , " P_MissingParameter " } ,
{ LLRP_STATUS_CODE_P_DUPLICATEPARAMETER , " P_DuplicateParameter " } ,
{ LLRP_STATUS_CODE_P_OVERFLOWPARAMETER , " P_OverflowParameter " } ,
{ LLRP_STATUS_CODE_P_OVERFLOWFIELD , " P_OverflowField " } ,
{ LLRP_STATUS_CODE_P_UNKNOWNPARAMETER , " P_UnknownParameter " } ,
{ LLRP_STATUS_CODE_P_UNKNOWNFIELD , " P_UnknownField " } ,
{ LLRP_STATUS_CODE_P_UNSUPPORTEDPARAMETER , " P_UnsupportedParameter " } ,
{ LLRP_STATUS_CODE_A_INVALID , " A_Invalid " } ,
{ LLRP_STATUS_CODE_A_OUTOFRANGE , " A_OutOfRange " } ,
{ LLRP_STATUS_CODE_R_DEVICEERROR , " R_DeviceError " } ,
{ 0 , NULL }
} ;
static value_string_ext status_code_ext = VALUE_STRING_EXT_INIT ( status_code ) ;
/* C1G2 tag inventory state aware singulation action */
const true_false_string tfs_state_a_b = { " State B " , " State A " } ;
const true_false_string tfs_sl = { " ~SL " , " SL " } ;
const true_false_string tfs_all_no = { " All " , " No " } ;
/* Vendors */
# define LLRP_VENDOR_IMPINJ 25882
static const value_string llrp_vendors [ ] = {
{ LLRP_VENDOR_IMPINJ , " Impinj " } ,
{ 0 , NULL }
} ;
/* Vendor subtypes */
/* Impinj custom message types */
# define LLRP_IMPINJ_TYPE_ENABLE_EXTENSIONS 21
# define LLRP_IMPINJ_TYPE_ENABLE_EXTENSIONS_RESPONSE 22
# define LLRP_IMPINJ_TYPE_SAVE_SETTINGS 23
# define LLRP_IMPINJ_TYPE_SAVE_SETTINGS_RESPONSE 24
static const value_string impinj_msg_subtype [ ] = {
{ LLRP_IMPINJ_TYPE_ENABLE_EXTENSIONS , " Enable extensions " } ,
{ LLRP_IMPINJ_TYPE_ENABLE_EXTENSIONS_RESPONSE , " Enable extensions response " } ,
{ LLRP_IMPINJ_TYPE_SAVE_SETTINGS , " Save settings " } ,
{ LLRP_IMPINJ_TYPE_SAVE_SETTINGS_RESPONSE , " Save setting response " } ,
{ 0 , NULL }
} ;
static value_string_ext impinj_msg_subtype_ext = VALUE_STRING_EXT_INIT ( impinj_msg_subtype ) ;
/* Impinj custom parameter types */
# define LLRP_IMPINJ_PARAM_REQUESTED_DATA 21
# define LLRP_IMPINJ_PARAM_SUBREGULATORY_REGION 22
# define LLRP_IMPINJ_PARAM_INVENTORY_SEARCH_MODE 23
# define LLRP_IMPINJ_PARAM_TAG_DIRECTION_REPORTING 24
# define LLRP_IMPINJ_PARAM_TAG_DIRECTION 25
# define LLRP_IMPINJ_PARAM_FIXED_FREQUENCY_LIST 26
# define LLRP_IMPINJ_PARAM_REDUCED_POWER_FREQUENCY_LIST 27
# define LLRP_IMPINJ_PARAM_LOW_DUTY_CYCLE 28
# define LLRP_IMPINJ_PARAM_DETAILED_VERSION 29
# define LLRP_IMPINJ_PARAM_FREQUENCY_CAPABILITIES 30
# define LLRP_IMPINJ_PARAM_TAG_INFORMATION 31
# define LLRP_IMPINJ_PARAM_FORKLIFT_CONFIGURATION 32
# define LLRP_IMPINJ_PARAM_FORKLIFT_HEIGHT_THRESHOLD 33
# define LLRP_IMPINJ_PARAM_FORKLIFT_ZEROMOTION_TIME_THRESHOLD 34
# define LLRP_IMPINJ_PARAM_FORKLIFT_COMPANION_BOARD_INFO 35
# define LLRP_IMPINJ_PARAM_GPI_DEBOUNCE_CONFIGURATION 36
# define LLRP_IMPINJ_PARAM_READER_TEMPERATURE 37
# define LLRP_IMPINJ_PARAM_LINK_MONITOR_CONFIGURATION 38
# define LLRP_IMPINJ_PARAM_REPORT_BUFFER_CONFIGURATION 39
# define LLRP_IMPINJ_PARAM_ACCESS_SPEC_CONFIGURATION 40
# define LLRP_IMPINJ_PARAM_BLOCK_WRITE_WORD_COUNT 41
# define LLRP_IMPINJ_PARAM_BLOCK_PERMALOCK 42
# define LLRP_IMPINJ_PARAM_BLOCK_PERMALOCK_OPSPEC_RESULT 43
# define LLRP_IMPINJ_PARAM_GET_BLOCK_PERMALOCK_STATUS 44
# define LLRP_IMPINJ_PARAM_GET_BLOCK_PERMALOCK_STATUS_OPSPEC_RESULT 45
# define LLRP_IMPINJ_PARAM_SET_QT_CONFIG 46
# define LLRP_IMPINJ_PARAM_SET_QT_CONFIG_OPSPEC_RESULT 47
# define LLRP_IMPINJ_PARAM_GET_QT_CONFIG 48
# define LLRP_IMPINJ_PARAM_GET_QT_CONFIG_OPSPEC_RESULT 49
# define LLRP_IMPINJ_PARAM_TAG_REPORT_CONTENT_SELECTOR 50
# define LLRP_IMPINJ_PARAM_ENABLE_SERIALIZED_TID 51
# define LLRP_IMPINJ_PARAM_ENABLE_RF_PHASE_ANGLE 52
# define LLRP_IMPINJ_PARAM_ENABLE_PEAK_RSSI 53
# define LLRP_IMPINJ_PARAM_ENABLE_GPS_COORDINATES 54
# define LLRP_IMPINJ_PARAM_SERIALIZED_TID 55
# define LLRP_IMPINJ_PARAM_RF_PHASE_ANGLE 56
# define LLRP_IMPINJ_PARAM_PEAK_RSSI 57
# define LLRP_IMPINJ_PARAM_GPS_COORDINATES 58
# define LLRP_IMPINJ_PARAM_LOOP_SPEC 59
# define LLRP_IMPINJ_PARAM_GPS_NMEA_SENTENCES 60
# define LLRP_IMPINJ_PARAM_GGA_SENTENCE 61
# define LLRP_IMPINJ_PARAM_RMC_SENTENCE 62
# define LLRP_IMPINJ_PARAM_OPSPEC_RETRY_COUNT 63
# define LLRP_IMPINJ_PARAM_ADVANCE_GPO_CONFIG 64
# define LLRP_IMPINJ_PARAM_ENABLE_OPTIM_READ 65
# define LLRP_IMPINJ_PARAM_ACCESS_SPEC_ORDERING 66
# define LLRP_IMPINJ_PARAM_ENABLE_RF_DOPPLER_FREQ 67
2014-07-10 11:08:34 +00:00
# define LLRP_IMPINJ_PARAM_ARRAY_VERSION 1520
# define LLRP_IMPINJ_PARAM_HUB_VERSIONS 1537
# define LLRP_IMPINJ_PARAM_HUB_CONFIGURATION 1538
2012-08-23 03:03:54 +00:00
static const value_string impinj_param_type [ ] = {
{ LLRP_IMPINJ_PARAM_REQUESTED_DATA , " Requested Data " } ,
{ LLRP_IMPINJ_PARAM_SUBREGULATORY_REGION , " Sub regulatory region " } ,
{ LLRP_IMPINJ_PARAM_INVENTORY_SEARCH_MODE , " Inventory search mode " } ,
{ LLRP_IMPINJ_PARAM_TAG_DIRECTION_REPORTING , " Tag direction reporting " } ,
{ LLRP_IMPINJ_PARAM_TAG_DIRECTION , " Tag direction " } ,
{ LLRP_IMPINJ_PARAM_FIXED_FREQUENCY_LIST , " Fixed frequency list " } ,
{ LLRP_IMPINJ_PARAM_REDUCED_POWER_FREQUENCY_LIST , " Reduced power frequency list " } ,
{ LLRP_IMPINJ_PARAM_LOW_DUTY_CYCLE , " Low duty cycle " } ,
{ LLRP_IMPINJ_PARAM_DETAILED_VERSION , " Detailed version " } ,
{ LLRP_IMPINJ_PARAM_FREQUENCY_CAPABILITIES , " Frequency capabilities " } ,
{ LLRP_IMPINJ_PARAM_TAG_INFORMATION , " Tag information " } ,
{ LLRP_IMPINJ_PARAM_FORKLIFT_CONFIGURATION , " Forklift configuration " } ,
{ LLRP_IMPINJ_PARAM_FORKLIFT_HEIGHT_THRESHOLD , " Forklift height threshold " } ,
2013-04-01 15:29:49 +00:00
{ LLRP_IMPINJ_PARAM_FORKLIFT_ZEROMOTION_TIME_THRESHOLD , " Forklift zero motion time threshold " } ,
2012-08-23 03:03:54 +00:00
{ LLRP_IMPINJ_PARAM_FORKLIFT_COMPANION_BOARD_INFO , " Forklift companion board info " } ,
{ LLRP_IMPINJ_PARAM_GPI_DEBOUNCE_CONFIGURATION , " Gpi debounce configuration " } ,
{ LLRP_IMPINJ_PARAM_READER_TEMPERATURE , " Reader temperature " } ,
{ LLRP_IMPINJ_PARAM_LINK_MONITOR_CONFIGURATION , " Link monitor configuration " } ,
{ LLRP_IMPINJ_PARAM_REPORT_BUFFER_CONFIGURATION , " Report buffer configuration " } ,
{ LLRP_IMPINJ_PARAM_ACCESS_SPEC_CONFIGURATION , " Access spec configuration " } ,
{ LLRP_IMPINJ_PARAM_BLOCK_WRITE_WORD_COUNT , " Block write word count " } ,
{ LLRP_IMPINJ_PARAM_BLOCK_PERMALOCK , " Block permalock " } ,
{ LLRP_IMPINJ_PARAM_BLOCK_PERMALOCK_OPSPEC_RESULT , " Block permalock OpSpec result " } ,
{ LLRP_IMPINJ_PARAM_GET_BLOCK_PERMALOCK_STATUS , " Get block permalock status " } ,
{ LLRP_IMPINJ_PARAM_GET_BLOCK_PERMALOCK_STATUS_OPSPEC_RESULT , " Get block permalock status OpSpec result " } ,
{ LLRP_IMPINJ_PARAM_SET_QT_CONFIG , " Set QT config " } ,
{ LLRP_IMPINJ_PARAM_SET_QT_CONFIG_OPSPEC_RESULT , " Set QT config OpSpec result " } ,
{ LLRP_IMPINJ_PARAM_GET_QT_CONFIG , " Get QT config " } ,
{ LLRP_IMPINJ_PARAM_GET_QT_CONFIG_OPSPEC_RESULT , " Get QT config OpSpec result " } ,
{ LLRP_IMPINJ_PARAM_TAG_REPORT_CONTENT_SELECTOR , " Tag report content selector " } ,
{ LLRP_IMPINJ_PARAM_ENABLE_SERIALIZED_TID , " Enable serialized TID " } ,
{ LLRP_IMPINJ_PARAM_ENABLE_RF_PHASE_ANGLE , " Enable RF phase angle " } ,
{ LLRP_IMPINJ_PARAM_ENABLE_PEAK_RSSI , " Enable peak RSSI " } ,
{ LLRP_IMPINJ_PARAM_ENABLE_GPS_COORDINATES , " Enable GPS coordinates " } ,
{ LLRP_IMPINJ_PARAM_SERIALIZED_TID , " Serialized TID " } ,
{ LLRP_IMPINJ_PARAM_RF_PHASE_ANGLE , " RF phase angle " } ,
{ LLRP_IMPINJ_PARAM_PEAK_RSSI , " Peak RSSI " } ,
{ LLRP_IMPINJ_PARAM_GPS_COORDINATES , " GPS coordinates " } ,
{ LLRP_IMPINJ_PARAM_LOOP_SPEC , " LoopSpec " } ,
{ LLRP_IMPINJ_PARAM_GPS_NMEA_SENTENCES , " GPS NMEA sentences " } ,
{ LLRP_IMPINJ_PARAM_GGA_SENTENCE , " GGA sentence " } ,
{ LLRP_IMPINJ_PARAM_RMC_SENTENCE , " RMC sentence " } ,
{ LLRP_IMPINJ_PARAM_OPSPEC_RETRY_COUNT , " OpSpec retry count " } ,
{ LLRP_IMPINJ_PARAM_ADVANCE_GPO_CONFIG , " Advanced GPO configuration " } ,
{ LLRP_IMPINJ_PARAM_ENABLE_OPTIM_READ , " Enable optimized read " } ,
{ LLRP_IMPINJ_PARAM_ACCESS_SPEC_ORDERING , " AccessSpec ordering " } ,
{ LLRP_IMPINJ_PARAM_ENABLE_RF_DOPPLER_FREQ , " Enable RF doppler frequency " } ,
2014-07-10 11:08:34 +00:00
{ LLRP_IMPINJ_PARAM_ARRAY_VERSION , " Array specific HW and version info " } ,
{ LLRP_IMPINJ_PARAM_HUB_VERSIONS , " Hub specific HW and version info " } ,
{ LLRP_IMPINJ_PARAM_HUB_CONFIGURATION , " Hub connection and fault state " } ,
2012-08-23 03:03:54 +00:00
{ 0 , NULL }
} ;
static value_string_ext impinj_param_type_ext = VALUE_STRING_EXT_INIT ( impinj_param_type ) ;
/* Impinj requested data */
# define LLRP_IMPINJ_REQ_DATA_ALL_CAPABILITIES 1000
# define LLRP_IMPINJ_REQ_DATA_DETAILED_VERSION 1001
# define LLRP_IMPINJ_REQ_DATA_FREQUENCY_CAPABILITIES 1002
# define LLRP_IMPINJ_REQ_DATA_CONFIGURATION 2000
# define LLRP_IMPINJ_REQ_DATA_SUB_REGULATORY_REGION 2001
# define LLRP_IMPINJ_REQ_DATA_FORKLIFT_CONFIGURATION 2002
# define LLRP_IMPINJ_REQ_DATA_GPI_DEBOUNCE_CONFIGURATION 2003
# define LLRP_IMPINJ_REQ_DATA_READER_TEMPERATURE 2004
# define LLRP_IMPINJ_REQ_DATA_LINK_MONITOR_CONFIGURATION 2005
# define LLRP_IMPINJ_REQ_DATA_REPORT_BUFFER_CONFIGURATION 2006
# define LLRP_IMPINJ_REQ_DATA_ACCESS_SPEC_CONFIGURATION 2007
# define LLRP_IMPINJ_REQ_DATA_GPS_NMEA_SENTENCES 2008
static const value_string impinj_req_data [ ] = {
{ LLRP_IMPINJ_REQ_DATA_ALL_CAPABILITIES , " All capabilities " } ,
{ LLRP_IMPINJ_REQ_DATA_DETAILED_VERSION , " Detailed version " } ,
{ LLRP_IMPINJ_REQ_DATA_FREQUENCY_CAPABILITIES , " Frequency capabilities " } ,
{ LLRP_IMPINJ_REQ_DATA_CONFIGURATION , " Configuration " } ,
{ LLRP_IMPINJ_REQ_DATA_SUB_REGULATORY_REGION , " Sub regulatory region " } ,
{ LLRP_IMPINJ_REQ_DATA_FORKLIFT_CONFIGURATION , " Forklift configuration " } ,
{ LLRP_IMPINJ_REQ_DATA_GPI_DEBOUNCE_CONFIGURATION , " GPI debounce configuration " } ,
{ LLRP_IMPINJ_REQ_DATA_READER_TEMPERATURE , " Reader temperature " } ,
{ LLRP_IMPINJ_REQ_DATA_LINK_MONITOR_CONFIGURATION , " Link monitor configuration " } ,
{ LLRP_IMPINJ_REQ_DATA_REPORT_BUFFER_CONFIGURATION , " Report buffer configuration " } ,
{ LLRP_IMPINJ_REQ_DATA_ACCESS_SPEC_CONFIGURATION , " Access spec configuration " } ,
{ LLRP_IMPINJ_REQ_DATA_GPS_NMEA_SENTENCES , " GPS NMEA sentences " } ,
{ 0 , NULL }
} ;
static value_string_ext impinj_req_data_ext = VALUE_STRING_EXT_INIT ( impinj_req_data ) ;
/* Impinj regulatory region */
# define LLRP_IMPINJ_REG_REGION_FCC_PART_15_247 0
# define LLRP_IMPINJ_REG_REGION_ETSI_EN_300_220 1
# define LLRP_IMPINJ_REG_REGION_ETSI_EN_302_208_WITH_LBT 2
# define LLRP_IMPINJ_REG_REGION_HONG_KONG_920_925_MHZ 3
# define LLRP_IMPINJ_REG_REGION_TAIWAN_922_928_MHZ 4
# define LLRP_IMPINJ_REG_REGION_JAPAN_952_954_MHZ 5
# define LLRP_IMPINJ_REG_REGION_JAPAN_952_954_MHZ_LOW_POWER 6
# define LLRP_IMPINJ_REG_REGION_ETSI_EN_302_208_V1_2_1 7
# define LLRP_IMPINJ_REG_REGION_KOREA_910_914_MHZ 8
# define LLRP_IMPINJ_REG_REGION_MALAYSIA_919_923_MHZ 9
# define LLRP_IMPINJ_REG_REGION_CHINA_920_925_MHZ 10
# define LLRP_IMPINJ_REG_REGION_JAPAN_952_954_MHZ_WITHOUT_LBT 11
# define LLRP_IMPINJ_REG_REGION_SOUTH_AFRICA_915_919_MHZ 12
# define LLRP_IMPINJ_REG_REGION_BRAZIL_902_907_AND_915_928_MHZ 13
# define LLRP_IMPINJ_REG_REGION_THAILAND_920_925_MHZ 14
# define LLRP_IMPINJ_REG_REGION_SINGAPORE_920_925_MHZ 15
# define LLRP_IMPINJ_REG_REGION_AUSTRALIA_920_926_MHZ 16
# define LLRP_IMPINJ_REG_REGION_INDIA_865_867_MHZ 17
# define LLRP_IMPINJ_REG_REGION_URUGUAY_916_928_MHZ 18
# define LLRP_IMPINJ_REG_REGION_VIETNAM_920_925_MHZ 19
# define LLRP_IMPINJ_REG_REGION_ISRAEL_915_917_MHZ 20
static const value_string impinj_reg_region [ ] = {
{ LLRP_IMPINJ_REG_REGION_FCC_PART_15_247 , " Fcc part 15 247 " } ,
{ LLRP_IMPINJ_REG_REGION_ETSI_EN_300_220 , " ETSI EN 300 220 " } ,
{ LLRP_IMPINJ_REG_REGION_ETSI_EN_302_208_WITH_LBT , " ETSI EN 302 208 with LBT " } ,
{ LLRP_IMPINJ_REG_REGION_HONG_KONG_920_925_MHZ , " Hong kong 920-925 MHz " } ,
{ LLRP_IMPINJ_REG_REGION_TAIWAN_922_928_MHZ , " Taiwan 922-928 MHz " } ,
{ LLRP_IMPINJ_REG_REGION_JAPAN_952_954_MHZ , " Japan 952-954 MHz " } ,
{ LLRP_IMPINJ_REG_REGION_JAPAN_952_954_MHZ_LOW_POWER , " Japan 952-954 MHz low power " } ,
{ LLRP_IMPINJ_REG_REGION_ETSI_EN_302_208_V1_2_1 , " ETSI EN 302 208 v1.2.1 " } ,
{ LLRP_IMPINJ_REG_REGION_KOREA_910_914_MHZ , " Korea 910-914 MHz " } ,
{ LLRP_IMPINJ_REG_REGION_MALAYSIA_919_923_MHZ , " Malaysia 919-923 MHz " } ,
{ LLRP_IMPINJ_REG_REGION_CHINA_920_925_MHZ , " China 920-925 MHz " } ,
{ LLRP_IMPINJ_REG_REGION_JAPAN_952_954_MHZ_WITHOUT_LBT , " Japan 952-954 MHz without LBT " } ,
{ LLRP_IMPINJ_REG_REGION_SOUTH_AFRICA_915_919_MHZ , " South africa 915-919 MHz " } ,
{ LLRP_IMPINJ_REG_REGION_BRAZIL_902_907_AND_915_928_MHZ , " Brazil 902-907 and 915-928 MHz " } ,
{ LLRP_IMPINJ_REG_REGION_THAILAND_920_925_MHZ , " Thailand 920-925 MHz " } ,
{ LLRP_IMPINJ_REG_REGION_SINGAPORE_920_925_MHZ , " Singapore 920-925 MHz " } ,
{ LLRP_IMPINJ_REG_REGION_AUSTRALIA_920_926_MHZ , " Australia 920-926 MHz " } ,
{ LLRP_IMPINJ_REG_REGION_INDIA_865_867_MHZ , " India 865-867 MHz " } ,
{ LLRP_IMPINJ_REG_REGION_URUGUAY_916_928_MHZ , " Uruguay 916-928 MHz " } ,
{ LLRP_IMPINJ_REG_REGION_VIETNAM_920_925_MHZ , " Vietnam 920-925 MHz " } ,
{ LLRP_IMPINJ_REG_REGION_ISRAEL_915_917_MHZ , " Israel 915-917 MHz " } ,
{ 0 , NULL }
} ;
static value_string_ext impinj_reg_region_ext = VALUE_STRING_EXT_INIT ( impinj_reg_region ) ;
/* Impinj inventory search type */
# define LLRP_IMPINJ_SEARCH_TYPE_READER_SELECTED 0
# define LLRP_IMPINJ_SEARCH_TYPE_SINGLE_TARGET 1
# define LLRP_IMPINJ_SEARCH_TYPE_DUAL_TARGET 2
# define LLRP_IMPINJ_SEARCH_TYPE_SINGLE_TARGET_WITH_SUPP 3
static const value_string impinj_search_mode [ ] = {
{ LLRP_IMPINJ_SEARCH_TYPE_READER_SELECTED , " Reader selected " } ,
{ LLRP_IMPINJ_SEARCH_TYPE_SINGLE_TARGET , " Single target " } ,
{ LLRP_IMPINJ_SEARCH_TYPE_DUAL_TARGET , " Dual target " } ,
{ LLRP_IMPINJ_SEARCH_TYPE_SINGLE_TARGET_WITH_SUPP , " Single target with suppression " } ,
{ 0 , NULL }
} ;
/* Impinj antenna configuration */
# define LLRP_IMPINJ_ANT_CONF_DUAL 1
# define LLRP_IMPINJ_ANT_CONF_QUAD 2
static const value_string impinj_ant_conf [ ] = {
{ LLRP_IMPINJ_ANT_CONF_DUAL , " Dual antenna " } ,
{ LLRP_IMPINJ_ANT_CONF_QUAD , " Quad antenna " } ,
{ 0 , NULL }
} ;
/* Impinj tag direction */
# define LLRP_IMPINJ_TAG_DIR_INDETERMINED 0
# define LLRP_IMPINJ_TAG_DIR_FROM_2_TO_1 1
# define LLRP_IMPINJ_TAG_DIR_FROM_1_TO_2 2
static const value_string impinj_tag_dir [ ] = {
{ LLRP_IMPINJ_TAG_DIR_INDETERMINED , " Indeterminate " } ,
{ LLRP_IMPINJ_TAG_DIR_FROM_2_TO_1 , " From side2 to side1 " } ,
{ LLRP_IMPINJ_TAG_DIR_FROM_1_TO_2 , " From side1 to side2 " } ,
{ 0 , NULL }
} ;
/* Impinj fixed frequency mode */
# define LLRP_IMPINJ_FIX_FREQ_MODE_DISABLED 0
# define LLRP_IMPINJ_FIX_FREQ_MODE_AUTO_SELECT 1
# define LLRP_IMPINJ_FIX_FREQ_MODE_CHANNEL_LIST 2
static const value_string impinj_fix_freq_mode [ ] = {
{ LLRP_IMPINJ_FIX_FREQ_MODE_DISABLED , " Disabled " } ,
{ LLRP_IMPINJ_FIX_FREQ_MODE_AUTO_SELECT , " Auto select " } ,
{ LLRP_IMPINJ_FIX_FREQ_MODE_CHANNEL_LIST , " Channel list " } ,
{ 0 , NULL }
} ;
/* Impinj enabled/disabled */
# define LLRP_IMPINJ_BOOLEAN_DISABLED 0
# define LLRP_IMPINJ_BOOLEAN_ENABLED 1
static const value_string impinj_boolean [ ] = {
{ LLRP_IMPINJ_BOOLEAN_DISABLED , " Disabled " } ,
{ LLRP_IMPINJ_BOOLEAN_ENABLED , " Enabled " } ,
{ 0 , NULL }
} ;
/* Impinj report buffer mode */
# define LLRP_IMPINJ_REPORT_BUFF_MODE_NORMAL 0
# define LLRP_IMPINJ_REPORT_BUFF_MODE_LOW_LATENCY 1
static const value_string impinj_report_buff_mode [ ] = {
{ LLRP_IMPINJ_REPORT_BUFF_MODE_NORMAL , " Normal " } ,
{ LLRP_IMPINJ_REPORT_BUFF_MODE_LOW_LATENCY , " Low latency " } ,
{ 0 , NULL }
} ;
/* Impinj permalock operation result */
# define LLRP_IMPINJ_PERMALOCK_SUCCESS 0
# define LLRP_IMPINJ_PERMALOCK_INSUFFICIENT_POWER 1
# define LLRP_IMPINJ_PERMALOCK_NONSPECIFIC_TAG_ERROR 2
# define LLRP_IMPINJ_PERMALOCK_NO_RESPONSE_FROM_TAG 3
# define LLRP_IMPINJ_PERMALOCK_NONSPECIFIC_READER_ERROR 4
# define LLRP_IMPINJ_PERMALOCK_INCORRECT_PASSWORD_ERROR 5
# define LLRP_IMPINJ_PERMALOCK_TAG_MEMORY_OVERRUN_ERROR 6
static const value_string impinj_permalock_result [ ] = {
{ LLRP_IMPINJ_PERMALOCK_SUCCESS , " Success " } ,
{ LLRP_IMPINJ_PERMALOCK_INSUFFICIENT_POWER , " Insufficient power " } ,
{ LLRP_IMPINJ_PERMALOCK_NONSPECIFIC_TAG_ERROR , " Nonspecific tag error " } ,
{ LLRP_IMPINJ_PERMALOCK_NO_RESPONSE_FROM_TAG , " No response from tag " } ,
{ LLRP_IMPINJ_PERMALOCK_NONSPECIFIC_READER_ERROR , " Nonspecific reader error " } ,
{ LLRP_IMPINJ_PERMALOCK_INCORRECT_PASSWORD_ERROR , " Incorrect password error " } ,
{ LLRP_IMPINJ_PERMALOCK_TAG_MEMORY_OVERRUN_ERROR , " Tag memory overrun error " } ,
{ 0 , NULL }
} ;
static value_string_ext impinj_permalock_result_ext = VALUE_STRING_EXT_INIT ( impinj_permalock_result ) ;
/* Impinj get block permalock operation result */
# define LLRP_IMPINJ_BLOCK_PERMALOCK_SUCCESS 0
# define LLRP_IMPINJ_BLOCK_PERMALOCK_NONSPECIFIC_TAG_ERROR 1
# define LLRP_IMPINJ_BLOCK_PERMALOCK_NO_RESPONSE_FROM_TAG 2
# define LLRP_IMPINJ_BLOCK_PERMALOCK_NONSPECIFIC_READER_ERROR 3
# define LLRP_IMPINJ_BLOCK_PERMALOCK_INCORRECT_PASSWORD_ERROR 4
# define LLRP_IMPINJ_BLOCK_PERMALOCK_TAG_MEMORY_OVERRUN_ERROR 5
static const value_string impinj_block_permalock_result [ ] = {
{ LLRP_IMPINJ_BLOCK_PERMALOCK_SUCCESS , " Success " } ,
{ LLRP_IMPINJ_BLOCK_PERMALOCK_NONSPECIFIC_TAG_ERROR , " Nonspecific tag error " } ,
{ LLRP_IMPINJ_BLOCK_PERMALOCK_NO_RESPONSE_FROM_TAG , " No response from tag " } ,
{ LLRP_IMPINJ_BLOCK_PERMALOCK_NONSPECIFIC_READER_ERROR , " Nonspecific reader error " } ,
{ LLRP_IMPINJ_BLOCK_PERMALOCK_INCORRECT_PASSWORD_ERROR , " Incorrect password error " } ,
{ LLRP_IMPINJ_BLOCK_PERMALOCK_TAG_MEMORY_OVERRUN_ERROR , " Tag memory overrun error " } ,
{ 0 , NULL }
} ;
static value_string_ext impinj_block_permalock_result_ext = VALUE_STRING_EXT_INIT ( impinj_block_permalock_result ) ;
/* Impinj data profile parameter */
# define LLRP_IMPINJ_DATA_PROFILE_UNKNOWN 0
# define LLRP_IMPINJ_DATA_PROFILE_PRIVATE 1
# define LLRP_IMPINJ_DATA_PROFILE_PUBLIC 2
static const value_string impinj_data_profile [ ] = {
{ LLRP_IMPINJ_DATA_PROFILE_UNKNOWN , " Unknown " } ,
{ LLRP_IMPINJ_DATA_PROFILE_PRIVATE , " Private " } ,
{ LLRP_IMPINJ_DATA_PROFILE_PUBLIC , " Public " } ,
{ 0 , NULL }
} ;
/* Impinj access range parameter */
# define LLRP_IMPINJ_ACCESS_RANGE_UNKNOWN 0
# define LLRP_IMPINJ_ACCESS_RANGE_NORMAL_RANGE 1
# define LLRP_IMPINJ_ACCESS_RANGE_SHORT_RANGE 2
static const value_string impinj_access_range [ ] = {
{ LLRP_IMPINJ_ACCESS_RANGE_UNKNOWN , " Unknown " } ,
{ LLRP_IMPINJ_ACCESS_RANGE_NORMAL_RANGE , " Normal range " } ,
{ LLRP_IMPINJ_ACCESS_RANGE_SHORT_RANGE , " Short range " } ,
{ 0 , NULL }
} ;
/* Impinj persistence parameter */
# define LLRP_IMPINJ_PERSISTENCE_UNKNOWN 0
# define LLRP_IMPINJ_PERSISTENCE_TEMPORARY 1
# define LLRP_IMPINJ_PERSISTENCE_PERMANENT 2
static const value_string impinj_persistence [ ] = {
{ LLRP_IMPINJ_PERSISTENCE_UNKNOWN , " Unknown " } ,
{ LLRP_IMPINJ_PERSISTENCE_TEMPORARY , " Temporary " } ,
{ LLRP_IMPINJ_PERSISTENCE_PERMANENT , " Permament " } ,
{ 0 , NULL }
} ;
/* Impinj set QT config result */
# define LLRP_IMPINJ_SET_QT_CONFIG_SUCCESS 0
# define LLRP_IMPINJ_SET_QT_CONFIG_INSUFFICIENT_POWER 1
# define LLRP_IMPINJ_SET_QT_CONFIG_NONSPECIFIC_TAG_ERROR 2
# define LLRP_IMPINJ_SET_QT_CONFIG_NO_RESPONSE_FROM_TAG 3
# define LLRP_IMPINJ_SET_QT_CONFIG_NONSPECIFIC_READER_ERROR 4
# define LLRP_IMPINJ_SET_QT_CONFIG_INCORRECT_PASSWORD_ERROR 5
static const value_string impinj_set_qt_config_result [ ] = {
{ LLRP_IMPINJ_SET_QT_CONFIG_SUCCESS , " Success " } ,
{ LLRP_IMPINJ_SET_QT_CONFIG_INSUFFICIENT_POWER , " Insufficient power " } ,
{ LLRP_IMPINJ_SET_QT_CONFIG_NONSPECIFIC_TAG_ERROR , " Nonspecific tag error " } ,
{ LLRP_IMPINJ_SET_QT_CONFIG_NO_RESPONSE_FROM_TAG , " No response from tag " } ,
{ LLRP_IMPINJ_SET_QT_CONFIG_NONSPECIFIC_READER_ERROR , " Nonspecific reader error " } ,
{ LLRP_IMPINJ_SET_QT_CONFIG_INCORRECT_PASSWORD_ERROR , " Incorrect password error " } ,
{ 0 , NULL }
} ;
static value_string_ext impinj_set_qt_config_result_ext = VALUE_STRING_EXT_INIT ( impinj_set_qt_config_result ) ;
/* Impinj get QT config result */
# define LLRP_IMPINJ_GET_QT_CONFIG_SUCCESS 0
# define LLRP_IMPINJ_GET_QT_CONFIG_NONSPECIFIC_TAG_ERROR 1
# define LLRP_IMPINJ_GET_QT_CONFIG_NO_RESPONSE_FROM_TAG 2
# define LLRP_IMPINJ_GET_QT_CONFIG_NONSPECIFIC_READER_ERROR 3
# define LLRP_IMPINJ_GET_QT_CONFIG_INCORRECT_PASSWORD_ERROR 4
static const value_string impinj_get_qt_config_result [ ] = {
{ LLRP_IMPINJ_GET_QT_CONFIG_SUCCESS , " Success " } ,
{ LLRP_IMPINJ_GET_QT_CONFIG_NONSPECIFIC_TAG_ERROR , " Nonspecific tag error " } ,
{ LLRP_IMPINJ_GET_QT_CONFIG_NO_RESPONSE_FROM_TAG , " No response from tag " } ,
{ LLRP_IMPINJ_GET_QT_CONFIG_NONSPECIFIC_READER_ERROR , " Nonspecific reader error " } ,
{ LLRP_IMPINJ_GET_QT_CONFIG_INCORRECT_PASSWORD_ERROR , " Incorrect password error " } ,
{ 0 , NULL }
} ;
static value_string_ext impinj_get_qt_config_result_ext = VALUE_STRING_EXT_INIT ( impinj_get_qt_config_result ) ;
/* Impinj access spec ordering */
# define LLRP_IMPINJ_ACCESS_SPEC_ORDERING_FIFO 0
# define LLRP_IMPINJ_ACCESS_SPEC_ORDERING_ASCENDING 1
static const value_string impinj_access_spec_ordering [ ] = {
{ LLRP_IMPINJ_ACCESS_SPEC_ORDERING_FIFO , " FIFO " } ,
{ LLRP_IMPINJ_ACCESS_SPEC_ORDERING_ASCENDING , " Ascending " } ,
{ 0 , NULL }
} ;
/* Impinj GPO mode */
# define LLRP_IMPINJ_GPO_MODE_NORMAL 0
# define LLRP_IMPINJ_GPO_MODE_PULSED 1
# define LLRP_IMPINJ_GPO_MODE_READER_OPERATIONAL_STATUS 2
# define LLRP_IMPINJ_GPO_MODE_LLRP_CONNECTION_STATUS 3
# define LLRP_IMPINJ_GPO_MODE_READER_INVENTORY_STATUS 4
# define LLRP_IMPINJ_GPO_MODE_NETWORK_CONNECTION_STATUS 5
# define LLRP_IMPINJ_GPO_MODE_READER_INVENTORY_TAGS_STATUS 6
static const value_string impinj_gpo_mode [ ] = {
{ LLRP_IMPINJ_GPO_MODE_NORMAL , " Normal " } ,
{ LLRP_IMPINJ_GPO_MODE_PULSED , " Pulsed " } ,
{ LLRP_IMPINJ_GPO_MODE_READER_OPERATIONAL_STATUS , " Reader operational status " } ,
{ LLRP_IMPINJ_GPO_MODE_LLRP_CONNECTION_STATUS , " LLRP connection status " } ,
{ LLRP_IMPINJ_GPO_MODE_READER_INVENTORY_STATUS , " Reader inventory status " } ,
{ LLRP_IMPINJ_GPO_MODE_NETWORK_CONNECTION_STATUS , " Network connection status " } ,
{ LLRP_IMPINJ_GPO_MODE_READER_INVENTORY_TAGS_STATUS , " Reader inventory tags status " } ,
{ 0 , NULL }
} ;
static value_string_ext impinj_gpo_mode_ext = VALUE_STRING_EXT_INIT ( impinj_gpo_mode ) ;
2014-07-10 11:08:34 +00:00
/* Impinj Hub connected type */
# define LLRP_IMPINJ_HUB_CTYPE_UNKNOWN 0
# define LLRP_IMPINJ_HUB_CTYPE_DISCONNECTED 1
# define LLRP_IMPINJ_HUB_CTYPE_CONNECTED 2
static const value_string impinj_hub_connected_type [ ] = {
{ LLRP_IMPINJ_HUB_CTYPE_UNKNOWN , " Unknown " } ,
{ LLRP_IMPINJ_HUB_CTYPE_DISCONNECTED , " Disconnected " } ,
{ LLRP_IMPINJ_HUB_CTYPE_CONNECTED , " Connected " } ,
{ 0 , NULL }
} ;
static value_string_ext impinj_hub_connected_type_ext = VALUE_STRING_EXT_INIT ( impinj_hub_connected_type ) ;
/* Impinj Hub fault type */
# define LLRP_IMPINJ_HUB_FTYPE_NO_FAULT 0
# define LLRP_IMPINJ_HUB_FTYPE_RFPOWER 1
# define LLRP_IMPINJ_HUB_FTYPE_RFPOWER_HUB1 2
# define LLRP_IMPINJ_HUB_FTYPE_RFPOWER_HUB2 3
# define LLRP_IMPINJ_HUB_FTYPE_RFPOWER_HUB3 4
# define LLRP_IMPINJ_HUB_FTYPE_RFPOWER_HUB4 5
# define LLRP_IMPINJ_HUB_FTYPE_NO_INIT 6
# define LLRP_IMPINJ_HUB_FTYPE_SERIAL_OVERFLOW 7
# define LLRP_IMPINJ_HUB_FTYPE_DISCONNECTED 8
static const value_string impinj_hub_fault_type [ ] = {
{ LLRP_IMPINJ_HUB_FTYPE_NO_FAULT , " No fault " } ,
{ LLRP_IMPINJ_HUB_FTYPE_RFPOWER , " RF power " } ,
{ LLRP_IMPINJ_HUB_FTYPE_RFPOWER_HUB1 , " RF power on hub 1 " } ,
{ LLRP_IMPINJ_HUB_FTYPE_RFPOWER_HUB2 , " RF power on hub 2 " } ,
{ LLRP_IMPINJ_HUB_FTYPE_RFPOWER_HUB3 , " RF power on hub 3 " } ,
{ LLRP_IMPINJ_HUB_FTYPE_RFPOWER_HUB4 , " RF power on hub 4 " } ,
{ LLRP_IMPINJ_HUB_FTYPE_NO_INIT , " No init " } ,
{ LLRP_IMPINJ_HUB_FTYPE_SERIAL_OVERFLOW , " Serial overflow " } ,
{ LLRP_IMPINJ_HUB_FTYPE_DISCONNECTED , " Disconnected " } ,
{ 0 , NULL } ,
} ;
static value_string_ext impinj_hub_fault_type_ext = VALUE_STRING_EXT_INIT ( impinj_hub_fault_type ) ;
2012-05-02 11:05:35 +00:00
/* Misc */
# define LLRP_ROSPEC_ALL 0
# define LLRP_ANTENNA_ALL 0
# define LLRP_GPI_PORT_ALL 0
# define LLRP_GPO_PORT_ALL 0
# define LLRP_ACCESSSPEC_ALL 0
# define LLRP_TLV_LEN_MIN 4
2012-08-23 03:03:54 +00:00
# define LLRP_HEADER_LENGTH 10
# define LLRP_NO_LIMIT 0
2017-03-27 10:42:03 +00:00
static const value_string unique_no_limit [ ] = {
{ LLRP_NO_LIMIT , " No Limit " } ,
{ 0 , NULL } ,
} ;
static const value_string unique_all_rospecs [ ] = {
{ LLRP_ROSPEC_ALL , " All ROSpecs " } ,
{ 0 , NULL } ,
} ;
static const value_string unique_all_access_specs [ ] = {
{ LLRP_ACCESSSPEC_ALL , " All Access Specs " } ,
{ 0 , NULL } ,
} ;
static const value_string unique_all_antenna [ ] = {
{ LLRP_ANTENNA_ALL , " All Antenna " } ,
{ 0 , NULL } ,
} ;
static const value_string unique_all_gpi_ports [ ] = {
{ LLRP_GPI_PORT_ALL , " All GPI Ports " } ,
{ 0 , NULL } ,
} ;
static const value_string unique_all_gpo_ports [ ] = {
{ LLRP_GPO_PORT_ALL , " All GPO Ports " } ,
{ 0 , NULL } ,
} ;
2012-08-23 03:03:54 +00:00
static guint
dissect_llrp_parameters ( tvbuff_t * tvb , packet_info * pinfo , proto_tree * tree ,
2016-02-06 14:33:28 +00:00
guint offset , const guint end , const guint depth ) ;
2012-05-02 11:05:35 +00:00
2012-08-23 03:03:54 +00:00
static guint dissect_llrp_utf8_parameter ( tvbuff_t * const tvb , packet_info * pinfo ,
proto_tree * const tree , const guint hfindex , const guint offset )
{
gint len ;
len = tvb_get_ntohs ( tvb , offset ) ;
if ( tvb_reported_length_remaining ( tvb , offset ) < len ) {
2013-09-09 00:44:09 +00:00
expert_add_info_format ( pinfo , tree , & ei_llrp_invalid_length ,
2012-08-23 03:03:54 +00:00
" invalid length of string: claimed %u, available %u. " ,
len , tvb_reported_length_remaining ( tvb , offset ) ) ;
return offset + 2 ;
}
proto_tree_add_item ( tree , hfindex , tvb ,
offset , 2 , ENC_BIG_ENDIAN | ENC_UTF_8 ) ;
return offset + len + 2 ;
}
static guint dissect_llrp_bit_field ( tvbuff_t * const tvb ,
proto_tree * const tree , const guint hfindex , const guint offset )
{
guint len ;
len = tvb_get_ntohs ( tvb , offset ) ;
len = ( len + 7 ) / 8 ;
proto_tree_add_item ( tree , hf_llrp_length_bits , tvb ,
offset , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tree , hfindex , tvb ,
offset + 2 , len , ENC_NA ) ;
return offset + len + 2 ;
}
static guint dissect_llrp_word_array ( tvbuff_t * const tvb ,
proto_tree * const tree , const guint hfindex , const guint offset )
{
guint len ;
len = tvb_get_ntohs ( tvb , offset ) ;
len * = 2 ;
proto_tree_add_item ( tree , hf_llrp_length_words , tvb ,
offset , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tree , hfindex , tvb ,
offset + 2 , len , ENC_NA ) ;
return offset + len + 2 ;
}
static guint dissect_llrp_item_array ( tvbuff_t * const tvb , packet_info * pinfo ,
proto_tree * const tree , const guint hfindex_number ,
const guint hfindex_item , const guint item_size , guint offset )
{
guint num ;
num = tvb_get_ntohs ( tvb , offset ) ;
proto_tree_add_item ( tree , hfindex_number , tvb ,
offset , 2 , ENC_BIG_ENDIAN ) ;
offset + = 2 ;
if ( tvb_reported_length_remaining ( tvb , offset ) < ( ( gint ) ( num * item_size ) ) ) {
2013-09-09 00:44:09 +00:00
expert_add_info_format ( pinfo , tree , & ei_llrp_invalid_length ,
2012-08-23 03:03:54 +00:00
" Array longer than message " ) ;
return offset + tvb_reported_length_remaining ( tvb , offset ) ;
}
while ( num - - ) {
proto_tree_add_item ( tree , hfindex_item , tvb ,
2017-03-09 18:14:39 +00:00
offset , item_size , ENC_BIG_ENDIAN ) ;
2012-08-23 03:03:54 +00:00
offset + = item_size ;
}
return offset ;
}
static guint
dissect_llrp_impinj_parameter ( tvbuff_t * tvb , packet_info * pinfo , proto_tree * param_tree ,
guint suboffset , const guint param_end )
{
guint32 subtype ;
subtype = tvb_get_ntohl ( tvb , suboffset ) ;
proto_item_append_text ( param_tree , " (Impinj - %s) " ,
val_to_str_ext ( subtype , & impinj_param_type_ext , " Unknown Type: %d " ) ) ;
proto_tree_add_item ( param_tree , hf_llrp_impinj_param_type , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
switch ( subtype ) {
case LLRP_IMPINJ_PARAM_TAG_INFORMATION :
case LLRP_IMPINJ_PARAM_FORKLIFT_CONFIGURATION :
case LLRP_IMPINJ_PARAM_ACCESS_SPEC_CONFIGURATION :
case LLRP_IMPINJ_PARAM_TAG_REPORT_CONTENT_SELECTOR :
case LLRP_IMPINJ_PARAM_GPS_NMEA_SENTENCES :
2014-07-10 11:08:34 +00:00
case LLRP_IMPINJ_PARAM_HUB_VERSIONS :
2012-08-23 03:03:54 +00:00
/* Just parameters */
break ;
case LLRP_IMPINJ_PARAM_REQUESTED_DATA :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_impinj_req_data , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_SUBREGULATORY_REGION :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_impinj_reg_region , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_INVENTORY_SEARCH_MODE :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_impinj_search_mode , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_TAG_DIRECTION_REPORTING :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_impinj_en_tag_dir , tvb , suboffset , 2 , ENC_NA ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_impinj_antenna_conf , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_rfu , tvb , suboffset , 4 , ENC_NA ) ;
suboffset + = 4 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_TAG_DIRECTION :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_decision_time , tvb , suboffset , 8 , ENC_BIG_ENDIAN ) ;
suboffset + = 8 ;
proto_tree_add_item ( param_tree , hf_llrp_impinj_tag_dir , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_confidence , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_FIXED_FREQUENCY_LIST :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_impinj_fix_freq_mode , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_rfu , tvb , suboffset , 2 , ENC_NA ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
suboffset = dissect_llrp_item_array ( tvb , pinfo , param_tree ,
hf_llrp_num_channels , hf_llrp_channel , 2 , suboffset ) ;
break ;
case LLRP_IMPINJ_PARAM_REDUCED_POWER_FREQUENCY_LIST :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_impinj_reduce_power_mode , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_rfu , tvb , suboffset , 2 , ENC_NA ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
suboffset = dissect_llrp_item_array ( tvb , pinfo , param_tree ,
hf_llrp_num_channels , hf_llrp_channel , 2 , suboffset ) ;
break ;
case LLRP_IMPINJ_PARAM_LOW_DUTY_CYCLE :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_impinj_low_duty_mode , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_empty_field_timeout , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_field_ping_interval , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_DETAILED_VERSION :
suboffset = dissect_llrp_utf8_parameter ( tvb , pinfo , param_tree , hf_llrp_model_name , suboffset ) ;
suboffset = dissect_llrp_utf8_parameter ( tvb , pinfo , param_tree , hf_llrp_serial_number , suboffset ) ;
suboffset = dissect_llrp_utf8_parameter ( tvb , pinfo , param_tree , hf_llrp_soft_ver , suboffset ) ;
suboffset = dissect_llrp_utf8_parameter ( tvb , pinfo , param_tree , hf_llrp_firm_ver , suboffset ) ;
suboffset = dissect_llrp_utf8_parameter ( tvb , pinfo , param_tree , hf_llrp_fpga_ver , suboffset ) ;
suboffset = dissect_llrp_utf8_parameter ( tvb , pinfo , param_tree , hf_llrp_pcba_ver , suboffset ) ;
break ;
case LLRP_IMPINJ_PARAM_FREQUENCY_CAPABILITIES :
suboffset = dissect_llrp_item_array ( tvb , pinfo , param_tree ,
hf_llrp_num_freqs , hf_llrp_frequency , 4 , suboffset ) ;
break ;
case LLRP_IMPINJ_PARAM_FORKLIFT_HEIGHT_THRESHOLD :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_height_thresh , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_FORKLIFT_ZEROMOTION_TIME_THRESHOLD :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_zero_motion_thresh , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_FORKLIFT_COMPANION_BOARD_INFO :
suboffset = dissect_llrp_utf8_parameter ( tvb , pinfo , param_tree , hf_llrp_board_manufacturer , suboffset ) ;
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_fw_ver_hex , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_hw_ver_hex , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_GPI_DEBOUNCE_CONFIGURATION :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_gpi_port , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_gpi_debounce , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_READER_TEMPERATURE :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_temperature , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_LINK_MONITOR_CONFIGURATION :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_impinj_link_monitor_mode , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_link_down_thresh , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_REPORT_BUFFER_CONFIGURATION :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_impinj_report_buff_mode , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_BLOCK_WRITE_WORD_COUNT :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_word_count , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_BLOCK_PERMALOCK :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_opspec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_access_pass , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
proto_tree_add_item ( param_tree , hf_llrp_mb , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_block_pointer , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_block_mask , tvb , suboffset , 2 , ENC_NA ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_BLOCK_PERMALOCK_OPSPEC_RESULT :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_permalock_result , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_opspec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_GET_BLOCK_PERMALOCK_STATUS :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_opspec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_access_pass , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
proto_tree_add_item ( param_tree , hf_llrp_mb , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_block_pointer , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_block_range , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_GET_BLOCK_PERMALOCK_STATUS_OPSPEC_RESULT :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_block_permalock_result , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_opspec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_SET_QT_CONFIG :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_opspec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_access_pass , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
proto_tree_add_item ( param_tree , hf_llrp_impinj_data_profile , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_impinj_access_range , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_impinj_persistence , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_rfu , tvb , suboffset , 4 , ENC_NA ) ;
suboffset + = 4 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_SET_QT_CONFIG_OPSPEC_RESULT :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_set_qt_config_result , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_opspec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_GET_QT_CONFIG :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_opspec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_access_pass , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_GET_QT_CONFIG_OPSPEC_RESULT :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_get_qt_config_result , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_opspec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_impinj_data_profile , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_impinj_access_range , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_rfu , tvb , suboffset , 4 , ENC_NA ) ;
suboffset + = 4 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_ENABLE_SERIALIZED_TID :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_impinj_serialized_tid_mode , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_ENABLE_RF_PHASE_ANGLE :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_impinj_rf_phase_mode , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_ENABLE_PEAK_RSSI :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_impinj_peak_rssi_mode , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_ENABLE_GPS_COORDINATES :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_impinj_gps_coordinates_mode , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_SERIALIZED_TID :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_impinj_tid , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_RF_PHASE_ANGLE :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_phase_angle , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_PEAK_RSSI :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_rssi , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_GPS_COORDINATES :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_latitude , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
proto_tree_add_item ( param_tree , hf_llrp_longitude , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_LOOP_SPEC :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_loop_count , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_GGA_SENTENCE :
suboffset = dissect_llrp_utf8_parameter ( tvb , pinfo , param_tree , hf_llrp_gga_sentence , suboffset ) ;
break ;
case LLRP_IMPINJ_PARAM_RMC_SENTENCE :
suboffset = dissect_llrp_utf8_parameter ( tvb , pinfo , param_tree , hf_llrp_rmc_sentence , suboffset ) ;
break ;
case LLRP_IMPINJ_PARAM_OPSPEC_RETRY_COUNT :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_retry_count , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_ADVANCE_GPO_CONFIG :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_gpo_port , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_impinj_gpo_mode , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_gpo_pulse_dur , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_ENABLE_OPTIM_READ :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_impinj_optim_read_mode , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_ACCESS_SPEC_ORDERING :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_impinj_access_spec_ordering , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_IMPINJ_PARAM_ENABLE_RF_DOPPLER_FREQ :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_impinj_rf_doppler_mode , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
2014-07-10 11:08:34 +00:00
case LLRP_IMPINJ_PARAM_ARRAY_VERSION :
suboffset = dissect_llrp_utf8_parameter ( tvb , pinfo , param_tree , hf_llrp_serial_number , suboffset ) ;
suboffset = dissect_llrp_utf8_parameter ( tvb , pinfo , param_tree , hf_llrp_firm_ver , suboffset ) ;
suboffset = dissect_llrp_utf8_parameter ( tvb , pinfo , param_tree , hf_llrp_pcba_ver , suboffset ) ;
break ;
case LLRP_IMPINJ_PARAM_HUB_CONFIGURATION :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_impinj_hub_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_impinj_hub_connected_type , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_impinj_hub_fault_type , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2014-07-10 11:08:34 +00:00
break ;
2012-08-23 03:03:54 +00:00
default :
return suboffset ;
break ;
}
/* Each custom parameters ends with optional custom parameter, disscect it */
2016-02-06 14:33:28 +00:00
return dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , 0 ) ;
2012-08-23 03:03:54 +00:00
}
static guint
2012-05-02 11:05:35 +00:00
dissect_llrp_parameters ( tvbuff_t * tvb , packet_info * pinfo , proto_tree * tree ,
2016-02-06 14:33:28 +00:00
guint offset , const guint end , const guint depth )
2012-05-02 11:05:35 +00:00
{
2012-07-24 14:47:19 +00:00
guint8 has_length ;
guint16 len , type ;
2012-08-23 03:03:54 +00:00
guint real_len , param_end ;
guint suboffset ;
guint num ;
2012-05-02 11:05:35 +00:00
proto_item * ti ;
proto_tree * param_tree ;
2012-08-23 03:03:54 +00:00
while ( ( ( gint ) ( end - offset ) ) > 0 )
2012-05-02 11:05:35 +00:00
{
has_length = ! ( tvb_get_guint8 ( tvb , offset ) & 0x80 ) ;
if ( has_length )
{
2012-08-23 03:03:54 +00:00
type = tvb_get_ntohs ( tvb , offset ) ;
2012-05-02 11:05:35 +00:00
len = tvb_get_ntohs ( tvb , offset + 2 ) ;
2012-08-23 19:07:24 +00:00
2012-05-02 11:05:35 +00:00
if ( len < LLRP_TLV_LEN_MIN )
real_len = LLRP_TLV_LEN_MIN ;
else if ( len > tvb_reported_length_remaining ( tvb , offset ) )
real_len = tvb_reported_length_remaining ( tvb , offset ) ;
else
real_len = len ;
2012-08-23 03:03:54 +00:00
param_end = offset + real_len ;
2016-02-06 14:33:28 +00:00
if ( depth > 16 ) {
return param_end ;
}
2012-05-02 11:05:35 +00:00
ti = proto_tree_add_none_format ( tree , hf_llrp_param , tvb ,
2012-08-23 03:03:54 +00:00
offset , real_len , " TLV Parameter: %s " ,
val_to_str_ext ( type , & tlv_type_ext , " Unknown Type: %d " ) ) ;
2012-05-02 11:05:35 +00:00
param_tree = proto_item_add_subtree ( ti , ett_llrp_param ) ;
proto_tree_add_item ( param_tree , hf_llrp_tlv_type , tvb ,
offset , 2 , ENC_BIG_ENDIAN ) ;
offset + = 2 ;
ti = proto_tree_add_item ( param_tree , hf_llrp_tlv_len , tvb ,
offset , 2 , ENC_BIG_ENDIAN ) ;
if ( len ! = real_len )
2013-09-09 00:44:09 +00:00
expert_add_info_format ( pinfo , ti , & ei_llrp_invalid_length ,
2012-05-02 11:05:35 +00:00
" Invalid length field: claimed %u, should be %u. " ,
len , real_len ) ;
offset + = 2 ;
2012-08-23 03:03:54 +00:00
suboffset = offset ;
switch ( type ) {
case LLRP_TLV_RO_BOUND_SPEC :
case LLRP_TLV_UHF_CAPABILITIES :
case LLRP_TLV_ACCESS_COMMAND :
case LLRP_TLV_TAG_REPORT_DATA :
case LLRP_TLV_RF_SURVEY_REPORT_DATA :
case LLRP_TLV_READER_EVENT_NOTI_SPEC :
case LLRP_TLV_READER_EVENT_NOTI_DATA :
case LLRP_TLV_C1G2_UHF_RF_MD_TBL :
case LLRP_TLV_C1G2_TAG_SPEC :
2016-02-06 14:33:28 +00:00
suboffset = dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , depth + 1 ) ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_UTC_TIMESTAMP :
case LLRP_TLV_UPTIME :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_microseconds , tvb , suboffset , 8 , ENC_BIG_ENDIAN ) ;
suboffset + = 8 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_GENERAL_DEVICE_CAP :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_max_supported_antenna , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( param_tree , hf_llrp_can_set_antenna_prop , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_has_utc_clock , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_device_manufacturer , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
proto_tree_add_item ( param_tree , hf_llrp_model , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
2012-08-23 03:03:54 +00:00
suboffset = dissect_llrp_utf8_parameter ( tvb , pinfo , param_tree , hf_llrp_firmware_version , suboffset ) ;
2016-02-06 14:33:28 +00:00
suboffset = dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , depth + 1 ) ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_MAX_RECEIVE_SENSE :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_max_receive_sense , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_RECEIVE_SENSE_ENTRY :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_index , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_receive_sense , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_ANTENNA_RCV_SENSE_RANGE :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_antenna_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_receive_sense_index_min , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_receive_sense_index_max , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_ANTENNA_AIR_PROTO :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_antenna_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
suboffset = dissect_llrp_item_array ( tvb , pinfo , param_tree ,
hf_llrp_num_protocols , hf_llrp_protocol_id , 1 , suboffset ) ;
break ;
case LLRP_TLV_GPIO_CAPABILITIES :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_num_gpi , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_num_gpo , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_LLRP_CAPABILITIES :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_can_do_survey , tvb , suboffset , 1 , ENC_NA ) ;
proto_tree_add_item ( param_tree , hf_llrp_can_report_buffer_warning , tvb , suboffset , 1 , ENC_NA ) ;
proto_tree_add_item ( param_tree , hf_llrp_support_client_opspec , tvb , suboffset , 1 , ENC_NA ) ;
proto_tree_add_item ( param_tree , hf_llrp_can_stateaware , tvb , suboffset , 1 , ENC_NA ) ;
proto_tree_add_item ( param_tree , hf_llrp_support_holding , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_max_priority_supported , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_client_opspec_timeout , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2017-03-27 10:42:03 +00:00
proto_tree_add_item ( param_tree , hf_llrp_max_num_rospec , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
2012-08-23 03:03:54 +00:00
suboffset + = 4 ;
2017-03-27 10:42:03 +00:00
proto_tree_add_item ( param_tree , hf_llrp_max_num_spec_per_rospec , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
2012-08-23 03:03:54 +00:00
suboffset + = 4 ;
2017-03-27 10:42:03 +00:00
proto_tree_add_item ( param_tree , hf_llrp_max_num_inventory_per_aispec , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
2012-08-23 03:03:54 +00:00
suboffset + = 4 ;
2017-03-27 10:42:03 +00:00
proto_tree_add_item ( param_tree , hf_llrp_max_num_accessspec , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
2012-08-23 03:03:54 +00:00
suboffset + = 4 ;
2017-03-27 10:42:03 +00:00
proto_tree_add_item ( param_tree , hf_llrp_max_num_opspec_per_accressspec , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
2012-08-23 03:03:54 +00:00
suboffset + = 4 ;
2017-03-27 10:42:03 +00:00
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_REGU_CAPABILITIES :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_country_code , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_comm_standard , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2016-02-06 14:33:28 +00:00
suboffset = dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , depth + 1 ) ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_XMIT_POWER_LEVEL_ENTRY :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_index , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_transmit_power , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_FREQ_INFORMATION :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_hopping , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
2016-02-06 14:33:28 +00:00
suboffset = dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , depth + 1 ) ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_FREQ_HOP_TABLE :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_hop_table_id , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_rfu , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
2012-08-23 03:03:54 +00:00
suboffset = dissect_llrp_item_array ( tvb , pinfo , param_tree ,
hf_llrp_num_hops , hf_llrp_frequency , 4 , suboffset ) ;
break ;
case LLRP_TLV_FIXED_FREQ_TABLE :
suboffset = dissect_llrp_item_array ( tvb , pinfo , param_tree ,
hf_llrp_num_freqs , hf_llrp_frequency , 4 , suboffset ) ;
break ;
case LLRP_TLV_RF_SURVEY_FREQ_CAP :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_min_freq , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
proto_tree_add_item ( param_tree , hf_llrp_max_freq , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_RO_SPEC :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_rospec_id , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
proto_tree_add_item ( param_tree , hf_llrp_priority , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_cur_state , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
2016-02-06 14:33:28 +00:00
suboffset = dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , depth + 1 ) ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_RO_SPEC_START_TRIGGER :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_rospec_start_trig_type , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
2016-02-06 14:33:28 +00:00
suboffset = dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , depth + 1 ) ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_PER_TRIGGER_VAL :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_offset , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
proto_tree_add_item ( param_tree , hf_llrp_period , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
2016-02-06 14:33:28 +00:00
suboffset = dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , depth + 1 ) ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_GPI_TRIGGER_VAL :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_gpi_port , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_gpi_event , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_timeout , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_RO_SPEC_STOP_TRIGGER :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_rospec_stop_trig_type , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_duration_trig , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
2016-02-06 14:33:28 +00:00
suboffset = dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , depth + 1 ) ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_AI_SPEC :
suboffset = dissect_llrp_item_array ( tvb , pinfo , param_tree ,
hf_llrp_antenna_count , hf_llrp_antenna , 2 , suboffset ) ;
2016-02-06 14:33:28 +00:00
suboffset = dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , depth + 1 ) ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_AI_SPEC_STOP :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_aispec_stop_trig_type , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_duration_trig , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
2016-02-06 14:33:28 +00:00
suboffset = dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , depth + 1 ) ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_TAG_OBSERV_TRIGGER :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_trig_type , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_rfu , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_number_of_tags , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_number_of_attempts , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_t , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_timeout , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_INVENTORY_PARAM_SPEC :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_inventory_spec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_protocol_id , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
2016-02-06 14:33:28 +00:00
suboffset = dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , depth + 1 ) ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_RF_SURVEY_SPEC :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_antenna_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_start_freq , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
proto_tree_add_item ( param_tree , hf_llrp_stop_freq , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
2016-02-06 14:33:28 +00:00
suboffset = dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , depth + 1 ) ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_RF_SURVEY_SPEC_STOP_TR :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_stop_trig_type , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_duration , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
proto_tree_add_item ( param_tree , hf_llrp_n_4 , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_LOOP_SPEC :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_loop_count , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_ACCESS_SPEC :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_accessspec_id , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
proto_tree_add_item ( param_tree , hf_llrp_antenna_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_protocol_id , tvb , suboffset , 1 , ENC_BIG_ENDIAN ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_access_cur_state , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_rospec_id , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
2016-02-06 14:33:28 +00:00
suboffset = dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , depth + 1 ) ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_ACCESS_SPEC_STOP_TRIG :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_access_stop_trig_type , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_operation_count , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_CLIENT_REQ_OP_SPEC :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_opspec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_CLIENT_REQ_RESPONSE :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_accessspec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2016-02-06 14:33:28 +00:00
suboffset = dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , depth + 1 ) ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_LLRP_CONF_STATE_VAL :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_conf_value , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_IDENT :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_id_type , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
2012-08-23 03:03:54 +00:00
num = tvb_get_ntohs ( tvb , suboffset ) ;
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_reader_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
2012-08-23 03:03:54 +00:00
suboffset + = num ;
break ;
case LLRP_TLV_GPO_WRITE_DATA :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_gpo_port , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_gpo_data , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_KEEPALIVE_SPEC :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_keepalive_trig_type , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_time_iterval , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_ANTENNA_PROPS :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_antenna_connected , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_antenna_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_antenna_gain , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_ANTENNA_CONF :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_antenna_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2016-02-06 14:33:28 +00:00
suboffset = dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , depth + 1 ) ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_RF_RECEIVER :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_receiver_sense , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_RF_TRANSMITTER :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_hop_table_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_channel_idx , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_transmit_power , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_GPI_PORT_CURRENT_STATE :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_gpi_port , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_gpi_config , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_gpi_state , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_EVENTS_AND_REPORTS :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_hold_events_and_reports , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_RO_REPORT_SPEC :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_ro_report_trig , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_n_2 , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2016-02-06 14:33:28 +00:00
suboffset = dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , depth + 1 ) ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_TAG_REPORT_CONTENT_SEL :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_enable_rospec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( param_tree , hf_llrp_enable_spec_idx , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( param_tree , hf_llrp_enable_inv_spec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( param_tree , hf_llrp_enable_antenna_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( param_tree , hf_llrp_enable_channel_idx , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( param_tree , hf_llrp_enable_peak_rssi , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( param_tree , hf_llrp_enable_first_seen , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( param_tree , hf_llrp_enable_last_seen , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( param_tree , hf_llrp_enable_seen_count , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( param_tree , hf_llrp_enable_accessspec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2016-02-06 14:33:28 +00:00
suboffset = dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , depth + 1 ) ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_ACCESS_REPORT_SPEC :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_access_report_trig , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_EPC_DATA :
suboffset = dissect_llrp_bit_field ( tvb , param_tree , hf_llrp_epc , suboffset ) ;
break ;
case LLRP_TLV_FREQ_RSSI_LEVEL_ENTRY :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_frequency , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
proto_tree_add_item ( param_tree , hf_llrp_bandwidth , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
proto_tree_add_item ( param_tree , hf_llrp_average_rssi , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_peak_rssi , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
2016-02-06 14:33:28 +00:00
suboffset = dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , depth + 1 ) ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_EVENT_NOTIF_STATE :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_event_type , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_notif_state , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_HOPPING_EVENT :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_hop_table_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_next_chan_idx , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_GPI_EVENT :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_gpi_port , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_gpi_event , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_RO_SPEC_EVENT :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_roevent_type , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_rospec_id , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
proto_tree_add_item ( param_tree , hf_llrp_prem_rospec_id , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_REPORT_BUF_LEVEL_WARN :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_buffer_full_percentage , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
2012-08-23 03:03:54 +00:00
break ;
2016-02-06 14:33:28 +00:00
case LLRP_TLV_REPORT_BUF_OVERFLOW_ERR : break ;
2012-08-23 03:03:54 +00:00
case LLRP_TLV_READER_EXCEPTION_EVENT :
suboffset = dissect_llrp_utf8_parameter ( tvb , pinfo , param_tree , hf_llrp_message , suboffset ) ;
2016-02-06 14:33:28 +00:00
suboffset = dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , depth + 1 ) ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_RF_SURVEY_EVENT :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_rfevent_type , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_rospec_id , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
proto_tree_add_item ( param_tree , hf_llrp_spec_idx , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_AI_SPEC_EVENT :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_aievent_type , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_rospec_id , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
proto_tree_add_item ( param_tree , hf_llrp_spec_idx , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2016-02-06 14:33:28 +00:00
suboffset = dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , depth + 1 ) ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_ANTENNA_EVENT :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_antenna_event_type , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_antenna_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_CONN_ATTEMPT_EVENT :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_conn_status , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_CONN_CLOSE_EVENT :
break ;
case LLRP_TLV_SPEC_LOOP_EVENT :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_rospec_id , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
proto_tree_add_item ( param_tree , hf_llrp_loop_count , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_LLRP_STATUS :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_status_code , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
suboffset = dissect_llrp_utf8_parameter ( tvb , pinfo , param_tree , hf_llrp_error_desc , suboffset ) ;
2016-02-06 14:33:28 +00:00
suboffset = dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , depth + 1 ) ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_FIELD_ERROR :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_field_num , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_error_code , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_PARAM_ERROR :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_parameter_type , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_error_code , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2016-02-06 14:33:28 +00:00
suboffset = dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , depth + 1 ) ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_C1G2_LLRP_CAP :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_can_support_block_erase , tvb , suboffset , 1 , ENC_NA ) ;
proto_tree_add_item ( param_tree , hf_llrp_can_support_block_write , tvb , suboffset , 1 , ENC_NA ) ;
proto_tree_add_item ( param_tree , hf_llrp_can_support_block_permalock , tvb , suboffset , 1 , ENC_NA ) ;
proto_tree_add_item ( param_tree , hf_llrp_can_support_tag_recomm , tvb , suboffset , 1 , ENC_NA ) ;
proto_tree_add_item ( param_tree , hf_llrp_can_support_UMI_method2 , tvb , suboffset , 1 , ENC_NA ) ;
proto_tree_add_item ( param_tree , hf_llrp_can_support_XPC , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
2017-03-27 10:42:03 +00:00
proto_tree_add_item ( param_tree , hf_llrp_max_num_filter_per_query , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
2012-08-23 03:03:54 +00:00
suboffset + = 2 ;
break ;
case LLRP_TLV_C1G2_UHF_RF_MD_TBL_ENT :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_mode_ident , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
proto_tree_add_item ( param_tree , hf_llrp_DR , tvb , suboffset , 1 , ENC_NA ) ;
proto_tree_add_item ( param_tree , hf_llrp_hag_conformance , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_mod , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_flm , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_m , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_bdr , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
proto_tree_add_item ( param_tree , hf_llrp_pie , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
proto_tree_add_item ( param_tree , hf_llrp_min_tari , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
proto_tree_add_item ( param_tree , hf_llrp_max_tari , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
proto_tree_add_item ( param_tree , hf_llrp_step_tari , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_C1G2_INVENTORY_COMMAND :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_inventory_state_aware , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
2016-02-06 14:33:28 +00:00
suboffset = dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , depth + 1 ) ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_C1G2_FILTER :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_trunc , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
2016-02-06 14:33:28 +00:00
suboffset = dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , depth + 1 ) ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_C1G2_TAG_INV_MASK :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_mb , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_pointer , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
suboffset = dissect_llrp_bit_field ( tvb , param_tree , hf_llrp_tag_mask , suboffset ) ;
break ;
case LLRP_TLV_C1G2_TAG_INV_AWARE_FLTR :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_aware_filter_target , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_aware_filter_action , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_C1G2_TAG_INV_UNAWR_FLTR :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_unaware_filter_action , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_C1G2_RF_CONTROL :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_mode_idx , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_tari , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_C1G2_SINGULATION_CTRL :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_session , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_tag_population , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_tag_transit_time , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
2016-02-06 14:33:28 +00:00
suboffset = dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , depth + 1 ) ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_C1G2_TAG_INV_AWARE_SING :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_sing_i , tvb , suboffset , 1 , ENC_NA ) ;
proto_tree_add_item ( param_tree , hf_llrp_sing_s , tvb , suboffset , 1 , ENC_NA ) ;
proto_tree_add_item ( param_tree , hf_llrp_sing_a , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_C1G2_TARGET_TAG :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_mb , tvb , suboffset , 1 , ENC_NA ) ;
proto_tree_add_item ( param_tree , hf_llrp_match , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_pointer , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
suboffset = dissect_llrp_bit_field ( tvb , param_tree , hf_llrp_tag_mask , suboffset ) ;
suboffset = dissect_llrp_bit_field ( tvb , param_tree , hf_llrp_tag_data , suboffset ) ;
break ;
case LLRP_TLV_C1G2_READ :
case LLRP_TLV_C1G2_BLK_ERASE :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_opspec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_access_pass , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
proto_tree_add_item ( param_tree , hf_llrp_mb , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_word_pointer , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_word_count , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_C1G2_WRITE :
case LLRP_TLV_C1G2_BLK_WRITE :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_opspec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_access_pass , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
proto_tree_add_item ( param_tree , hf_llrp_mb , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_word_pointer , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
suboffset = dissect_llrp_word_array ( tvb , param_tree , hf_llrp_write_data , suboffset ) ;
break ;
case LLRP_TLV_C1G2_KILL :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_opspec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_kill_pass , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_C1G2_RECOMMISSION :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_opspec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_kill_pass , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
proto_tree_add_item ( param_tree , hf_llrp_kill_3 , tvb , suboffset , 1 , ENC_NA ) ;
proto_tree_add_item ( param_tree , hf_llrp_kill_2 , tvb , suboffset , 1 , ENC_NA ) ;
proto_tree_add_item ( param_tree , hf_llrp_kill_l , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_C1G2_LOCK :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_opspec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_access_pass , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
2016-02-06 14:33:28 +00:00
suboffset = dissect_llrp_parameters ( tvb , pinfo , param_tree , suboffset , param_end , depth + 1 ) ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_C1G2_LOCK_PAYLOAD :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_privilege , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_data_field , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_C1G2_BLK_PERMALOCK :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_opspec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_access_pass , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 4 ;
proto_tree_add_item ( param_tree , hf_llrp_mb , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_block_pointer , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
suboffset = dissect_llrp_word_array ( tvb , param_tree , hf_llrp_block_mask , suboffset ) ;
break ;
case LLRP_TLV_C1G2_GET_BLK_PERMALOCK :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_opspec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_access_pass , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_mb , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_block_pointer , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_block_range , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_C1G2_EPC_MEMORY_SLCTOR :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_enable_crc , tvb , suboffset , 1 , ENC_NA ) ;
proto_tree_add_item ( param_tree , hf_llrp_enable_pc , tvb , suboffset , 1 , ENC_NA ) ;
proto_tree_add_item ( param_tree , hf_llrp_enable_xpc , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_C1G2_READ_OP_SPEC_RES :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_access_result , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_opspec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
suboffset = dissect_llrp_word_array ( tvb , param_tree , hf_llrp_read_data , suboffset ) ;
break ;
case LLRP_TLV_C1G2_WRT_OP_SPEC_RES :
case LLRP_TLV_C1G2_BLK_WRT_OP_SPC_RES :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_access_result , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_opspec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
proto_tree_add_item ( param_tree , hf_llrp_num_words_written , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_C1G2_KILL_OP_SPEC_RES :
case LLRP_TLV_C1G2_RECOM_OP_SPEC_RES :
case LLRP_TLV_C1G2_LOCK_OP_SPEC_RES :
case LLRP_TLV_C1G2_BLK_ERS_OP_SPC_RES :
case LLRP_TLV_C1G2_BLK_PRL_OP_SPC_RES :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_access_result , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_opspec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
break ;
case LLRP_TLV_C1G2_BLK_PRL_STAT_RES :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_access_result , tvb , suboffset , 1 , ENC_NA ) ;
suboffset + = 1 ;
proto_tree_add_item ( param_tree , hf_llrp_opspec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
suboffset + = 2 ;
2012-08-23 03:03:54 +00:00
suboffset = dissect_llrp_word_array ( tvb , param_tree , hf_llrp_permlock_status , suboffset ) ;
break ;
case LLRP_TLV_CUSTOM_PARAMETER :
2017-03-17 12:51:01 +00:00
proto_tree_add_item_ret_uint ( param_tree , hf_llrp_vendor_id , tvb , suboffset , 4 , ENC_BIG_ENDIAN , & num ) ;
suboffset + = 4 ;
2012-08-23 03:03:54 +00:00
switch ( num ) {
case LLRP_VENDOR_IMPINJ :
2012-08-23 04:45:56 +00:00
suboffset = dissect_llrp_impinj_parameter ( tvb , pinfo , param_tree , suboffset , param_end ) ;
2012-08-23 03:03:54 +00:00
break ;
2017-03-16 19:31:24 +00:00
default :
2017-03-20 20:28:44 +00:00
proto_tree_add_item ( param_tree , hf_llrp_vendor_unknown , tvb , suboffset , len - 4 - 2 - 2 , ENC_NA ) ;
suboffset + = len - 4 - 2 - 2 ;
2017-03-16 19:31:24 +00:00
break ;
2012-08-23 03:03:54 +00:00
}
break ;
}
/* Have we decoded exactly the number of bytes declared in the parameter? */
if ( suboffset ! = param_end ) {
/* Report problem */
2013-09-09 00:44:09 +00:00
expert_add_info_format ( pinfo , param_tree , & ei_llrp_invalid_length ,
2012-08-23 03:03:54 +00:00
" Incorrect length of parameter: %u bytes decoded, but %u bytes claimed. " ,
suboffset - offset + 4 , real_len ) ;
}
2012-05-02 11:05:35 +00:00
/* The len field includes the 4-byte parameter header that we've
* already accounted for in offset */
offset + = real_len - 4 ;
}
else
{
type = tvb_get_guint8 ( tvb , offset ) & 0x7F ;
switch ( type )
{
case LLRP_TV_ANTENNA_ID :
real_len = LLRP_TV_LEN_ANTENNA_ID ; break ;
case LLRP_TV_FIRST_SEEN_TIME_UTC :
real_len = LLRP_TV_LEN_FIRST_SEEN_TIME_UTC ; break ;
case LLRP_TV_FIRST_SEEN_TIME_UPTIME :
real_len = LLRP_TV_LEN_FIRST_SEEN_TIME_UPTIME ; break ;
case LLRP_TV_LAST_SEEN_TIME_UTC :
real_len = LLRP_TV_LEN_LAST_SEEN_TIME_UTC ; break ;
case LLRP_TV_LAST_SEEN_TIME_UPTIME :
real_len = LLRP_TV_LEN_LAST_SEEN_TIME_UPTIME ; break ;
case LLRP_TV_PEAK_RSSI :
real_len = LLRP_TV_LEN_PEAK_RSSI ; break ;
case LLRP_TV_CHANNEL_INDEX :
real_len = LLRP_TV_LEN_CHANNEL_INDEX ; break ;
case LLRP_TV_TAG_SEEN_COUNT :
real_len = LLRP_TV_LEN_TAG_SEEN_COUNT ; break ;
case LLRP_TV_RO_SPEC_ID :
real_len = LLRP_TV_LEN_RO_SPEC_ID ; break ;
case LLRP_TV_INVENTORY_PARAM_SPEC_ID :
real_len = LLRP_TV_LEN_INVENTORY_PARAM_SPEC_ID ; break ;
case LLRP_TV_C1G2_CRC :
real_len = LLRP_TV_LEN_C1G2_CRC ; break ;
case LLRP_TV_C1G2_PC :
real_len = LLRP_TV_LEN_C1G2_PC ; break ;
case LLRP_TV_EPC96 :
real_len = LLRP_TV_LEN_EPC96 ; break ;
case LLRP_TV_SPEC_INDEX :
real_len = LLRP_TV_LEN_SPEC_INDEX ; break ;
case LLRP_TV_CLIENT_REQ_OP_SPEC_RES :
real_len = LLRP_TV_LEN_CLIENT_REQ_OP_SPEC_RES ; break ;
case LLRP_TV_ACCESS_SPEC_ID :
real_len = LLRP_TV_LEN_ACCESS_SPEC_ID ; break ;
case LLRP_TV_OP_SPEC_ID :
real_len = LLRP_TV_LEN_OP_SPEC_ID ; break ;
case LLRP_TV_C1G2_SINGULATION_DET :
real_len = LLRP_TV_LEN_C1G2_SINGULATION_DET ; break ;
case LLRP_TV_C1G2_XPC_W1 :
real_len = LLRP_TV_LEN_C1G2_XPC_W1 ; break ;
case LLRP_TV_C1G2_XPC_W2 :
real_len = LLRP_TV_LEN_C1G2_XPC_W2 ; break ;
default :
/* ???
* No need to mark it , since the hf_llrp_tv_type field
* will already show up as ' unknown ' . */
real_len = 0 ;
break ;
} ;
ti = proto_tree_add_none_format ( tree , hf_llrp_param , tvb ,
2012-08-23 03:03:54 +00:00
offset , real_len + 1 , " TV Parameter : %s " ,
val_to_str_ext ( type , & tv_type_ext , " Unknown Type: %d " ) ) ;
2012-05-02 11:05:35 +00:00
param_tree = proto_item_add_subtree ( ti , ett_llrp_param ) ;
proto_tree_add_item ( param_tree , hf_llrp_tv_type , tvb ,
2014-12-13 17:52:20 +00:00
offset , 1 , ENC_BIG_ENDIAN ) ;
2012-05-02 11:05:35 +00:00
offset + + ;
2012-08-23 03:03:54 +00:00
suboffset = offset ;
switch ( type )
{
case LLRP_TV_ANTENNA_ID :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_antenna_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
2012-08-28 02:08:42 +00:00
break ;
2012-08-23 03:03:54 +00:00
case LLRP_TV_FIRST_SEEN_TIME_UTC :
case LLRP_TV_FIRST_SEEN_TIME_UPTIME :
case LLRP_TV_LAST_SEEN_TIME_UTC :
case LLRP_TV_LAST_SEEN_TIME_UPTIME :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_microseconds , tvb , suboffset , 8 , ENC_BIG_ENDIAN ) ;
2012-08-28 02:08:42 +00:00
break ;
2012-08-23 03:03:54 +00:00
case LLRP_TV_PEAK_RSSI :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_peak_rssi , tvb , suboffset , 1 , ENC_NA ) ;
2012-08-28 02:08:42 +00:00
break ;
2012-08-23 03:03:54 +00:00
case LLRP_TV_CHANNEL_INDEX :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_channel_idx , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
2012-08-28 02:08:42 +00:00
break ;
2012-08-23 03:03:54 +00:00
case LLRP_TV_TAG_SEEN_COUNT :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_tag_count , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
2012-08-28 02:08:42 +00:00
break ;
2012-08-23 03:03:54 +00:00
case LLRP_TV_RO_SPEC_ID :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_rospec_id , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
2012-08-28 02:08:42 +00:00
break ;
2012-08-23 03:03:54 +00:00
case LLRP_TV_INVENTORY_PARAM_SPEC_ID :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_inventory_spec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
2012-08-28 02:08:42 +00:00
break ;
2012-08-23 03:03:54 +00:00
case LLRP_TV_C1G2_CRC :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_crc , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
2012-08-28 02:08:42 +00:00
break ;
2012-08-23 03:03:54 +00:00
case LLRP_TV_C1G2_PC :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_pc_bits , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
2012-08-28 02:08:42 +00:00
break ;
2012-08-23 03:03:54 +00:00
case LLRP_TV_EPC96 :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_epc , tvb , suboffset , 96 / 8 , ENC_NA ) ;
2012-08-28 02:08:42 +00:00
break ;
2012-08-23 03:03:54 +00:00
case LLRP_TV_SPEC_INDEX :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_spec_idx , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
2012-08-28 02:08:42 +00:00
break ;
2012-08-23 03:03:54 +00:00
case LLRP_TV_CLIENT_REQ_OP_SPEC_RES :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_opspec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
2012-08-28 02:08:42 +00:00
break ;
2012-08-23 03:03:54 +00:00
case LLRP_TV_ACCESS_SPEC_ID :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_accessspec_id , tvb , suboffset , 4 , ENC_BIG_ENDIAN ) ;
2012-08-28 02:08:42 +00:00
break ;
2012-08-23 03:03:54 +00:00
case LLRP_TV_OP_SPEC_ID :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_opspec_id , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
2012-08-28 02:08:42 +00:00
break ;
2012-08-23 03:03:54 +00:00
case LLRP_TV_C1G2_SINGULATION_DET :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_num_coll , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( param_tree , hf_llrp_num_empty , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
2012-08-28 02:08:42 +00:00
break ;
2012-08-23 03:03:54 +00:00
case LLRP_TV_C1G2_XPC_W1 :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_xpc_w1 , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
2012-08-28 02:08:42 +00:00
break ;
2012-08-23 03:03:54 +00:00
case LLRP_TV_C1G2_XPC_W2 :
2017-03-17 12:51:01 +00:00
proto_tree_add_item ( param_tree , hf_llrp_xpc_w2 , tvb , suboffset , 2 , ENC_BIG_ENDIAN ) ;
2012-08-23 03:03:54 +00:00
break ;
} ;
2012-05-02 11:05:35 +00:00
/* Unlike for TLV's, real_len for TV's doesn't include the standard
* header length , so just add it straight to the offset . */
offset + = real_len ;
}
}
2012-08-23 03:03:54 +00:00
return offset ;
}
static guint
dissect_llrp_impinj_message ( tvbuff_t * tvb , packet_info * pinfo , proto_tree * tree , guint offset )
{
guint8 subtype ;
subtype = tvb_get_guint8 ( tvb , offset ) ;
col_append_fstr ( pinfo - > cinfo , COL_INFO , " (Impinj - %s) " ,
val_to_str_ext ( subtype , & impinj_msg_subtype_ext , " Unknown Type: %d " ) ) ;
2014-12-13 17:52:20 +00:00
proto_tree_add_item ( tree , hf_llrp_impinj_msg_type , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2012-08-23 03:03:54 +00:00
offset + = 1 ;
switch ( subtype ) {
case LLRP_IMPINJ_TYPE_ENABLE_EXTENSIONS :
proto_tree_add_item ( tree , hf_llrp_rfu , tvb , offset , 4 , ENC_NA ) ;
offset + = 4 ;
break ;
case LLRP_IMPINJ_TYPE_ENABLE_EXTENSIONS_RESPONSE :
/* Just parameters */
break ;
case LLRP_IMPINJ_TYPE_SAVE_SETTINGS :
proto_tree_add_item ( tree , hf_llrp_save_config , tvb , offset , 1 , ENC_NA ) ;
offset + = 1 ;
break ;
case LLRP_IMPINJ_TYPE_SAVE_SETTINGS_RESPONSE :
/* Just parameters */
break ;
}
/* Just return offset, parameters will be dissected by our callee */
return offset ;
2012-05-02 11:05:35 +00:00
}
static void
dissect_llrp_message ( tvbuff_t * tvb , packet_info * pinfo , proto_tree * tree ,
guint16 type , guint offset )
{
2012-08-23 03:03:54 +00:00
gboolean ends_with_parameters ;
2012-07-24 14:47:19 +00:00
guint8 requested_data ;
2017-03-27 10:42:03 +00:00
guint32 vendor ;
2012-08-23 03:03:54 +00:00
proto_item * request_item , * antenna_item , * gpi_item , * gpo_item ;
guint ( * dissect_custom_message ) ( tvbuff_t * tvb ,
2012-08-23 19:07:24 +00:00
packet_info * pinfo , proto_tree * tree , guint offset ) = NULL ;
2012-05-02 11:05:35 +00:00
2012-08-23 03:03:54 +00:00
ends_with_parameters = FALSE ;
2012-05-02 11:05:35 +00:00
switch ( type )
{
/* Simple cases just have normal TLV or TV parameters */
case LLRP_TYPE_CLOSE_CONNECTION_RESPONSE :
2013-04-01 15:29:49 +00:00
case LLRP_TYPE_GET_READER_CAPABILITIES_RESPONSE :
2012-05-02 11:05:35 +00:00
case LLRP_TYPE_ADD_ROSPEC :
case LLRP_TYPE_ADD_ROSPEC_RESPONSE :
case LLRP_TYPE_DELETE_ROSPEC_RESPONSE :
case LLRP_TYPE_START_ROSPEC_RESPONSE :
case LLRP_TYPE_STOP_ROSPEC_RESPONSE :
case LLRP_TYPE_ENABLE_ROSPEC_RESPONSE :
case LLRP_TYPE_DISABLE_ROSPEC_RESPONSE :
case LLRP_TYPE_GET_ROSPECS_RESPONSE :
case LLRP_TYPE_ADD_ACCESSSPEC :
case LLRP_TYPE_ADD_ACCESSSPEC_RESPONSE :
case LLRP_TYPE_DELETE_ACCESSSPEC_RESPONSE :
case LLRP_TYPE_ENABLE_ACCESSSPEC_RESPONSE :
case LLRP_TYPE_DISABLE_ACCESSSPEC_RESPONSE :
case LLRP_TYPE_GET_ACCESSSPECS :
case LLRP_TYPE_CLIENT_REQUEST_OP :
case LLRP_TYPE_CLIENT_RESQUEST_OP_RESPONSE :
case LLRP_TYPE_RO_ACCESS_REPORT :
case LLRP_TYPE_READER_EVENT_NOTIFICATION :
case LLRP_TYPE_ERROR_MESSAGE :
case LLRP_TYPE_GET_READER_CONFIG_RESPONSE :
case LLRP_TYPE_SET_READER_CONFIG_RESPONSE :
case LLRP_TYPE_SET_PROTOCOL_VERSION_RESPONSE :
case LLRP_TYPE_GET_ACCESSSPECS_RESPONSE :
case LLRP_TYPE_GET_REPORT :
case LLRP_TYPE_ENABLE_EVENTS_AND_REPORTS :
2012-08-23 03:03:54 +00:00
ends_with_parameters = TRUE ;
2012-05-02 11:05:35 +00:00
break ;
/* Some just have an ROSpec ID */
case LLRP_TYPE_START_ROSPEC :
case LLRP_TYPE_STOP_ROSPEC :
case LLRP_TYPE_ENABLE_ROSPEC :
case LLRP_TYPE_DISABLE_ROSPEC :
case LLRP_TYPE_DELETE_ROSPEC :
2017-03-27 10:42:03 +00:00
proto_tree_add_item ( tree , hf_llrp_rospec , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
2012-08-23 03:03:54 +00:00
offset + = 4 ;
2012-05-02 11:05:35 +00:00
break ;
/* Some just have an AccessSpec ID */
case LLRP_TYPE_ENABLE_ACCESSSPEC :
case LLRP_TYPE_DELETE_ACCESSSPEC :
case LLRP_TYPE_DISABLE_ACCESSSPEC :
2017-03-27 10:42:03 +00:00
proto_tree_add_item ( tree , hf_llrp_accessspec , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
2012-08-23 03:03:54 +00:00
offset + = 4 ;
2012-05-02 11:05:35 +00:00
break ;
2013-04-01 15:29:49 +00:00
case LLRP_TYPE_GET_READER_CAPABILITIES :
2014-12-13 17:52:20 +00:00
proto_tree_add_item ( tree , hf_llrp_req_cap , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2012-05-02 11:05:35 +00:00
offset + + ;
2012-08-23 03:03:54 +00:00
ends_with_parameters = TRUE ;
2012-05-02 11:05:35 +00:00
break ;
2012-08-23 03:03:54 +00:00
/* GET_READER_CONFIG is more complicated */
2012-05-02 11:05:35 +00:00
case LLRP_TYPE_GET_READER_CONFIG :
2017-03-27 10:42:03 +00:00
antenna_item = proto_tree_add_item ( tree , hf_llrp_antenna_id , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
2012-08-23 03:03:54 +00:00
offset + = 2 ;
requested_data = tvb_get_guint8 ( tvb , offset ) ;
request_item = proto_tree_add_item ( tree , hf_llrp_req_conf , tvb ,
2014-12-13 17:52:20 +00:00
offset , 1 , ENC_BIG_ENDIAN ) ;
2012-08-23 03:03:54 +00:00
offset + + ;
2017-03-27 10:42:03 +00:00
gpi_item = proto_tree_add_item ( tree , hf_llrp_gpi_port , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
2012-08-23 03:03:54 +00:00
offset + = 2 ;
2017-03-27 10:42:03 +00:00
gpo_item = proto_tree_add_item ( tree , hf_llrp_gpo_port , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
2012-08-23 03:03:54 +00:00
offset + = 2 ;
2012-05-02 11:05:35 +00:00
switch ( requested_data )
{
case LLRP_CONF_ALL :
break ;
case LLRP_CONF_ANTENNA_PROPERTIES :
case LLRP_CONF_ANTENNA_CONFIGURATION :
2012-08-23 03:03:54 +00:00
/* Ignore both GPI and GPO ports */
proto_item_append_text ( gpi_item , " (Ignored) " ) ;
proto_item_append_text ( gpo_item , " (Ignored) " ) ;
2012-05-02 11:05:35 +00:00
break ;
case LLRP_CONF_IDENTIFICATION :
case LLRP_CONF_RO_REPORT_SPEC :
case LLRP_CONF_READER_EVENT_NOTIFICATION_SPEC :
case LLRP_CONF_ACCESS_REPORT_SPEC :
case LLRP_CONF_LLRP_CONFIGURATION_STATE :
case LLRP_CONF_KEEPALIVE_SPEC :
case LLRP_CONF_EVENTS_AND_REPORTS :
2012-08-23 03:03:54 +00:00
/* Ignore antenna ID */
proto_item_append_text ( antenna_item , " (Ignored) " ) ;
/* Ignore both GPI and GPO ports */
proto_item_append_text ( gpi_item , " (Ignored) " ) ;
proto_item_append_text ( gpo_item , " (Ignored) " ) ;
2012-05-02 11:05:35 +00:00
break ;
case LLRP_CONF_GPI_PORT_CURRENT_STATE :
2012-08-23 03:03:54 +00:00
/* Ignore antenna ID */
proto_item_append_text ( antenna_item , " (Ignored) " ) ;
/* Ignore GPO port */
proto_item_append_text ( gpo_item , " (Ignored) " ) ;
2012-05-02 11:05:35 +00:00
break ;
case LLRP_CONF_GPO_WRITE_DATA :
2012-08-23 03:03:54 +00:00
/* Ignore antenna ID */
proto_item_append_text ( antenna_item , " (Ignored) " ) ;
/* Ignore GPI port */
proto_item_append_text ( gpi_item , " (Ignored) " ) ;
2012-05-02 11:05:35 +00:00
break ;
default :
2012-08-23 03:03:54 +00:00
/* Ignore antenna ID */
proto_item_append_text ( antenna_item , " (Ignored) " ) ;
/* Tell the user that we are confused */
2013-09-09 00:44:09 +00:00
expert_add_info_format ( pinfo , request_item , & ei_llrp_req_conf ,
2012-05-02 11:05:35 +00:00
" Unrecognized configuration request: %u " ,
requested_data ) ;
2012-08-23 03:03:54 +00:00
/* Ignore both GPI and GPO ports */
proto_item_append_text ( gpi_item , " (Ignored) " ) ;
proto_item_append_text ( gpo_item , " (Ignored) " ) ;
2012-05-02 11:05:35 +00:00
break ;
} ;
2012-08-23 03:03:54 +00:00
ends_with_parameters = TRUE ;
2012-05-02 11:05:35 +00:00
break ;
/* END GET_READER_CONFIG */
/* Misc */
case LLRP_TYPE_SET_READER_CONFIG :
proto_tree_add_item ( tree , hf_llrp_rest_fact , tvb , offset , 1 , ENC_NA ) ;
offset + + ;
2012-08-23 03:03:54 +00:00
ends_with_parameters = TRUE ;
2012-05-02 11:05:35 +00:00
break ;
case LLRP_TYPE_SET_PROTOCOL_VERSION :
2014-12-13 17:52:20 +00:00
proto_tree_add_item ( tree , hf_llrp_version , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2012-05-02 11:05:35 +00:00
break ;
case LLRP_TYPE_GET_SUPPORTED_VERSION_RESPONSE :
2014-12-13 17:52:20 +00:00
proto_tree_add_item ( tree , hf_llrp_cur_ver , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2012-05-02 11:05:35 +00:00
offset + + ;
2014-12-13 17:52:20 +00:00
proto_tree_add_item ( tree , hf_llrp_sup_ver , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2012-05-02 11:05:35 +00:00
offset + + ;
2012-08-23 03:03:54 +00:00
ends_with_parameters = TRUE ;
2012-05-02 11:05:35 +00:00
break ;
case LLRP_TYPE_CUSTOM_MESSAGE :
2012-08-23 03:03:54 +00:00
vendor = tvb_get_ntohl ( tvb , offset ) ;
2012-05-02 11:05:35 +00:00
proto_tree_add_item ( tree , hf_llrp_vendor , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
2012-08-23 03:03:54 +00:00
offset + = 4 ;
/* Do vendor specific dissection */
switch ( vendor ) {
case LLRP_VENDOR_IMPINJ :
dissect_custom_message = dissect_llrp_impinj_message ;
ends_with_parameters = TRUE ;
break ;
}
2012-08-23 19:07:24 +00:00
if ( dissect_custom_message )
offset = dissect_custom_message ( tvb , pinfo , tree , offset ) ;
2012-05-02 11:05:35 +00:00
break ;
/* Some have no extra data expected */
case LLRP_TYPE_KEEPALIVE :
case LLRP_TYPE_KEEPALIVE_ACK :
case LLRP_TYPE_CLOSE_CONNECTION :
case LLRP_TYPE_GET_ROSPECS :
case LLRP_TYPE_GET_SUPPORTED_VERSION :
break ;
default :
/* We shouldn't be called if we don't already recognize the value */
DISSECTOR_ASSERT_NOT_REACHED ( ) ;
} ;
2012-08-23 03:03:54 +00:00
if ( ends_with_parameters ) {
2016-02-06 14:33:28 +00:00
offset = dissect_llrp_parameters ( tvb , pinfo , tree , offset , tvb_reported_length ( tvb ) , 0 ) ;
2012-08-23 03:03:54 +00:00
}
if ( tvb_reported_length_remaining ( tvb , offset ) ! = 0 ) {
/* Report problem */
2013-09-09 00:44:09 +00:00
expert_add_info_format ( pinfo , tree , & ei_llrp_invalid_length ,
2012-08-23 03:03:54 +00:00
" Incorrect length of message: %u bytes decoded, but %u bytes available. " ,
offset , tvb_reported_length ( tvb ) ) ;
}
2012-05-02 11:05:35 +00:00
}
/* Code to actually dissect the packets */
2013-11-09 17:46:28 +00:00
static int
dissect_llrp_packet ( tvbuff_t * tvb , packet_info * pinfo , proto_tree * tree , void * data _U_ )
2012-05-02 11:05:35 +00:00
{
proto_item * ti ;
proto_tree * llrp_tree ;
2012-07-24 14:47:19 +00:00
guint16 type ;
guint32 len ;
guint offset = 0 ;
2012-05-02 11:05:35 +00:00
/* Check that there's enough data */
2012-08-23 03:03:54 +00:00
DISSECTOR_ASSERT ( tvb_reported_length ( tvb ) > = LLRP_HEADER_LENGTH ) ;
2012-05-02 11:05:35 +00:00
/* Make entries in Protocol column and Info column on summary display */
col_set_str ( pinfo - > cinfo , COL_PROTOCOL , " LLRP " ) ;
col_set_str ( pinfo - > cinfo , COL_INFO , " LLRP Message " ) ;
type = tvb_get_ntohs ( tvb , offset ) & 0x03FF ;
col_append_fstr ( pinfo - > cinfo , COL_INFO , " (%s) " ,
2012-07-24 14:47:19 +00:00
val_to_str_ext ( type , & message_types_ext , " Unknown Type: %d " ) ) ;
2012-05-02 11:05:35 +00:00
2012-06-12 21:22:46 +00:00
ti = proto_tree_add_item ( tree , proto_llrp , tvb , offset , - 1 , ENC_NA ) ;
llrp_tree = proto_item_add_subtree ( ti , ett_llrp ) ;
2012-05-02 11:05:35 +00:00
2014-12-13 17:52:20 +00:00
proto_tree_add_item ( llrp_tree , hf_llrp_version , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2012-06-12 21:22:46 +00:00
proto_tree_add_item ( llrp_tree , hf_llrp_type , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
offset + = 2 ;
2012-05-02 11:05:35 +00:00
2012-06-12 21:22:46 +00:00
ti = proto_tree_add_item ( llrp_tree , hf_llrp_length , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
len = tvb_get_ntohl ( tvb , offset ) ;
2012-08-23 03:03:54 +00:00
if ( len ! = tvb_reported_length ( tvb ) )
2012-06-12 21:22:46 +00:00
{
2013-09-09 00:44:09 +00:00
expert_add_info_format ( pinfo , ti , & ei_llrp_invalid_length ,
2012-08-23 03:03:54 +00:00
" Incorrect length field: claimed %u, but have %u. " ,
2012-06-12 21:22:46 +00:00
len , tvb_reported_length ( tvb ) ) ;
}
offset + = 4 ;
2012-05-02 11:05:35 +00:00
2012-06-12 21:22:46 +00:00
proto_tree_add_item ( llrp_tree , hf_llrp_id , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
offset + = 4 ;
2012-05-02 11:05:35 +00:00
2013-03-29 00:26:23 +00:00
if ( try_val_to_str_ext ( type , & message_types_ext ) )
2012-06-12 21:22:46 +00:00
dissect_llrp_message ( tvb , pinfo , llrp_tree , type , offset ) ;
2013-11-09 17:46:28 +00:00
2015-06-23 18:24:48 +00:00
return tvb_captured_length ( tvb ) ;
2012-08-23 03:03:54 +00:00
}
2012-05-02 11:05:35 +00:00
2012-08-23 03:03:54 +00:00
/* Determine length of LLRP message */
static guint
2015-01-25 19:30:13 +00:00
get_llrp_message_len ( packet_info * pinfo _U_ , tvbuff_t * tvb , int offset , void * data _U_ )
2012-08-23 03:03:54 +00:00
{
/* Peek into the header to determine the total message length */
return ( guint ) tvb_get_ntohl ( tvb , offset + 2 ) ;
}
/* The main dissecting routine */
2013-11-09 17:46:28 +00:00
static int
dissect_llrp ( tvbuff_t * tvb , packet_info * pinfo , proto_tree * tree , void * data )
2012-08-23 03:03:54 +00:00
{
tcp_dissect_pdus ( tvb , pinfo , tree , TRUE , LLRP_HEADER_LENGTH ,
2013-11-09 17:46:28 +00:00
get_llrp_message_len , dissect_llrp_packet , data ) ;
2015-06-23 18:24:48 +00:00
return tvb_captured_length ( tvb ) ;
2012-05-02 11:05:35 +00:00
}
void
proto_register_llrp ( void )
{
2012-07-24 14:47:19 +00:00
/* Setup list of header fields See Section 1.6.1 for details */
2012-05-02 11:05:35 +00:00
static hf_register_info hf [ ] = {
{ & hf_llrp_version ,
{ " Version " , " llrp.version " , FT_UINT8 , BASE_DEC , VALS ( llrp_versions ) , 0x1C ,
2012-05-02 15:29:50 +00:00
NULL , HFILL } } ,
2012-05-02 11:05:35 +00:00
{ & hf_llrp_type ,
2012-07-24 14:47:19 +00:00
{ " Type " , " llrp.type " , FT_UINT16 , BASE_DEC | BASE_EXT_STRING , & message_types_ext , 0x03FF ,
2012-05-02 15:29:50 +00:00
NULL , HFILL } } ,
2012-05-02 11:05:35 +00:00
{ & hf_llrp_length ,
{ " Length " , " llrp.length " , FT_UINT32 , BASE_DEC , NULL , 0 ,
2012-05-02 15:29:50 +00:00
NULL , HFILL } } ,
2012-05-02 11:05:35 +00:00
{ & hf_llrp_id ,
{ " ID " , " llrp.id " , FT_UINT32 , BASE_DEC , NULL , 0 ,
2012-05-02 15:29:50 +00:00
NULL , HFILL } } ,
2012-05-02 11:05:35 +00:00
{ & hf_llrp_cur_ver ,
{ " Current Version " , " llrp.cur_ver " , FT_UINT8 , BASE_DEC , VALS ( llrp_versions ) , 0 ,
2012-05-02 15:29:50 +00:00
NULL , HFILL } } ,
2012-05-02 11:05:35 +00:00
{ & hf_llrp_sup_ver ,
{ " Supported Version " , " llrp.sup_ver " , FT_UINT8 , BASE_DEC , VALS ( llrp_versions ) , 0 ,
" The max supported protocol version. " , HFILL } } ,
{ & hf_llrp_req_cap ,
{ " Requested Capabilities " , " llrp.req_cap " , FT_UINT8 , BASE_DEC , VALS ( capabilities_request ) , 0 ,
2012-05-02 15:29:50 +00:00
NULL , HFILL } } ,
2012-05-02 11:05:35 +00:00
{ & hf_llrp_req_conf ,
2012-07-24 14:47:19 +00:00
{ " Requested Configuration " , " llrp.req_conf " , FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & config_request_ext , 0 ,
2012-05-02 15:29:50 +00:00
NULL , HFILL } } ,
2012-05-02 11:05:35 +00:00
{ & hf_llrp_rospec ,
2017-04-18 22:27:28 +00:00
{ " ROSpec ID " , " llrp.rospec " , FT_UINT32 , BASE_DEC | BASE_SPECIAL_VALS , VALS ( unique_all_rospecs ) , 0 ,
2012-05-02 15:29:50 +00:00
NULL , HFILL } } ,
2012-05-02 11:05:35 +00:00
{ & hf_llrp_antenna_id ,
2017-04-18 22:27:28 +00:00
{ " Antenna ID " , " llrp.antenna_id " , FT_UINT16 , BASE_DEC | BASE_SPECIAL_VALS , VALS ( unique_all_antenna ) , 0 ,
2012-05-02 15:29:50 +00:00
NULL , HFILL } } ,
2012-05-02 11:05:35 +00:00
{ & hf_llrp_gpi_port ,
2017-04-18 22:27:28 +00:00
{ " GPI Port Number " , " llrp.gpi_port " , FT_UINT16 , BASE_DEC | BASE_SPECIAL_VALS , VALS ( unique_all_gpi_ports ) , 0 ,
2012-05-02 15:29:50 +00:00
NULL , HFILL } } ,
2012-05-02 11:05:35 +00:00
{ & hf_llrp_gpo_port ,
2017-04-18 22:27:28 +00:00
{ " GPO Port Number " , " llrp.gpo_port " , FT_UINT16 , BASE_DEC | BASE_SPECIAL_VALS , VALS ( unique_all_gpo_ports ) , 0 ,
2012-05-02 15:29:50 +00:00
NULL , HFILL } } ,
2012-05-02 11:05:35 +00:00
{ & hf_llrp_rest_fact ,
{ " Restore Factory Settings " , " llrp.rest_fact " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x80 ,
2012-05-02 15:29:50 +00:00
NULL , HFILL } } ,
2012-05-02 11:05:35 +00:00
{ & hf_llrp_accessspec ,
2017-04-18 22:27:28 +00:00
{ " Access Spec ID " , " llrp.accessspec " , FT_UINT32 , BASE_DEC | BASE_SPECIAL_VALS , VALS ( unique_all_access_specs ) , 0 ,
2012-05-02 15:29:50 +00:00
NULL , HFILL } } ,
2012-05-02 11:05:35 +00:00
{ & hf_llrp_vendor ,
2012-08-23 03:03:54 +00:00
{ " Vendor ID " , " llrp.vendor " , FT_UINT32 , BASE_DEC , VALS ( llrp_vendors ) , 0 ,
2012-05-02 15:29:50 +00:00
NULL , HFILL } } ,
2012-05-02 11:05:35 +00:00
2012-08-23 03:03:54 +00:00
{ & hf_llrp_impinj_msg_type ,
{ " Subtype " , " llrp.impinj.type " , FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & impinj_msg_subtype_ext , 0 ,
" Subtype specified by vendor " , HFILL } } ,
2012-05-02 11:05:35 +00:00
{ & hf_llrp_tlv_type ,
2012-07-24 14:47:19 +00:00
{ " Type " , " llrp.tlv_type " , FT_UINT16 , BASE_DEC | BASE_EXT_STRING , & tlv_type_ext , 0x03FF ,
2012-05-02 11:05:35 +00:00
" The type of TLV. " , HFILL } } ,
{ & hf_llrp_tv_type ,
2012-07-24 14:47:19 +00:00
{ " Type " , " llrp.tv_type " , FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & tv_type_ext , 0x7F ,
2012-05-02 11:05:35 +00:00
" The type of TV. " , HFILL } } ,
{ & hf_llrp_tlv_len ,
{ " Length " , " llrp.tlv_len " , FT_UINT16 , BASE_DEC , NULL , 0 ,
" The length of this TLV. " , HFILL } } ,
{ & hf_llrp_param ,
{ " Parameter " , " llrp.param " , FT_NONE , BASE_NONE , NULL , 0 ,
2012-08-23 03:03:54 +00:00
NULL , HFILL } } ,
2012-09-09 01:39:27 +00:00
{ & hf_llrp_num_gpi ,
{ " Number of GPI ports " , " llrp.param.num_gpi " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_num_gpo ,
{ " Number of GPO ports " , " llrp.param.num_gpo " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_microseconds ,
{ " Microseconds " , " llrp.param.microseconds " , FT_UINT64 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_max_supported_antenna ,
{ " Max number of antenna supported " , " llrp.param.max_supported_antenna " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_can_set_antenna_prop ,
{ " Can set antenna properties " , " llrp.param.can_set_antenna_prop " , FT_BOOLEAN , 16 , TFS ( & tfs_yes_no ) , 0x8000 ,
NULL , HFILL } } ,
{ & hf_llrp_has_utc_clock ,
{ " Has UTC clock capabilities " , " llrp.param.has_utc_clock " , FT_BOOLEAN , 16 , TFS ( & tfs_yes_no ) , 0x4000 ,
NULL , HFILL } } ,
{ & hf_llrp_device_manufacturer ,
{ " Device manufacturer name " , " llrp.param.device_manufacturer " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_model ,
{ " Model name " , " llrp.param.model " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_firmware_version ,
{ " Reader firmware version " , " llrp.param.firmware_version " , FT_UINT_STRING , BASE_NONE , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_max_receive_sense ,
{ " Maximum sensitivity value " , " llrp.param.max_receive_sense " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_index ,
{ " Index " , " llrp.param.index " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_receive_sense ,
{ " Receive sensitivity value " , " llrp.param.receive_sense " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_receive_sense_index_min ,
{ " Receive sensitivity index min " , " llrp.param.receive_sense_index_min " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_receive_sense_index_max ,
{ " Receive sensitivity index max " , " llrp.param.receive_sense_index_max " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_num_protocols ,
{ " Number of protocols " , " llrp.param.num_protocols " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_protocol_id ,
2013-06-17 22:22:17 +00:00
{ " Protocol ID " , " llrp.param.protocol_id " , FT_UINT8 , BASE_DEC | BASE_RANGE_STRING , RVALS ( protocol_id ) , 0 ,
2012-09-09 01:39:27 +00:00
NULL , HFILL } } ,
{ & hf_llrp_can_do_survey ,
{ " Can do RF survey " , " llrp.param.can_do_survey " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x80 ,
NULL , HFILL } } ,
{ & hf_llrp_can_report_buffer_warning ,
{ " Can report buffer fill warning " , " llrp.param.can_report_buffer_warning " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x40 ,
NULL , HFILL } } ,
{ & hf_llrp_support_client_opspec ,
{ " Support client request OpSpec " , " llrp.param.support_client_opspec " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x20 ,
NULL , HFILL } } ,
{ & hf_llrp_can_stateaware ,
{ " Can do tag inventory state aware singulation " , " llrp.param.can_stateaware " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x10 ,
NULL , HFILL } } ,
{ & hf_llrp_support_holding ,
{ " Support event and report holding " , " llrp.param.support_holding " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x08 ,
NULL , HFILL } } ,
{ & hf_llrp_max_priority_supported ,
{ " Max priority level supported " , " llrp.param.max_priority_supported " , FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_client_opspec_timeout ,
{ " Client request OpSpec timeout " , " llrp.param.client_opspec_timeout " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_max_num_rospec ,
2017-04-18 22:27:28 +00:00
{ " Maximum number of ROSpecs " , " llrp.param.max_num_rospec " , FT_UINT32 , BASE_DEC | BASE_SPECIAL_VALS , VALS ( unique_no_limit ) , 0 ,
2012-09-09 01:39:27 +00:00
NULL , HFILL } } ,
{ & hf_llrp_max_num_spec_per_rospec ,
2017-04-18 22:27:28 +00:00
{ " Maximum number of spec per ROSpec " , " llrp.param.max_num_spec_per_rospec " , FT_UINT32 , BASE_DEC | BASE_SPECIAL_VALS , VALS ( unique_no_limit ) , 0 ,
2012-09-09 01:39:27 +00:00
NULL , HFILL } } ,
{ & hf_llrp_max_num_inventory_per_aispec ,
2017-04-18 22:27:28 +00:00
{ " Maximum number of Inventory Spec per AISpec " , " llrp.param.max_num_inventory_per_aispec " , FT_UINT32 , BASE_DEC | BASE_SPECIAL_VALS , VALS ( unique_no_limit ) , 0 ,
2012-09-09 01:39:27 +00:00
NULL , HFILL } } ,
{ & hf_llrp_max_num_accessspec ,
2017-04-18 22:27:28 +00:00
{ " Maximum number of AccessSpec " , " llrp.param.max_num_accessspec " , FT_UINT32 , BASE_DEC | BASE_SPECIAL_VALS , VALS ( unique_no_limit ) , 0 ,
2012-09-09 01:39:27 +00:00
NULL , HFILL } } ,
{ & hf_llrp_max_num_opspec_per_accressspec ,
2017-04-18 22:27:28 +00:00
{ " Maximum number of OpSpec per AccessSpec " , " llrp.param.max_num_opspec_per_accressspec " , FT_UINT32 , BASE_DEC | BASE_SPECIAL_VALS , VALS ( unique_no_limit ) , 0 ,
2012-09-09 01:39:27 +00:00
NULL , HFILL } } ,
/* TODO add translation */
{ & hf_llrp_country_code ,
{ " Contry code " , " llrp.param.country_code " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_comm_standard ,
{ " Communication standard " , " llrp.param.comm_standard " , FT_UINT16 , BASE_DEC | BASE_EXT_STRING , & comm_standard_ext , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_transmit_power ,
{ " Transmit power value " , " llrp.param.transmit_power " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_hopping ,
{ " Hopping " , " llrp.param.hopping " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x80 ,
NULL , HFILL } } ,
{ & hf_llrp_hop_table_id ,
{ " Hop table ID " , " llrp.param.hop_table_id " , FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_rfu ,
{ " Reserved for future use " , " llrp.param.rfu " , FT_BYTES , BASE_NONE , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_num_hops ,
{ " Number of hops " , " llrp.param.num_hops " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_frequency ,
{ " Frequency " , " llrp.param.frequency " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_num_freqs ,
{ " Number of frequencies " , " llrp.param.num_freqs " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_min_freq ,
{ " Minimum frequency " , " llrp.param.min_freq " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_max_freq ,
{ " Maximum frequency " , " llrp.param.max_freq " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_rospec_id ,
{ " ROSpec ID " , " llrp.param.rospec_id " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_priority ,
{ " Priority " , " llrp.param.priority " , FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_cur_state ,
{ " Current state " , " llrp.param.cur_state " , FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_rospec_start_trig_type ,
{ " ROSpec start trigger type " , " llrp.param.rospec_start_trig_type " , FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_offset ,
{ " Offset " , " llrp.param.offset " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_period ,
{ " Period " , " llrp.param.period " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_gpi_event ,
{ " GPI event " , " llrp.param.gpi_event " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x80 ,
NULL , HFILL } } ,
{ & hf_llrp_timeout ,
{ " Timeout " , " llrp.param.timeout " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_rospec_stop_trig_type ,
{ " ROSpec stop trigger type " , " llrp.param.rospec_stop_trig_type " , FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_duration_trig ,
{ " Duration trigger value " , " llrp.param.duration_trig " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_antenna_count ,
{ " Antenna count " , " llrp.param.antenna_count " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_antenna ,
{ " Antenna ID " , " llrp.param.antenna " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_aispec_stop_trig_type ,
{ " AISpec stop trigger type " , " llrp.param.aispec_stop_trig_type " , FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_trig_type ,
{ " Trigger type " , " llrp.param.trig_type " , FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_number_of_tags ,
{ " Number of tags " , " llrp.param.number_of_tags " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_number_of_attempts ,
{ " Number of attempts " , " llrp.param.number_of_attempts " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_t ,
{ " T " , " llrp.param.t " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_inventory_spec_id ,
{ " Inventory parameter spec id " , " llrp.param.inventory_spec_id " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_start_freq ,
{ " Start frequency " , " llrp.param.start_freq " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_stop_freq ,
{ " Stop frequency " , " llrp.param.stop_freq " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_stop_trig_type ,
{ " Stop trigger type " , " llrp.param.stop_trig_type " , FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_n_4 ,
{ " N " , " llrp.param.n_4 " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_duration ,
{ " Duration " , " llrp.param.duration " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_accessspec_id ,
{ " AccessSpec ID " , " llrp.param.accessspec_id " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_access_cur_state ,
{ " Current state " , " llrp.param.access_cur_state " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x80 ,
NULL , HFILL } } ,
{ & hf_llrp_access_stop_trig_type ,
{ " AccessSpec Stop trigger " , " llrp.param.access_stop_trig_type " , FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_operation_count ,
{ " Operation count value " , " llrp.param.operation_count " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_opspec_id ,
{ " OpSpec ID " , " llrp.param.opspec_id " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_conf_value ,
{ " Configuration value " , " llrp.param.conf_value " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_id_type ,
{ " ID type " , " llrp.param.id_type " , FT_UINT8 , BASE_DEC , VALS ( id_type ) , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_reader_id ,
{ " Reader ID " , " llrp.param.reader_id " , FT_UINT_BYTES , BASE_NONE , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_gpo_data ,
{ " GPO data " , " llrp.param.gpo_data " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x80 ,
NULL , HFILL } } ,
{ & hf_llrp_keepalive_trig_type ,
{ " KeepAlive trigger type " , " llrp.param.keepalive_trig_type " , FT_UINT8 , BASE_DEC , VALS ( keepalive_type ) , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_time_iterval ,
{ " Time interval " , " llrp.param.time_iterval " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_antenna_connected ,
{ " Antenna connected " , " llrp.param.antenna_connected " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x80 ,
NULL , HFILL } } ,
{ & hf_llrp_antenna_gain ,
{ " Antenna gain " , " llrp.param.antenna_gain " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_receiver_sense ,
{ " Receiver sensitivity " , " llrp.param.receiver_sense " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_channel_idx ,
{ " Channel index " , " llrp.param.channel_idx " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_gpi_config ,
{ " GPI config " , " llrp.param.gpi_config " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x80 ,
NULL , HFILL } } ,
{ & hf_llrp_gpi_state ,
{ " GPI state " , " llrp.param.gpi_state " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_hold_events_and_reports ,
{ " Hold events and reports upon reconnect " , " llrp.param.hold_events_and_reports " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x80 ,
NULL , HFILL } } ,
{ & hf_llrp_ro_report_trig ,
{ " RO report trigger " , " llrp.param.ro_report_trig " , FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_n_2 ,
{ " N " , " llrp.param.n_2 " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_enable_rospec_id ,
{ " Enable ROSpec ID " , " llrp.param.enable_rospec_id " , FT_BOOLEAN , 16 , TFS ( & tfs_yes_no ) , 0x8000 ,
NULL , HFILL } } ,
{ & hf_llrp_enable_spec_idx ,
{ " Enable spec index " , " llrp.param.enable_spec_idx " , FT_BOOLEAN , 16 , TFS ( & tfs_yes_no ) , 0x4000 ,
NULL , HFILL } } ,
{ & hf_llrp_enable_inv_spec_id ,
{ " Enable inventory spec ID " , " llrp.param.enable_inv_spec_id " , FT_BOOLEAN , 16 , TFS ( & tfs_yes_no ) , 0x2000 ,
NULL , HFILL } } ,
{ & hf_llrp_enable_antenna_id ,
{ " Enable antenna ID " , " llrp.param.enable_antenna_id " , FT_BOOLEAN , 16 , TFS ( & tfs_yes_no ) , 0x1000 ,
NULL , HFILL } } ,
{ & hf_llrp_enable_channel_idx ,
{ " Enable channel index " , " llrp.param.enable_channel_idx " , FT_BOOLEAN , 16 , TFS ( & tfs_yes_no ) , 0x0800 ,
NULL , HFILL } } ,
{ & hf_llrp_enable_peak_rssi ,
{ " Enable peak RSSI " , " llrp.param.enable_peak_rssi " , FT_BOOLEAN , 16 , TFS ( & tfs_yes_no ) , 0x0400 ,
NULL , HFILL } } ,
{ & hf_llrp_enable_first_seen ,
{ " Enable first seen timestamp " , " llrp.param.enable_first_seen " , FT_BOOLEAN , 16 , TFS ( & tfs_yes_no ) , 0x0200 ,
NULL , HFILL } } ,
{ & hf_llrp_enable_last_seen ,
{ " Enable last seen timestamp " , " llrp.param.enable_last_seen " , FT_BOOLEAN , 16 , TFS ( & tfs_yes_no ) , 0x0100 ,
NULL , HFILL } } ,
{ & hf_llrp_enable_seen_count ,
{ " Enable tag seen count " , " llrp.param.enable_seen_count " , FT_BOOLEAN , 16 , TFS ( & tfs_yes_no ) , 0x0080 ,
NULL , HFILL } } ,
{ & hf_llrp_enable_accessspec_id ,
{ " Enable AccessSpec ID " , " llrp.param.enable_accessspec_id " , FT_BOOLEAN , 16 , TFS ( & tfs_yes_no ) , 0x0040 ,
NULL , HFILL } } ,
{ & hf_llrp_access_report_trig ,
{ " Access report trigger " , " llrp.param.access_report_trig " , FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_length_bits ,
{ " Bit field length (bits) " , " llrp.param.length_bits " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_epc ,
{ " EPC " , " llrp.param.epc " , FT_BYTES , BASE_NONE , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_spec_idx ,
{ " Spec index " , " llrp.param.spec_idx " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_peak_rssi ,
{ " Peak RSSI " , " llrp.param.peak_rssi " , FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_tag_count ,
{ " Tag count " , " llrp.param.tag_count " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_bandwidth ,
{ " Bandwidth " , " llrp.param.bandwidth " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_average_rssi ,
{ " Average RSSI " , " llrp.param.average_rssi " , FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_notif_state ,
{ " Notification state " , " llrp.param.notif_state " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x80 ,
NULL , HFILL } } ,
{ & hf_llrp_event_type ,
{ " Event type " , " llrp.param.event_type " , FT_UINT16 , BASE_DEC | BASE_EXT_STRING , & event_type_ext , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_next_chan_idx ,
{ " Next channel index " , " llrp.param.next_chan_idx " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_roevent_type ,
{ " Event type " , " llrp.param.roevent_type " , FT_UINT8 , BASE_DEC , VALS ( roevent_type ) , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_prem_rospec_id ,
{ " Preempting ROSpec ID " , " llrp.param.prem_rospec_id " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_buffer_full_percentage ,
{ " Report Buffer percentage full " , " llrp.param.buffer_full_percentage " , FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_message ,
{ " Message " , " llrp.param.message " , FT_UINT_STRING , BASE_NONE , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_rfevent_type ,
{ " Event type " , " llrp.param.rfevent_type " , FT_UINT8 , BASE_DEC , VALS ( rfevent_type ) , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_aievent_type ,
{ " Event type " , " llrp.param.aievent_type " , FT_UINT8 , BASE_DEC , VALS ( aievent_type ) , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_antenna_event_type ,
{ " Event type " , " llrp.param.antenna_event_type " , FT_UINT8 , BASE_DEC , VALS ( antenna_event_type ) , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_conn_status ,
{ " Status " , " llrp.param.conn_status " , FT_UINT16 , BASE_DEC , VALS ( connection_status ) , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_loop_count ,
{ " Loop count " , " llrp.param.loop_count " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_status_code ,
{ " Status code " , " llrp.param.status_code " , FT_UINT16 , BASE_DEC | BASE_EXT_STRING , & status_code_ext , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_error_desc ,
{ " Error Description " , " llrp.param.error_desc " , FT_UINT_STRING , BASE_NONE , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_field_num ,
{ " Field number " , " llrp.param.field_num " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_error_code ,
{ " Error code " , " llrp.param.error_code " , FT_UINT16 , BASE_DEC | BASE_EXT_STRING , & status_code_ext , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_parameter_type ,
{ " Parameter type " , " llrp.param.parameter_type " , FT_UINT16 , BASE_DEC | BASE_EXT_STRING , & tlv_type_ext , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_can_support_block_erase ,
{ " Can support block erase " , " llrp.param.can_support_block_erase " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x80 ,
NULL , HFILL } } ,
{ & hf_llrp_can_support_block_write ,
{ " Can support block write " , " llrp.param.can_support_block_write " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x40 ,
NULL , HFILL } } ,
{ & hf_llrp_can_support_block_permalock ,
{ " Can support block permalock " , " llrp.param.can_support_block_permalock " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x20 ,
NULL , HFILL } } ,
{ & hf_llrp_can_support_tag_recomm ,
{ " Can support tag recommisioning " , " llrp.param.can_support_tag_recomm " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x10 ,
NULL , HFILL } } ,
{ & hf_llrp_can_support_UMI_method2 ,
{ " Can support UMI method 2 " , " llrp.param.can_support_UMI_method2 " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x08 ,
NULL , HFILL } } ,
{ & hf_llrp_can_support_XPC ,
{ " Can support XPC " , " llrp.param.can_support_XPC " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x04 ,
NULL , HFILL } } ,
{ & hf_llrp_max_num_filter_per_query ,
2017-04-18 22:27:28 +00:00
{ " Maximum number of select filters per query " , " llrp.param.max_num_filter_per_query " , FT_UINT16 , BASE_DEC | BASE_SPECIAL_VALS , VALS ( unique_no_limit ) , 0 ,
2012-09-09 01:39:27 +00:00
NULL , HFILL } } ,
{ & hf_llrp_mode_ident ,
{ " Mode identifier " , " llrp.param.mode_ident " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_DR ,
{ " DR " , " llrp.param.DR " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x80 ,
NULL , HFILL } } ,
{ & hf_llrp_hag_conformance ,
{ " EPC HAG T&C Conformance " , " llrp.param.hag_conformance " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x40 ,
NULL , HFILL } } ,
{ & hf_llrp_mod ,
{ " M " , " llrp.param.mod " , FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_flm ,
{ " Forward link modulation " , " llrp.param.flm " , FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_m ,
{ " Spectral mask indicator " , " llrp.param.m " , FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_bdr ,
{ " BDR " , " llrp.param.bdr " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_pie ,
{ " PIE " , " llrp.param.pie " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_min_tari ,
{ " Minimum tari " , " llrp.param.min_tari " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_max_tari ,
{ " Maximum tari " , " llrp.param.max_tari " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_step_tari ,
{ " Tari step " , " llrp.param.step_tari " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_inventory_state_aware ,
{ " Tag inventory state aware " , " llrp.param.inventory_state_aware " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x80 ,
NULL , HFILL } } ,
{ & hf_llrp_trunc ,
{ " T " , " llrp.param.trunc " , FT_UINT8 , BASE_DEC , NULL , 0xC0 ,
NULL , HFILL } } ,
{ & hf_llrp_mb ,
{ " MB " , " llrp.param.mb " , FT_UINT8 , BASE_DEC , NULL , 0xC0 ,
NULL , HFILL } } ,
{ & hf_llrp_pointer ,
{ " Pointer " , " llrp.param.pointer " , FT_UINT16 , BASE_DEC_HEX , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_tag_mask ,
{ " Tag mask " , " llrp.param.tag_mask " , FT_BYTES , BASE_NONE , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_aware_filter_target ,
{ " Target " , " llrp.param.aware_filter_target " , FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_aware_filter_action ,
{ " Action " , " llrp.param.aware_filter_action " , FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_unaware_filter_action ,
{ " Action " , " llrp.param.unaware_filter_action " , FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_mode_idx ,
{ " Mode index " , " llrp.param.mode_idx " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_tari ,
{ " Tari " , " llrp.param.tari " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_session ,
{ " Session " , " llrp.param.session " , FT_UINT8 , BASE_DEC , NULL , 0xC0 ,
NULL , HFILL } } ,
{ & hf_llrp_tag_population ,
{ " Tag population " , " llrp.param.tag_population " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_tag_transit_time ,
{ " Tag tranzit time " , " llrp.param.tag_transit_time " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_sing_i ,
{ " I " , " llrp.param.sing_i " , FT_BOOLEAN , 8 , TFS ( & tfs_state_a_b ) , 0x80 ,
NULL , HFILL } } ,
{ & hf_llrp_sing_s ,
{ " S " , " llrp.param.sing_s " , FT_BOOLEAN , 8 , TFS ( & tfs_sl ) , 0x40 ,
NULL , HFILL } } ,
{ & hf_llrp_sing_a ,
{ " S_All " , " llrp.param.sing_a " , FT_BOOLEAN , 8 , TFS ( & tfs_all_no ) , 0x20 ,
NULL , HFILL } } ,
{ & hf_llrp_match ,
{ " Match " , " llrp.param.match " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x20 ,
NULL , HFILL } } ,
{ & hf_llrp_tag_data ,
{ " Tag data " , " llrp.param.tag_data " , FT_BYTES , BASE_NONE , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_access_pass ,
{ " Access password " , " llrp.param.access_pass " , FT_UINT32 , BASE_DEC_HEX , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_word_pointer ,
{ " Word pointer " , " llrp.param.word_pointer " , FT_UINT16 , BASE_DEC_HEX , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_word_count ,
{ " Word count " , " llrp.param.word_count " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_write_data ,
{ " Write data " , " llrp.param.write_data " , FT_BYTES , BASE_NONE , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_kill_pass ,
{ " Killpassword " , " llrp.param.kill_pass " , FT_UINT32 , BASE_DEC_HEX , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_kill_3 ,
{ " 3 " , " llrp.param.kill_3 " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x04 ,
NULL , HFILL } } ,
{ & hf_llrp_kill_2 ,
{ " 2 " , " llrp.param.kill_2 " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x02 ,
NULL , HFILL } } ,
{ & hf_llrp_kill_l ,
{ " L " , " llrp.param.kill_l " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x01 ,
NULL , HFILL } } ,
{ & hf_llrp_privilege ,
{ " Privilege " , " llrp.param.privilege " , FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_data_field ,
{ " Data field " , " llrp.param.data_field " , FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_block_pointer ,
{ " Block pointer " , " llrp.param.block_pointer " , FT_UINT16 , BASE_DEC_HEX , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_block_mask ,
{ " Block mask " , " llrp.param.block_mask " , FT_BYTES , BASE_NONE , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_length_words ,
{ " Field Length (words) " , " llrp.param.length_words " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_block_range ,
{ " Block range " , " llrp.param.block_range " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_enable_crc ,
{ " Enable CRC " , " llrp.param.enable_crc " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x80 ,
NULL , HFILL } } ,
{ & hf_llrp_enable_pc ,
{ " Enable PC bits " , " llrp.param.enable_pc " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x40 ,
NULL , HFILL } } ,
{ & hf_llrp_enable_xpc ,
{ " Enable XPC bits " , " llrp.param.enable_xpc " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x20 ,
NULL , HFILL } } ,
{ & hf_llrp_pc_bits ,
{ " PC bits " , " llrp.param.pc_bits " , FT_UINT16 , BASE_HEX , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_xpc_w1 ,
{ " XPC-W1 " , " llrp.param.xpc_w1 " , FT_UINT16 , BASE_HEX , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_xpc_w2 ,
{ " XPC-W2 " , " llrp.param.xpc_w2 " , FT_UINT16 , BASE_HEX , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_crc ,
{ " CRC " , " llrp.param.crc " , FT_UINT16 , BASE_HEX , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_num_coll ,
{ " Number of collisions " , " llrp.param.num_coll " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_num_empty ,
{ " Number of empty slots " , " llrp.param.num_empty " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_access_result ,
{ " Result " , " llrp.param.access_result " , FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_read_data ,
{ " Read data " , " llrp.param.read_data " , FT_BYTES , BASE_NONE , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_num_words_written ,
{ " Number of words written " , " llrp.param.num_words_written " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_permlock_status ,
{ " Read data " , " llrp.param.permlock_status " , FT_BYTES , BASE_NONE , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_vendor_id ,
{ " Vendor ID " , " llrp.param.vendor_id " , FT_UINT32 , BASE_DEC , VALS ( llrp_vendors ) , 0 ,
NULL , HFILL } } ,
2017-03-16 19:31:24 +00:00
{ & hf_llrp_vendor_unknown ,
2017-03-20 20:28:44 +00:00
{ " Vendor Unknown " , " llrp.param.vendor_unknown " , FT_BYTES , BASE_NONE , NULL , 0 ,
2017-03-16 19:31:24 +00:00
NULL , HFILL } } ,
2012-09-09 01:39:27 +00:00
{ & hf_llrp_impinj_param_type ,
{ " Impinj parameter subtype " , " llrp.param.impinj_param_type " , FT_UINT32 , BASE_DEC | BASE_EXT_STRING , & impinj_param_type_ext , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_save_config ,
{ " Save configuration " , " llrp.param.save_config " , FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x80 ,
NULL , HFILL } } ,
{ & hf_llrp_impinj_req_data ,
{ " Requested data " , " llrp.param.impinj_req_data " , FT_UINT32 , BASE_DEC | BASE_EXT_STRING , & impinj_req_data_ext , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_impinj_reg_region ,
{ " Regulatory region " , " llrp.param.impinj_reg_region " , FT_UINT16 , BASE_DEC | BASE_EXT_STRING , & impinj_reg_region_ext , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_impinj_search_mode ,
{ " Inventory search mode " , " llrp.param.impinj_search_mode " , FT_UINT16 , BASE_DEC , VALS ( impinj_search_mode ) , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_impinj_en_tag_dir ,
{ " Enable tag direction " , " llrp.param.impinj_en_tag_dir " , FT_BOOLEAN , 16 , TFS ( & tfs_yes_no ) , 0x8000 ,
NULL , HFILL } } ,
{ & hf_llrp_impinj_antenna_conf ,
{ " Antenna configuration " , " llrp.param.impinj_antenna_conf " , FT_UINT16 , BASE_DEC , VALS ( impinj_ant_conf ) , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_decision_time ,
{ " Decision timestamp " , " llrp.param.decision_time " , FT_UINT64 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_impinj_tag_dir ,
{ " Tag direction " , " llrp.param.impinj_tag_dir " , FT_UINT16 , BASE_DEC , VALS ( impinj_tag_dir ) , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_confidence ,
{ " Confidence " , " llrp.param.confidence " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_impinj_fix_freq_mode ,
{ " Fixed frequency mode " , " llrp.param.impinj_fix_freq_mode " , FT_UINT16 , BASE_DEC , VALS ( impinj_fix_freq_mode ) , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_num_channels ,
{ " Number of channels " , " llrp.param.num_channels " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_channel ,
{ " Channel " , " llrp.param.channel " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_impinj_reduce_power_mode ,
{ " Recuced power mode " , " llrp.param.impinj_reduce_power_mode " , FT_UINT16 , BASE_DEC , VALS ( impinj_boolean ) , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_impinj_low_duty_mode ,
{ " Low duty cycle mode " , " llrp.param.impinj_low_duty_mode " , FT_UINT16 , BASE_DEC , VALS ( impinj_boolean ) , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_empty_field_timeout ,
{ " Empty field timeout " , " llrp.param.empty_field_timeout " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_field_ping_interval ,
{ " Field ping interval " , " llrp.param.field_ping_interval " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_model_name ,
{ " Model name " , " llrp.param.model_name " , FT_UINT_STRING , BASE_NONE , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_serial_number ,
{ " Serial number " , " llrp.param.serial_number " , FT_UINT_STRING , BASE_NONE , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_soft_ver ,
{ " Softwave version " , " llrp.param.soft_ver " , FT_UINT_STRING , BASE_NONE , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_firm_ver ,
{ " Firmware version " , " llrp.param.firm_ver " , FT_UINT_STRING , BASE_NONE , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_fpga_ver ,
{ " FPGA version " , " llrp.param.fpga_ver " , FT_UINT_STRING , BASE_NONE , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_pcba_ver ,
{ " PCBA version " , " llrp.param.pcba_ver " , FT_UINT_STRING , BASE_NONE , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_height_thresh ,
{ " Height threshold " , " llrp.param.height_thresh " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_zero_motion_thresh ,
{ " Zero motion threshold " , " llrp.param.zero_motion_thresh " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_board_manufacturer ,
{ " Board manufacturer " , " llrp.param.board_manufacturer " , FT_UINT_STRING , BASE_NONE , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_fw_ver_hex ,
{ " Firmware version " , " llrp.param.fw_ver_hex " , FT_UINT_BYTES , BASE_NONE , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_hw_ver_hex ,
{ " Hardware version " , " llrp.param.hw_ver_hex " , FT_UINT_BYTES , BASE_NONE , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_gpi_debounce ,
{ " GPI debounce timer Msec " , " llrp.param.gpi_debounce " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_temperature ,
{ " Temperature " , " llrp.param.temperature " , FT_INT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_impinj_link_monitor_mode ,
{ " Link monitor mode " , " llrp.param.impinj_link_monitor_mode " , FT_UINT16 , BASE_DEC , VALS ( impinj_boolean ) , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_link_down_thresh ,
{ " Link down threshold " , " llrp.param.link_down_thresh " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_impinj_report_buff_mode ,
{ " Report buffer mode " , " llrp.param.impinj_report_buff_mode " , FT_UINT16 , BASE_DEC , VALS ( impinj_report_buff_mode ) , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_permalock_result ,
{ " Result " , " llrp.param.permalock_result " , FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & impinj_permalock_result_ext , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_block_permalock_result ,
{ " Result " , " llrp.param.block_permalock_result " , FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & impinj_block_permalock_result_ext , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_impinj_data_profile ,
{ " Data profile " , " llrp.param.impinj_data_profile " , FT_UINT8 , BASE_DEC , VALS ( impinj_data_profile ) , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_impinj_access_range ,
{ " Access range " , " llrp.param.impinj_access_range " , FT_UINT8 , BASE_DEC , VALS ( impinj_access_range ) , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_impinj_persistence ,
{ " Persistence " , " llrp.param.impinj_persistence " , FT_UINT8 , BASE_DEC , VALS ( impinj_persistence ) , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_set_qt_config_result ,
{ " Result " , " llrp.param.set_qt_config_result " , FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & impinj_set_qt_config_result_ext , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_get_qt_config_result ,
{ " Result " , " llrp.param.get_qt_config_result " , FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & impinj_get_qt_config_result_ext , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_impinj_serialized_tid_mode ,
{ " Serialized TID Mode " , " llrp.param.impinj_serialized_tid_mode " , FT_UINT16 , BASE_DEC , VALS ( impinj_boolean ) , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_impinj_rf_phase_mode ,
{ " RF phase angle mode " , " llrp.param.impinj_rf_phase_mode " , FT_UINT16 , BASE_DEC , VALS ( impinj_boolean ) , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_impinj_peak_rssi_mode ,
{ " Peak RSSI mode " , " llrp.param.impinj_peak_rssi_mode " , FT_UINT16 , BASE_DEC , VALS ( impinj_boolean ) , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_impinj_gps_coordinates_mode ,
{ " GPS coordinates mode " , " llrp.param.impinj_gps_coordinates_mode " , FT_UINT16 , BASE_DEC , VALS ( impinj_boolean ) , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_impinj_tid ,
{ " TID " , " llrp.param.impinj_tid " , FT_UINT_BYTES , BASE_NONE , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_phase_angle ,
{ " Phase angle " , " llrp.param.phase_angle " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_rssi ,
{ " RSSI " , " llrp.param.rssi " , FT_INT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_latitude ,
{ " Latitude " , " llrp.param.latitude " , FT_INT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_longitude ,
{ " Longitude " , " llrp.param.longitude " , FT_INT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_gga_sentence ,
{ " GGA sentence " , " llrp.param.gga_sentence " , FT_UINT_STRING , BASE_NONE , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_rmc_sentence ,
{ " RMC sentence " , " llrp.param.rmc_sentence " , FT_UINT_STRING , BASE_NONE , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_impinj_optim_read_mode ,
{ " Optimized read mode " , " llrp.param.impinj_optim_read_mode " , FT_UINT16 , BASE_DEC , VALS ( impinj_boolean ) , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_impinj_rf_doppler_mode ,
{ " RF doppler frequency mode " , " llrp.param.impinj_rf_doppler_mode " , FT_UINT16 , BASE_DEC , VALS ( impinj_boolean ) , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_retry_count ,
{ " Retry count " , " llrp.param.retry_count " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_impinj_access_spec_ordering ,
{ " AccessSpec ordering " , " llrp.param.impinj_access_spec_ordering " , FT_UINT16 , BASE_DEC , VALS ( impinj_access_spec_ordering ) , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_impinj_gpo_mode ,
{ " GPO mode " , " llrp.param.impinj_gpo_mode " , FT_UINT16 , BASE_DEC | BASE_EXT_STRING , & impinj_gpo_mode_ext , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_gpo_pulse_dur ,
{ " GPO pulse duration " , " llrp.param.gpo_pulse_dur " , FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
2014-07-10 11:08:34 +00:00
{ & hf_llrp_impinj_hub_id ,
{ " Hub ID " , " llrp.impinj_hub_id " , FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_impinj_hub_fault_type ,
{ " Hub fault type " , " llrp.param.impinj_hub_fault_type " , FT_UINT16 , BASE_DEC | BASE_EXT_STRING , & impinj_hub_fault_type_ext , 0 ,
NULL , HFILL } } ,
{ & hf_llrp_impinj_hub_connected_type ,
{ " Hub connected type " , " llrp.param.impinj_hub_connected_type " , FT_UINT16 , BASE_DEC | BASE_EXT_STRING , & impinj_hub_connected_type_ext , 0 ,
NULL , HFILL } } ,
2012-05-02 11:05:35 +00:00
} ;
/* Setup protocol subtree array */
static gint * ett [ ] = {
& ett_llrp ,
& ett_llrp_param
} ;
2013-09-02 23:32:31 +00:00
static ei_register_info ei [ ] = {
2013-09-03 06:31:53 +00:00
{ & ei_llrp_invalid_length , { " llrp.invalid_length_of_string_claimed " , PI_MALFORMED , PI_ERROR , " invalid length of string: claimed %u, available %u. " , EXPFILL } } ,
2013-09-02 23:32:31 +00:00
{ & ei_llrp_req_conf , { " llrp.req_conf.invalid " , PI_PROTOCOL , PI_ERROR , " Unrecognized configuration request: %u " , EXPFILL } } ,
} ;
expert_module_t * expert_llrp ;
2012-05-02 11:05:35 +00:00
/* Register the protocol name and description */
proto_llrp = proto_register_protocol ( " Low Level Reader Protocol " ,
" LLRP " , " llrp " ) ;
/* Required function calls to register the header fields and subtrees used */
proto_register_field_array ( proto_llrp , hf , array_length ( hf ) ) ;
proto_register_subtree_array ( ett , array_length ( ett ) ) ;
2013-09-02 23:32:31 +00:00
expert_llrp = expert_register_protocol ( proto_llrp ) ;
expert_register_field_array ( expert_llrp , ei , array_length ( ei ) ) ;
2012-05-02 11:05:35 +00:00
}
void
proto_reg_handoff_llrp ( void )
{
dissector_handle_t llrp_handle ;
2015-12-09 03:49:44 +00:00
llrp_handle = create_dissector_handle ( dissect_llrp , proto_llrp ) ;
2016-10-07 20:25:01 +00:00
dissector_add_uint_with_preference ( " tcp.port " , LLRP_PORT , llrp_handle ) ;
2012-05-02 11:05:35 +00:00
}
/*
* Editor modelines - http : //www.wireshark.org/tools/modelines.html
*
* Local variables :
* c - basic - offset : 4
2012-08-16 13:17:48 +00:00
* tab - width : 8
2012-05-02 11:05:35 +00:00
* indent - tabs - mode : nil
* End :
*
2012-08-16 13:17:48 +00:00
* vi : set shiftwidth = 4 tabstop = 8 expandtab :
* : indentSize = 4 : tabSize = 8 : noTabs = true :
2012-05-02 11:05:35 +00:00
*/