diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-09-19 04:14:26 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-09-19 04:14:26 +0000 |
commit | c4e8a3222648fcf22ca207f1815ebbf7cd144eeb (patch) | |
tree | 93d5c6aa93d9987680dd1adad5685e2ad698f223 /epan/dissectors/packet-btatt.c | |
parent | Adding upstream version 4.2.6. (diff) | |
download | wireshark-upstream.tar.xz wireshark-upstream.zip |
Adding upstream version 4.4.0.upstream/4.4.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'epan/dissectors/packet-btatt.c')
-rw-r--r-- | epan/dissectors/packet-btatt.c | 3686 |
1 files changed, 1822 insertions, 1864 deletions
diff --git a/epan/dissectors/packet-btatt.c b/epan/dissectors/packet-btatt.c index ddd2439d..31b763d0 100644 --- a/epan/dissectors/packet-btatt.c +++ b/epan/dissectors/packet-btatt.c @@ -38,1163 +38,1163 @@ /* packet reassembly */ static reassembly_table msg_reassembly_table; -/* end packet reassebly */ +/* end packet reassembly */ /* Initialize the protocol and registered fields */ -static int proto_btatt = -1; -static int proto_btgatt = -1; - -static int hf_btatt_opcode = -1; -static int hf_btatt_handle = -1; -static int hf_btatt_starting_handle = -1; -static int hf_btatt_ending_handle = -1; -static int hf_btatt_group_end_handle = -1; -static int hf_btatt_value = -1; -static int hf_btatt_req_opcode_in_error = -1; -static int hf_btatt_handle_in_error = -1; -static int hf_btatt_error_code = -1; -static int hf_btatt_error_code_aios = -1; -static int hf_btatt_error_code_ans = -1; -static int hf_btatt_error_code_bms = -1; -static int hf_btatt_error_code_cgms = -1; -static int hf_btatt_error_code_cps = -1; -static int hf_btatt_error_code_cscs = -1; -static int hf_btatt_error_code_cts = -1; -static int hf_btatt_error_code_ess = -1; -static int hf_btatt_error_code_gls = -1; -static int hf_btatt_error_code_hps = -1; -static int hf_btatt_error_code_hrs = -1; -static int hf_btatt_error_code_hts = -1; -static int hf_btatt_error_code_ips = -1; -static int hf_btatt_error_code_ots = -1; -static int hf_btatt_error_code_rscs = -1; -static int hf_btatt_error_code_uds = -1; -static int hf_btatt_service_uuid16 = -1; -static int hf_btatt_service_uuid128 = -1; -static int hf_btatt_characteristic_uuid16 = -1; -static int hf_btatt_characteristic_uuid128 = -1; -static int hf_btatt_uuid16 = -1; -static int hf_btatt_uuid128 = -1; -static int hf_btatt_client_rx_mtu = -1; -static int hf_btatt_server_rx_mtu = -1; -static int hf_btatt_uuid_format = -1; -static int hf_btatt_length = -1; -static int hf_btatt_offset = -1; -static int hf_btatt_flags = -1; -static int hf_btatt_sign_counter = -1; -static int hf_btatt_signature = -1; -static int hf_btatt_attribute_data = -1; -static int hf_btatt_handles_info = -1; -static int hf_btatt_opcode_authentication_signature = -1; -static int hf_btatt_opcode_command = -1; -static int hf_btatt_opcode_method = -1; -static int hf_btatt_characteristic_properties = -1; -static int hf_btatt_characteristic_value_handle = -1; -static int hf_btatt_characteristic_properties_extended_properties = -1; -static int hf_btatt_characteristic_properties_authenticated_signed_writes = -1; -static int hf_btatt_characteristic_properties_indicate = -1; -static int hf_btatt_characteristic_properties_notify = -1; -static int hf_btatt_characteristic_properties_write = -1; -static int hf_btatt_characteristic_properties_write_without_response = -1; -static int hf_btatt_characteristic_properties_read = -1; -static int hf_btatt_characteristic_properties_broadcast = -1; -static int hf_btatt_information_data = -1; -static int hf_btatt_included_service_handle = -1; -static int hf_btatt_characteristic_configuration_client = -1; -static int hf_btatt_characteristic_configuration_client_reserved = -1; -static int hf_btatt_characteristic_configuration_client_indication = -1; -static int hf_btatt_characteristic_configuration_client_notification = -1; -static int hf_btatt_characteristic_configuration_server = -1; -static int hf_btatt_characteristic_configuration_server_reserved = -1; -static int hf_btatt_characteristic_configuration_server_broadcast = -1; -static int hf_btatt_hogp_protocol_mode = -1; -static int hf_btatt_hogp_bcd_hid = -1; -static int hf_btatt_hogp_b_country_code = -1; -static int hf_btatt_hogp_flags = -1; -static int hf_btatt_hogp_flags_reserved = -1; -static int hf_btatt_hogp_flags_normally_connectable = -1; -static int hf_btatt_hogp_flags_remote_wake = -1; -static int hf_btatt_hogp_hid_control_point_command = -1; -static int hf_btatt_report_reference_report_id = -1; -static int hf_btatt_report_reference_report_type = -1; -static int hf_btatt_characteristic_user_description = -1; -static int hf_btatt_characteristic_extended_properties = -1; -static int hf_btatt_characteristic_extended_properties_reserved = -1; -static int hf_btatt_characteristic_extended_properties_writable_auxiliaries = -1; -static int hf_btatt_characteristic_extended_properties_reliable_write = -1; -static int hf_btatt_characteristic_presentation_format = -1; -static int hf_btatt_characteristic_presentation_exponent = -1; -static int hf_btatt_characteristic_presentation_unit = -1; -static int hf_btatt_characteristic_presentation_namespace = -1; -static int hf_btatt_characteristic_presentation_namespace_description_btsig = -1; -static int hf_btatt_characteristic_presentation_namespace_description = -1; -static int hf_btatt_esp_trigger_logic = -1; -static int hf_btatt_esp_condition = -1; -static int hf_btatt_esp_operand = -1; -static int hf_btatt_esp_flags = -1; -static int hf_btatt_esp_sampling_function = -1; -static int hf_btatt_esp_measurement_period = -1; -static int hf_btatt_esp_update_interval = -1; -static int hf_btatt_esp_application = -1; -static int hf_btatt_esp_measurement_uncertainty = -1; -static int hf_btatt_device_name = -1; -static int hf_btatt_appearance = -1; -static int hf_btatt_appearance_category = -1; -static int hf_btatt_appearance_subcategory = -1; -static int hf_btatt_appearance_subcategory_watch = -1; -static int hf_btatt_appearance_subcategory_thermometer = -1; -static int hf_btatt_appearance_subcategory_heart_rate = -1; -static int hf_btatt_appearance_subcategory_blood_pressure = -1; -static int hf_btatt_appearance_subcategory_hid = -1; -static int hf_btatt_appearance_subcategory_running_walking_sensor = -1; -static int hf_btatt_appearance_subcategory_cycling = -1; -static int hf_btatt_appearance_subcategory_pulse_oximeter = -1; -static int hf_btatt_appearance_subcategory_personal_mobility_device = -1; -static int hf_btatt_appearance_subcategory_insulin_pump = -1; -static int hf_btatt_appearance_subcategory_outdoor_sports_activity = -1; -static int hf_btatt_peripheral_privacy_flag = -1; -static int hf_btatt_minimum_connection_interval = -1; -static int hf_btatt_maximum_connection_interval = -1; -static int hf_btatt_slave_latency = -1; -static int hf_btatt_connection_supervision_timeout_multiplier = -1; -static int hf_btatt_reconnection_address = -1; -static int hf_btatt_alert_level = -1; -static int hf_btatt_tx_power_level = -1; -static int hf_btatt_year = -1; -static int hf_btatt_month = -1; -static int hf_btatt_day = -1; -static int hf_btatt_hours = -1; -static int hf_btatt_minutes = -1; -static int hf_btatt_seconds = -1; -static int hf_btatt_day_of_week = -1; -static int hf_btatt_fractions100 = -1; -static int hf_btatt_fractions256 = -1; -static int hf_btatt_dst_offset = -1; -static int hf_btatt_model_number_string = -1; -static int hf_btatt_serial_number_string = -1; -static int hf_btatt_firmware_revision_string = -1; -static int hf_btatt_hardware_revision_string = -1; -static int hf_btatt_software_revision_string = -1; -static int hf_btatt_manufacturer_string = -1; -static int hf_btatt_system_id_manufacturer_identifier = -1; -static int hf_btatt_system_id_organizationally_unique_identifier = -1; -static int hf_btatt_timezone = -1; -static int hf_btatt_time_accuracy = -1; -static int hf_btatt_time_source = -1; -static int hf_btatt_time_days_since_update = -1; -static int hf_btatt_time_hours_since_update = -1; -static int hf_btatt_time_update_control_point = -1; -static int hf_btatt_time_current_state = -1; -static int hf_btatt_time_result = -1; -static int hf_btatt_battery_level = -1; -static int hf_btatt_battery_power_state = -1; -static int hf_btatt_battery_power_state_present = -1; -static int hf_btatt_battery_power_state_discharging = -1; -static int hf_btatt_battery_power_state_charging = -1; -static int hf_btatt_battery_power_state_level = -1; -static int hf_btatt_temperature_type = -1; -static int hf_btatt_measurement_interval = -1; -static int hf_btatt_time_adjust_reason = -1; -static int hf_btatt_time_adjust_reason_reserved = -1; -static int hf_btatt_time_adjust_reason_change_of_dst = -1; -static int hf_btatt_time_adjust_reason_change_of_timezone = -1; -static int hf_btatt_time_adjust_reason_external_reference_time_update = -1; -static int hf_btatt_time_adjust_reason_manual_time_update = -1; -static int hf_btatt_magnetic_declination = -1; -static int hf_btatt_scan_refresh = -1; -static int hf_btatt_body_sensor_location = -1; -static int hf_btatt_heart_rate_control_point = -1; -static int hf_btatt_alert_status = -1; -static int hf_btatt_alert_status_reserved = -1; -static int hf_btatt_alert_status_display_alert_status = -1; -static int hf_btatt_alert_status_vibrate_state = -1; -static int hf_btatt_alert_status_ringer_state = -1; -static int hf_btatt_ringer_control_point = -1; -static int hf_btatt_ringer_setting = -1; -static int hf_btatt_alert_category_id_bitmask_1 = -1; -static int hf_btatt_alert_category_id_bitmask_1_schedule = -1; -static int hf_btatt_alert_category_id_bitmask_1_voice_mail = -1; -static int hf_btatt_alert_category_id_bitmask_1_sms_mms = -1; -static int hf_btatt_alert_category_id_bitmask_1_missed_call = -1; -static int hf_btatt_alert_category_id_bitmask_1_call = -1; -static int hf_btatt_alert_category_id_bitmask_1_news = -1; -static int hf_btatt_alert_category_id_bitmask_1_email = -1; -static int hf_btatt_alert_category_id_bitmask_1_simple_alert = -1; -static int hf_btatt_alert_category_id_bitmask_2 = -1; -static int hf_btatt_alert_category_id_bitmask_2_reserved = -1; -static int hf_btatt_alert_category_id_bitmask_2_instant_message = -1; -static int hf_btatt_alert_category_id_bitmask_2_high_prioritized_alert = -1; -static int hf_btatt_alert_category_id = -1; -static int hf_btatt_alert_command_id = -1; -static int hf_btatt_alert_unread_count = -1; -static int hf_btatt_alert_number_of_new_alert = -1; -static int hf_btatt_alert_text_string_information = -1; -static int hf_btatt_blood_pressure_feature = -1; -static int hf_btatt_blood_pressure_feature_reserved = -1; -static int hf_btatt_blood_pressure_feature_multiple_bond = -1; -static int hf_btatt_blood_pressure_feature_measurement_position_detection = -1; -static int hf_btatt_blood_pressure_feature_puls_rate_range = -1; -static int hf_btatt_blood_pressure_feature_irregular_pulse_detection = -1; -static int hf_btatt_blood_pressure_feature_cuff_fit_detection = -1; -static int hf_btatt_blood_pressure_feature_body_movement_detection = -1; -static int hf_btatt_le_scan_interval = -1; -static int hf_btatt_le_scan_window = -1; -static int hf_btatt_pnp_id_vendor_id_source = -1; -static int hf_btatt_pnp_id_vendor_id = -1; -static int hf_btatt_pnp_id_vendor_id_bluetooth_sig = -1; -static int hf_btatt_pnp_id_vendor_id_usb_forum = -1; -static int hf_btatt_pnp_id_product_id = -1; -static int hf_btatt_pnp_id_product_version = -1; -static int hf_btatt_glucose_feature = -1; -static int hf_btatt_glucose_feature_reserved = -1; -static int hf_btatt_glucose_feature_multiple_bond = -1; -static int hf_btatt_glucose_feature_time_fault = -1; -static int hf_btatt_glucose_feature_general_device_fault = -1; -static int hf_btatt_glucose_feature_sensor_read_interrupt_detection = -1; -static int hf_btatt_glucose_feature_sensor_temperature_high_low_detection = -1; -static int hf_btatt_glucose_feature_sensor_result_high_low_detection = -1; -static int hf_btatt_glucose_feature_sensor_strip_type_error_detection = -1; -static int hf_btatt_glucose_feature_sensor_strip_insertion_error_detection = -1; -static int hf_btatt_glucose_feature_sensor_sample_size = -1; -static int hf_btatt_glucose_feature_sensor_malfunction_detection = -1; -static int hf_btatt_glucose_feature_low_battery_detection_during_measurement = -1; -static int hf_btatt_rsc_feature = -1; -static int hf_btatt_rsc_feature_reserved = -1; -static int hf_btatt_rsc_feature_multiple_sensor_locations = -1; -static int hf_btatt_rsc_feature_calibration_procedure = -1; -static int hf_btatt_rsc_feature_walking_or_running_status = -1; -static int hf_btatt_rsc_feature_total_distance_measurement = -1; -static int hf_btatt_rsc_feature_instantaneous_stride_length_measurement = -1; -static int hf_btatt_csc_feature = -1; -static int hf_btatt_csc_feature_reserved = -1; -static int hf_btatt_csc_feature_multiple_sensor_locations = -1; -static int hf_btatt_csc_feature_crank_revolution_data = -1; -static int hf_btatt_csc_feature_wheel_revolution_data = -1; -static int hf_btatt_sensor_location = -1; -static int hf_btatt_elevation = -1; -static int hf_btatt_pressure = -1; -static int hf_btatt_temperature = -1; -static int hf_btatt_humidity = -1; -static int hf_btatt_true_wind_speed = -1; -static int hf_btatt_true_wind_direction = -1; -static int hf_btatt_apparent_wind_speed = -1; -static int hf_btatt_apparent_wind_direction = -1; -static int hf_btatt_gust_factor = -1; -static int hf_btatt_pollen_concentration = -1; -static int hf_btatt_uv_index = -1; -static int hf_btatt_irradiance = -1; -static int hf_btatt_rainfall = -1; -static int hf_btatt_wind_chill = -1; -static int hf_btatt_heart_index = -1; -static int hf_btatt_dew_point = -1; -static int hf_btatt_descriptor_value_changed_flags = -1; -static int hf_btatt_descriptor_value_changed_flags_reserved = -1; -static int hf_btatt_descriptor_value_changed_flags_change_to_characteristic_user_description_descriptor = -1; -static int hf_btatt_descriptor_value_changed_flags_change_to_es_measurement_descriptor = -1; -static int hf_btatt_descriptor_value_changed_flags_change_to_es_configuration_descriptor = -1; -static int hf_btatt_descriptor_value_changed_flags_change_to_one_or_more_es_trigger_setting_descriptors = -1; -static int hf_btatt_descriptor_value_changed_flags_source_of_change = -1; -static int hf_btatt_aerobic_heart_rate_lower_limit = -1; -static int hf_btatt_aerobic_threshold = -1; -static int hf_btatt_age = -1; -static int hf_btatt_anaerobic_heart_rate_lower_limit = -1; -static int hf_btatt_anaerobic_heart_rate_upper_limit = -1; -static int hf_btatt_anaerobic_threshold = -1; -static int hf_btatt_aerobic_heart_rate_upper_limit = -1; -static int hf_btatt_email_address = -1; -static int hf_btatt_fat_burn_heart_rate_lower_limit = -1; -static int hf_btatt_fat_burn_heart_rate_upper_limit = -1; -static int hf_btatt_first_name = -1; -static int hf_btatt_five_zone_heart_rate_limits_very_light_light_limit = -1; -static int hf_btatt_five_zone_heart_rate_limits_light_moderate_limit = -1; -static int hf_btatt_five_zone_heart_rate_limits_moderate_hard_limit = -1; -static int hf_btatt_five_zone_heart_rate_limits_hard_maximum_limit = -1; -static int hf_btatt_gender = -1; -static int hf_btatt_heart_rate_max = -1; -static int hf_btatt_height = -1; -static int hf_btatt_hip_circumference = -1; -static int hf_btatt_last_name = -1; -static int hf_btatt_maximum_recommended_heart_rate = -1; -static int hf_btatt_resting_heart_rate = -1; -static int hf_btatt_sport_type_for_aerobic_and_anaerobic_thresholds = -1; -static int hf_btatt_three_zone_heart_rate_limits_light_moderate = -1; -static int hf_btatt_three_zone_heart_rate_limits_moderate_hard = -1; -static int hf_btatt_two_zone_heart_rate_limit_fat_burn_fitness = -1; -static int hf_btatt_vo2_max =-1; -static int hf_btatt_waist_circumference =-1; -static int hf_btatt_weight =-1; -static int hf_btatt_database_change_increment =-1; -static int hf_btatt_user_index = -1; -static int hf_btatt_magnetic_flux_density_x = -1; -static int hf_btatt_magnetic_flux_density_y = -1; -static int hf_btatt_magnetic_flux_density_z = -1; -static int hf_btatt_language = -1; -static int hf_btatt_barometric_pressure_trend = -1; -static int hf_btatt_central_address_resolution = -1; -static int hf_btatt_resolvable_private_address = -1; -static int hf_btatt_cycling_power_feature = -1; -static int hf_btatt_cycling_power_feature_reserved = -1; -static int hf_btatt_cycling_power_feature_factory_calibration_date = -1; -static int hf_btatt_cycling_power_feature_instantaneous_measurement_direction = -1; -static int hf_btatt_cycling_power_feature_sensor_measurement_context = -1; -static int hf_btatt_cycling_power_feature_span_length_adjustment = -1; -static int hf_btatt_cycling_power_feature_chain_weight_adjustment = -1; -static int hf_btatt_cycling_power_feature_chain_length_adjustment = -1; -static int hf_btatt_cycling_power_feature_crank_length_adjustment = -1; -static int hf_btatt_cycling_power_feature_multiple_sensor_locations = -1; -static int hf_btatt_cycling_power_feature_cycling_power_measurement_characteristic_content_masking = -1; -static int hf_btatt_cycling_power_feature_offset_compensation = -1; -static int hf_btatt_cycling_power_feature_offset_compensation_indicator = -1; -static int hf_btatt_cycling_power_feature_accumulated_energy = -1; -static int hf_btatt_cycling_power_feature_top_and_bottom_dead_spot_angles = -1; -static int hf_btatt_cycling_power_feature_extreme_angles = -1; -static int hf_btatt_cycling_power_feature_extreme_magnitudes = -1; -static int hf_btatt_cycling_power_feature_crank_revolution_data = -1; -static int hf_btatt_cycling_power_feature_wheel_revolution_data = -1; -static int hf_btatt_cycling_power_feature_accumulated_torque = -1; -static int hf_btatt_cycling_power_feature_pedal_power_balance = -1; -static int hf_btatt_ln_feature = -1; -static int hf_btatt_ln_feature_reserved = -1; -static int hf_btatt_ln_feature_position_status = -1; -static int hf_btatt_ln_feature_elevation_setting = -1; -static int hf_btatt_ln_feature_fix_rate_setting = -1; -static int hf_btatt_ln_feature_location_and_speed_characteristic_content_masking = -1; -static int hf_btatt_ln_feature_vertical_dilution_of_precision = -1; -static int hf_btatt_ln_feature_horizontal_dilution_of_precision = -1; -static int hf_btatt_ln_feature_estimated_vertical_position_error = -1; -static int hf_btatt_ln_feature_estimated_horizontal_position_error = -1; -static int hf_btatt_ln_feature_time_to_first_fix = -1; -static int hf_btatt_ln_feature_number_of_beacons_in_view = -1; -static int hf_btatt_ln_feature_number_of_beacons_in_solution = -1; -static int hf_btatt_ln_feature_estimated_time_of_arrival = -1; -static int hf_btatt_ln_feature_remaining_vertical_distance = -1; -static int hf_btatt_ln_feature_remaining_distance = -1; -static int hf_btatt_ln_feature_utc_time = -1; -static int hf_btatt_ln_feature_rolling_time = -1; -static int hf_btatt_ln_feature_heading = -1; -static int hf_btatt_ln_feature_elevation = -1; -static int hf_btatt_ln_feature_location = -1; -static int hf_btatt_ln_feature_total_distance = -1; -static int hf_btatt_ln_feature_instantaneous_speed = -1; -static int hf_btatt_body_composition_feature = -1; -static int hf_btatt_body_composition_feature_reserved = -1; -static int hf_btatt_body_composition_feature_height_measurement_resolution = -1; -static int hf_btatt_body_composition_feature_mass_measurement_resolution = -1; -static int hf_btatt_body_composition_feature_height = -1; -static int hf_btatt_body_composition_feature_weight = -1; -static int hf_btatt_body_composition_feature_impedance = -1; -static int hf_btatt_body_composition_feature_body_water_mass = -1; -static int hf_btatt_body_composition_feature_soft_lean_mass = -1; -static int hf_btatt_body_composition_feature_fat_free_mass = -1; -static int hf_btatt_body_composition_feature_muscle_mass = -1; -static int hf_btatt_body_composition_feature_muscle_percentage = -1; -static int hf_btatt_body_composition_feature_basal_metabolism = -1; -static int hf_btatt_body_composition_feature_multiple_users = -1; -static int hf_btatt_body_composition_feature_timestamp = -1; -static int hf_btatt_weight_scale_feature = -1; -static int hf_btatt_weight_scale_feature_reserved = -1; -static int hf_btatt_weight_scale_feature_height_measurement_resolution = -1; -static int hf_btatt_weight_scale_feature_weight_measurement_resolution = -1; -static int hf_btatt_weight_scale_feature_bmi = -1; -static int hf_btatt_weight_scale_feature_multiple_users = -1; -static int hf_btatt_weight_scale_feature_timestamp = -1; -static int hf_btatt_glucose_measurement_flags = -1; -static int hf_btatt_glucose_measurement_flags_reserved = -1; -static int hf_btatt_glucose_measurement_flags_context_information_follows = -1; -static int hf_btatt_glucose_measurement_flags_sensor_status_annunciation_present = -1; -static int hf_btatt_glucose_measurement_flags_glucose_concentration_units = -1; -static int hf_btatt_glucose_measurement_flags_glucose_concentration_type_and_sample_location_present = -1; -static int hf_btatt_glucose_measurement_flags_time_offset_present = -1; -static int hf_btatt_glucose_measurement_sequence_number = -1; -static int hf_btatt_glucose_measurement_base_time = -1; -static int hf_btatt_glucose_measurement_time_offset = -1; -static int hf_btatt_glucose_measurement_glucose_concentration_kg_per_l = -1; -static int hf_btatt_glucose_measurement_glucose_concentration_mol_per_l = -1; -static int hf_btatt_glucose_measurement_type_and_sample_location = -1; -static int hf_btatt_glucose_measurement_type_and_sample_location_type = -1; -static int hf_btatt_glucose_measurement_type_and_sample_location_sample_location = -1; -static int hf_btatt_glucose_measurement_sensor_status_annunciation = -1; -static int hf_btatt_glucose_measurement_sensor_status_annunciation_reserved = -1; -static int hf_btatt_glucose_measurement_sensor_status_annunciation_time_fault = -1; -static int hf_btatt_glucose_measurement_sensor_status_annunciation_general_fault = -1; -static int hf_btatt_glucose_measurement_sensor_status_annunciation_read_interrupted = -1; -static int hf_btatt_glucose_measurement_sensor_status_annunciation_temperature_too_low = -1; -static int hf_btatt_glucose_measurement_sensor_status_annunciation_temperature_too_high = -1; -static int hf_btatt_glucose_measurement_sensor_status_annunciation_result_too_low = -1; -static int hf_btatt_glucose_measurement_sensor_status_annunciation_result_too_high = -1; -static int hf_btatt_glucose_measurement_sensor_status_annunciation_strip_type_incorrect = -1; -static int hf_btatt_glucose_measurement_sensor_status_annunciation_strip_insertion_error = -1; -static int hf_btatt_glucose_measurement_sensor_status_annunciation_size_insufficient = -1; -static int hf_btatt_glucose_measurement_sensor_status_annunciation_fault = -1; -static int hf_btatt_glucose_measurement_sensor_status_annunciation_battery_low = -1; -static int hf_btatt_bond_management_feature = -1; -static int hf_btatt_bond_management_feature_feature_extension = -1; -static int hf_btatt_bond_management_feature_reserved = -1; -static int hf_btatt_bond_management_feature_identify_yourself = -1; -static int hf_btatt_bond_management_feature_authorization_code_required_for_feature_above_9 = -1; -static int hf_btatt_bond_management_feature_remove_all_but_the_active_bond_on_le_transport_only_server = -1; -static int hf_btatt_bond_management_feature_authorization_code_required_for_feature_above_8 = -1; -static int hf_btatt_bond_management_feature_remove_all_but_the_active_bond_on_br_edr_transport_only_server = -1; -static int hf_btatt_bond_management_feature_authorization_code_required_for_feature_above_7 = -1; -static int hf_btatt_bond_management_feature_remove_all_but_the_active_bond_on_br_edr_and_le_server = -1; -static int hf_btatt_bond_management_feature_authorization_code_required_for_feature_above_6 = -1; -static int hf_btatt_bond_management_feature_remove_all_bonds_on_le_transport_only_server = -1; -static int hf_btatt_bond_management_feature_authorization_code_required_for_feature_above_5 = -1; -static int hf_btatt_bond_management_feature_remove_all_bonds_on_br_edr_transport_only_server = -1; -static int hf_btatt_bond_management_feature_authorization_code_required_for_feature_above_4 = -1; -static int hf_btatt_bond_management_feature_remove_all_bonds_on_br_edr_and_le_server = -1; -static int hf_btatt_bond_management_feature_authorization_code_required_for_feature_above_3 = -1; -static int hf_btatt_bond_management_feature_delete_bond_of_current_le_transport_only_connection = -1; -static int hf_btatt_bond_management_feature_authorization_code_required_for_feature_above_2 = -1; -static int hf_btatt_bond_management_feature_delete_bond_of_current_br_edr_transport_only_connection = -1; -static int hf_btatt_bond_management_feature_authorization_code_required_for_feature_above_1 = -1; -static int hf_btatt_bond_management_feature_delete_bond_of_current_br_edr_and_le_connection = -1; -static int hf_btatt_bond_management_feature_nth = -1; -static int hf_btatt_bond_management_feature_nth_feature_extension = -1; -static int hf_btatt_bond_management_feature_nth_reserved = -1; -static int hf_btatt_bond_management_control_point_opcode = -1; -static int hf_btatt_bond_management_control_point_authorization_code = -1; -static int hf_btatt_temperature_measurement_flags = -1; -static int hf_btatt_temperature_measurement_flags_reserved = -1; -static int hf_btatt_temperature_measurement_flags_temperature_type = -1; -static int hf_btatt_temperature_measurement_flags_timestamp = -1; -static int hf_btatt_temperature_measurement_flags_temperature_unit = -1; -static int hf_btatt_temperature_measurement_value_celsius = -1; -static int hf_btatt_temperature_measurement_value_fahrenheit = -1; -static int hf_btatt_temperature_measurement_timestamp = -1; -static int hf_btatt_glucose_measurement_context_flags = -1; -static int hf_btatt_glucose_measurement_context_flags_extended_flags = -1; -static int hf_btatt_glucose_measurement_context_flags_hba1c = -1; -static int hf_btatt_glucose_measurement_context_flags_medication_value_units = -1; -static int hf_btatt_glucose_measurement_context_flags_medication_id_and_medication = -1; -static int hf_btatt_glucose_measurement_context_flags_exercise_duration_and_exercise_intensity = -1; -static int hf_btatt_glucose_measurement_context_flags_tester_health = -1; -static int hf_btatt_glucose_measurement_context_flags_meal = -1; -static int hf_btatt_glucose_measurement_context_flags_carbohydrate_id_and_carbohydrate = -1; -static int hf_btatt_glucose_measurement_context_sequence_number = -1; -static int hf_btatt_glucose_measurement_context_extended_flags = -1; -static int hf_btatt_glucose_measurement_context_extended_flags_reserved = -1; -static int hf_btatt_glucose_measurement_context_carbohydrate_id = -1; -static int hf_btatt_glucose_measurement_context_carbohydrate_kg = -1; -static int hf_btatt_glucose_measurement_context_meal = -1; -static int hf_btatt_glucose_measurement_context_tester_health = -1; -static int hf_btatt_glucose_measurement_context_tester = -1; -static int hf_btatt_glucose_measurement_context_health = -1; -static int hf_btatt_glucose_measurement_context_exercise_duration = -1; -static int hf_btatt_glucose_measurement_context_exercise_intensity = -1; -static int hf_btatt_glucose_measurement_context_medication_id = -1; -static int hf_btatt_glucose_measurement_context_medication_l = -1; -static int hf_btatt_glucose_measurement_context_medication_kg = -1; -static int hf_btatt_glucose_measurement_context_hba1c = -1; -static int hf_btatt_blood_pressure_measurement_flags = -1; -static int hf_btatt_blood_pressure_measurement_flags_reserved = -1; -static int hf_btatt_blood_pressure_measurement_flags_measurement_status = -1; -static int hf_btatt_blood_pressure_measurement_flags_user_id = -1; -static int hf_btatt_blood_pressure_measurement_flags_pulse_rate = -1; -static int hf_btatt_blood_pressure_measurement_flags_timestamp = -1; -static int hf_btatt_blood_pressure_measurement_flags_unit = -1; -static int hf_btatt_blood_pressure_measurement_compound_value_systolic_kpa = -1; -static int hf_btatt_blood_pressure_measurement_compound_value_diastolic_kpa = -1; -static int hf_btatt_blood_pressure_measurement_compound_value_mean_arterial_pressure_kpa = -1; -static int hf_btatt_blood_pressure_measurement_compound_value_systolic_mmhg = -1; -static int hf_btatt_blood_pressure_measurement_compound_value_diastolic_mmhg = -1; -static int hf_btatt_blood_pressure_measurement_compound_value_mean_arterial_pressure_mmhg = -1; -static int hf_btatt_blood_pressure_measurement_timestamp = -1; -static int hf_btatt_blood_pressure_measurement_pulse_rate = -1; -static int hf_btatt_blood_pressure_measurement_user_id = -1; -static int hf_btatt_blood_pressure_measurement_status = -1; -static int hf_btatt_blood_pressure_measurement_status_reserved = -1; -static int hf_btatt_blood_pressure_measurement_status_improper_measurement_position = -1; -static int hf_btatt_blood_pressure_measurement_status_pulse_rate_range_detection = -1; -static int hf_btatt_blood_pressure_measurement_status_irregular_pulse = -1; -static int hf_btatt_blood_pressure_measurement_status_cuff_fit_too_loose = -1; -static int hf_btatt_blood_pressure_measurement_status_body_movement = -1; -static int hf_btatt_heart_rate_measurement_flags = -1; -static int hf_btatt_heart_rate_measurement_flags_reserved = -1; -static int hf_btatt_heart_rate_measurement_flags_rr_interval = -1; -static int hf_btatt_heart_rate_measurement_flags_energy_expended = -1; -static int hf_btatt_heart_rate_measurement_flags_sensor_contact_status_support = -1; -static int hf_btatt_heart_rate_measurement_flags_sensor_contact_status_contact = -1; -static int hf_btatt_heart_rate_measurement_flags_value_16 = -1; -static int hf_btatt_heart_rate_measurement_value_8 = -1; -static int hf_btatt_heart_rate_measurement_value_16 = -1; -static int hf_btatt_heart_rate_measurement_energy_expended = -1; -static int hf_btatt_heart_rate_measurement_rr_intervals = -1; -static int hf_btatt_heart_rate_measurement_rr_interval = -1; -static int hf_btatt_record_access_control_point_opcode = -1; -static int hf_btatt_record_access_control_point_operator = -1; -static int hf_btatt_record_access_control_point_operand = -1; -static int hf_btatt_record_access_control_point_operand_filter_type = -1; -static int hf_btatt_record_access_control_point_operand_min_time_offset = -1; -static int hf_btatt_record_access_control_point_operand_max_time_offset = -1; -static int hf_btatt_record_access_control_point_operand_number_of_records = -1; -static int hf_btatt_record_access_control_point_request_opcode = -1; -static int hf_btatt_record_access_control_point_response_code = -1; -static int hf_btatt_value_trigger_setting_condition = -1; -static int hf_btatt_value_trigger_setting_analog = -1; -static int hf_btatt_value_trigger_setting_analog_one = -1; -static int hf_btatt_value_trigger_setting_analog_two = -1; -static int hf_btatt_digital = -1; -static int hf_btatt_digital_output = -1; -static int hf_btatt_analog = -1; -static int hf_btatt_analog_output = -1; -static int hf_btatt_location_name = -1; -static int hf_btatt_uncertainty = -1; -static int hf_btatt_uncertainty_reserved = -1; -static int hf_btatt_uncertainty_precision = -1; -static int hf_btatt_uncertainty_update_time = -1; -static int hf_btatt_uncertainty_stationary = -1; -static int hf_btatt_latitude = -1; -static int hf_btatt_longitude = -1; -static int hf_btatt_local_north_coordinate = -1; -static int hf_btatt_local_east_coordinate = -1; -static int hf_btatt_floor_number = -1; -static int hf_btatt_altitude = -1; -static int hf_btatt_indoor_positioning_configuration = -1; -static int hf_btatt_indoor_positioning_configuration_reserved = -1; -static int hf_btatt_indoor_positioning_configuration_location_name = -1; -static int hf_btatt_indoor_positioning_configuration_uncertainty = -1; -static int hf_btatt_indoor_positioning_configuration_floor_number = -1; -static int hf_btatt_indoor_positioning_configuration_altitude = -1; -static int hf_btatt_indoor_positioning_configuration_tx_power = -1; -static int hf_btatt_indoor_positioning_configuration_coordinate_system = -1; -static int hf_btatt_indoor_positioning_configuration_coordinates = -1; -static int hf_btatt_number_of_digitals = -1; -static int hf_btatt_time_trigger_setting_condition = -1; -static int hf_btatt_time_trigger_setting_value = -1; -static int hf_btatt_time_trigger_setting_value_count = -1; -static int hf_btatt_time_trigger_setting_value_time_interval = -1; -static int hf_btatt_rsc_measurement_flags = -1; -static int hf_btatt_rsc_measurement_flags_reserved = -1; -static int hf_btatt_rsc_measurement_flags_type_of_movement = -1; -static int hf_btatt_rsc_measurement_flags_total_distance_present = -1; -static int hf_btatt_rsc_measurement_flags_instantaneous_stride_length_present = -1; -static int hf_btatt_rsc_measurement_instantaneous_speed = -1; -static int hf_btatt_rsc_measurement_instantaneous_cadence = -1; -static int hf_btatt_rsc_measurement_instantaneous_stride_length = -1; -static int hf_btatt_rsc_measurement_total_distance = -1; -static int hf_btatt_sc_control_point_opcode = -1; -static int hf_btatt_sc_control_point_cumulative_value = -1; -static int hf_btatt_sc_control_point_request_opcode = -1; -static int hf_btatt_sc_control_point_response_value = -1; -static int hf_btatt_cycling_power_measurement_flags = -1; -static int hf_btatt_cycling_power_measurement_flags_reserved = -1; -static int hf_btatt_cycling_power_measurement_flags_offset_compensation_indicator = -1; -static int hf_btatt_cycling_power_measurement_flags_accumulated_energy = -1; -static int hf_btatt_cycling_power_measurement_flags_bottom_dead_spot_angle = -1; -static int hf_btatt_cycling_power_measurement_flags_top_dead_spot_angle = -1; -static int hf_btatt_cycling_power_measurement_flags_extreme_angles = -1; -static int hf_btatt_cycling_power_measurement_flags_extreme_torque_magnitudes = -1; -static int hf_btatt_cycling_power_measurement_flags_extreme_force_magnitudes = -1; -static int hf_btatt_cycling_power_measurement_flags_crank_revolution_data = -1; -static int hf_btatt_cycling_power_measurement_flags_wheel_revolution_data = -1; -static int hf_btatt_cycling_power_measurement_flags_accumulated_torque_source = -1; -static int hf_btatt_cycling_power_measurement_flags_accumulated_torque = -1; -static int hf_btatt_cycling_power_measurement_flags_pedal_power_balance_reference = -1; -static int hf_btatt_cycling_power_measurement_flags_pedal_power_balance = -1; -static int hf_btatt_cycling_power_measurement_instantaneous_power = -1; -static int hf_btatt_cycling_power_measurement_pedal_power_balance = -1; -static int hf_btatt_cycling_power_measurement_accumulated_torque = -1; -static int hf_btatt_cycling_power_measurement_wheel_revolution_data_cumulative_wheel_revolutions = -1; -static int hf_btatt_cycling_power_measurement_wheel_revolution_data_last_wheel_event_time = -1; -static int hf_btatt_cycling_power_measurement_crank_revolution_data_cumulative_crank_revolutions = -1; -static int hf_btatt_cycling_power_measurement_crank_revolution_data_last_crank_event_time = -1; -static int hf_btatt_cycling_power_measurement_extreme_force_magnitudes_maximum_force_magnitude = -1; -static int hf_btatt_cycling_power_measurement_extreme_force_magnitudes_minimum_force_magnitude = -1; -static int hf_btatt_cycling_power_measurement_extreme_torque_magnitudes_maximum_torque_magnitude = -1; -static int hf_btatt_cycling_power_measurement_extreme_torque_magnitudes_minimum_torque_magnitude = -1; -static int hf_btatt_cycling_power_measurement_extreme_angles = -1; -static int hf_btatt_cycling_power_measurement_extreme_angles_maximum = -1; -static int hf_btatt_cycling_power_measurement_extreme_angles_minimum = -1; -static int hf_btatt_cycling_power_measurement_top_dead_spot_angle = -1; -static int hf_btatt_cycling_power_measurement_bottom_dead_spot_angle = -1; -static int hf_btatt_cycling_power_measurement_accumulated_energy = -1; -static int hf_btatt_csc_measurement_flags = -1; -static int hf_btatt_csc_measurement_flags_reserved = -1; -static int hf_btatt_csc_measurement_flags_crank_revolution_data = -1; -static int hf_btatt_csc_measurement_flags_wheel_revolution_data = -1; -static int hf_btatt_csc_measurement_cumulative_wheel_revolutions = -1; -static int hf_btatt_csc_measurement_cumulative_crank_revolutions = -1; -static int hf_btatt_csc_measurement_last_event_time = -1; -static int hf_btatt_cycling_power_vector_flags = -1; -static int hf_btatt_cycling_power_vector_flags_reserved = -1; -static int hf_btatt_cycling_power_vector_flags_instantaneous_measurement_direction = -1; -static int hf_btatt_cycling_power_vector_flags_instantaneous_torque_magnitude_array = -1; -static int hf_btatt_cycling_power_vector_flags_instantaneous_force_magnitude_array = -1; -static int hf_btatt_cycling_power_vector_flags_first_crank_measurement_angle = -1; -static int hf_btatt_cycling_power_vector_flags_crank_revolution_data = -1; -static int hf_btatt_cycling_power_vector_crank_revolution_data_cumulative_crank_revolutions = -1; -static int hf_btatt_cycling_power_vector_crank_revolution_data_last_crank_event_time = -1; -static int hf_btatt_cycling_power_vector_first_crank_measurement_angle = -1; -static int hf_btatt_cycling_power_vector_instantaneous_force_magnitude_array = -1; -static int hf_btatt_cycling_power_vector_instantaneous_torque_magnitude_array = -1; -static int hf_btatt_cycling_power_control_point_opcode = -1; -static int hf_btatt_cycling_power_control_point_cumulative_value = -1; -static int hf_btatt_cycling_power_control_point_sensor_location = -1; -static int hf_btatt_cycling_power_control_point_crank_length = -1; -static int hf_btatt_cycling_power_control_point_chain_length = -1; -static int hf_btatt_cycling_power_control_point_chain_weight = -1; -static int hf_btatt_cycling_power_control_point_span_length = -1; -static int hf_btatt_cycling_power_control_point_content_mask = -1; -static int hf_btatt_cycling_power_control_point_content_mask_reserved = -1; -static int hf_btatt_cycling_power_control_point_content_mask_accumulated_energy = -1; -static int hf_btatt_cycling_power_control_point_content_mask_bottom_dead_spot_angle = -1; -static int hf_btatt_cycling_power_control_point_content_mask_top_dead_spot_angle = -1; -static int hf_btatt_cycling_power_control_point_content_mask_extreme_angles = -1; -static int hf_btatt_cycling_power_control_point_content_mask_extreme_magnitudes = -1; -static int hf_btatt_cycling_power_control_point_content_mask_crank_revolution_data = -1; -static int hf_btatt_cycling_power_control_point_content_mask_wheel_revolution_data = -1; -static int hf_btatt_cycling_power_control_point_content_mask_accumulated_torque = -1; -static int hf_btatt_cycling_power_control_point_content_mask_pedal_power_balance = -1; -static int hf_btatt_cycling_power_control_point_request_opcode = -1; -static int hf_btatt_cycling_power_control_point_response_value = -1; -static int hf_btatt_cycling_power_control_point_start_offset_compensation = -1; -static int hf_btatt_cycling_power_control_point_sampling_rate = -1; -static int hf_btatt_cycling_power_control_point_factory_calibration_date = -1; -static int hf_btatt_location_and_speed_flags = -1; -static int hf_btatt_location_and_speed_flags_reserved = -1; -static int hf_btatt_location_and_speed_flags_heading_source = -1; -static int hf_btatt_location_and_speed_flags_elevation_source = -1; -static int hf_btatt_location_and_speed_flags_speed_and_distance_format = -1; -static int hf_btatt_location_and_speed_flags_position_status = -1; -static int hf_btatt_location_and_speed_flags_utc_time = -1; -static int hf_btatt_location_and_speed_flags_rolling_time = -1; -static int hf_btatt_location_and_speed_flags_heading = -1; -static int hf_btatt_location_and_speed_flags_elevation = -1; -static int hf_btatt_location_and_speed_flags_location = -1; -static int hf_btatt_location_and_speed_flags_total_distance = -1; -static int hf_btatt_location_and_speed_flags_instantaneous_speed = -1; -static int hf_btatt_location_and_speed_instantaneous_speed = -1; -static int hf_btatt_location_and_speed_total_distance = -1; -static int hf_btatt_location_and_speed_location_latitude = -1; -static int hf_btatt_location_and_speed_location_longitude = -1; -static int hf_btatt_location_and_speed_elevation = -1; -static int hf_btatt_location_and_speed_heading = -1; -static int hf_btatt_location_and_speed_rolling_time = -1; -static int hf_btatt_location_and_speed_utc_time = -1; -static int hf_btatt_navigation_flags = -1; -static int hf_btatt_navigation_flags_reserved = -1; -static int hf_btatt_navigation_flags_destination_reached = -1; -static int hf_btatt_navigation_flags_waypoint_reached = -1; -static int hf_btatt_navigation_flags_navigation_indicator_type = -1; -static int hf_btatt_navigation_flags_heading_source = -1; -static int hf_btatt_navigation_flags_position_status = -1; -static int hf_btatt_navigation_flags_estimated_time_of_arrival = -1; -static int hf_btatt_navigation_flags_remaining_vertical_distance = -1; -static int hf_btatt_navigation_flags_remaining_distance = -1; -static int hf_btatt_navigation_bearing = -1; -static int hf_btatt_navigation_heading = -1; -static int hf_btatt_navigation_remaining_distance = -1; -static int hf_btatt_navigation_remaining_vertical_distance = -1; -static int hf_btatt_navigation_estimated_time_of_arrival = -1; -static int hf_btatt_position_quality_flags = -1; -static int hf_btatt_position_quality_flags_reserved = -1; -static int hf_btatt_position_quality_flags_position_status = -1; -static int hf_btatt_position_quality_flags_vdop = -1; -static int hf_btatt_position_quality_flags_hdop = -1; -static int hf_btatt_position_quality_flags_evpe = -1; -static int hf_btatt_position_quality_flags_ehpe = -1; -static int hf_btatt_position_quality_flags_time_to_first_fix = -1; -static int hf_btatt_position_quality_flags_number_of_beacons_in_view = -1; -static int hf_btatt_position_quality_flags_number_of_beacons_in_solution = -1; -static int hf_btatt_position_quality_number_of_beacons_in_solution = -1; -static int hf_btatt_position_quality_number_of_beacons_in_view = -1; -static int hf_btatt_position_quality_time_to_first_fix = -1; -static int hf_btatt_position_quality_ehpe = -1; -static int hf_btatt_position_quality_evpe = -1; -static int hf_btatt_position_quality_hdop = -1; -static int hf_btatt_position_quality_vdop = -1; -static int hf_btatt_ln_control_point_opcode = -1; -static int hf_btatt_ln_control_point_cumulative_value = -1; -static int hf_btatt_ln_control_point_content_mask = -1; -static int hf_btatt_ln_control_point_content_mask_reserved = -1; -static int hf_btatt_ln_control_point_content_mask_utc_time = -1; -static int hf_btatt_ln_control_point_content_mask_rolling_time = -1; -static int hf_btatt_ln_control_point_content_mask_heading = -1; -static int hf_btatt_ln_control_point_content_mask_elevation = -1; -static int hf_btatt_ln_control_point_content_mask_location = -1; -static int hf_btatt_ln_control_point_content_mask_total_distance = -1; -static int hf_btatt_ln_control_point_content_mask_instantaneous_speed = -1; -static int hf_btatt_ln_control_point_navigation_control = -1; -static int hf_btatt_ln_control_point_route_number = -1; -static int hf_btatt_ln_control_point_fix_rate = -1; -static int hf_btatt_ln_control_point_elevation = -1; -static int hf_btatt_ln_control_point_request_opcode = -1; -static int hf_btatt_ln_control_point_response_value = -1; -static int hf_btatt_ln_control_point_response_value_number_of_routes = -1; -static int hf_btatt_ln_control_point_response_value_name_of_route = -1; -static int hf_btatt_body_composition_measurement_flags = -1; -static int hf_btatt_body_composition_measurement_flags_reserved = -1; -static int hf_btatt_body_composition_measurement_flags_multiple_packet_measurement = -1; -static int hf_btatt_body_composition_measurement_flags_height = -1; -static int hf_btatt_body_composition_measurement_flags_weight = -1; -static int hf_btatt_body_composition_measurement_flags_impedance = -1; -static int hf_btatt_body_composition_measurement_flags_body_water_mass = -1; -static int hf_btatt_body_composition_measurement_flags_soft_lean_mass = -1; -static int hf_btatt_body_composition_measurement_flags_fat_free_mass = -1; -static int hf_btatt_body_composition_measurement_flags_muscle_mass = -1; -static int hf_btatt_body_composition_measurement_flags_muscle_percentage = -1; -static int hf_btatt_body_composition_measurement_flags_basal_metabolism = -1; -static int hf_btatt_body_composition_measurement_flags_user_id = -1; -static int hf_btatt_body_composition_measurement_flags_timestamp = -1; -static int hf_btatt_body_composition_measurement_flags_measurement_units = -1; -static int hf_btatt_body_composition_measurement_body_fat_percentage = -1; -static int hf_btatt_body_composition_measurement_timestamp = -1; -static int hf_btatt_body_composition_measurement_user_id = -1; -static int hf_btatt_body_composition_measurement_basal_metabolism = -1; -static int hf_btatt_body_composition_measurement_muscle_percentage = -1; -static int hf_btatt_body_composition_measurement_muscle_mass_lb = -1; -static int hf_btatt_body_composition_measurement_muscle_mass_kg = -1; -static int hf_btatt_body_composition_measurement_fat_free_mass_lb = -1; -static int hf_btatt_body_composition_measurement_fat_free_mass_kg = -1; -static int hf_btatt_body_composition_measurement_soft_lean_mass_lb = -1; -static int hf_btatt_body_composition_measurement_soft_lean_mass_kg = -1; -static int hf_btatt_body_composition_measurement_body_water_mass_lb = -1; -static int hf_btatt_body_composition_measurement_body_water_mass_kg = -1; -static int hf_btatt_body_composition_measurement_impedance = -1; -static int hf_btatt_body_composition_measurement_weight_lb = -1; -static int hf_btatt_body_composition_measurement_weight_kg = -1; -static int hf_btatt_body_composition_measurement_height_inches = -1; -static int hf_btatt_body_composition_measurement_height_meter = -1; -static int hf_btatt_weight_measurement_flags = -1; -static int hf_btatt_weight_measurement_flags_reserved = -1; -static int hf_btatt_weight_measurement_flags_bmi_and_height = -1; -static int hf_btatt_weight_measurement_flags_user_id = -1; -static int hf_btatt_weight_measurement_flags_timestamp = -1; -static int hf_btatt_weight_measurement_flags_measurement_units = -1; -static int hf_btatt_weight_measurement_weight_lb = -1; -static int hf_btatt_weight_measurement_weight_kg = -1; -static int hf_btatt_weight_measurement_timestamp = -1; -static int hf_btatt_weight_measurement_user_id = -1; -static int hf_btatt_weight_measurement_bmi = -1; -static int hf_btatt_weight_measurement_height_in = -1; -static int hf_btatt_weight_measurement_height_m = -1; -static int hf_btatt_user_control_point_opcode = -1; -static int hf_btatt_user_control_point_request_opcode = -1; -static int hf_btatt_user_control_point_response_value = -1; -static int hf_btatt_user_control_point_consent_code = -1; -static int hf_btatt_cgm_measurement_size = -1; -static int hf_btatt_cgm_measurement_flags = -1; -static int hf_btatt_cgm_measurement_flags_cgm_trend_information = -1; -static int hf_btatt_cgm_measurement_flags_cgm_quality = -1; -static int hf_btatt_cgm_measurement_flags_reserved = -1; -static int hf_btatt_cgm_measurement_flags_sensor_status_annunciation_warning = -1; -static int hf_btatt_cgm_measurement_flags_sensor_status_annunciation_cal_temp = -1; -static int hf_btatt_cgm_measurement_flags_sensor_status_annunciation_status = -1; -static int hf_btatt_cgm_measurement_glucose_concentration = -1; -static int hf_btatt_cgm_measurement_time_offset = -1; -static int hf_btatt_cgm_sensor_status_annunciation = -1; -static int hf_btatt_cgm_sensor_status_annunciation_status = -1; -static int hf_btatt_cgm_sensor_status_annunciation_status_reserved = -1; -static int hf_btatt_cgm_sensor_status_annunciation_status_general_device_fault_has_occurred_in_the_sensor = -1; -static int hf_btatt_cgm_sensor_status_annunciation_status_device_specific_alert = -1; -static int hf_btatt_cgm_sensor_status_annunciation_status_sensor_malfunction = -1; -static int hf_btatt_cgm_sensor_status_annunciation_status_sensor_type_incorrect_for_device = -1; -static int hf_btatt_cgm_sensor_status_annunciation_status_device_battery_low = -1; -static int hf_btatt_cgm_sensor_status_annunciation_status_session_stopped = -1; -static int hf_btatt_cgm_sensor_status_annunciation_cal_temp = -1; -static int hf_btatt_cgm_sensor_status_annunciation_cal_temp_reserved = -1; -static int hf_btatt_cgm_sensor_status_annunciation_cal_temp_sensor_temperature_too_low_for_valid_test_result_at_time_of_measurement = -1; -static int hf_btatt_cgm_sensor_status_annunciation_cal_temp_sensor_temperature_too_high_for_valid_test_result_at_time_of_measurement = -1; -static int hf_btatt_cgm_sensor_status_annunciation_cal_temp_calibration_required = -1; -static int hf_btatt_cgm_sensor_status_annunciation_cal_temp_calibration_recommended = -1; -static int hf_btatt_cgm_sensor_status_annunciation_cal_temp_calibration_not_allowed = -1; -static int hf_btatt_cgm_sensor_status_annunciation_cal_temp_time_synchronization_between_sensor_and_collector_required = -1; -static int hf_btatt_cgm_sensor_status_annunciation_warning = -1; -static int hf_btatt_cgm_sensor_status_annunciation_warning_sensor_result_higher_than_the_device_can_process = -1; -static int hf_btatt_cgm_sensor_status_annunciation_warning_sensor_result_lower_than_the_device_can_process = -1; -static int hf_btatt_cgm_sensor_status_annunciation_warning_sensor_rate_of_increase_exceeded = -1; -static int hf_btatt_cgm_sensor_status_annunciation_warning_sensor_rate_of_decrease_exceeded = -1; -static int hf_btatt_cgm_sensor_status_annunciation_warning_sensor_result_higher_than_the_hyper_level = -1; -static int hf_btatt_cgm_sensor_status_annunciation_warning_sensor_result_lower_than_the_hypo_level = -1; -static int hf_btatt_cgm_sensor_status_annunciation_warning_sensor_result_higher_than_the_patient_high_level = -1; -static int hf_btatt_cgm_sensor_status_annunciation_warning_sensor_result_lower_than_the_patient_low_level = -1; -static int hf_btatt_cgm_measurement_trend_information = -1; -static int hf_btatt_cgm_measurement_quality = -1; -static int hf_btatt_cgm_e2e_crc = -1; -static int hf_btatt_cgm_feature_feature = -1; -static int hf_btatt_cgm_feature_feature_reserved = -1; -static int hf_btatt_cgm_feature_feature_quality = -1; -static int hf_btatt_cgm_feature_feature_trend_information = -1; -static int hf_btatt_cgm_feature_feature_multiple_sessions = -1; -static int hf_btatt_cgm_feature_feature_multiple_bond = -1; -static int hf_btatt_cgm_feature_feature_e2e_crc = -1; -static int hf_btatt_cgm_feature_feature_general_device_fault = -1; -static int hf_btatt_cgm_feature_feature_sensor_type_error_detection = -1; -static int hf_btatt_cgm_feature_feature_low_battery_detection = -1; -static int hf_btatt_cgm_feature_feature_sensor_result_high_low_detection = -1; -static int hf_btatt_cgm_feature_feature_sensor_temperature_high_low_detection = -1; -static int hf_btatt_cgm_feature_feature_sensor_malfunction_detection = -1; -static int hf_btatt_cgm_feature_feature_device_specific_alert = -1; -static int hf_btatt_cgm_feature_feature_rate_of_increase_decrease_alerts = -1; -static int hf_btatt_cgm_feature_feature_hyper_alerts = -1; -static int hf_btatt_cgm_feature_feature_hypo_alerts = -1; -static int hf_btatt_cgm_feature_feature_patient_high_low_alerts = -1; -static int hf_btatt_cgm_feature_feature_calibration = -1; -static int hf_btatt_cgm_type_and_sample_location = -1; -static int hf_btatt_cgm_type = -1; -static int hf_btatt_cgm_sample_location = -1; -static int hf_btatt_cgm_time_offset = -1; -static int hf_btatt_cgm_status = -1; -static int hf_btatt_cgm_session_start_time = -1; -static int hf_btatt_cgm_session_run_time = -1; -static int hf_btatt_cgm_specific_ops_control_point_opcode = -1; -static int hf_btatt_cgm_specific_ops_control_point_operand = -1; -static int hf_btatt_cgm_specific_ops_control_point_operand_communication_interval = -1; -static int hf_btatt_cgm_specific_ops_control_point_calibration_glucose_concentration = -1; -static int hf_btatt_cgm_specific_ops_control_point_calibration_time = -1; -static int hf_btatt_cgm_specific_ops_control_point_next_calibration_time = -1; -static int hf_btatt_cgm_specific_ops_control_point_calibration_data_record_number = -1; -static int hf_btatt_cgm_specific_ops_control_point_calibration_status = -1; -static int hf_btatt_cgm_specific_ops_control_point_calibration_status_reserved = -1; -static int hf_btatt_cgm_specific_ops_control_point_calibration_status_pending = -1; -static int hf_btatt_cgm_specific_ops_control_point_calibration_status_out_of_range = -1; -static int hf_btatt_cgm_specific_ops_control_point_calibration_status_rejected = -1; -static int hf_btatt_cgm_specific_ops_control_point_operand_calibration_data_record_number = -1; -static int hf_btatt_cgm_specific_ops_control_point_operand_alert_level = -1; -static int hf_btatt_cgm_specific_ops_control_point_operand_alert_level_rate = -1; -static int hf_btatt_cgm_specific_ops_control_point_request_opcode = -1; -static int hf_btatt_cgm_specific_ops_control_point_response_code = -1; -static int hf_btatt_uri = -1; -static int hf_btatt_http_headers = -1; -static int hf_btatt_http_status_code = -1; -static int hf_btatt_http_data_status = -1; -static int hf_btatt_http_data_status_reserved = -1; -static int hf_btatt_http_data_status_body_truncated = -1; -static int hf_btatt_http_data_status_body_received = -1; -static int hf_btatt_http_data_status_headers_truncated = -1; -static int hf_btatt_http_data_status_headers_received = -1; -static int hf_btatt_http_entity_body = -1; -static int hf_btatt_http_control_point_opcode = -1; -static int hf_btatt_https_security = -1; -static int hf_btatt_tds_opcode = -1; -static int hf_btatt_tds_result_code = -1; -static int hf_btatt_tds_organization_id = -1; -static int hf_btatt_tds_data = -1; -static int hf_btatt_ots_feature_oacp = -1; -static int hf_btatt_ots_feature_oacp_reserved = -1; -static int hf_btatt_ots_feature_oacp_abort = -1; -static int hf_btatt_ots_feature_oacp_patching_of_object = -1; -static int hf_btatt_ots_feature_oacp_truncation_of_objects = -1; -static int hf_btatt_ots_feature_oacp_appending_additional_data_to_object = -1; -static int hf_btatt_ots_feature_oacp_write = -1; -static int hf_btatt_ots_feature_oacp_read = -1; -static int hf_btatt_ots_feature_oacp_execute = -1; -static int hf_btatt_ots_feature_oacp_calculate_checksum = -1; -static int hf_btatt_ots_feature_oacp_delete = -1; -static int hf_btatt_ots_feature_oacp_create = -1; -static int hf_btatt_ots_feature_olcp = -1; -static int hf_btatt_ots_feature_olcp_reserved = -1; -static int hf_btatt_ots_feature_olcp_clear_marking = -1; -static int hf_btatt_ots_feature_olcp_request_number_of_objects = -1; -static int hf_btatt_ots_feature_olcp_order = -1; -static int hf_btatt_ots_feature_olcp_go_to = -1; -static int hf_btatt_ots_object_name = -1; -static int hf_btatt_ots_current_size = -1; -static int hf_btatt_ots_allocated_size = -1; -static int hf_btatt_ots_object_id = -1; -static int hf_btatt_ots_properties = -1; -static int hf_btatt_ots_properties_reserved = -1; -static int hf_btatt_ots_properties_mark = -1; -static int hf_btatt_ots_properties_patch = -1; -static int hf_btatt_ots_properties_truncate = -1; -static int hf_btatt_ots_properties_append = -1; -static int hf_btatt_ots_properties_write = -1; -static int hf_btatt_ots_properties_read = -1; -static int hf_btatt_ots_properties_execute = -1; -static int hf_btatt_ots_properties_delete = -1; -static int hf_btatt_ots_flags = -1; -static int hf_btatt_ots_flags_reserved = -1; -static int hf_btatt_ots_flags_object_deletion = -1; -static int hf_btatt_ots_flags_object_creation = -1; -static int hf_btatt_ots_flags_change_occurred_to_the_object_metadata = -1; -static int hf_btatt_ots_flags_change_occurred_to_the_object_contents = -1; -static int hf_btatt_ots_flags_source_of_change = -1; -static int hf_btatt_ots_action_opcode = -1; -static int hf_btatt_ots_size = -1; -static int hf_btatt_ots_offset = -1; -static int hf_btatt_ots_length = -1; -static int hf_btatt_ots_execute_data = -1; -static int hf_btatt_ots_action_response_opcode = -1; -static int hf_btatt_ots_action_result_code = -1; -static int hf_btatt_ots_checksum = -1; -static int hf_btatt_ots_list_opcode = -1; -static int hf_btatt_ots_list_order = -1; -static int hf_btatt_ots_list_response_opcode = -1; -static int hf_btatt_ots_list_result_code = -1; -static int hf_btatt_ots_list_total_number_of_objects = -1; -static int hf_btatt_ots_filter = -1; -static int hf_btatt_ots_name_string = -1; -static int hf_btatt_ots_size_from = -1; -static int hf_btatt_ots_size_to = -1; -static int hf_btatt_ots_object_first_created = -1; -static int hf_btatt_ots_object_last_modified = -1; -static int hf_btatt_plx_spot_check_measurement_flags = -1; -static int hf_btatt_plx_spot_check_measurement_flags_reserved = -1; -static int hf_btatt_plx_spot_check_measurement_flags_device_clock_is_not_set = -1; -static int hf_btatt_plx_spot_check_measurement_flags_pulse_amplitude_index = -1; -static int hf_btatt_plx_spot_check_measurement_flags_device_and_sensor_status = -1; -static int hf_btatt_plx_spot_check_measurement_flags_measurement_status = -1; -static int hf_btatt_plx_spot_check_measurement_flags_timestamp = -1; -static int hf_btatt_plx_spo2 = -1; -static int hf_btatt_plx_pulse_rate = -1; -static int hf_btatt_plx_spot_check_measurement_timestamp = -1; -static int hf_btatt_plx_measurement_status = -1; -static int hf_btatt_plx_measurement_status_invalid_measurement_detected = -1; -static int hf_btatt_plx_measurement_status_questionable_measurement_detected = -1; -static int hf_btatt_plx_measurement_status_measurement_unavailable = -1; -static int hf_btatt_plx_measurement_status_calibration_ongoing = -1; -static int hf_btatt_plx_measurement_status_data_for_testing = -1; -static int hf_btatt_plx_measurement_status_data_for_demonstration = -1; -static int hf_btatt_plx_measurement_status_data_from_measurement_storage = -1; -static int hf_btatt_plx_measurement_status_fully_qualified_data = -1; -static int hf_btatt_plx_measurement_status_validated_data = -1; -static int hf_btatt_plx_measurement_status_early_estimated_data = -1; -static int hf_btatt_plx_measurement_status_measurement_ongoing = -1; -static int hf_btatt_plx_measurement_status_reserved = -1; -static int hf_btatt_plx_device_and_sensor_status = -1; -static int hf_btatt_plx_device_and_sensor_status_reserved = -1; -static int hf_btatt_plx_device_and_sensor_status_sensor_disconnected = -1; -static int hf_btatt_plx_device_and_sensor_status_sensor_malfunctioning = -1; -static int hf_btatt_plx_device_and_sensor_status_sensor_displaced = -1; -static int hf_btatt_plx_device_and_sensor_status_unknown_sensor_connected = -1; -static int hf_btatt_plx_device_and_sensor_status_sensor_unconnected_to_user = -1; -static int hf_btatt_plx_device_and_sensor_status_sensor_interference_detected = -1; -static int hf_btatt_plx_device_and_sensor_status_signal_analysis_ongoing = -1; -static int hf_btatt_plx_device_and_sensor_status_questionable_pulse_detected = -1; -static int hf_btatt_plx_device_and_sensor_status_non_pulsatile_signal_detected = -1; -static int hf_btatt_plx_device_and_sensor_status_erratic_signal_detected = -1; -static int hf_btatt_plx_device_and_sensor_status_low_perfusion_detected = -1; -static int hf_btatt_plx_device_and_sensor_status_poor_signal_detected = -1; -static int hf_btatt_plx_device_and_sensor_status_inadequate_signal_detected = -1; -static int hf_btatt_plx_device_and_sensor_status_signal_processing_irregularity_detected = -1; -static int hf_btatt_plx_device_and_sensor_status_equipment_malfunction_detected = -1; -static int hf_btatt_plx_device_and_sensor_status_extended_display_update_ongoing = -1; -static int hf_btatt_plx_pulse_amplitude_index = -1; -static int hf_btatt_plx_spo2pr_spot_check = -1; -static int hf_btatt_plx_spo2pr_normal = -1; -static int hf_btatt_plx_spo2pr_fast = -1; -static int hf_btatt_plx_spo2pr_slow = -1; -static int hf_btatt_plx_continuous_measurement_flags = -1; -static int hf_btatt_plx_continuous_measurement_flags_reserved = -1; -static int hf_btatt_plx_continuous_measurement_flags_pulse_amplitude_index = -1; -static int hf_btatt_plx_continuous_measurement_flags_device_and_sensor_status = -1; -static int hf_btatt_plx_continuous_measurement_flags_measurement_status = -1; -static int hf_btatt_plx_continuous_measurement_flags_spo2pr_slow = -1; -static int hf_btatt_plx_continuous_measurement_flags_spo2pr_fast = -1; -static int hf_btatt_plx_features_supported_features = -1; -static int hf_btatt_plx_features_supported_features_reserved = -1; -static int hf_btatt_plx_features_supported_features_multiple_bonds = -1; -static int hf_btatt_plx_features_supported_features_pulse_amplitude_index = -1; -static int hf_btatt_plx_features_supported_features_spo2pr_slow = -1; -static int hf_btatt_plx_features_supported_features_spo2pr_fast = -1; -static int hf_btatt_plx_features_supported_features_timestamp_storage_for_spot_check = -1; -static int hf_btatt_plx_features_supported_features_measurement_storage_for_spot_check = -1; -static int hf_btatt_plx_features_supported_features_device_and_sensor_status = -1; -static int hf_btatt_plx_features_supported_features_measurement_status = -1; -static int hf_btatt_regulatory_certification_data_list_count = -1; -static int hf_btatt_regulatory_certification_data_list_length = -1; -static int hf_btatt_regulatory_certification_data_list_item = -1; -static int hf_btatt_regulatory_certification_data_list_item_body = -1; -static int hf_btatt_regulatory_certification_data_list_item_body_structure_type = -1; -static int hf_btatt_regulatory_certification_data_list_item_body_structure_length = -1; -static int hf_btatt_regulatory_certification_data_list_item_authorizing_body_data = -1; -static int hf_btatt_regulatory_certification_data_list_item_authorizing_body_data_major_ig_version = -1; -static int hf_btatt_regulatory_certification_data_list_item_authorizing_body_data_minor_ig_version = -1; -static int hf_btatt_regulatory_certification_data_list_item_authorizing_body_data_certification_data_list_count = -1; -static int hf_btatt_regulatory_certification_data_list_item_authorizing_body_data_certification_data_list_length = -1; -static int hf_btatt_regulatory_certification_data_list_item_authorizing_body_data_certification_data_list = -1; -static int hf_btatt_regulatory_certification_data_list_item_authorizing_body_data_certified_device_class = -1; -static int hf_btatt_regulatory_certification_data_list_item_regulation_bit_field_type = -1; -static int hf_btatt_regulatory_certification_data_list_item_data = -1; -static int hf_btatt_timezone_information = -1; -static int hf_btatt_timezone_information_information = -1; -static int hf_btatt_timezone_information_information_type = -1; -static int hf_gatt_nordic_uart_tx = -1; -static int hf_gatt_nordic_uart_rx = -1; -static int hf_gatt_nordic_dfu_packet = -1; -static int hf_gatt_nordic_dfu_control_point_opcode = -1; -static int hf_gatt_nordic_dfu_control_point_init_packet = -1; -static int hf_gatt_nordic_dfu_control_point_number_of_bytes = -1; -static int hf_gatt_nordic_dfu_control_point_image_type = -1; -static int hf_gatt_nordic_dfu_control_point_number_of_packets = -1; -static int hf_gatt_nordic_dfu_control_point_request_opcode = -1; -static int hf_gatt_nordic_dfu_control_point_response_value = -1; -static int hf_gatt_microbit_accelerometer_data = -1; -static int hf_gatt_microbit_accelerometer_x = -1; -static int hf_gatt_microbit_accelerometer_y = -1; -static int hf_gatt_microbit_accelerometer_z = -1; -static int hf_gatt_microbit_accelerometer_period = -1; -static int hf_gatt_microbit_magnetometer_data = -1; -static int hf_gatt_microbit_magnetometer_x = -1; -static int hf_gatt_microbit_magnetometer_y = -1; -static int hf_gatt_microbit_magnetometer_z = -1; -static int hf_gatt_microbit_magnetometer_period = -1; -static int hf_gatt_microbit_magnetometer_bearing = -1; -static int hf_gatt_microbit_button_a_state = -1; -static int hf_gatt_microbit_button_b_state = -1; -static int hf_gatt_microbit_pin_data = -1; -static int hf_gatt_microbit_pin_number = -1; -static int hf_gatt_microbit_pin_value = -1; -static int hf_gatt_microbit_pin_ad_config = -1; -static int hf_gatt_microbit_ad_pin0 = -1; -static int hf_gatt_microbit_ad_pin1 = -1; -static int hf_gatt_microbit_ad_pin2 = -1; -static int hf_gatt_microbit_ad_pin3 = -1; -static int hf_gatt_microbit_ad_pin4 = -1; -static int hf_gatt_microbit_ad_pin5 = -1; -static int hf_gatt_microbit_ad_pin6 = -1; -static int hf_gatt_microbit_ad_pin7 = -1; -static int hf_gatt_microbit_ad_pin8 = -1; -static int hf_gatt_microbit_ad_pin9 = -1; -static int hf_gatt_microbit_ad_pin10 = -1; -static int hf_gatt_microbit_ad_pin11 = -1; -static int hf_gatt_microbit_ad_pin12 = -1; -static int hf_gatt_microbit_ad_pin13 = -1; -static int hf_gatt_microbit_ad_pin14 = -1; -static int hf_gatt_microbit_ad_pin15 = -1; -static int hf_gatt_microbit_ad_pin16 = -1; -static int hf_gatt_microbit_ad_pin17 = -1; -static int hf_gatt_microbit_ad_pin18 = -1; -static int hf_gatt_microbit_ad_pin19 = -1; -static int hf_gatt_microbit_pin_io_config = -1; -static int hf_gatt_microbit_io_pin0 = -1; -static int hf_gatt_microbit_io_pin1 = -1; -static int hf_gatt_microbit_io_pin2 = -1; -static int hf_gatt_microbit_io_pin3 = -1; -static int hf_gatt_microbit_io_pin4 = -1; -static int hf_gatt_microbit_io_pin5 = -1; -static int hf_gatt_microbit_io_pin6 = -1; -static int hf_gatt_microbit_io_pin7 = -1; -static int hf_gatt_microbit_io_pin8 = -1; -static int hf_gatt_microbit_io_pin9 = -1; -static int hf_gatt_microbit_io_pin10 = -1; -static int hf_gatt_microbit_io_pin11 = -1; -static int hf_gatt_microbit_io_pin12 = -1; -static int hf_gatt_microbit_io_pin13 = -1; -static int hf_gatt_microbit_io_pin14 = -1; -static int hf_gatt_microbit_io_pin15 = -1; -static int hf_gatt_microbit_io_pin16 = -1; -static int hf_gatt_microbit_io_pin17 = -1; -static int hf_gatt_microbit_io_pin18 = -1; -static int hf_gatt_microbit_io_pin19 = -1; -static int hf_gatt_microbit_pwm_control = -1; -static int hf_gatt_microbit_led_matrix = -1; -static int hf_gatt_microbit_led_text = -1; -static int hf_gatt_microbit_scrolling_delay = -1; -static int hf_gatt_microbit_microbit_requirements = -1; -static int hf_gatt_microbit_microbit_event = -1; -static int hf_gatt_microbit_client_requirements = -1; -static int hf_gatt_microbit_client_event = -1; -static int hf_gatt_microbit_dfu_control = -1; -static int hf_gatt_microbit_temperature_value = -1; -static int hf_gatt_microbit_temperature_period = -1; -static int hf_btatt_valid_range_lower_inclusive_value = -1; -static int hf_btatt_valid_range_upper_inclusive_value = -1; -static int hf_btatt_temperature_celsius = -1; -static int hf_btatt_temperature_fahrenheit = -1; -static int hf_btatt_removable = -1; -static int hf_btatt_removable_reserved = -1; -static int hf_btatt_removable_removable = -1; -static int hf_btatt_service_required = -1; -static int hf_btatt_service_required_reserved = -1; -static int hf_btatt_service_required_service_required = -1; -static int hf_btatt_scientific_temperature_celsius = -1; -static int hf_btatt_string = -1; -static int hf_btatt_network_availability = -1; -static int hf_btatt_fitness_machine_features = -1; -static int hf_btatt_fitness_machine_features_reserved = -1; -static int hf_btatt_fitness_machine_features_user_data_retention = -1; -static int hf_btatt_fitness_machine_features_force_on_belt_and_power_output = -1; -static int hf_btatt_fitness_machine_features_power_measurement = -1; -static int hf_btatt_fitness_machine_features_remaining_time = -1; -static int hf_btatt_fitness_machine_features_elapsed_time = -1; -static int hf_btatt_fitness_machine_features_metabolic_equivalent = -1; -static int hf_btatt_fitness_machine_features_heart_rate_measurement = -1; -static int hf_btatt_fitness_machine_features_expended_energy = -1; -static int hf_btatt_fitness_machine_features_stride_count = -1; -static int hf_btatt_fitness_machine_features_resistance_level = -1; -static int hf_btatt_fitness_machine_features_step_count = -1; -static int hf_btatt_fitness_machine_features_pace = -1; -static int hf_btatt_fitness_machine_features_elevation_gain = -1; -static int hf_btatt_fitness_machine_features_inclination = -1; -static int hf_btatt_fitness_machine_features_total_distance = -1; -static int hf_btatt_fitness_machine_features_cadence = -1; -static int hf_btatt_fitness_machine_features_average_speed = -1; -static int hf_btatt_target_setting_features = -1; -static int hf_btatt_target_setting_features_reserved = -1; -static int hf_btatt_target_setting_features_targeted_cadence_configuration = -1; -static int hf_btatt_target_setting_features_spin_down_control = -1; -static int hf_btatt_target_setting_features_wheel_circumference_configuration = -1; -static int hf_btatt_target_setting_features_indoor_bike_simulation_parameters = -1; -static int hf_btatt_target_setting_features_targeted_time_in_five_heart_rate_zones_configuration = -1; -static int hf_btatt_target_setting_features_targeted_time_in_three_heart_rate_zones_configuration = -1; -static int hf_btatt_target_setting_features_targeted_time_in_two_heart_rate_zones_configuration = -1; -static int hf_btatt_target_setting_features_targeted_training_time_configuration = -1; -static int hf_btatt_target_setting_features_targeted_distance_configuration = -1; -static int hf_btatt_target_setting_features_targeted_stride_number_configuration = -1; -static int hf_btatt_target_setting_features_targeted_step_number_configuration = -1; -static int hf_btatt_target_setting_features_targeted_expended_energy_configuration = -1; -static int hf_btatt_target_setting_features_heart_rate_target_setting = -1; -static int hf_btatt_target_setting_features_power_target_setting = -1; -static int hf_btatt_target_setting_features_resistance_target_setting = -1; -static int hf_btatt_target_setting_features_inclination_target_setting = -1; -static int hf_btatt_target_setting_features_speed_target_setting = -1; -static int hf_btatt_training_status_flags = -1; -static int hf_btatt_training_status_flags_reserved = -1; -static int hf_btatt_training_status_flags_extended_string = -1; -static int hf_btatt_training_status_flags_training_status_string = -1; -static int hf_btatt_training_status_status = -1; -static int hf_btatt_training_status_status_string = -1; -static int hf_btatt_supported_speed_range_minimum_speed = -1; -static int hf_btatt_supported_speed_range_maximum_speed = -1; -static int hf_btatt_supported_speed_range_minimum_increment = -1; -static int hf_btatt_supported_inclination_range_minimum_inclination = -1; -static int hf_btatt_supported_inclination_range_maximum_inclination = -1; -static int hf_btatt_supported_inclination_range_minimum_increment = -1; -static int hf_btatt_supported_resistance_level_range_minimum_resistance_level = -1; -static int hf_btatt_supported_resistance_level_range_maximum_resistance_level = -1; -static int hf_btatt_supported_resistance_level_range_minimum_increment = -1; -static int hf_btatt_supported_heart_rate_range_minimum_heart_rate = -1; -static int hf_btatt_supported_heart_rate_range_maximum_heart_rate = -1; -static int hf_btatt_supported_heart_rate_range_minimum_increment = -1; -static int hf_btatt_supported_power_range_minimum_power = -1; -static int hf_btatt_supported_power_range_maximum_power = -1; -static int hf_btatt_supported_power_range_minimum_increment = -1; -static int hf_btatt_fitness_machine_status_opcode = -1; -static int hf_btatt_fitness_machine_control_information = -1; -static int hf_btatt_fitness_machine_spin_down_status = -1; -static int hf_btatt_fitness_machine_speed = -1; -static int hf_btatt_fitness_machine_incline = -1; -static int hf_btatt_fitness_machine_resistance_level = -1; -static int hf_btatt_fitness_machine_power = -1; -static int hf_btatt_fitness_machine_heart_rate = -1; -static int hf_btatt_fitness_machine_expended_energy = -1; -static int hf_btatt_fitness_machine_number_of_steps = -1; -static int hf_btatt_fitness_machine_number_of_strides = -1; -static int hf_btatt_fitness_machine_distance = -1; -static int hf_btatt_fitness_machine_training_time = -1; -static int hf_btatt_fitness_machine_wheel_circumference = -1; -static int hf_btatt_fitness_machine_cadence = -1; -static int hf_btatt_fitness_machine_wind_speed = -1; -static int hf_btatt_fitness_machine_grade = -1; -static int hf_btatt_fitness_machine_coefficient_of_rolling_resistance = -1; -static int hf_btatt_fitness_machine_wind_resistance_coefficient = -1; -static int hf_btatt_fitness_machine_targeted_time_in_fat_burn_zone = -1; -static int hf_btatt_fitness_machine_targeted_time_in_fitness_zone = -1; -static int hf_btatt_fitness_machine_targeted_time_in_very_light_zone = -1; -static int hf_btatt_fitness_machine_targeted_time_in_light_zone = -1; -static int hf_btatt_fitness_machine_targeted_time_in_moderate_zone = -1; -static int hf_btatt_fitness_machine_targeted_time_in_hard_zone = -1; -static int hf_btatt_fitness_machine_targeted_time_in_maximum_zone = -1; -static int hf_btatt_volume_setting = -1; -static int hf_btatt_volume_mute = -1; -static int hf_btatt_volume_change_counter = -1; -static int hf_btatt_volume_control_point_procedure = -1; -static int hf_btatt_volume_flags = -1; - -static int hf_request_in_frame = -1; -static int hf_response_in_frame = -1; +static int proto_btatt; +static int proto_btgatt; + +static int hf_btatt_opcode; +static int hf_btatt_handle; +static int hf_btatt_starting_handle; +static int hf_btatt_ending_handle; +static int hf_btatt_group_end_handle; +static int hf_btatt_value; +static int hf_btatt_req_opcode_in_error; +static int hf_btatt_handle_in_error; +static int hf_btatt_error_code; +static int hf_btatt_error_code_aios; +static int hf_btatt_error_code_ans; +static int hf_btatt_error_code_bms; +static int hf_btatt_error_code_cgms; +static int hf_btatt_error_code_cps; +static int hf_btatt_error_code_cscs; +static int hf_btatt_error_code_cts; +static int hf_btatt_error_code_ess; +static int hf_btatt_error_code_gls; +static int hf_btatt_error_code_hps; +static int hf_btatt_error_code_hrs; +static int hf_btatt_error_code_hts; +static int hf_btatt_error_code_ips; +static int hf_btatt_error_code_ots; +static int hf_btatt_error_code_rscs; +static int hf_btatt_error_code_uds; +static int hf_btatt_service_uuid16; +static int hf_btatt_service_uuid128; +static int hf_btatt_characteristic_uuid16; +static int hf_btatt_characteristic_uuid128; +static int hf_btatt_uuid16; +static int hf_btatt_uuid128; +static int hf_btatt_client_rx_mtu; +static int hf_btatt_server_rx_mtu; +static int hf_btatt_uuid_format; +static int hf_btatt_length; +static int hf_btatt_offset; +static int hf_btatt_flags; +static int hf_btatt_sign_counter; +static int hf_btatt_signature; +static int hf_btatt_attribute_data; +static int hf_btatt_handles_info; +static int hf_btatt_opcode_authentication_signature; +static int hf_btatt_opcode_command; +static int hf_btatt_opcode_method; +static int hf_btatt_characteristic_properties; +static int hf_btatt_characteristic_value_handle; +static int hf_btatt_characteristic_properties_extended_properties; +static int hf_btatt_characteristic_properties_authenticated_signed_writes; +static int hf_btatt_characteristic_properties_indicate; +static int hf_btatt_characteristic_properties_notify; +static int hf_btatt_characteristic_properties_write; +static int hf_btatt_characteristic_properties_write_without_response; +static int hf_btatt_characteristic_properties_read; +static int hf_btatt_characteristic_properties_broadcast; +static int hf_btatt_information_data; +static int hf_btatt_included_service_handle; +static int hf_btatt_characteristic_configuration_client; +static int hf_btatt_characteristic_configuration_client_reserved; +static int hf_btatt_characteristic_configuration_client_indication; +static int hf_btatt_characteristic_configuration_client_notification; +static int hf_btatt_characteristic_configuration_server; +static int hf_btatt_characteristic_configuration_server_reserved; +static int hf_btatt_characteristic_configuration_server_broadcast; +static int hf_btatt_hogp_protocol_mode; +static int hf_btatt_hogp_bcd_hid; +static int hf_btatt_hogp_b_country_code; +static int hf_btatt_hogp_flags; +static int hf_btatt_hogp_flags_reserved; +static int hf_btatt_hogp_flags_normally_connectable; +static int hf_btatt_hogp_flags_remote_wake; +static int hf_btatt_hogp_hid_control_point_command; +static int hf_btatt_report_reference_report_id; +static int hf_btatt_report_reference_report_type; +static int hf_btatt_characteristic_user_description; +static int hf_btatt_characteristic_extended_properties; +static int hf_btatt_characteristic_extended_properties_reserved; +static int hf_btatt_characteristic_extended_properties_writable_auxiliaries; +static int hf_btatt_characteristic_extended_properties_reliable_write; +static int hf_btatt_characteristic_presentation_format; +static int hf_btatt_characteristic_presentation_exponent; +static int hf_btatt_characteristic_presentation_unit; +static int hf_btatt_characteristic_presentation_namespace; +static int hf_btatt_characteristic_presentation_namespace_description_btsig; +static int hf_btatt_characteristic_presentation_namespace_description; +static int hf_btatt_esp_trigger_logic; +static int hf_btatt_esp_condition; +static int hf_btatt_esp_operand; +static int hf_btatt_esp_flags; +static int hf_btatt_esp_sampling_function; +static int hf_btatt_esp_measurement_period; +static int hf_btatt_esp_update_interval; +static int hf_btatt_esp_application; +static int hf_btatt_esp_measurement_uncertainty; +static int hf_btatt_device_name; +static int hf_btatt_appearance; +static int hf_btatt_appearance_category; +static int hf_btatt_appearance_subcategory; +static int hf_btatt_appearance_subcategory_watch; +static int hf_btatt_appearance_subcategory_thermometer; +static int hf_btatt_appearance_subcategory_heart_rate; +static int hf_btatt_appearance_subcategory_blood_pressure; +static int hf_btatt_appearance_subcategory_hid; +static int hf_btatt_appearance_subcategory_running_walking_sensor; +static int hf_btatt_appearance_subcategory_cycling; +static int hf_btatt_appearance_subcategory_pulse_oximeter; +static int hf_btatt_appearance_subcategory_personal_mobility_device; +static int hf_btatt_appearance_subcategory_insulin_pump; +static int hf_btatt_appearance_subcategory_outdoor_sports_activity; +static int hf_btatt_peripheral_privacy_flag; +static int hf_btatt_minimum_connection_interval; +static int hf_btatt_maximum_connection_interval; +static int hf_btatt_peripheral_latency; +static int hf_btatt_connection_supervision_timeout_multiplier; +static int hf_btatt_reconnection_address; +static int hf_btatt_alert_level; +static int hf_btatt_tx_power_level; +static int hf_btatt_year; +static int hf_btatt_month; +static int hf_btatt_day; +static int hf_btatt_hours; +static int hf_btatt_minutes; +static int hf_btatt_seconds; +static int hf_btatt_day_of_week; +static int hf_btatt_fractions100; +static int hf_btatt_fractions256; +static int hf_btatt_dst_offset; +static int hf_btatt_model_number_string; +static int hf_btatt_serial_number_string; +static int hf_btatt_firmware_revision_string; +static int hf_btatt_hardware_revision_string; +static int hf_btatt_software_revision_string; +static int hf_btatt_manufacturer_string; +static int hf_btatt_system_id_manufacturer_identifier; +static int hf_btatt_system_id_organizationally_unique_identifier; +static int hf_btatt_timezone; +static int hf_btatt_time_accuracy; +static int hf_btatt_time_source; +static int hf_btatt_time_days_since_update; +static int hf_btatt_time_hours_since_update; +static int hf_btatt_time_update_control_point; +static int hf_btatt_time_current_state; +static int hf_btatt_time_result; +static int hf_btatt_battery_level; +static int hf_btatt_battery_power_state; +static int hf_btatt_battery_power_state_present; +static int hf_btatt_battery_power_state_discharging; +static int hf_btatt_battery_power_state_charging; +static int hf_btatt_battery_power_state_level; +static int hf_btatt_temperature_type; +static int hf_btatt_measurement_interval; +static int hf_btatt_time_adjust_reason; +static int hf_btatt_time_adjust_reason_reserved; +static int hf_btatt_time_adjust_reason_change_of_dst; +static int hf_btatt_time_adjust_reason_change_of_timezone; +static int hf_btatt_time_adjust_reason_external_reference_time_update; +static int hf_btatt_time_adjust_reason_manual_time_update; +static int hf_btatt_magnetic_declination; +static int hf_btatt_scan_refresh; +static int hf_btatt_body_sensor_location; +static int hf_btatt_heart_rate_control_point; +static int hf_btatt_alert_status; +static int hf_btatt_alert_status_reserved; +static int hf_btatt_alert_status_display_alert_status; +static int hf_btatt_alert_status_vibrate_state; +static int hf_btatt_alert_status_ringer_state; +static int hf_btatt_ringer_control_point; +static int hf_btatt_ringer_setting; +static int hf_btatt_alert_category_id_bitmask_1; +static int hf_btatt_alert_category_id_bitmask_1_schedule; +static int hf_btatt_alert_category_id_bitmask_1_voice_mail; +static int hf_btatt_alert_category_id_bitmask_1_sms_mms; +static int hf_btatt_alert_category_id_bitmask_1_missed_call; +static int hf_btatt_alert_category_id_bitmask_1_call; +static int hf_btatt_alert_category_id_bitmask_1_news; +static int hf_btatt_alert_category_id_bitmask_1_email; +static int hf_btatt_alert_category_id_bitmask_1_simple_alert; +static int hf_btatt_alert_category_id_bitmask_2; +static int hf_btatt_alert_category_id_bitmask_2_reserved; +static int hf_btatt_alert_category_id_bitmask_2_instant_message; +static int hf_btatt_alert_category_id_bitmask_2_high_prioritized_alert; +static int hf_btatt_alert_category_id; +static int hf_btatt_alert_command_id; +static int hf_btatt_alert_unread_count; +static int hf_btatt_alert_number_of_new_alert; +static int hf_btatt_alert_text_string_information; +static int hf_btatt_blood_pressure_feature; +static int hf_btatt_blood_pressure_feature_reserved; +static int hf_btatt_blood_pressure_feature_multiple_bond; +static int hf_btatt_blood_pressure_feature_measurement_position_detection; +static int hf_btatt_blood_pressure_feature_puls_rate_range; +static int hf_btatt_blood_pressure_feature_irregular_pulse_detection; +static int hf_btatt_blood_pressure_feature_cuff_fit_detection; +static int hf_btatt_blood_pressure_feature_body_movement_detection; +static int hf_btatt_le_scan_interval; +static int hf_btatt_le_scan_window; +static int hf_btatt_pnp_id_vendor_id_source; +static int hf_btatt_pnp_id_vendor_id; +static int hf_btatt_pnp_id_vendor_id_bluetooth_sig; +static int hf_btatt_pnp_id_vendor_id_usb_forum; +static int hf_btatt_pnp_id_product_id; +static int hf_btatt_pnp_id_product_version; +static int hf_btatt_glucose_feature; +static int hf_btatt_glucose_feature_reserved; +static int hf_btatt_glucose_feature_multiple_bond; +static int hf_btatt_glucose_feature_time_fault; +static int hf_btatt_glucose_feature_general_device_fault; +static int hf_btatt_glucose_feature_sensor_read_interrupt_detection; +static int hf_btatt_glucose_feature_sensor_temperature_high_low_detection; +static int hf_btatt_glucose_feature_sensor_result_high_low_detection; +static int hf_btatt_glucose_feature_sensor_strip_type_error_detection; +static int hf_btatt_glucose_feature_sensor_strip_insertion_error_detection; +static int hf_btatt_glucose_feature_sensor_sample_size; +static int hf_btatt_glucose_feature_sensor_malfunction_detection; +static int hf_btatt_glucose_feature_low_battery_detection_during_measurement; +static int hf_btatt_rsc_feature; +static int hf_btatt_rsc_feature_reserved; +static int hf_btatt_rsc_feature_multiple_sensor_locations; +static int hf_btatt_rsc_feature_calibration_procedure; +static int hf_btatt_rsc_feature_walking_or_running_status; +static int hf_btatt_rsc_feature_total_distance_measurement; +static int hf_btatt_rsc_feature_instantaneous_stride_length_measurement; +static int hf_btatt_csc_feature; +static int hf_btatt_csc_feature_reserved; +static int hf_btatt_csc_feature_multiple_sensor_locations; +static int hf_btatt_csc_feature_crank_revolution_data; +static int hf_btatt_csc_feature_wheel_revolution_data; +static int hf_btatt_sensor_location; +static int hf_btatt_elevation; +static int hf_btatt_pressure; +static int hf_btatt_temperature; +static int hf_btatt_humidity; +static int hf_btatt_true_wind_speed; +static int hf_btatt_true_wind_direction; +static int hf_btatt_apparent_wind_speed; +static int hf_btatt_apparent_wind_direction; +static int hf_btatt_gust_factor; +static int hf_btatt_pollen_concentration; +static int hf_btatt_uv_index; +static int hf_btatt_irradiance; +static int hf_btatt_rainfall; +static int hf_btatt_wind_chill; +static int hf_btatt_heart_index; +static int hf_btatt_dew_point; +static int hf_btatt_descriptor_value_changed_flags; +static int hf_btatt_descriptor_value_changed_flags_reserved; +static int hf_btatt_descriptor_value_changed_flags_change_to_characteristic_user_description_descriptor; +static int hf_btatt_descriptor_value_changed_flags_change_to_es_measurement_descriptor; +static int hf_btatt_descriptor_value_changed_flags_change_to_es_configuration_descriptor; +static int hf_btatt_descriptor_value_changed_flags_change_to_one_or_more_es_trigger_setting_descriptors; +static int hf_btatt_descriptor_value_changed_flags_source_of_change; +static int hf_btatt_aerobic_heart_rate_lower_limit; +static int hf_btatt_aerobic_threshold; +static int hf_btatt_age; +static int hf_btatt_anaerobic_heart_rate_lower_limit; +static int hf_btatt_anaerobic_heart_rate_upper_limit; +static int hf_btatt_anaerobic_threshold; +static int hf_btatt_aerobic_heart_rate_upper_limit; +static int hf_btatt_email_address; +static int hf_btatt_fat_burn_heart_rate_lower_limit; +static int hf_btatt_fat_burn_heart_rate_upper_limit; +static int hf_btatt_first_name; +static int hf_btatt_five_zone_heart_rate_limits_very_light_light_limit; +static int hf_btatt_five_zone_heart_rate_limits_light_moderate_limit; +static int hf_btatt_five_zone_heart_rate_limits_moderate_hard_limit; +static int hf_btatt_five_zone_heart_rate_limits_hard_maximum_limit; +static int hf_btatt_gender; +static int hf_btatt_heart_rate_max; +static int hf_btatt_height; +static int hf_btatt_hip_circumference; +static int hf_btatt_last_name; +static int hf_btatt_maximum_recommended_heart_rate; +static int hf_btatt_resting_heart_rate; +static int hf_btatt_sport_type_for_aerobic_and_anaerobic_thresholds; +static int hf_btatt_three_zone_heart_rate_limits_light_moderate; +static int hf_btatt_three_zone_heart_rate_limits_moderate_hard; +static int hf_btatt_two_zone_heart_rate_limit_fat_burn_fitness; +static int hf_btatt_vo2_max; +static int hf_btatt_waist_circumference; +static int hf_btatt_weight; +static int hf_btatt_database_change_increment; +static int hf_btatt_user_index; +static int hf_btatt_magnetic_flux_density_x; +static int hf_btatt_magnetic_flux_density_y; +static int hf_btatt_magnetic_flux_density_z; +static int hf_btatt_language; +static int hf_btatt_barometric_pressure_trend; +static int hf_btatt_central_address_resolution; +static int hf_btatt_resolvable_private_address; +static int hf_btatt_cycling_power_feature; +static int hf_btatt_cycling_power_feature_reserved; +static int hf_btatt_cycling_power_feature_factory_calibration_date; +static int hf_btatt_cycling_power_feature_instantaneous_measurement_direction; +static int hf_btatt_cycling_power_feature_sensor_measurement_context; +static int hf_btatt_cycling_power_feature_span_length_adjustment; +static int hf_btatt_cycling_power_feature_chain_weight_adjustment; +static int hf_btatt_cycling_power_feature_chain_length_adjustment; +static int hf_btatt_cycling_power_feature_crank_length_adjustment; +static int hf_btatt_cycling_power_feature_multiple_sensor_locations; +static int hf_btatt_cycling_power_feature_cycling_power_measurement_characteristic_content_masking; +static int hf_btatt_cycling_power_feature_offset_compensation; +static int hf_btatt_cycling_power_feature_offset_compensation_indicator; +static int hf_btatt_cycling_power_feature_accumulated_energy; +static int hf_btatt_cycling_power_feature_top_and_bottom_dead_spot_angles; +static int hf_btatt_cycling_power_feature_extreme_angles; +static int hf_btatt_cycling_power_feature_extreme_magnitudes; +static int hf_btatt_cycling_power_feature_crank_revolution_data; +static int hf_btatt_cycling_power_feature_wheel_revolution_data; +static int hf_btatt_cycling_power_feature_accumulated_torque; +static int hf_btatt_cycling_power_feature_pedal_power_balance; +static int hf_btatt_ln_feature; +static int hf_btatt_ln_feature_reserved; +static int hf_btatt_ln_feature_position_status; +static int hf_btatt_ln_feature_elevation_setting; +static int hf_btatt_ln_feature_fix_rate_setting; +static int hf_btatt_ln_feature_location_and_speed_characteristic_content_masking; +static int hf_btatt_ln_feature_vertical_dilution_of_precision; +static int hf_btatt_ln_feature_horizontal_dilution_of_precision; +static int hf_btatt_ln_feature_estimated_vertical_position_error; +static int hf_btatt_ln_feature_estimated_horizontal_position_error; +static int hf_btatt_ln_feature_time_to_first_fix; +static int hf_btatt_ln_feature_number_of_beacons_in_view; +static int hf_btatt_ln_feature_number_of_beacons_in_solution; +static int hf_btatt_ln_feature_estimated_time_of_arrival; +static int hf_btatt_ln_feature_remaining_vertical_distance; +static int hf_btatt_ln_feature_remaining_distance; +static int hf_btatt_ln_feature_utc_time; +static int hf_btatt_ln_feature_rolling_time; +static int hf_btatt_ln_feature_heading; +static int hf_btatt_ln_feature_elevation; +static int hf_btatt_ln_feature_location; +static int hf_btatt_ln_feature_total_distance; +static int hf_btatt_ln_feature_instantaneous_speed; +static int hf_btatt_body_composition_feature; +static int hf_btatt_body_composition_feature_reserved; +static int hf_btatt_body_composition_feature_height_measurement_resolution; +static int hf_btatt_body_composition_feature_mass_measurement_resolution; +static int hf_btatt_body_composition_feature_height; +static int hf_btatt_body_composition_feature_weight; +static int hf_btatt_body_composition_feature_impedance; +static int hf_btatt_body_composition_feature_body_water_mass; +static int hf_btatt_body_composition_feature_soft_lean_mass; +static int hf_btatt_body_composition_feature_fat_free_mass; +static int hf_btatt_body_composition_feature_muscle_mass; +static int hf_btatt_body_composition_feature_muscle_percentage; +static int hf_btatt_body_composition_feature_basal_metabolism; +static int hf_btatt_body_composition_feature_multiple_users; +static int hf_btatt_body_composition_feature_timestamp; +static int hf_btatt_weight_scale_feature; +static int hf_btatt_weight_scale_feature_reserved; +static int hf_btatt_weight_scale_feature_height_measurement_resolution; +static int hf_btatt_weight_scale_feature_weight_measurement_resolution; +static int hf_btatt_weight_scale_feature_bmi; +static int hf_btatt_weight_scale_feature_multiple_users; +static int hf_btatt_weight_scale_feature_timestamp; +static int hf_btatt_glucose_measurement_flags; +static int hf_btatt_glucose_measurement_flags_reserved; +static int hf_btatt_glucose_measurement_flags_context_information_follows; +static int hf_btatt_glucose_measurement_flags_sensor_status_annunciation_present; +static int hf_btatt_glucose_measurement_flags_glucose_concentration_units; +static int hf_btatt_glucose_measurement_flags_glucose_concentration_type_and_sample_location_present; +static int hf_btatt_glucose_measurement_flags_time_offset_present; +static int hf_btatt_glucose_measurement_sequence_number; +static int hf_btatt_glucose_measurement_base_time; +static int hf_btatt_glucose_measurement_time_offset; +static int hf_btatt_glucose_measurement_glucose_concentration_kg_per_l; +static int hf_btatt_glucose_measurement_glucose_concentration_mol_per_l; +static int hf_btatt_glucose_measurement_type_and_sample_location; +static int hf_btatt_glucose_measurement_type_and_sample_location_type; +static int hf_btatt_glucose_measurement_type_and_sample_location_sample_location; +static int hf_btatt_glucose_measurement_sensor_status_annunciation; +static int hf_btatt_glucose_measurement_sensor_status_annunciation_reserved; +static int hf_btatt_glucose_measurement_sensor_status_annunciation_time_fault; +static int hf_btatt_glucose_measurement_sensor_status_annunciation_general_fault; +static int hf_btatt_glucose_measurement_sensor_status_annunciation_read_interrupted; +static int hf_btatt_glucose_measurement_sensor_status_annunciation_temperature_too_low; +static int hf_btatt_glucose_measurement_sensor_status_annunciation_temperature_too_high; +static int hf_btatt_glucose_measurement_sensor_status_annunciation_result_too_low; +static int hf_btatt_glucose_measurement_sensor_status_annunciation_result_too_high; +static int hf_btatt_glucose_measurement_sensor_status_annunciation_strip_type_incorrect; +static int hf_btatt_glucose_measurement_sensor_status_annunciation_strip_insertion_error; +static int hf_btatt_glucose_measurement_sensor_status_annunciation_size_insufficient; +static int hf_btatt_glucose_measurement_sensor_status_annunciation_fault; +static int hf_btatt_glucose_measurement_sensor_status_annunciation_battery_low; +static int hf_btatt_bond_management_feature; +static int hf_btatt_bond_management_feature_feature_extension; +static int hf_btatt_bond_management_feature_reserved; +static int hf_btatt_bond_management_feature_identify_yourself; +static int hf_btatt_bond_management_feature_authorization_code_required_for_feature_above_9; +static int hf_btatt_bond_management_feature_remove_all_but_the_active_bond_on_le_transport_only_server; +static int hf_btatt_bond_management_feature_authorization_code_required_for_feature_above_8; +static int hf_btatt_bond_management_feature_remove_all_but_the_active_bond_on_br_edr_transport_only_server; +static int hf_btatt_bond_management_feature_authorization_code_required_for_feature_above_7; +static int hf_btatt_bond_management_feature_remove_all_but_the_active_bond_on_br_edr_and_le_server; +static int hf_btatt_bond_management_feature_authorization_code_required_for_feature_above_6; +static int hf_btatt_bond_management_feature_remove_all_bonds_on_le_transport_only_server; +static int hf_btatt_bond_management_feature_authorization_code_required_for_feature_above_5; +static int hf_btatt_bond_management_feature_remove_all_bonds_on_br_edr_transport_only_server; +static int hf_btatt_bond_management_feature_authorization_code_required_for_feature_above_4; +static int hf_btatt_bond_management_feature_remove_all_bonds_on_br_edr_and_le_server; +static int hf_btatt_bond_management_feature_authorization_code_required_for_feature_above_3; +static int hf_btatt_bond_management_feature_delete_bond_of_current_le_transport_only_connection; +static int hf_btatt_bond_management_feature_authorization_code_required_for_feature_above_2; +static int hf_btatt_bond_management_feature_delete_bond_of_current_br_edr_transport_only_connection; +static int hf_btatt_bond_management_feature_authorization_code_required_for_feature_above_1; +static int hf_btatt_bond_management_feature_delete_bond_of_current_br_edr_and_le_connection; +static int hf_btatt_bond_management_feature_nth; +static int hf_btatt_bond_management_feature_nth_feature_extension; +static int hf_btatt_bond_management_feature_nth_reserved; +static int hf_btatt_bond_management_control_point_opcode; +static int hf_btatt_bond_management_control_point_authorization_code; +static int hf_btatt_temperature_measurement_flags; +static int hf_btatt_temperature_measurement_flags_reserved; +static int hf_btatt_temperature_measurement_flags_temperature_type; +static int hf_btatt_temperature_measurement_flags_timestamp; +static int hf_btatt_temperature_measurement_flags_temperature_unit; +static int hf_btatt_temperature_measurement_value_celsius; +static int hf_btatt_temperature_measurement_value_fahrenheit; +static int hf_btatt_temperature_measurement_timestamp; +static int hf_btatt_glucose_measurement_context_flags; +static int hf_btatt_glucose_measurement_context_flags_extended_flags; +static int hf_btatt_glucose_measurement_context_flags_hba1c; +static int hf_btatt_glucose_measurement_context_flags_medication_value_units; +static int hf_btatt_glucose_measurement_context_flags_medication_id_and_medication; +static int hf_btatt_glucose_measurement_context_flags_exercise_duration_and_exercise_intensity; +static int hf_btatt_glucose_measurement_context_flags_tester_health; +static int hf_btatt_glucose_measurement_context_flags_meal; +static int hf_btatt_glucose_measurement_context_flags_carbohydrate_id_and_carbohydrate; +static int hf_btatt_glucose_measurement_context_sequence_number; +static int hf_btatt_glucose_measurement_context_extended_flags; +static int hf_btatt_glucose_measurement_context_extended_flags_reserved; +static int hf_btatt_glucose_measurement_context_carbohydrate_id; +static int hf_btatt_glucose_measurement_context_carbohydrate_kg; +static int hf_btatt_glucose_measurement_context_meal; +static int hf_btatt_glucose_measurement_context_tester_health; +static int hf_btatt_glucose_measurement_context_tester; +static int hf_btatt_glucose_measurement_context_health; +static int hf_btatt_glucose_measurement_context_exercise_duration; +static int hf_btatt_glucose_measurement_context_exercise_intensity; +static int hf_btatt_glucose_measurement_context_medication_id; +static int hf_btatt_glucose_measurement_context_medication_l; +static int hf_btatt_glucose_measurement_context_medication_kg; +static int hf_btatt_glucose_measurement_context_hba1c; +static int hf_btatt_blood_pressure_measurement_flags; +static int hf_btatt_blood_pressure_measurement_flags_reserved; +static int hf_btatt_blood_pressure_measurement_flags_measurement_status; +static int hf_btatt_blood_pressure_measurement_flags_user_id; +static int hf_btatt_blood_pressure_measurement_flags_pulse_rate; +static int hf_btatt_blood_pressure_measurement_flags_timestamp; +static int hf_btatt_blood_pressure_measurement_flags_unit; +static int hf_btatt_blood_pressure_measurement_compound_value_systolic_kpa; +static int hf_btatt_blood_pressure_measurement_compound_value_diastolic_kpa; +static int hf_btatt_blood_pressure_measurement_compound_value_mean_arterial_pressure_kpa; +static int hf_btatt_blood_pressure_measurement_compound_value_systolic_mmhg; +static int hf_btatt_blood_pressure_measurement_compound_value_diastolic_mmhg; +static int hf_btatt_blood_pressure_measurement_compound_value_mean_arterial_pressure_mmhg; +static int hf_btatt_blood_pressure_measurement_timestamp; +static int hf_btatt_blood_pressure_measurement_pulse_rate; +static int hf_btatt_blood_pressure_measurement_user_id; +static int hf_btatt_blood_pressure_measurement_status; +static int hf_btatt_blood_pressure_measurement_status_reserved; +static int hf_btatt_blood_pressure_measurement_status_improper_measurement_position; +static int hf_btatt_blood_pressure_measurement_status_pulse_rate_range_detection; +static int hf_btatt_blood_pressure_measurement_status_irregular_pulse; +static int hf_btatt_blood_pressure_measurement_status_cuff_fit_too_loose; +static int hf_btatt_blood_pressure_measurement_status_body_movement; +static int hf_btatt_heart_rate_measurement_flags; +static int hf_btatt_heart_rate_measurement_flags_reserved; +static int hf_btatt_heart_rate_measurement_flags_rr_interval; +static int hf_btatt_heart_rate_measurement_flags_energy_expended; +static int hf_btatt_heart_rate_measurement_flags_sensor_contact_status_support; +static int hf_btatt_heart_rate_measurement_flags_sensor_contact_status_contact; +static int hf_btatt_heart_rate_measurement_flags_value_16; +static int hf_btatt_heart_rate_measurement_value_8; +static int hf_btatt_heart_rate_measurement_value_16; +static int hf_btatt_heart_rate_measurement_energy_expended; +static int hf_btatt_heart_rate_measurement_rr_intervals; +static int hf_btatt_heart_rate_measurement_rr_interval; +static int hf_btatt_record_access_control_point_opcode; +static int hf_btatt_record_access_control_point_operator; +static int hf_btatt_record_access_control_point_operand; +static int hf_btatt_record_access_control_point_operand_filter_type; +static int hf_btatt_record_access_control_point_operand_min_time_offset; +static int hf_btatt_record_access_control_point_operand_max_time_offset; +static int hf_btatt_record_access_control_point_operand_number_of_records; +static int hf_btatt_record_access_control_point_request_opcode; +static int hf_btatt_record_access_control_point_response_code; +static int hf_btatt_value_trigger_setting_condition; +static int hf_btatt_value_trigger_setting_analog; +static int hf_btatt_value_trigger_setting_analog_one; +static int hf_btatt_value_trigger_setting_analog_two; +static int hf_btatt_digital; +static int hf_btatt_digital_output; +static int hf_btatt_analog; +static int hf_btatt_analog_output; +static int hf_btatt_location_name; +static int hf_btatt_uncertainty; +static int hf_btatt_uncertainty_reserved; +static int hf_btatt_uncertainty_precision; +static int hf_btatt_uncertainty_update_time; +static int hf_btatt_uncertainty_stationary; +static int hf_btatt_latitude; +static int hf_btatt_longitude; +static int hf_btatt_local_north_coordinate; +static int hf_btatt_local_east_coordinate; +static int hf_btatt_floor_number; +static int hf_btatt_altitude; +static int hf_btatt_indoor_positioning_configuration; +static int hf_btatt_indoor_positioning_configuration_reserved; +static int hf_btatt_indoor_positioning_configuration_location_name; +static int hf_btatt_indoor_positioning_configuration_uncertainty; +static int hf_btatt_indoor_positioning_configuration_floor_number; +static int hf_btatt_indoor_positioning_configuration_altitude; +static int hf_btatt_indoor_positioning_configuration_tx_power; +static int hf_btatt_indoor_positioning_configuration_coordinate_system; +static int hf_btatt_indoor_positioning_configuration_coordinates; +static int hf_btatt_number_of_digitals; +static int hf_btatt_time_trigger_setting_condition; +static int hf_btatt_time_trigger_setting_value; +static int hf_btatt_time_trigger_setting_value_count; +static int hf_btatt_time_trigger_setting_value_time_interval; +static int hf_btatt_rsc_measurement_flags; +static int hf_btatt_rsc_measurement_flags_reserved; +static int hf_btatt_rsc_measurement_flags_type_of_movement; +static int hf_btatt_rsc_measurement_flags_total_distance_present; +static int hf_btatt_rsc_measurement_flags_instantaneous_stride_length_present; +static int hf_btatt_rsc_measurement_instantaneous_speed; +static int hf_btatt_rsc_measurement_instantaneous_cadence; +static int hf_btatt_rsc_measurement_instantaneous_stride_length; +static int hf_btatt_rsc_measurement_total_distance; +static int hf_btatt_sc_control_point_opcode; +static int hf_btatt_sc_control_point_cumulative_value; +static int hf_btatt_sc_control_point_request_opcode; +static int hf_btatt_sc_control_point_response_value; +static int hf_btatt_cycling_power_measurement_flags; +static int hf_btatt_cycling_power_measurement_flags_reserved; +static int hf_btatt_cycling_power_measurement_flags_offset_compensation_indicator; +static int hf_btatt_cycling_power_measurement_flags_accumulated_energy; +static int hf_btatt_cycling_power_measurement_flags_bottom_dead_spot_angle; +static int hf_btatt_cycling_power_measurement_flags_top_dead_spot_angle; +static int hf_btatt_cycling_power_measurement_flags_extreme_angles; +static int hf_btatt_cycling_power_measurement_flags_extreme_torque_magnitudes; +static int hf_btatt_cycling_power_measurement_flags_extreme_force_magnitudes; +static int hf_btatt_cycling_power_measurement_flags_crank_revolution_data; +static int hf_btatt_cycling_power_measurement_flags_wheel_revolution_data; +static int hf_btatt_cycling_power_measurement_flags_accumulated_torque_source; +static int hf_btatt_cycling_power_measurement_flags_accumulated_torque; +static int hf_btatt_cycling_power_measurement_flags_pedal_power_balance_reference; +static int hf_btatt_cycling_power_measurement_flags_pedal_power_balance; +static int hf_btatt_cycling_power_measurement_instantaneous_power; +static int hf_btatt_cycling_power_measurement_pedal_power_balance; +static int hf_btatt_cycling_power_measurement_accumulated_torque; +static int hf_btatt_cycling_power_measurement_wheel_revolution_data_cumulative_wheel_revolutions; +static int hf_btatt_cycling_power_measurement_wheel_revolution_data_last_wheel_event_time; +static int hf_btatt_cycling_power_measurement_crank_revolution_data_cumulative_crank_revolutions; +static int hf_btatt_cycling_power_measurement_crank_revolution_data_last_crank_event_time; +static int hf_btatt_cycling_power_measurement_extreme_force_magnitudes_maximum_force_magnitude; +static int hf_btatt_cycling_power_measurement_extreme_force_magnitudes_minimum_force_magnitude; +static int hf_btatt_cycling_power_measurement_extreme_torque_magnitudes_maximum_torque_magnitude; +static int hf_btatt_cycling_power_measurement_extreme_torque_magnitudes_minimum_torque_magnitude; +static int hf_btatt_cycling_power_measurement_extreme_angles; +static int hf_btatt_cycling_power_measurement_extreme_angles_maximum; +static int hf_btatt_cycling_power_measurement_extreme_angles_minimum; +static int hf_btatt_cycling_power_measurement_top_dead_spot_angle; +static int hf_btatt_cycling_power_measurement_bottom_dead_spot_angle; +static int hf_btatt_cycling_power_measurement_accumulated_energy; +static int hf_btatt_csc_measurement_flags; +static int hf_btatt_csc_measurement_flags_reserved; +static int hf_btatt_csc_measurement_flags_crank_revolution_data; +static int hf_btatt_csc_measurement_flags_wheel_revolution_data; +static int hf_btatt_csc_measurement_cumulative_wheel_revolutions; +static int hf_btatt_csc_measurement_cumulative_crank_revolutions; +static int hf_btatt_csc_measurement_last_event_time; +static int hf_btatt_cycling_power_vector_flags; +static int hf_btatt_cycling_power_vector_flags_reserved; +static int hf_btatt_cycling_power_vector_flags_instantaneous_measurement_direction; +static int hf_btatt_cycling_power_vector_flags_instantaneous_torque_magnitude_array; +static int hf_btatt_cycling_power_vector_flags_instantaneous_force_magnitude_array; +static int hf_btatt_cycling_power_vector_flags_first_crank_measurement_angle; +static int hf_btatt_cycling_power_vector_flags_crank_revolution_data; +static int hf_btatt_cycling_power_vector_crank_revolution_data_cumulative_crank_revolutions; +static int hf_btatt_cycling_power_vector_crank_revolution_data_last_crank_event_time; +static int hf_btatt_cycling_power_vector_first_crank_measurement_angle; +static int hf_btatt_cycling_power_vector_instantaneous_force_magnitude_array; +static int hf_btatt_cycling_power_vector_instantaneous_torque_magnitude_array; +static int hf_btatt_cycling_power_control_point_opcode; +static int hf_btatt_cycling_power_control_point_cumulative_value; +static int hf_btatt_cycling_power_control_point_sensor_location; +static int hf_btatt_cycling_power_control_point_crank_length; +static int hf_btatt_cycling_power_control_point_chain_length; +static int hf_btatt_cycling_power_control_point_chain_weight; +static int hf_btatt_cycling_power_control_point_span_length; +static int hf_btatt_cycling_power_control_point_content_mask; +static int hf_btatt_cycling_power_control_point_content_mask_reserved; +static int hf_btatt_cycling_power_control_point_content_mask_accumulated_energy; +static int hf_btatt_cycling_power_control_point_content_mask_bottom_dead_spot_angle; +static int hf_btatt_cycling_power_control_point_content_mask_top_dead_spot_angle; +static int hf_btatt_cycling_power_control_point_content_mask_extreme_angles; +static int hf_btatt_cycling_power_control_point_content_mask_extreme_magnitudes; +static int hf_btatt_cycling_power_control_point_content_mask_crank_revolution_data; +static int hf_btatt_cycling_power_control_point_content_mask_wheel_revolution_data; +static int hf_btatt_cycling_power_control_point_content_mask_accumulated_torque; +static int hf_btatt_cycling_power_control_point_content_mask_pedal_power_balance; +static int hf_btatt_cycling_power_control_point_request_opcode; +static int hf_btatt_cycling_power_control_point_response_value; +static int hf_btatt_cycling_power_control_point_start_offset_compensation; +static int hf_btatt_cycling_power_control_point_sampling_rate; +static int hf_btatt_cycling_power_control_point_factory_calibration_date; +static int hf_btatt_location_and_speed_flags; +static int hf_btatt_location_and_speed_flags_reserved; +static int hf_btatt_location_and_speed_flags_heading_source; +static int hf_btatt_location_and_speed_flags_elevation_source; +static int hf_btatt_location_and_speed_flags_speed_and_distance_format; +static int hf_btatt_location_and_speed_flags_position_status; +static int hf_btatt_location_and_speed_flags_utc_time; +static int hf_btatt_location_and_speed_flags_rolling_time; +static int hf_btatt_location_and_speed_flags_heading; +static int hf_btatt_location_and_speed_flags_elevation; +static int hf_btatt_location_and_speed_flags_location; +static int hf_btatt_location_and_speed_flags_total_distance; +static int hf_btatt_location_and_speed_flags_instantaneous_speed; +static int hf_btatt_location_and_speed_instantaneous_speed; +static int hf_btatt_location_and_speed_total_distance; +static int hf_btatt_location_and_speed_location_latitude; +static int hf_btatt_location_and_speed_location_longitude; +static int hf_btatt_location_and_speed_elevation; +static int hf_btatt_location_and_speed_heading; +static int hf_btatt_location_and_speed_rolling_time; +static int hf_btatt_location_and_speed_utc_time; +static int hf_btatt_navigation_flags; +static int hf_btatt_navigation_flags_reserved; +static int hf_btatt_navigation_flags_destination_reached; +static int hf_btatt_navigation_flags_waypoint_reached; +static int hf_btatt_navigation_flags_navigation_indicator_type; +static int hf_btatt_navigation_flags_heading_source; +static int hf_btatt_navigation_flags_position_status; +static int hf_btatt_navigation_flags_estimated_time_of_arrival; +static int hf_btatt_navigation_flags_remaining_vertical_distance; +static int hf_btatt_navigation_flags_remaining_distance; +static int hf_btatt_navigation_bearing; +static int hf_btatt_navigation_heading; +static int hf_btatt_navigation_remaining_distance; +static int hf_btatt_navigation_remaining_vertical_distance; +static int hf_btatt_navigation_estimated_time_of_arrival; +static int hf_btatt_position_quality_flags; +static int hf_btatt_position_quality_flags_reserved; +static int hf_btatt_position_quality_flags_position_status; +static int hf_btatt_position_quality_flags_vdop; +static int hf_btatt_position_quality_flags_hdop; +static int hf_btatt_position_quality_flags_evpe; +static int hf_btatt_position_quality_flags_ehpe; +static int hf_btatt_position_quality_flags_time_to_first_fix; +static int hf_btatt_position_quality_flags_number_of_beacons_in_view; +static int hf_btatt_position_quality_flags_number_of_beacons_in_solution; +static int hf_btatt_position_quality_number_of_beacons_in_solution; +static int hf_btatt_position_quality_number_of_beacons_in_view; +static int hf_btatt_position_quality_time_to_first_fix; +static int hf_btatt_position_quality_ehpe; +static int hf_btatt_position_quality_evpe; +static int hf_btatt_position_quality_hdop; +static int hf_btatt_position_quality_vdop; +static int hf_btatt_ln_control_point_opcode; +static int hf_btatt_ln_control_point_cumulative_value; +static int hf_btatt_ln_control_point_content_mask; +static int hf_btatt_ln_control_point_content_mask_reserved; +static int hf_btatt_ln_control_point_content_mask_utc_time; +static int hf_btatt_ln_control_point_content_mask_rolling_time; +static int hf_btatt_ln_control_point_content_mask_heading; +static int hf_btatt_ln_control_point_content_mask_elevation; +static int hf_btatt_ln_control_point_content_mask_location; +static int hf_btatt_ln_control_point_content_mask_total_distance; +static int hf_btatt_ln_control_point_content_mask_instantaneous_speed; +static int hf_btatt_ln_control_point_navigation_control; +static int hf_btatt_ln_control_point_route_number; +static int hf_btatt_ln_control_point_fix_rate; +static int hf_btatt_ln_control_point_elevation; +static int hf_btatt_ln_control_point_request_opcode; +static int hf_btatt_ln_control_point_response_value; +static int hf_btatt_ln_control_point_response_value_number_of_routes; +static int hf_btatt_ln_control_point_response_value_name_of_route; +static int hf_btatt_body_composition_measurement_flags; +static int hf_btatt_body_composition_measurement_flags_reserved; +static int hf_btatt_body_composition_measurement_flags_multiple_packet_measurement; +static int hf_btatt_body_composition_measurement_flags_height; +static int hf_btatt_body_composition_measurement_flags_weight; +static int hf_btatt_body_composition_measurement_flags_impedance; +static int hf_btatt_body_composition_measurement_flags_body_water_mass; +static int hf_btatt_body_composition_measurement_flags_soft_lean_mass; +static int hf_btatt_body_composition_measurement_flags_fat_free_mass; +static int hf_btatt_body_composition_measurement_flags_muscle_mass; +static int hf_btatt_body_composition_measurement_flags_muscle_percentage; +static int hf_btatt_body_composition_measurement_flags_basal_metabolism; +static int hf_btatt_body_composition_measurement_flags_user_id; +static int hf_btatt_body_composition_measurement_flags_timestamp; +static int hf_btatt_body_composition_measurement_flags_measurement_units; +static int hf_btatt_body_composition_measurement_body_fat_percentage; +static int hf_btatt_body_composition_measurement_timestamp; +static int hf_btatt_body_composition_measurement_user_id; +static int hf_btatt_body_composition_measurement_basal_metabolism; +static int hf_btatt_body_composition_measurement_muscle_percentage; +static int hf_btatt_body_composition_measurement_muscle_mass_lb; +static int hf_btatt_body_composition_measurement_muscle_mass_kg; +static int hf_btatt_body_composition_measurement_fat_free_mass_lb; +static int hf_btatt_body_composition_measurement_fat_free_mass_kg; +static int hf_btatt_body_composition_measurement_soft_lean_mass_lb; +static int hf_btatt_body_composition_measurement_soft_lean_mass_kg; +static int hf_btatt_body_composition_measurement_body_water_mass_lb; +static int hf_btatt_body_composition_measurement_body_water_mass_kg; +static int hf_btatt_body_composition_measurement_impedance; +static int hf_btatt_body_composition_measurement_weight_lb; +static int hf_btatt_body_composition_measurement_weight_kg; +static int hf_btatt_body_composition_measurement_height_inches; +static int hf_btatt_body_composition_measurement_height_meter; +static int hf_btatt_weight_measurement_flags; +static int hf_btatt_weight_measurement_flags_reserved; +static int hf_btatt_weight_measurement_flags_bmi_and_height; +static int hf_btatt_weight_measurement_flags_user_id; +static int hf_btatt_weight_measurement_flags_timestamp; +static int hf_btatt_weight_measurement_flags_measurement_units; +static int hf_btatt_weight_measurement_weight_lb; +static int hf_btatt_weight_measurement_weight_kg; +static int hf_btatt_weight_measurement_timestamp; +static int hf_btatt_weight_measurement_user_id; +static int hf_btatt_weight_measurement_bmi; +static int hf_btatt_weight_measurement_height_in; +static int hf_btatt_weight_measurement_height_m; +static int hf_btatt_user_control_point_opcode; +static int hf_btatt_user_control_point_request_opcode; +static int hf_btatt_user_control_point_response_value; +static int hf_btatt_user_control_point_consent_code; +static int hf_btatt_cgm_measurement_size; +static int hf_btatt_cgm_measurement_flags; +static int hf_btatt_cgm_measurement_flags_cgm_trend_information; +static int hf_btatt_cgm_measurement_flags_cgm_quality; +static int hf_btatt_cgm_measurement_flags_reserved; +static int hf_btatt_cgm_measurement_flags_sensor_status_annunciation_warning; +static int hf_btatt_cgm_measurement_flags_sensor_status_annunciation_cal_temp; +static int hf_btatt_cgm_measurement_flags_sensor_status_annunciation_status; +static int hf_btatt_cgm_measurement_glucose_concentration; +static int hf_btatt_cgm_measurement_time_offset; +static int hf_btatt_cgm_sensor_status_annunciation; +static int hf_btatt_cgm_sensor_status_annunciation_status; +static int hf_btatt_cgm_sensor_status_annunciation_status_reserved; +static int hf_btatt_cgm_sensor_status_annunciation_status_general_device_fault_has_occurred_in_the_sensor; +static int hf_btatt_cgm_sensor_status_annunciation_status_device_specific_alert; +static int hf_btatt_cgm_sensor_status_annunciation_status_sensor_malfunction; +static int hf_btatt_cgm_sensor_status_annunciation_status_sensor_type_incorrect_for_device; +static int hf_btatt_cgm_sensor_status_annunciation_status_device_battery_low; +static int hf_btatt_cgm_sensor_status_annunciation_status_session_stopped; +static int hf_btatt_cgm_sensor_status_annunciation_cal_temp; +static int hf_btatt_cgm_sensor_status_annunciation_cal_temp_reserved; +static int hf_btatt_cgm_sensor_status_annunciation_cal_temp_sensor_temperature_too_low_for_valid_test_result_at_time_of_measurement; +static int hf_btatt_cgm_sensor_status_annunciation_cal_temp_sensor_temperature_too_high_for_valid_test_result_at_time_of_measurement; +static int hf_btatt_cgm_sensor_status_annunciation_cal_temp_calibration_required; +static int hf_btatt_cgm_sensor_status_annunciation_cal_temp_calibration_recommended; +static int hf_btatt_cgm_sensor_status_annunciation_cal_temp_calibration_not_allowed; +static int hf_btatt_cgm_sensor_status_annunciation_cal_temp_time_synchronization_between_sensor_and_collector_required; +static int hf_btatt_cgm_sensor_status_annunciation_warning; +static int hf_btatt_cgm_sensor_status_annunciation_warning_sensor_result_higher_than_the_device_can_process; +static int hf_btatt_cgm_sensor_status_annunciation_warning_sensor_result_lower_than_the_device_can_process; +static int hf_btatt_cgm_sensor_status_annunciation_warning_sensor_rate_of_increase_exceeded; +static int hf_btatt_cgm_sensor_status_annunciation_warning_sensor_rate_of_decrease_exceeded; +static int hf_btatt_cgm_sensor_status_annunciation_warning_sensor_result_higher_than_the_hyper_level; +static int hf_btatt_cgm_sensor_status_annunciation_warning_sensor_result_lower_than_the_hypo_level; +static int hf_btatt_cgm_sensor_status_annunciation_warning_sensor_result_higher_than_the_patient_high_level; +static int hf_btatt_cgm_sensor_status_annunciation_warning_sensor_result_lower_than_the_patient_low_level; +static int hf_btatt_cgm_measurement_trend_information; +static int hf_btatt_cgm_measurement_quality; +static int hf_btatt_cgm_e2e_crc; +static int hf_btatt_cgm_feature_feature; +static int hf_btatt_cgm_feature_feature_reserved; +static int hf_btatt_cgm_feature_feature_quality; +static int hf_btatt_cgm_feature_feature_trend_information; +static int hf_btatt_cgm_feature_feature_multiple_sessions; +static int hf_btatt_cgm_feature_feature_multiple_bond; +static int hf_btatt_cgm_feature_feature_e2e_crc; +static int hf_btatt_cgm_feature_feature_general_device_fault; +static int hf_btatt_cgm_feature_feature_sensor_type_error_detection; +static int hf_btatt_cgm_feature_feature_low_battery_detection; +static int hf_btatt_cgm_feature_feature_sensor_result_high_low_detection; +static int hf_btatt_cgm_feature_feature_sensor_temperature_high_low_detection; +static int hf_btatt_cgm_feature_feature_sensor_malfunction_detection; +static int hf_btatt_cgm_feature_feature_device_specific_alert; +static int hf_btatt_cgm_feature_feature_rate_of_increase_decrease_alerts; +static int hf_btatt_cgm_feature_feature_hyper_alerts; +static int hf_btatt_cgm_feature_feature_hypo_alerts; +static int hf_btatt_cgm_feature_feature_patient_high_low_alerts; +static int hf_btatt_cgm_feature_feature_calibration; +static int hf_btatt_cgm_type_and_sample_location; +static int hf_btatt_cgm_type; +static int hf_btatt_cgm_sample_location; +static int hf_btatt_cgm_time_offset; +static int hf_btatt_cgm_status; +static int hf_btatt_cgm_session_start_time; +static int hf_btatt_cgm_session_run_time; +static int hf_btatt_cgm_specific_ops_control_point_opcode; +static int hf_btatt_cgm_specific_ops_control_point_operand; +static int hf_btatt_cgm_specific_ops_control_point_operand_communication_interval; +static int hf_btatt_cgm_specific_ops_control_point_calibration_glucose_concentration; +static int hf_btatt_cgm_specific_ops_control_point_calibration_time; +static int hf_btatt_cgm_specific_ops_control_point_next_calibration_time; +static int hf_btatt_cgm_specific_ops_control_point_calibration_data_record_number; +static int hf_btatt_cgm_specific_ops_control_point_calibration_status; +static int hf_btatt_cgm_specific_ops_control_point_calibration_status_reserved; +static int hf_btatt_cgm_specific_ops_control_point_calibration_status_pending; +static int hf_btatt_cgm_specific_ops_control_point_calibration_status_out_of_range; +static int hf_btatt_cgm_specific_ops_control_point_calibration_status_rejected; +static int hf_btatt_cgm_specific_ops_control_point_operand_calibration_data_record_number; +static int hf_btatt_cgm_specific_ops_control_point_operand_alert_level; +static int hf_btatt_cgm_specific_ops_control_point_operand_alert_level_rate; +static int hf_btatt_cgm_specific_ops_control_point_request_opcode; +static int hf_btatt_cgm_specific_ops_control_point_response_code; +static int hf_btatt_uri; +static int hf_btatt_http_headers; +static int hf_btatt_http_status_code; +static int hf_btatt_http_data_status; +static int hf_btatt_http_data_status_reserved; +static int hf_btatt_http_data_status_body_truncated; +static int hf_btatt_http_data_status_body_received; +static int hf_btatt_http_data_status_headers_truncated; +static int hf_btatt_http_data_status_headers_received; +static int hf_btatt_http_entity_body; +static int hf_btatt_http_control_point_opcode; +static int hf_btatt_https_security; +static int hf_btatt_tds_opcode; +static int hf_btatt_tds_result_code; +static int hf_btatt_tds_organization_id; +static int hf_btatt_tds_data; +static int hf_btatt_ots_feature_oacp; +static int hf_btatt_ots_feature_oacp_reserved; +static int hf_btatt_ots_feature_oacp_abort; +static int hf_btatt_ots_feature_oacp_patching_of_object; +static int hf_btatt_ots_feature_oacp_truncation_of_objects; +static int hf_btatt_ots_feature_oacp_appending_additional_data_to_object; +static int hf_btatt_ots_feature_oacp_write; +static int hf_btatt_ots_feature_oacp_read; +static int hf_btatt_ots_feature_oacp_execute; +static int hf_btatt_ots_feature_oacp_calculate_checksum; +static int hf_btatt_ots_feature_oacp_delete; +static int hf_btatt_ots_feature_oacp_create; +static int hf_btatt_ots_feature_olcp; +static int hf_btatt_ots_feature_olcp_reserved; +static int hf_btatt_ots_feature_olcp_clear_marking; +static int hf_btatt_ots_feature_olcp_request_number_of_objects; +static int hf_btatt_ots_feature_olcp_order; +static int hf_btatt_ots_feature_olcp_go_to; +static int hf_btatt_ots_object_name; +static int hf_btatt_ots_current_size; +static int hf_btatt_ots_allocated_size; +static int hf_btatt_ots_object_id; +static int hf_btatt_ots_properties; +static int hf_btatt_ots_properties_reserved; +static int hf_btatt_ots_properties_mark; +static int hf_btatt_ots_properties_patch; +static int hf_btatt_ots_properties_truncate; +static int hf_btatt_ots_properties_append; +static int hf_btatt_ots_properties_write; +static int hf_btatt_ots_properties_read; +static int hf_btatt_ots_properties_execute; +static int hf_btatt_ots_properties_delete; +static int hf_btatt_ots_flags; +static int hf_btatt_ots_flags_reserved; +static int hf_btatt_ots_flags_object_deletion; +static int hf_btatt_ots_flags_object_creation; +static int hf_btatt_ots_flags_change_occurred_to_the_object_metadata; +static int hf_btatt_ots_flags_change_occurred_to_the_object_contents; +static int hf_btatt_ots_flags_source_of_change; +static int hf_btatt_ots_action_opcode; +static int hf_btatt_ots_size; +static int hf_btatt_ots_offset; +static int hf_btatt_ots_length; +static int hf_btatt_ots_execute_data; +static int hf_btatt_ots_action_response_opcode; +static int hf_btatt_ots_action_result_code; +static int hf_btatt_ots_checksum; +static int hf_btatt_ots_list_opcode; +static int hf_btatt_ots_list_order; +static int hf_btatt_ots_list_response_opcode; +static int hf_btatt_ots_list_result_code; +static int hf_btatt_ots_list_total_number_of_objects; +static int hf_btatt_ots_filter; +static int hf_btatt_ots_name_string; +static int hf_btatt_ots_size_from; +static int hf_btatt_ots_size_to; +static int hf_btatt_ots_object_first_created; +static int hf_btatt_ots_object_last_modified; +static int hf_btatt_plx_spot_check_measurement_flags; +static int hf_btatt_plx_spot_check_measurement_flags_reserved; +static int hf_btatt_plx_spot_check_measurement_flags_device_clock_is_not_set; +static int hf_btatt_plx_spot_check_measurement_flags_pulse_amplitude_index; +static int hf_btatt_plx_spot_check_measurement_flags_device_and_sensor_status; +static int hf_btatt_plx_spot_check_measurement_flags_measurement_status; +static int hf_btatt_plx_spot_check_measurement_flags_timestamp; +static int hf_btatt_plx_spo2; +static int hf_btatt_plx_pulse_rate; +static int hf_btatt_plx_spot_check_measurement_timestamp; +static int hf_btatt_plx_measurement_status; +static int hf_btatt_plx_measurement_status_invalid_measurement_detected; +static int hf_btatt_plx_measurement_status_questionable_measurement_detected; +static int hf_btatt_plx_measurement_status_measurement_unavailable; +static int hf_btatt_plx_measurement_status_calibration_ongoing; +static int hf_btatt_plx_measurement_status_data_for_testing; +static int hf_btatt_plx_measurement_status_data_for_demonstration; +static int hf_btatt_plx_measurement_status_data_from_measurement_storage; +static int hf_btatt_plx_measurement_status_fully_qualified_data; +static int hf_btatt_plx_measurement_status_validated_data; +static int hf_btatt_plx_measurement_status_early_estimated_data; +static int hf_btatt_plx_measurement_status_measurement_ongoing; +static int hf_btatt_plx_measurement_status_reserved; +static int hf_btatt_plx_device_and_sensor_status; +static int hf_btatt_plx_device_and_sensor_status_reserved; +static int hf_btatt_plx_device_and_sensor_status_sensor_disconnected; +static int hf_btatt_plx_device_and_sensor_status_sensor_malfunctioning; +static int hf_btatt_plx_device_and_sensor_status_sensor_displaced; +static int hf_btatt_plx_device_and_sensor_status_unknown_sensor_connected; +static int hf_btatt_plx_device_and_sensor_status_sensor_unconnected_to_user; +static int hf_btatt_plx_device_and_sensor_status_sensor_interference_detected; +static int hf_btatt_plx_device_and_sensor_status_signal_analysis_ongoing; +static int hf_btatt_plx_device_and_sensor_status_questionable_pulse_detected; +static int hf_btatt_plx_device_and_sensor_status_non_pulsatile_signal_detected; +static int hf_btatt_plx_device_and_sensor_status_erratic_signal_detected; +static int hf_btatt_plx_device_and_sensor_status_low_perfusion_detected; +static int hf_btatt_plx_device_and_sensor_status_poor_signal_detected; +static int hf_btatt_plx_device_and_sensor_status_inadequate_signal_detected; +static int hf_btatt_plx_device_and_sensor_status_signal_processing_irregularity_detected; +static int hf_btatt_plx_device_and_sensor_status_equipment_malfunction_detected; +static int hf_btatt_plx_device_and_sensor_status_extended_display_update_ongoing; +static int hf_btatt_plx_pulse_amplitude_index; +static int hf_btatt_plx_spo2pr_spot_check; +static int hf_btatt_plx_spo2pr_normal; +static int hf_btatt_plx_spo2pr_fast; +static int hf_btatt_plx_spo2pr_slow; +static int hf_btatt_plx_continuous_measurement_flags; +static int hf_btatt_plx_continuous_measurement_flags_reserved; +static int hf_btatt_plx_continuous_measurement_flags_pulse_amplitude_index; +static int hf_btatt_plx_continuous_measurement_flags_device_and_sensor_status; +static int hf_btatt_plx_continuous_measurement_flags_measurement_status; +static int hf_btatt_plx_continuous_measurement_flags_spo2pr_slow; +static int hf_btatt_plx_continuous_measurement_flags_spo2pr_fast; +static int hf_btatt_plx_features_supported_features; +static int hf_btatt_plx_features_supported_features_reserved; +static int hf_btatt_plx_features_supported_features_multiple_bonds; +static int hf_btatt_plx_features_supported_features_pulse_amplitude_index; +static int hf_btatt_plx_features_supported_features_spo2pr_slow; +static int hf_btatt_plx_features_supported_features_spo2pr_fast; +static int hf_btatt_plx_features_supported_features_timestamp_storage_for_spot_check; +static int hf_btatt_plx_features_supported_features_measurement_storage_for_spot_check; +static int hf_btatt_plx_features_supported_features_device_and_sensor_status; +static int hf_btatt_plx_features_supported_features_measurement_status; +static int hf_btatt_regulatory_certification_data_list_count; +static int hf_btatt_regulatory_certification_data_list_length; +static int hf_btatt_regulatory_certification_data_list_item; +static int hf_btatt_regulatory_certification_data_list_item_body; +static int hf_btatt_regulatory_certification_data_list_item_body_structure_type; +static int hf_btatt_regulatory_certification_data_list_item_body_structure_length; +static int hf_btatt_regulatory_certification_data_list_item_authorizing_body_data; +static int hf_btatt_regulatory_certification_data_list_item_authorizing_body_data_major_ig_version; +static int hf_btatt_regulatory_certification_data_list_item_authorizing_body_data_minor_ig_version; +static int hf_btatt_regulatory_certification_data_list_item_authorizing_body_data_certification_data_list_count; +static int hf_btatt_regulatory_certification_data_list_item_authorizing_body_data_certification_data_list_length; +static int hf_btatt_regulatory_certification_data_list_item_authorizing_body_data_certification_data_list; +static int hf_btatt_regulatory_certification_data_list_item_authorizing_body_data_certified_device_class; +static int hf_btatt_regulatory_certification_data_list_item_regulation_bit_field_type; +static int hf_btatt_regulatory_certification_data_list_item_data; +static int hf_btatt_timezone_information; +static int hf_btatt_timezone_information_information; +static int hf_btatt_timezone_information_information_type; +static int hf_gatt_nordic_uart_tx; +static int hf_gatt_nordic_uart_rx; +static int hf_gatt_nordic_dfu_packet; +static int hf_gatt_nordic_dfu_control_point_opcode; +static int hf_gatt_nordic_dfu_control_point_init_packet; +static int hf_gatt_nordic_dfu_control_point_number_of_bytes; +static int hf_gatt_nordic_dfu_control_point_image_type; +static int hf_gatt_nordic_dfu_control_point_number_of_packets; +static int hf_gatt_nordic_dfu_control_point_request_opcode; +static int hf_gatt_nordic_dfu_control_point_response_value; +static int hf_gatt_microbit_accelerometer_data; +static int hf_gatt_microbit_accelerometer_x; +static int hf_gatt_microbit_accelerometer_y; +static int hf_gatt_microbit_accelerometer_z; +static int hf_gatt_microbit_accelerometer_period; +static int hf_gatt_microbit_magnetometer_data; +static int hf_gatt_microbit_magnetometer_x; +static int hf_gatt_microbit_magnetometer_y; +static int hf_gatt_microbit_magnetometer_z; +static int hf_gatt_microbit_magnetometer_period; +static int hf_gatt_microbit_magnetometer_bearing; +static int hf_gatt_microbit_button_a_state; +static int hf_gatt_microbit_button_b_state; +static int hf_gatt_microbit_pin_data; +static int hf_gatt_microbit_pin_number; +static int hf_gatt_microbit_pin_value; +static int hf_gatt_microbit_pin_ad_config; +static int hf_gatt_microbit_ad_pin0; +static int hf_gatt_microbit_ad_pin1; +static int hf_gatt_microbit_ad_pin2; +static int hf_gatt_microbit_ad_pin3; +static int hf_gatt_microbit_ad_pin4; +static int hf_gatt_microbit_ad_pin5; +static int hf_gatt_microbit_ad_pin6; +static int hf_gatt_microbit_ad_pin7; +static int hf_gatt_microbit_ad_pin8; +static int hf_gatt_microbit_ad_pin9; +static int hf_gatt_microbit_ad_pin10; +static int hf_gatt_microbit_ad_pin11; +static int hf_gatt_microbit_ad_pin12; +static int hf_gatt_microbit_ad_pin13; +static int hf_gatt_microbit_ad_pin14; +static int hf_gatt_microbit_ad_pin15; +static int hf_gatt_microbit_ad_pin16; +static int hf_gatt_microbit_ad_pin17; +static int hf_gatt_microbit_ad_pin18; +static int hf_gatt_microbit_ad_pin19; +static int hf_gatt_microbit_pin_io_config; +static int hf_gatt_microbit_io_pin0; +static int hf_gatt_microbit_io_pin1; +static int hf_gatt_microbit_io_pin2; +static int hf_gatt_microbit_io_pin3; +static int hf_gatt_microbit_io_pin4; +static int hf_gatt_microbit_io_pin5; +static int hf_gatt_microbit_io_pin6; +static int hf_gatt_microbit_io_pin7; +static int hf_gatt_microbit_io_pin8; +static int hf_gatt_microbit_io_pin9; +static int hf_gatt_microbit_io_pin10; +static int hf_gatt_microbit_io_pin11; +static int hf_gatt_microbit_io_pin12; +static int hf_gatt_microbit_io_pin13; +static int hf_gatt_microbit_io_pin14; +static int hf_gatt_microbit_io_pin15; +static int hf_gatt_microbit_io_pin16; +static int hf_gatt_microbit_io_pin17; +static int hf_gatt_microbit_io_pin18; +static int hf_gatt_microbit_io_pin19; +static int hf_gatt_microbit_pwm_control; +static int hf_gatt_microbit_led_matrix; +static int hf_gatt_microbit_led_text; +static int hf_gatt_microbit_scrolling_delay; +static int hf_gatt_microbit_microbit_requirements; +static int hf_gatt_microbit_microbit_event; +static int hf_gatt_microbit_client_requirements; +static int hf_gatt_microbit_client_event; +static int hf_gatt_microbit_dfu_control; +static int hf_gatt_microbit_temperature_value; +static int hf_gatt_microbit_temperature_period; +static int hf_btatt_valid_range_lower_inclusive_value; +static int hf_btatt_valid_range_upper_inclusive_value; +static int hf_btatt_temperature_celsius; +static int hf_btatt_temperature_fahrenheit; +static int hf_btatt_removable; +static int hf_btatt_removable_reserved; +static int hf_btatt_removable_removable; +static int hf_btatt_service_required; +static int hf_btatt_service_required_reserved; +static int hf_btatt_service_required_service_required; +static int hf_btatt_scientific_temperature_celsius; +static int hf_btatt_string; +static int hf_btatt_network_availability; +static int hf_btatt_fitness_machine_features; +static int hf_btatt_fitness_machine_features_reserved; +static int hf_btatt_fitness_machine_features_user_data_retention; +static int hf_btatt_fitness_machine_features_force_on_belt_and_power_output; +static int hf_btatt_fitness_machine_features_power_measurement; +static int hf_btatt_fitness_machine_features_remaining_time; +static int hf_btatt_fitness_machine_features_elapsed_time; +static int hf_btatt_fitness_machine_features_metabolic_equivalent; +static int hf_btatt_fitness_machine_features_heart_rate_measurement; +static int hf_btatt_fitness_machine_features_expended_energy; +static int hf_btatt_fitness_machine_features_stride_count; +static int hf_btatt_fitness_machine_features_resistance_level; +static int hf_btatt_fitness_machine_features_step_count; +static int hf_btatt_fitness_machine_features_pace; +static int hf_btatt_fitness_machine_features_elevation_gain; +static int hf_btatt_fitness_machine_features_inclination; +static int hf_btatt_fitness_machine_features_total_distance; +static int hf_btatt_fitness_machine_features_cadence; +static int hf_btatt_fitness_machine_features_average_speed; +static int hf_btatt_target_setting_features; +static int hf_btatt_target_setting_features_reserved; +static int hf_btatt_target_setting_features_targeted_cadence_configuration; +static int hf_btatt_target_setting_features_spin_down_control; +static int hf_btatt_target_setting_features_wheel_circumference_configuration; +static int hf_btatt_target_setting_features_indoor_bike_simulation_parameters; +static int hf_btatt_target_setting_features_targeted_time_in_five_heart_rate_zones_configuration; +static int hf_btatt_target_setting_features_targeted_time_in_three_heart_rate_zones_configuration; +static int hf_btatt_target_setting_features_targeted_time_in_two_heart_rate_zones_configuration; +static int hf_btatt_target_setting_features_targeted_training_time_configuration; +static int hf_btatt_target_setting_features_targeted_distance_configuration; +static int hf_btatt_target_setting_features_targeted_stride_number_configuration; +static int hf_btatt_target_setting_features_targeted_step_number_configuration; +static int hf_btatt_target_setting_features_targeted_expended_energy_configuration; +static int hf_btatt_target_setting_features_heart_rate_target_setting; +static int hf_btatt_target_setting_features_power_target_setting; +static int hf_btatt_target_setting_features_resistance_target_setting; +static int hf_btatt_target_setting_features_inclination_target_setting; +static int hf_btatt_target_setting_features_speed_target_setting; +static int hf_btatt_training_status_flags; +static int hf_btatt_training_status_flags_reserved; +static int hf_btatt_training_status_flags_extended_string; +static int hf_btatt_training_status_flags_training_status_string; +static int hf_btatt_training_status_status; +static int hf_btatt_training_status_status_string; +static int hf_btatt_supported_speed_range_minimum_speed; +static int hf_btatt_supported_speed_range_maximum_speed; +static int hf_btatt_supported_speed_range_minimum_increment; +static int hf_btatt_supported_inclination_range_minimum_inclination; +static int hf_btatt_supported_inclination_range_maximum_inclination; +static int hf_btatt_supported_inclination_range_minimum_increment; +static int hf_btatt_supported_resistance_level_range_minimum_resistance_level; +static int hf_btatt_supported_resistance_level_range_maximum_resistance_level; +static int hf_btatt_supported_resistance_level_range_minimum_increment; +static int hf_btatt_supported_heart_rate_range_minimum_heart_rate; +static int hf_btatt_supported_heart_rate_range_maximum_heart_rate; +static int hf_btatt_supported_heart_rate_range_minimum_increment; +static int hf_btatt_supported_power_range_minimum_power; +static int hf_btatt_supported_power_range_maximum_power; +static int hf_btatt_supported_power_range_minimum_increment; +static int hf_btatt_fitness_machine_status_opcode; +static int hf_btatt_fitness_machine_control_information; +static int hf_btatt_fitness_machine_spin_down_status; +static int hf_btatt_fitness_machine_speed; +static int hf_btatt_fitness_machine_incline; +static int hf_btatt_fitness_machine_resistance_level; +static int hf_btatt_fitness_machine_power; +static int hf_btatt_fitness_machine_heart_rate; +static int hf_btatt_fitness_machine_expended_energy; +static int hf_btatt_fitness_machine_number_of_steps; +static int hf_btatt_fitness_machine_number_of_strides; +static int hf_btatt_fitness_machine_distance; +static int hf_btatt_fitness_machine_training_time; +static int hf_btatt_fitness_machine_wheel_circumference; +static int hf_btatt_fitness_machine_cadence; +static int hf_btatt_fitness_machine_wind_speed; +static int hf_btatt_fitness_machine_grade; +static int hf_btatt_fitness_machine_coefficient_of_rolling_resistance; +static int hf_btatt_fitness_machine_wind_resistance_coefficient; +static int hf_btatt_fitness_machine_targeted_time_in_fat_burn_zone; +static int hf_btatt_fitness_machine_targeted_time_in_fitness_zone; +static int hf_btatt_fitness_machine_targeted_time_in_very_light_zone; +static int hf_btatt_fitness_machine_targeted_time_in_light_zone; +static int hf_btatt_fitness_machine_targeted_time_in_moderate_zone; +static int hf_btatt_fitness_machine_targeted_time_in_hard_zone; +static int hf_btatt_fitness_machine_targeted_time_in_maximum_zone; +static int hf_btatt_volume_setting; +static int hf_btatt_volume_mute; +static int hf_btatt_volume_change_counter; +static int hf_btatt_volume_control_point_procedure; +static int hf_btatt_volume_flags; + +static int hf_request_in_frame; +static int hf_response_in_frame; static int btatt_tap_handles = -1; @@ -2107,39 +2107,39 @@ static int * const hfx_btatt_training_status_flags[] = { }; /* Initialize the subtree pointers */ -static gint ett_btatt = -1; -static gint ett_btatt_list = -1; -static gint ett_btatt_value = -1; -static gint ett_btatt_opcode = -1; -static gint ett_btatt_handle = -1; -static gint ett_btatt_characteristic_properties = -1; -static gint ett_btgatt = -1; -static gint ett_btgatt_microbit_accelerometer = -1; -static gint ett_btgatt_microbit_magnetometer = -1; -static gint ett_btgatt_microbit_pin_data = -1; -static gint ett_btgatt_microbit_pin_ad_config = -1; -static gint ett_btgatt_microbit_pin_io_config = -1; -static gint ett_btatt_fragment = -1; -static gint ett_btatt_fragments = -1; - -static expert_field ei_btatt_uuid_format_unknown = EI_INIT; -static expert_field ei_btatt_handle_too_few = EI_INIT; -static expert_field ei_btatt_mtu_exceeded = EI_INIT; -static expert_field ei_btatt_mtu_full = EI_INIT; -static expert_field ei_btatt_consent_out_of_bounds = EI_INIT; -static expert_field ei_btatt_cgm_size_too_small = EI_INIT; -static expert_field ei_btatt_opcode_invalid_request = EI_INIT; -static expert_field ei_btatt_opcode_invalid_response = EI_INIT; - expert_field ei_btatt_invalid_usage = EI_INIT; -static expert_field ei_btatt_bad_data = EI_INIT; -static expert_field ei_btatt_unexpected_data = EI_INIT; -static expert_field ei_btatt_undecoded = EI_INIT; -static expert_field ei_btatt_invalid_length = EI_INIT; - -static wmem_tree_t *mtus = NULL; -static wmem_tree_t *requests = NULL; -static wmem_tree_t *fragments = NULL; -static wmem_tree_t *handle_to_uuid = NULL; +static int ett_btatt; +static int ett_btatt_list; +static int ett_btatt_value; +static int ett_btatt_opcode; +static int ett_btatt_handle; +static int ett_btatt_characteristic_properties; +static int ett_btgatt; +static int ett_btgatt_microbit_accelerometer; +static int ett_btgatt_microbit_magnetometer; +static int ett_btgatt_microbit_pin_data; +static int ett_btgatt_microbit_pin_ad_config; +static int ett_btgatt_microbit_pin_io_config; +static int ett_btatt_fragment; +static int ett_btatt_fragments; + +static expert_field ei_btatt_uuid_format_unknown; +static expert_field ei_btatt_handle_too_few; +static expert_field ei_btatt_mtu_exceeded; +static expert_field ei_btatt_mtu_full; +static expert_field ei_btatt_consent_out_of_bounds; +static expert_field ei_btatt_cgm_size_too_small; +static expert_field ei_btatt_opcode_invalid_request; +static expert_field ei_btatt_opcode_invalid_response; + expert_field ei_btatt_invalid_usage; +static expert_field ei_btatt_bad_data; +static expert_field ei_btatt_unexpected_data; +static expert_field ei_btatt_undecoded; +static expert_field ei_btatt_invalid_length; + +static wmem_tree_t *mtus; +static wmem_tree_t *requests; +static wmem_tree_t *fragments; +static wmem_tree_t *handle_to_uuid; static dissector_handle_t btatt_handle; static dissector_handle_t btgatt_handle; @@ -2150,18 +2150,19 @@ static dissector_handle_t usb_hid_boot_mouse_input_report_handle; static dissector_handle_t btmesh_proxy_handle; static dissector_table_t att_handle_dissector_table; - -static gint hf_btatt_fragments = -1; -static gint hf_btatt_fragment = -1; -static gint hf_btatt_fragment_overlap = -1; -static gint hf_btatt_fragment_overlap_conflicts = -1; -static gint hf_btatt_fragment_multiple_tails = -1; -static gint hf_btatt_fragment_too_long_fragment = -1; -static gint hf_btatt_fragment_error = -1; -static gint hf_btatt_fragment_count = -1; -static gint hf_btatt_reassembled_in = -1; -static gint hf_btatt_reassembled_length = -1; -static gint hf_btatt_reassembled_data = -1; +static dissector_table_t att_service_dissector_table; + +static int hf_btatt_fragments; +static int hf_btatt_fragment; +static int hf_btatt_fragment_overlap; +static int hf_btatt_fragment_overlap_conflicts; +static int hf_btatt_fragment_multiple_tails; +static int hf_btatt_fragment_too_long_fragment; +static int hf_btatt_fragment_error; +static int hf_btatt_fragment_count; +static int hf_btatt_reassembled_in; +static int hf_btatt_reassembled_length; +static int hf_btatt_reassembled_data; static const fragment_items msg_frag_items = { /* Fragment subtrees */ @@ -2214,43 +2215,13 @@ static const value_string opcode_vals[] = { {0x1B, "Handle Value Notification"}, {0x1D, "Handle Value Indication"}, {0x1E, "Handle Value Confirmation"}, + {0x20, "Read Multiple Variable Request"}, + {0x21, "Read Multiple Variable Response"}, {0x52, "Write Command"}, {0xD2, "Signed Write Command"}, {0x0, NULL} }; -#define ATT_OPCODE_ERROR_RESPONSE 0x01 -#define ATT_OPCODE_EXCHANGE_MTU_REQUEST 0x02 -#define ATT_OPCODE_EXCHANGE_MTU_RESPONSE 0x03 -#define ATT_OPCODE_FIND_INFORMATION_REQUEST 0x04 -#define ATT_OPCODE_FIND_INFORMATION_RESPONSE 0x05 -#define ATT_OPCODE_FIND_BY_TYPE_VALUE_REQUEST 0x06 -#define ATT_OPCODE_FIND_BY_TYPE_VALUE_RESPONSE 0x07 - -#define ATT_OPCODE_READ_BY_TYPE_REQUEST 0x08 -#define ATT_OPCODE_READ_BY_TYPE_RESPONSE 0x09 -#define ATT_OPCODE_READ_REQUEST 0x0A -#define ATT_OPCODE_READ_RESPONSE 0x0B -#define ATT_OPCODE_READ_BLOB_REQUEST 0x0C -#define ATT_OPCODE_READ_BLOB_RESPONSE 0x0D -#define ATT_OPCODE_READ_MULTIPLE_REQUEST 0x0E -#define ATT_OPCODE_READ_MULTIPLE_RESPONSE 0x0F -#define ATT_OPCODE_READ_BY_GROUP_TYPE_REQUEST 0x10 -#define ATT_OPCODE_READ_BY_GROUP_TYPE_RESPONSE 0x11 - -#define ATT_OPCODE_WRITE_REQUEST 0x12 -#define ATT_OPCODE_WRITE_RESPONSE 0x13 -#define ATT_OPCODE_WRITE_PREPARE_REQUEST 0x16 -#define ATT_OPCODE_WRITE_PREPARE_RESPONSE 0x17 -#define ATT_OPCODE_WRITE_EXECUTE_REQUEST 0x18 -#define ATT_OPCODE_WRITE_EXECUTE_RESPONSE 0x19 -#define ATT_OPCODE_WRITE_COMMAND 0x52 -#define ATT_OPCODE_WRITE_SIGNED_COMMAND 0xD2 - -#define ATT_OPCODE_HANDLE_VALUE_NOTIFICATION 0x1B -#define ATT_OPCODE_HANDLE_VALUE_INDICATION 0x1D -#define ATT_OPCODE_HANDLE_VALUE_CONFIRMATION 0x1E - #define GATT_SERVICE_GENERIC_ACCESS_PROFILE 0x1800 #define GATT_SERVICE_GENERIC_ATTRIBUTE_PROFILE 0x1801 #define GATT_SERVICE_IMMEDIATE_ALERT 0x1802 @@ -4042,57 +4013,57 @@ static const char *unit_unitless = ""; /* signed area*/ -static void helper_base_signed_negative_exponent(gchar * const buf, const gint base, const gchar * const unit, const guint32 value) +static void helper_base_signed_negative_exponent(char * const buf, const int base, const char * const unit, const uint32_t value) { - const gint32 signed_value = (const gint32) value; - const gint32 fraction = (((signed_value < 0) ? -1 : 1) * signed_value) % base; + const int32_t signed_value = (const int32_t) value; + const int32_t fraction = (((signed_value < 0) ? -1 : 1) * signed_value) % base; snprintf(buf, ITEM_LABEL_LENGTH, "%i.%i%s", signed_value / base, fraction, unit); } -static void base_signed_one_tenth_unitless(gchar *buf, guint32 value) { +static void base_signed_one_tenth_unitless(char *buf, uint32_t value) { helper_base_signed_negative_exponent(buf, 10, unit_unitless, value); } -static void base_signed_one_tenth_percentage(gchar *buf, guint32 value) { +static void base_signed_one_tenth_percentage(char *buf, uint32_t value) { helper_base_signed_negative_exponent(buf, 10, "%%", value); } -static void base_signed_one_thousandth_meters_per_seconds(gchar *buf, guint32 value) { +static void base_signed_one_thousandth_meters_per_seconds(char *buf, uint32_t value) { helper_base_signed_negative_exponent(buf, 1000, "m/s", value); } -static void base_signed_one_hundredth_percentage(gchar *buf, guint32 value) { +static void base_signed_one_hundredth_percentage(char *buf, uint32_t value) { helper_base_signed_negative_exponent(buf, 100, "%%", value); } /* unsigned area */ -static void base_unsigned_one_tenth_unitless(gchar *buf, guint32 value) { +static void base_unsigned_one_tenth_unitless(char *buf, uint32_t value) { snprintf(buf, ITEM_LABEL_LENGTH, "%u.%u", value / 10, value % 10); } -static void base_unsigned_one_hundredth_km_h(gchar *buf, guint32 value) { +static void base_unsigned_one_hundredth_km_h(char *buf, uint32_t value) { snprintf(buf, ITEM_LABEL_LENGTH, "%u.%02u km/h", value / 100, value % 100); } -static void base_unsigned_one_tenth_percentage(gchar *buf, guint32 value) { +static void base_unsigned_one_tenth_percentage(char *buf, uint32_t value) { snprintf(buf, ITEM_LABEL_LENGTH, "%u.%u%%", value / 10, value % 10); } -static void base_unsigned_one_tenth_milimeters(gchar *buf, guint32 value) { +static void base_unsigned_one_tenth_milimeters(char *buf, uint32_t value) { snprintf(buf, ITEM_LABEL_LENGTH, "%u.%umm", value / 10, value % 10); } -static void base_unsigned_one_half_half_minute(gchar *buf, guint32 value) { +static void base_unsigned_one_half_half_minute(char *buf, uint32_t value) { snprintf(buf, ITEM_LABEL_LENGTH, "%u.%um 1/min", value / 2, value % 2); } -static void base_unsigned_one_ten_thousandth_unitless(gchar *buf, guint32 value) { +static void base_unsigned_one_ten_thousandth_unitless(char *buf, uint32_t value) { snprintf(buf, ITEM_LABEL_LENGTH, "%u.%u", value / 10000, value % 10000); } -static void base_unsigned_one_hundredth_kg_per_meter(gchar *buf, guint32 value) { +static void base_unsigned_one_hundredth_kg_per_meter(char *buf, uint32_t value) { snprintf(buf, ITEM_LABEL_LENGTH, "%u.%u Kg/m", value / 100, value % 100); } @@ -4101,45 +4072,39 @@ union request_parameters_union { void *data; struct _read_write { - guint16 handle; - guint16 offset; + uint16_t handle; + uint16_t offset; } read_write; struct _read_multiple { - guint number_of_handles; - guint16 *handle; + unsigned number_of_handles; + uint16_t *handle; } read_multiple; struct _mtu { - guint16 mtu; + uint16_t mtu; } mtu; struct _read_by_type { - guint16 starting_handle; - guint16 ending_handle; + uint16_t starting_handle; + uint16_t ending_handle; bluetooth_uuid_t uuid; } read_by_type; struct _find_information { - guint16 starting_handle; - guint16 ending_handle; + uint16_t starting_handle; + uint16_t ending_handle; } find_information; }; typedef struct _request_data_t { - guint8 opcode; - guint32 request_in_frame; - guint32 response_in_frame; + uint8_t opcode; + uint32_t request_in_frame; + uint32_t response_in_frame; union request_parameters_union parameters; } request_data_t; -enum attribute_type { - ATTRIBUTE_TYPE_SERVICE, - ATTRIBUTE_TYPE_CHARACTERISTIC, - ATTRIBUTE_TYPE_OTHER -}; - typedef struct _handle_data_t { bluetooth_uuid_t uuid; @@ -4148,14 +4113,14 @@ typedef struct _handle_data_t { typedef struct _mtu_data_t { - guint mtu; + unsigned mtu; } mtu_data_t; typedef struct _fragment_data_t { - guint length; - guint offset; - gint data_in_frame; - guint8 *data; + unsigned length; + unsigned offset; + int data_in_frame; + uint8_t *data; } fragment_data_t; @@ -4167,30 +4132,30 @@ void proto_reg_handoff_btgatt(void); #define PROTO_DATA_BTATT_HANDLE 0x00 -static void btatt_handle_prompt(packet_info *pinfo, gchar* result) +static void btatt_handle_prompt(packet_info *pinfo, char* result) { - guint16 *value_data; + uint16_t *value_data; - value_data = (guint16 *) p_get_proto_data(pinfo->pool, pinfo, proto_btatt, PROTO_DATA_BTATT_HANDLE); + value_data = (uint16_t *) p_get_proto_data(pinfo->pool, pinfo, proto_btatt, PROTO_DATA_BTATT_HANDLE); if (value_data) - snprintf(result, MAX_DECODE_AS_PROMPT_LEN, "ATT Handle 0x%04x as", (guint) *value_data); + snprintf(result, MAX_DECODE_AS_PROMPT_LEN, "ATT Handle 0x%04x as", (unsigned) *value_data); else snprintf(result, MAX_DECODE_AS_PROMPT_LEN, "Unknown ATT Handle"); } -static gpointer btatt_handle_value(packet_info *pinfo) +static void *btatt_handle_value(packet_info *pinfo) { - guint16 *value_data; + uint16_t *value_data; - value_data = (guint16 *) p_get_proto_data(pinfo->pool, pinfo, proto_btatt, PROTO_DATA_BTATT_HANDLE); + value_data = (uint16_t *) p_get_proto_data(pinfo->pool, pinfo, proto_btatt, PROTO_DATA_BTATT_HANDLE); if (value_data) - return GUINT_TO_POINTER((gulong)*value_data); + return GUINT_TO_POINTER((unsigned long)*value_data); return NULL; } -static gboolean is_readable_request(guint8 opcode) +static bool is_readable_request(uint8_t opcode) { return (opcode == ATT_OPCODE_READ_REQUEST || opcode == ATT_OPCODE_READ_BLOB_REQUEST || @@ -4198,7 +4163,7 @@ static gboolean is_readable_request(guint8 opcode) opcode == ATT_OPCODE_READ_MULTIPLE_REQUEST); } -static gboolean is_readable_response(guint8 opcode) +static bool is_readable_response(uint8_t opcode) { return (opcode == ATT_OPCODE_READ_RESPONSE || opcode == ATT_OPCODE_READ_BLOB_RESPONSE || @@ -4206,38 +4171,61 @@ static gboolean is_readable_response(guint8 opcode) opcode == ATT_OPCODE_READ_MULTIPLE_RESPONSE); } -static gboolean is_writeable_request(guint8 opcode) +static bool is_writeable_request(uint8_t opcode) { return (opcode == ATT_OPCODE_WRITE_REQUEST || opcode == ATT_OPCODE_WRITE_PREPARE_REQUEST); } -static gboolean is_writeable_response(guint8 opcode) +static bool is_writeable_response(uint8_t opcode) { return (opcode == ATT_OPCODE_WRITE_RESPONSE || opcode == ATT_OPCODE_WRITE_PREPARE_RESPONSE); } -gboolean bluetooth_gatt_has_no_parameter(guint8 opcode) +static uint16_t +get_gatt_service_handle_from_handle(packet_info *pinfo, uint32_t handle, + bluetooth_data_t *bluetooth_data); + +static uint16_t +get_gatt_char_decl_handle_from_handle(packet_info *pinfo, uint32_t handle, + bluetooth_data_t *bluetooth_data); + +bool bluetooth_gatt_has_no_parameter(uint8_t opcode) { return is_readable_request(opcode) || opcode == ATT_OPCODE_WRITE_RESPONSE || opcode == ATT_OPCODE_HANDLE_VALUE_CONFIRMATION; } +static int +get_handle_db_direction(uint8_t opcode, int direction) +{ + if (is_readable_request(opcode) || is_writeable_request(opcode) || opcode == ATT_OPCODE_HANDLE_VALUE_CONFIRMATION || opcode == ATT_OPCODE_WRITE_REQUEST) + return !direction; + if (is_readable_response(opcode) || is_writeable_response(opcode)) + return direction; + if (opcode == ATT_OPCODE_HANDLE_VALUE_NOTIFICATION || opcode == ATT_OPCODE_HANDLE_VALUE_INDICATION) + return direction; + + return direction; +} + static request_data_t * -get_request(tvbuff_t *tvb, gint offset, packet_info *pinfo, guint8 opcode, +get_request(tvbuff_t *tvb, int offset, packet_info *pinfo, uint8_t opcode, bluetooth_data_t *bluetooth_data) { request_data_t *request_data; - wmem_tree_key_t key[4]; + wmem_tree_key_t key[5]; wmem_tree_t *sub_wmemtree; - guint32 frame_number, curr_layer_num; + uint32_t frame_number, curr_layer_num, direction; if (!bluetooth_data) return NULL; curr_layer_num = pinfo->curr_layer_num; + // Request is always in opposite direction from response + direction = pinfo->p2p_dir == P2P_DIR_SENT ? P2P_DIR_RECV : P2P_DIR_SENT; key[0].length = 1; key[0].key = &bluetooth_data->interface_id; @@ -4245,8 +4233,10 @@ get_request(tvbuff_t *tvb, gint offset, packet_info *pinfo, guint8 opcode, key[1].key = &bluetooth_data->adapter_id; key[2].length = 1; key[2].key = &curr_layer_num; - key[3].length = 0; - key[3].key = NULL; + key[3].length = 1; + key[3].key = &direction; + key[4].length = 0; + key[4].key = NULL; frame_number = pinfo->num; @@ -4265,7 +4255,7 @@ get_request(tvbuff_t *tvb, gint offset, packet_info *pinfo, guint8 opcode, case 0x01: /* Error Response */ if (tvb_captured_length_remaining(tvb, offset) < 1) return NULL; - opcode = tvb_get_guint8(tvb, 1) + 1; + opcode = tvb_get_uint8(tvb, 1) + 1; /* FALL THROUGH */ case 0x03: /* Exchange MTU Response */ case 0x05: /* Find Information Response */ @@ -4278,6 +4268,7 @@ get_request(tvbuff_t *tvb, gint offset, packet_info *pinfo, guint8 opcode, case 0x13: /* Write Response */ case 0x17: /* Prepare Write Response */ case 0x19: /* Execute Write Response */ + case 0x21: /* Read Multiple Variable Response */ case 0x1E: /* Handle Value Confirmation */ if (request_data->opcode == opcode - 1) return request_data; @@ -4298,7 +4289,7 @@ get_request(tvbuff_t *tvb, gint offset, packet_info *pinfo, guint8 opcode, case 0x01: /* Error Response */ if (tvb_captured_length_remaining(tvb, offset) < 1) return NULL; - opcode = tvb_get_guint8(tvb, 1) + 1; + opcode = tvb_get_uint8(tvb, 1) + 1; /* FALL THROUGH */ case 0x03: /* Exchange MTU Response */ case 0x05: /* Find Information Response */ @@ -4311,6 +4302,7 @@ get_request(tvbuff_t *tvb, gint offset, packet_info *pinfo, guint8 opcode, case 0x13: /* Write Response */ case 0x17: /* Prepare Write Response */ case 0x19: /* Execute Write Response */ + case 0x21: /* Read Multiple Variable Response */ case 0x1E: /* Handle Value Confirmation */ if (request_data->opcode == opcode -1) return request_data; @@ -4333,6 +4325,7 @@ get_request(tvbuff_t *tvb, gint offset, packet_info *pinfo, guint8 opcode, case 0x16: /* Prepare Write Request */ case 0x18: /* Execute Write Request */ case 0x1D: /* Handle Value Indication */ + case 0x20: /* Read Multiple Variable Request */ /* This should never happen */ default: return NULL; @@ -4342,15 +4335,16 @@ get_request(tvbuff_t *tvb, gint offset, packet_info *pinfo, guint8 opcode, } static void -save_request(packet_info *pinfo, guint8 opcode, union request_parameters_union parameters, +save_request(packet_info *pinfo, uint8_t opcode, union request_parameters_union parameters, bluetooth_data_t *bluetooth_data) { - wmem_tree_key_t key[5]; - guint32 frame_number, curr_layer_num; + wmem_tree_key_t key[6]; + uint32_t frame_number, curr_layer_num, direction; request_data_t *request_data; frame_number = pinfo->num; curr_layer_num = pinfo->curr_layer_num; + direction = pinfo->p2p_dir; key[0].length = 1; key[0].key = &bluetooth_data->interface_id; @@ -4359,9 +4353,11 @@ save_request(packet_info *pinfo, guint8 opcode, union request_parameters_union p key[2].length = 1; key[2].key = &curr_layer_num; key[3].length = 1; - key[3].key = &frame_number; - key[4].length = 0; - key[4].key = NULL; + key[3].key = &direction; + key[4].length = 1; + key[4].key = &frame_number; + key[5].length = 0; + key[5].key = NULL; request_data = wmem_new0(wmem_file_scope(), request_data_t); request_data->opcode = opcode; @@ -4374,7 +4370,7 @@ save_request(packet_info *pinfo, guint8 opcode, union request_parameters_union p } static void -save_handle(packet_info *pinfo, bluetooth_uuid_t uuid, guint32 handle, +save_handle(packet_info *pinfo, bluetooth_uuid_t uuid, uint32_t handle, enum attribute_type attribute_type, bluetooth_data_t *bluetooth_data) { if (!handle && uuid.size != 2 && uuid.size != 16) @@ -4386,26 +4382,41 @@ save_handle(packet_info *pinfo, bluetooth_uuid_t uuid, guint32 handle, tap_handles = wmem_new(pinfo->pool, tap_handles_t); tap_handles->handle = handle; tap_handles->uuid = uuid; + tap_handles->attribute_type = attribute_type; + + tap_handles->service_handle = + get_gatt_service_handle_from_handle(pinfo, handle, bluetooth_data); + tap_handles->char_decl_handle = + get_gatt_char_decl_handle_from_handle(pinfo, handle, bluetooth_data); + tap_queue_packet(btatt_tap_handles, pinfo, tap_handles); } if (!pinfo->fd->visited && bluetooth_data) { - wmem_tree_key_t key[5]; - guint32 frame_number; + wmem_tree_key_t key[6]; + uint32_t frame_number, direction; handle_data_t *handle_data; frame_number = pinfo->num; + direction = pinfo->p2p_dir; + if (uuid.bt_uuid == 0x2ADB || uuid.bt_uuid == 0x2ADD) { + // Mesh Provisioning Data In and Mesh Proxy Data In + // are in the opposite direction + direction = !direction; + } key[0].length = 1; key[0].key = &bluetooth_data->interface_id; key[1].length = 1; key[1].key = &bluetooth_data->adapter_id; key[2].length = 1; - key[2].key = &handle; + key[2].key = &direction; key[3].length = 1; - key[3].key = &frame_number; - key[4].length = 0; - key[4].key = NULL; + key[3].key = &handle; + key[4].length = 1; + key[4].key = &frame_number; + key[5].length = 0; + key[5].key = NULL; handle_data = wmem_new(wmem_file_scope(), handle_data_t); handle_data->uuid = uuid; @@ -4415,12 +4426,12 @@ save_handle(packet_info *pinfo, bluetooth_uuid_t uuid, guint32 handle, } } -static bluetooth_uuid_t -get_bluetooth_uuid_from_handle(packet_info *pinfo, guint32 handle, - bluetooth_data_t *bluetooth_data) +bluetooth_uuid_t +get_gatt_bluetooth_uuid_from_handle(packet_info *pinfo, uint32_t handle, uint8_t opcode, + bluetooth_data_t *bluetooth_data) { - wmem_tree_key_t key[4]; - guint32 frame_number; + wmem_tree_key_t key[5]; + uint32_t frame_number, direction; handle_data_t *handle_data; wmem_tree_t *sub_wmemtree; bluetooth_uuid_t uuid; @@ -4429,15 +4440,18 @@ get_bluetooth_uuid_from_handle(packet_info *pinfo, guint32 handle, if (bluetooth_data) { frame_number = pinfo->num; + direction = get_handle_db_direction(opcode, pinfo->p2p_dir); key[0].length = 1; key[0].key = &bluetooth_data->interface_id; key[1].length = 1; key[1].key = &bluetooth_data->adapter_id; key[2].length = 1; - key[2].key = &handle; - key[3].length = 0; - key[3].key = NULL; + key[2].key = &direction; + key[3].length = 1; + key[3].key = &handle; + key[4].length = 0; + key[4].key = NULL; sub_wmemtree = (wmem_tree_t *) wmem_tree_lookup32_array(handle_to_uuid, key); handle_data = (sub_wmemtree) ? (handle_data_t *) wmem_tree_lookup32_le(sub_wmemtree, frame_number) : NULL; @@ -4449,12 +4463,93 @@ get_bluetooth_uuid_from_handle(packet_info *pinfo, guint32 handle, return uuid; } +static uint16_t +get_gatt_service_handle_from_handle(packet_info *pinfo, uint32_t handle, + bluetooth_data_t *bluetooth_data) +{ + wmem_tree_key_t key[5]; + uint32_t frame_number, direction; + handle_data_t *handle_data; + wmem_tree_t *sub_wmemtree; + + if (bluetooth_data) { + frame_number = pinfo->num; + direction = pinfo->p2p_dir; + + key[0].length = 1; + key[0].key = &bluetooth_data->interface_id; + key[1].length = 1; + key[1].key = &bluetooth_data->adapter_id; + key[2].length = 1; + key[2].key = &direction; + key[3].length = 1; + key[3].key = &handle; + key[4].length = 0; + key[4].key = NULL; + + while (handle > 0) { + sub_wmemtree = (wmem_tree_t *) wmem_tree_lookup32_array(handle_to_uuid, key); + handle_data = (sub_wmemtree) ? (handle_data_t *) wmem_tree_lookup32_le(sub_wmemtree, frame_number) : NULL; + + if (handle_data && handle_data->type == ATTRIBUTE_TYPE_SERVICE) { + return handle; + } + + handle -= 1; + } + } + + return 0; +} + +static uint16_t +get_gatt_char_decl_handle_from_handle(packet_info *pinfo, uint32_t handle, + bluetooth_data_t *bluetooth_data) +{ + wmem_tree_key_t key[5]; + uint32_t frame_number, direction; + handle_data_t *handle_data; + wmem_tree_t *sub_wmemtree; + + if (bluetooth_data) { + frame_number = pinfo->num; + direction = pinfo->p2p_dir; + + key[0].length = 1; + key[0].key = &bluetooth_data->interface_id; + key[1].length = 1; + key[1].key = &bluetooth_data->adapter_id; + key[2].length = 1; + key[2].key = &direction; + key[3].length = 1; + key[3].key = &handle; + key[4].length = 0; + key[4].key = NULL; + + while (handle > 0) { + sub_wmemtree = (wmem_tree_t *) wmem_tree_lookup32_array(handle_to_uuid, key); + handle_data = (sub_wmemtree) ? (handle_data_t *) wmem_tree_lookup32_le(sub_wmemtree, frame_number) : NULL; + + if (handle_data) { + if ((handle_data->uuid.bt_uuid == UUID_GATT_INCLUDE_DECLARATION) || + (handle_data->uuid.bt_uuid == UUID_GATT_CHARACTERISTIC_DECLARATION)) { + return handle; + } + } + + handle -= 1; + } + } + + return 0; +} + static bluetooth_uuid_t -get_service_uuid_from_handle(packet_info *pinfo, guint32 handle, +get_service_uuid_from_handle(packet_info *pinfo, uint32_t handle, uint8_t opcode, bluetooth_data_t *bluetooth_data) { - wmem_tree_key_t key[4]; - guint32 frame_number; + wmem_tree_key_t key[5]; + uint32_t frame_number, direction; handle_data_t *handle_data; wmem_tree_t *sub_wmemtree; bluetooth_uuid_t uuid; @@ -4463,15 +4558,18 @@ get_service_uuid_from_handle(packet_info *pinfo, guint32 handle, if (bluetooth_data) { frame_number = pinfo->num; + direction = get_handle_db_direction(opcode, pinfo->p2p_dir); key[0].length = 1; key[0].key = &bluetooth_data->interface_id; key[1].length = 1; key[1].key = &bluetooth_data->adapter_id; key[2].length = 1; - key[2].key = &handle; - key[3].length = 0; - key[3].key = NULL; + key[2].key = &direction; + key[3].length = 1; + key[3].key = &handle; + key[4].length = 0; + key[4].key = NULL; while (handle > 0) { sub_wmemtree = (wmem_tree_t *) wmem_tree_lookup32_array(handle_to_uuid, key); @@ -4490,11 +4588,11 @@ get_service_uuid_from_handle(packet_info *pinfo, guint32 handle, } static bluetooth_uuid_t -get_characteristic_uuid_from_handle(packet_info *pinfo, guint32 handle, +get_characteristic_uuid_from_handle(packet_info *pinfo, uint32_t handle, uint8_t opcode, bluetooth_data_t *bluetooth_data) { - wmem_tree_key_t key[4]; - guint32 frame_number; + wmem_tree_key_t key[5]; + uint32_t frame_number, direction; handle_data_t *handle_data; wmem_tree_t *sub_wmemtree; bluetooth_uuid_t uuid; @@ -4503,15 +4601,18 @@ get_characteristic_uuid_from_handle(packet_info *pinfo, guint32 handle, if (bluetooth_data) { frame_number = pinfo->num; + direction = get_handle_db_direction(opcode, pinfo->p2p_dir); key[0].length = 1; key[0].key = &bluetooth_data->interface_id; key[1].length = 1; key[1].key = &bluetooth_data->adapter_id; key[2].length = 1; - key[2].key = &handle; - key[3].length = 0; - key[3].key = NULL; + key[2].key = &direction; + key[3].length = 1; + key[3].key = &handle; + key[4].length = 0; + key[4].key = NULL; while (handle > 0) { sub_wmemtree = (wmem_tree_t *) wmem_tree_lookup32_array(handle_to_uuid, key); @@ -4532,7 +4633,7 @@ get_characteristic_uuid_from_handle(packet_info *pinfo, guint32 handle, return uuid; } -static void col_append_info_by_handle(packet_info *pinfo, guint16 handle, bluetooth_data_t *bluetooth_data) +static void col_append_info_by_handle(packet_info *pinfo, uint16_t handle, uint8_t opcode, bluetooth_data_t *bluetooth_data) { bluetooth_uuid_t service_uuid; bluetooth_uuid_t characteristic_uuid; @@ -4541,9 +4642,10 @@ static void col_append_info_by_handle(packet_info *pinfo, guint16 handle, blueto if (!bluetooth_data) return; - service_uuid = get_service_uuid_from_handle(pinfo, handle, bluetooth_data); - characteristic_uuid = get_characteristic_uuid_from_handle(pinfo, handle, bluetooth_data); - uuid = get_bluetooth_uuid_from_handle(pinfo, handle, bluetooth_data); + service_uuid = get_service_uuid_from_handle(pinfo, handle, opcode, bluetooth_data); + characteristic_uuid = get_characteristic_uuid_from_handle(pinfo, handle, opcode, bluetooth_data); + uuid = get_gatt_bluetooth_uuid_from_handle(pinfo, handle, opcode, bluetooth_data); + if (!memcmp(&service_uuid, &uuid, sizeof(uuid))) { col_append_fstr(pinfo->cinfo, COL_INFO, ", Handle: 0x%04x (%s)", @@ -4557,7 +4659,7 @@ static void col_append_info_by_handle(packet_info *pinfo, guint16 handle, blueto } } -static gint dissect_gatt_uuid(proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb, gint offset) +static int dissect_gatt_uuid(proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb, int offset) { proto_item *sub_item; bluetooth_uuid_t sub_uuid; @@ -4582,9 +4684,9 @@ static gint dissect_gatt_uuid(proto_tree *tree, packet_info *pinfo, tvbuff_t *tv } static int -dissect_handle(proto_tree *tree, packet_info *pinfo, gint hf, - tvbuff_t *tvb, gint offset, bluetooth_data_t *bluetooth_data, - bluetooth_uuid_t *uuid, gint32 handle) +dissect_handle(proto_tree *tree, packet_info *pinfo, int hf, + tvbuff_t *tvb, int offset, bluetooth_data_t *bluetooth_data, + bluetooth_uuid_t *uuid, int32_t handle, uint8_t opcode) { proto_item *handle_item; proto_item *sub_item; @@ -4595,17 +4697,17 @@ dissect_handle(proto_tree *tree, packet_info *pinfo, gint hf, if (handle == HANDLE_TVB) { handle_item = proto_tree_add_item(tree, hf, tvb, offset, 2, ENC_LITTLE_ENDIAN); - handle = tvb_get_guint16(tvb, offset, ENC_LITTLE_ENDIAN); - } else if (handle >= 0 && handle <= G_MAXUINT16) { + handle = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN); + } else if (handle >= 0 && handle <= UINT16_MAX) { handle_item = proto_tree_add_uint(tree, hf, tvb, 0, 0, handle); proto_item_set_generated(handle_item); } else { DISSECTOR_ASSERT_NOT_REACHED(); } - service_uuid = get_service_uuid_from_handle(pinfo, (guint16) handle, bluetooth_data); - characteristic_uuid = get_characteristic_uuid_from_handle(pinfo, (guint16) handle, bluetooth_data); - attribute_uuid = get_bluetooth_uuid_from_handle(pinfo, (guint16) handle, bluetooth_data); + service_uuid = get_service_uuid_from_handle(pinfo, (uint16_t) handle, opcode, bluetooth_data); + characteristic_uuid = get_characteristic_uuid_from_handle(pinfo, (uint16_t) handle, opcode, bluetooth_data); + attribute_uuid = get_gatt_bluetooth_uuid_from_handle(pinfo, (uint16_t) handle, opcode, bluetooth_data); proto_item_append_text(handle_item, " ("); if (memcmp(&service_uuid, &attribute_uuid, sizeof(attribute_uuid))) { @@ -4654,8 +4756,8 @@ dissect_handle(proto_tree *tree, packet_info *pinfo, gint hf, return offset + 2; } -static gint -btatt_dissect_attribute_handle(guint16 handle, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, btatt_data_t *att_data); +static int +btatt_dissect_attribute_handle(uint16_t handle, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, btatt_data_t *att_data); static int btatt_call_dissector_by_dissector_name_with_data(const char *dissector_name, @@ -4676,8 +4778,8 @@ btatt_call_dissector_by_dissector_name_with_data(const char *dissector_name, returns 0 if paket was not handled returns #bytes consumed */ -static gint -btatt_dissect_with_reassmbly(guint16 handle, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, btatt_data_t *att_data){ +static int +btatt_dissect_with_reassmbly(uint16_t handle, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, btatt_data_t *att_data){ /* * Cases * 1) single paket: deseg_len=0 deseg_offset=pktlen oder 0?? @@ -4687,10 +4789,10 @@ btatt_dissect_with_reassmbly(guint16 handle, tvbuff_t *tvb, packet_info *pinfo, * * case 3 can lead to case 2 -> stop fragment stream, create new fragment stream * */ - guint consumed; - gboolean save_fragmented; - gboolean more_fragments = FALSE; - gint offset = 0; + unsigned consumed; + bool save_fragmented; + bool more_fragments = false; + int offset = 0; // do not test for (PINFO_FD_VISITED(pinfo)) otherwise the lua dissector is not added again: @@ -4701,32 +4803,32 @@ again: //consumed == 0: paket was rejected by subdissector, do not test for fragmentation if (!(consumed == 0 && pinfo->desegment_len == 0)) { - guint32 msg_seqid = handle << 16 | ( att_data->opcode & 0xffff); + uint32_t msg_seqid = handle << 16 | ( att_data->opcode & 0xffff); pinfo->srcport = handle; pinfo->destport = att_data->opcode; - if ((guint)pinfo->desegment_offset == tvb_captured_length(tvb)) + if ((unsigned)pinfo->desegment_offset == tvb_captured_length(tvb)) { // case 1 - more_fragments = FALSE; + more_fragments = false; } - if (pinfo->desegment_offset > -1 && (guint)pinfo->desegment_offset < tvb_captured_length(tvb)) + if (pinfo->desegment_offset > -1 && (unsigned)pinfo->desegment_offset < tvb_captured_length(tvb)) { // case 2 //drop leftovers before a fresh fragment ist started tvbuff_t *old_tvb_data = fragment_delete(&msg_reassembly_table, pinfo, msg_seqid, NULL); if (old_tvb_data) tvb_free(old_tvb_data); - more_fragments = TRUE; + more_fragments = true; } if (pinfo->desegment_offset == -1) { // case 3 - more_fragments = FALSE; + more_fragments = false; } if (pinfo->desegment_offset == -1 && consumed == tvb_captured_length(tvb)) { // case 4 - more_fragments = FALSE; + more_fragments = false; } save_fragmented = pinfo->fragmented; @@ -4735,7 +4837,7 @@ again: offset = (pinfo->desegment_offset==-1?0:pinfo->desegment_offset); tvbuff_t *new_tvb = NULL; fragment_head *frag_msg = NULL; - pinfo->fragmented = TRUE; + pinfo->fragmented = true; frag_msg = fragment_add_seq_next(&msg_reassembly_table, tvb, offset, pinfo, msg_seqid, NULL, /* ID for fragments belonging together */ @@ -4773,24 +4875,68 @@ again: } -static gint +static unsigned +add_item_btatt_time(proto_tree *tree, tvbuff_t *tvb, unsigned offset) +{ + proto_tree_add_item(tree, hf_btatt_year, tvb, offset, 2, ENC_LITTLE_ENDIAN); + offset += 2; + + proto_tree_add_item(tree, hf_btatt_month, tvb, offset, 1, ENC_NA); + offset += 1; + + proto_tree_add_item(tree, hf_btatt_day, tvb, offset, 1, ENC_NA); + offset += 1; + + proto_tree_add_item(tree, hf_btatt_hours, tvb, offset, 1, ENC_NA); + offset += 1; + + proto_tree_add_item(tree, hf_btatt_minutes, tvb, offset, 1, ENC_NA); + offset += 1; + + proto_tree_add_item(tree, hf_btatt_seconds, tvb, offset, 1, ENC_NA); + offset += 1; + + return offset; +} + +static unsigned +add_item_btatt_timestamp(proto_tree *tree, int hf_index, tvbuff_t *tvb, unsigned offset) +{ + proto_item *sub_item; + proto_tree *sub_tree; + + sub_item = proto_tree_add_item(tree, hf_index, tvb, offset, 7, ENC_NA); + sub_tree = proto_item_add_subtree(sub_item, ett_btatt_list); + + proto_item_append_text(sub_item, ": %04u-%02u-%02u %02u:%02u:%02u", + tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN), + tvb_get_uint8(tvb, offset + 2), + tvb_get_uint8(tvb, offset + 3), + tvb_get_uint8(tvb, offset + 4), + tvb_get_uint8(tvb, offset + 5), + tvb_get_uint8(tvb, offset + 6)); + + return add_item_btatt_time(sub_tree, tvb, offset); +} + +static int dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info *pinfo, tvbuff_t *old_tvb, - gint old_offset, gint length, guint16 handle, bluetooth_uuid_t uuid, btatt_data_t *att_data) + int old_offset, int length, uint16_t handle, bluetooth_uuid_t uuid, btatt_data_t *att_data) { proto_item *sub_item; proto_tree *sub_tree = NULL; tvbuff_t *tvb; - guint offset = 0; + unsigned offset = 0; bluetooth_uuid_t sub_uuid; bluetooth_uuid_t service_uuid; - guint16 sub_handle; - guint32 value; - guint32 flags; - guint32 operator_value; - guint32 opcode; - guint32 operand_offset; - guint32 interface_id; - guint32 adapter_id; + uint16_t sub_handle; + uint32_t value; + uint32_t flags; + uint32_t operator_value; + uint32_t opcode; + uint32_t operand_offset; + uint32_t interface_id; + uint32_t adapter_id; int * const *hfs; bluetooth_data_t *bluetooth_data = NULL; @@ -4799,11 +4945,12 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * DISSECTOR_ASSERT(att_data); bluetooth_data = att_data->bluetooth_data; + att_data->handle = handle; if (p_get_proto_data(pinfo->pool, pinfo, proto_btatt, PROTO_DATA_BTATT_HANDLE) == NULL) { - guint16 *value_data; + uint16_t *value_data; - value_data = wmem_new(wmem_file_scope(), guint16); + value_data = wmem_new(wmem_file_scope(), uint16_t); *value_data = handle; p_add_proto_data(pinfo->pool, pinfo, proto_btatt, PROTO_DATA_BTATT_HANDLE, value_data); @@ -4814,14 +4961,20 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * return old_offset + offset; if (p_get_proto_data(pinfo->pool, pinfo, proto_bluetooth, PROTO_DATA_BLUETOOTH_SERVICE_UUID) == NULL) { - guint8 *value_data; + uint8_t *value_data; value_data = wmem_strdup(wmem_file_scope(), print_numeric_bluetooth_uuid(pinfo->pool, &uuid)); p_add_proto_data(pinfo->pool, pinfo, proto_bluetooth, PROTO_DATA_BLUETOOTH_SERVICE_UUID, value_data); } - /* hier wird subddisector aufgerufen */ - /* dort wird auch von einem neuen PAket ausgegangen, was es natürlich nicht ist, darum fehelern und kein subddisector aufgerufen*/ + + service_uuid = get_service_uuid_from_handle(pinfo, handle, att_data->opcode, bluetooth_data); + offset = dissector_try_uint_new(att_service_dissector_table, service_uuid.bt_uuid, tvb, pinfo, tree, true, att_data); + if (offset == tvb_captured_length(tvb)) + return old_offset + offset; + + /* hier wird subdissector aufgerufen */ + /* dort wird auch von einem neuen PAket ausgegangen, was es natürlich nicht ist, darum fehelern und kein subdissector aufgerufen*/ if (dissector_try_string(bluetooth_uuid_table, print_numeric_bluetooth_uuid(pinfo->pool, &uuid), tvb, pinfo, tree, att_data)) return old_offset + length; else if (!uuid.bt_uuid) { @@ -4833,8 +4986,6 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * return old_offset + tvb_captured_length(tvb); } - service_uuid = get_service_uuid_from_handle(pinfo, handle, bluetooth_data); - switch (uuid.bt_uuid) { case 0x2800: /* GATT Primary Service Declaration */ case 0x2801: /* GATT Secondary Service Declaration */ @@ -4886,8 +5037,8 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * if (bluetooth_gatt_has_no_parameter(att_data->opcode)) break; - offset = dissect_handle(tree, pinfo, hf_btatt_included_service_handle, tvb, offset, bluetooth_data, NULL, HANDLE_TVB); - sub_handle = tvb_get_guint16(tvb, offset - 2, ENC_LITTLE_ENDIAN); + offset = dissect_handle(tree, pinfo, hf_btatt_included_service_handle, tvb, offset, bluetooth_data, NULL, HANDLE_TVB, att_data->opcode); + sub_handle = tvb_get_uint16(tvb, offset - 2, ENC_LITTLE_ENDIAN); proto_tree_add_item(tree, hf_btatt_ending_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN); offset += 2; @@ -4915,13 +5066,13 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * proto_tree_add_bitmask(tree, tvb, offset, hf_btatt_characteristic_properties, ett_btatt_characteristic_properties, hfx_btatt_characteristic_properties, ENC_NA); offset += 1; - offset = dissect_handle(tree, pinfo, hf_btatt_characteristic_value_handle, tvb, offset, bluetooth_data, NULL, HANDLE_TVB); - sub_handle = tvb_get_guint16(tvb, offset - 2, ENC_LITTLE_ENDIAN); + offset = dissect_handle(tree, pinfo, hf_btatt_characteristic_value_handle, tvb, offset, bluetooth_data, NULL, HANDLE_TVB, att_data->opcode); + sub_handle = tvb_get_uint16(tvb, offset - 2, ENC_LITTLE_ENDIAN); if (tvb_reported_length_remaining(tvb, offset) == 16) { proto_tree_add_item(tree, hf_btatt_uuid128, tvb, offset, 16, ENC_NA); sub_uuid = get_bluetooth_uuid(tvb, offset, 16); - proto_item_append_text(patron_item, ", Characteristic Handle: 0x%04x, UUID128: %s", tvb_get_guint16(tvb, offset - 2, ENC_LITTLE_ENDIAN), print_bluetooth_uuid(pinfo->pool, &sub_uuid)); + proto_item_append_text(patron_item, ", Characteristic Handle: 0x%04x, UUID128: %s", tvb_get_uint16(tvb, offset - 2, ENC_LITTLE_ENDIAN), print_bluetooth_uuid(pinfo->pool, &sub_uuid)); offset += 16; col_append_fstr(pinfo->cinfo, COL_INFO, ", %s", print_bluetooth_uuid(pinfo->pool, &sub_uuid)); @@ -4984,13 +5135,13 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_bitmask(tree, tvb, offset, hf_btatt_characteristic_configuration_client, ett_btatt_value, hfx_btatt_characteristic_configuration_client, ENC_LITTLE_ENDIAN); - value = tvb_get_guint16(tvb, offset, ENC_LITTLE_ENDIAN); + value = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN); offset += 2; { bluetooth_uuid_t characteristic_uuid; - characteristic_uuid = get_characteristic_uuid_from_handle(pinfo, handle, bluetooth_data); + characteristic_uuid = get_characteristic_uuid_from_handle(pinfo, handle, att_data->opcode, bluetooth_data); if (value & 0x1) switch (characteristic_uuid.bt_uuid) { /* Notification */ case 0x2A05: /* Service Changed */ @@ -5204,7 +5355,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * offset += 2; proto_tree_add_item(tree, hf_btatt_characteristic_presentation_namespace, tvb, offset, 1, ENC_NA); - value = tvb_get_guint8(tvb, offset); + value = tvb_get_uint8(tvb, offset); offset += 1; if (value == 0x01) /* Bluetooth SIG */ @@ -5229,19 +5380,19 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * tvb_captured_length(tvb) / 2); sub_tree = proto_item_add_subtree(sub_item, ett_btatt_list); - while (offset < (gint64) tvb_captured_length(tvb)) { - offset = dissect_handle(sub_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, NULL, HANDLE_TVB); + while (offset < (int64_t) tvb_captured_length(tvb)) { + offset = dissect_handle(sub_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, NULL, HANDLE_TVB, att_data->opcode); } break; case 0x2906: /* Valid Range */ { bluetooth_uuid_t characteristic_uuid; - guint8 *characteristic_dissector_name; + uint8_t *characteristic_dissector_name; dissector_handle_t characteristic_dissector; if (bluetooth_gatt_has_no_parameter(att_data->opcode)) break; - characteristic_uuid = get_characteristic_uuid_from_handle(pinfo, handle, bluetooth_data); + characteristic_uuid = get_characteristic_uuid_from_handle(pinfo, handle, att_data->opcode, bluetooth_data); characteristic_dissector_name = wmem_strdup_printf(pinfo->pool, "btgatt.uuid0x%s", print_numeric_bluetooth_uuid(pinfo->pool, &characteristic_uuid)); characteristic_dissector = find_dissector(characteristic_dissector_name); @@ -5329,7 +5480,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_item(tree, hf_btatt_value_trigger_setting_condition, tvb, offset, 1, ENC_NA); - value = tvb_get_guint8(tvb, offset); + value = tvb_get_uint8(tvb, offset); offset += 1; if (value >= 1 && value <= 3) { @@ -5399,7 +5550,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_item(tree, hf_btatt_time_trigger_setting_condition, tvb, offset, 1, ENC_NA); - value = tvb_get_guint8(tvb, offset); + value = tvb_get_uint8(tvb, offset); offset += 1; if (value == 0) { @@ -5426,7 +5577,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * if (bluetooth_gatt_has_no_parameter(att_data->opcode)) break; - switch ((tvb_get_guint16(tvb, offset, ENC_LITTLE_ENDIAN) & 0xFFC0) >> 6) { + switch ((tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN) & 0xFFC0) >> 6) { case 0x003: /* Watch */ hfs = hfx_btatt_appearance_watch; break; @@ -5512,7 +5663,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * } else { interface_id = adapter_id = 0; } - offset = dissect_bd_addr(hf_btatt_reconnection_address, pinfo, tree, tvb, offset, FALSE, interface_id, adapter_id, NULL); + offset = dissect_bd_addr(hf_btatt_reconnection_address, pinfo, tree, tvb, offset, false, interface_id, adapter_id, NULL); break; case 0x2A04: /* Peripheral Preferred Connection Parameters */ @@ -5530,7 +5681,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * proto_tree_add_item(tree, hf_btatt_maximum_connection_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN); offset += 2; - proto_tree_add_item(tree, hf_btatt_slave_latency, tvb, offset, 2, ENC_LITTLE_ENDIAN); + proto_tree_add_item(tree, hf_btatt_peripheral_latency, tvb, offset, 2, ENC_LITTLE_ENDIAN); offset += 2; proto_tree_add_item(tree, hf_btatt_connection_supervision_timeout_multiplier, tvb, offset, 2, ENC_LITTLE_ENDIAN); @@ -5596,23 +5747,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * if (bluetooth_gatt_has_no_parameter(att_data->opcode)) break; - proto_tree_add_item(tree, hf_btatt_year, tvb, offset, 2, ENC_LITTLE_ENDIAN); - offset += 2; - - proto_tree_add_item(tree, hf_btatt_month, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(tree, hf_btatt_day, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(tree, hf_btatt_hours, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(tree, hf_btatt_minutes, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(tree, hf_btatt_seconds, tvb, offset, 1, ENC_NA); - offset += 1; + offset = add_item_btatt_time(tree, tvb, offset); break; case 0x2A09: /* Day of Week */ @@ -5641,23 +5776,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * if (bluetooth_gatt_has_no_parameter(att_data->opcode)) break; - proto_tree_add_item(tree, hf_btatt_year, tvb, offset, 2, ENC_LITTLE_ENDIAN); - offset += 2; - - proto_tree_add_item(tree, hf_btatt_month, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(tree, hf_btatt_day, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(tree, hf_btatt_hours, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(tree, hf_btatt_minutes, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(tree, hf_btatt_seconds, tvb, offset, 1, ENC_NA); - offset += 1; + offset = add_item_btatt_time(tree, tvb, offset); proto_tree_add_item(tree, hf_btatt_day_of_week, tvb, offset, 1, ENC_NA); offset += 1; @@ -5730,23 +5849,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * if (bluetooth_gatt_has_no_parameter(att_data->opcode)) break; - proto_tree_add_item(tree, hf_btatt_year, tvb, offset, 2, ENC_LITTLE_ENDIAN); - offset += 2; - - proto_tree_add_item(tree, hf_btatt_month, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(tree, hf_btatt_day, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(tree, hf_btatt_hours, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(tree, hf_btatt_minutes, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(tree, hf_btatt_seconds, tvb, offset, 1, ENC_NA); - offset += 1; + offset = add_item_btatt_time(tree, tvb, offset); proto_tree_add_item(tree, hf_btatt_dst_offset, tvb, offset, 1, ENC_NA); offset += 1; @@ -5849,32 +5952,13 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_bitmask(tree, tvb, offset, hf_btatt_glucose_measurement_flags, ett_btatt_value, hfx_btatt_glucose_measurement_flags, ENC_NA); - flags = tvb_get_guint8(tvb, offset); + flags = tvb_get_uint8(tvb, offset); offset += 1; proto_tree_add_item(tree, hf_btatt_glucose_measurement_sequence_number, tvb, offset, 2, ENC_LITTLE_ENDIAN); offset += 2; - sub_item = proto_tree_add_item(tree, hf_btatt_glucose_measurement_base_time, tvb, offset, 7, ENC_NA); - sub_tree = proto_item_add_subtree(sub_item, ett_btatt_list); - - proto_tree_add_item(sub_tree, hf_btatt_year, tvb, offset, 2, ENC_LITTLE_ENDIAN); - offset += 2; - - proto_tree_add_item(sub_tree, hf_btatt_month, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_day, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_hours, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_minutes, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_seconds, tvb, offset, 1, ENC_NA); - offset += 1; + offset = add_item_btatt_timestamp(tree, hf_btatt_glucose_measurement_base_time, tvb, offset); if (flags & 0x01) { proto_tree_add_item(tree, hf_btatt_glucose_measurement_time_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN); @@ -5914,7 +5998,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * if (bluetooth_gatt_has_no_parameter(att_data->opcode)) break; - guint32 battery_level; + uint32_t battery_level; sub_item = proto_tree_add_item_ret_uint(tree, hf_btatt_battery_level, tvb, offset, 1, ENC_NA, &battery_level); if (battery_level > 100) expert_add_info(pinfo, sub_item, &ei_btatt_bad_data); @@ -5934,7 +6018,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * if (bluetooth_gatt_has_no_parameter(att_data->opcode)) break; - guint32 battery_level; + uint32_t battery_level; sub_item = proto_tree_add_item_ret_uint(tree, hf_btatt_battery_level, tvb, offset, 1, ENC_NA, &battery_level); if (battery_level > 100) expert_add_info(pinfo, sub_item, &ei_btatt_bad_data); @@ -5968,7 +6052,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_bitmask(tree, tvb, offset, hf_btatt_temperature_measurement_flags, ett_btatt_value, hfx_btatt_temperature_measurement_flags, ENC_NA); - flags = tvb_get_guint8(tvb, offset); + flags = tvb_get_uint8(tvb, offset); offset += 1; if (flags & 0x01) { @@ -5979,26 +6063,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * offset += 4; if (flags & 0x02) { - sub_item = proto_tree_add_item(tree, hf_btatt_temperature_measurement_timestamp, tvb, offset, 7, ENC_NA); - sub_tree = proto_item_add_subtree(sub_item, ett_btatt_list); - - proto_tree_add_item(sub_tree, hf_btatt_year, tvb, offset, 2, ENC_LITTLE_ENDIAN); - offset += 2; - - proto_tree_add_item(sub_tree, hf_btatt_month, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_day, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_hours, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_minutes, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_seconds, tvb, offset, 1, ENC_NA); - offset += 1; + offset = add_item_btatt_timestamp(tree, hf_btatt_temperature_measurement_timestamp, tvb, offset); } if (flags & 0x04) { @@ -6027,7 +6092,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * if (bluetooth_gatt_has_no_parameter(att_data->opcode)) break; - gint32 temperature; + int32_t temperature; sub_item = proto_tree_add_item_ret_int(tree, hf_btatt_temperature_celsius, tvb, offset, 2, ENC_LITTLE_ENDIAN, &temperature); if (temperature < -2732) expert_add_info(pinfo, sub_item, &ei_btatt_bad_data); @@ -6039,7 +6104,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * if (bluetooth_gatt_has_no_parameter(att_data->opcode)) break; - gint32 temperature; + int32_t temperature; sub_item = proto_tree_add_item_ret_int(tree, hf_btatt_temperature_fahrenheit, tvb, offset, 2, ENC_LITTLE_ENDIAN, &temperature); if (temperature < -4597) expert_add_info(pinfo, sub_item, &ei_btatt_bad_data); @@ -6194,8 +6259,8 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; case 0x2A2A: /* IEEE 11073-20601 Regulatory Certification Data List */ { - guint16 count; - guint16 list_length = 0; + uint16_t count; + uint16_t list_length = 0; if (service_uuid.bt_uuid == GATT_SERVICE_DEVICE_INFORMATION) { if (is_readable_request(att_data->opcode)) @@ -6209,7 +6274,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_item(tree, hf_btatt_regulatory_certification_data_list_count, tvb, offset, 2, ENC_LITTLE_ENDIAN); - count = tvb_get_guint16(tvb, offset, ENC_LITTLE_ENDIAN); + count = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN); list_length += 2; offset += 2; @@ -6220,10 +6285,10 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * while (count--) { proto_item *authorizing_body_data_item; proto_tree *authorizing_body_data_tree; - guint8 item_type; - guint16 item_length; - guint16 certification_data_list_count = 0; - guint16 certification_data_list_length = 0; + uint8_t item_type; + uint16_t item_length; + uint16_t certification_data_list_count = 0; + uint16_t certification_data_list_length = 0; proto_item *list_length_item; sub_item = proto_tree_add_item(tree, hf_btatt_regulatory_certification_data_list_item, tvb, offset, 0, ENC_NA); @@ -6234,12 +6299,12 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * offset += 1; proto_tree_add_item(sub_tree, hf_btatt_regulatory_certification_data_list_item_body_structure_type, tvb, offset, 1, ENC_NA); - item_type = tvb_get_guint8(tvb, offset); + item_type = tvb_get_uint8(tvb, offset); list_length += 1; offset += 1; list_length_item = proto_tree_add_item(sub_tree, hf_btatt_regulatory_certification_data_list_item_body_structure_length, tvb, offset, 2, ENC_LITTLE_ENDIAN); - item_length = tvb_get_guint16(tvb, offset, ENC_LITTLE_ENDIAN); + item_length = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN); list_length += 2 + item_length; offset += 2; @@ -6259,13 +6324,13 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * if (item_length > 2) { proto_tree_add_item(authorizing_body_data_tree, hf_btatt_regulatory_certification_data_list_item_authorizing_body_data_certification_data_list_count, tvb, offset, 2, ENC_LITTLE_ENDIAN); - certification_data_list_count = tvb_get_guint16(tvb, offset, ENC_LITTLE_ENDIAN); + certification_data_list_count = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN); offset += 2; } if (item_length > 4) { proto_tree_add_item(authorizing_body_data_tree, hf_btatt_regulatory_certification_data_list_item_authorizing_body_data_certification_data_list_length, tvb, offset, 2, ENC_LITTLE_ENDIAN); - certification_data_list_length = tvb_get_guint16(tvb, offset, ENC_LITTLE_ENDIAN); + certification_data_list_length = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN); offset += 2; } @@ -6391,7 +6456,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_bitmask(tree, tvb, offset, hf_btatt_glucose_measurement_context_flags, ett_btatt_value, hfx_btatt_glucose_measurement_context_flags, ENC_NA); - flags = tvb_get_guint8(tvb, offset); + flags = tvb_get_uint8(tvb, offset); offset += 1; proto_tree_add_item(tree, hf_btatt_glucose_measurement_context_sequence_number, tvb, offset, 2, ENC_LITTLE_ENDIAN); @@ -6468,7 +6533,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_bitmask(tree, tvb, offset, hf_btatt_blood_pressure_measurement_flags, ett_btatt_value, hfx_btatt_blood_pressure_measurement_flags, ENC_NA); - flags = tvb_get_guint8(tvb, offset); + flags = tvb_get_uint8(tvb, offset); offset += 1; if (flags & 0x01) { @@ -6492,26 +6557,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * } if (flags & 0x02) { - sub_item = proto_tree_add_item(tree, hf_btatt_blood_pressure_measurement_timestamp, tvb, offset, 7, ENC_NA); - sub_tree = proto_item_add_subtree(sub_item, ett_btatt_list); - - proto_tree_add_item(sub_tree, hf_btatt_year, tvb, offset, 2, ENC_LITTLE_ENDIAN); - offset += 2; - - proto_tree_add_item(sub_tree, hf_btatt_month, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_day, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_hours, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_minutes, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_seconds, tvb, offset, 1, ENC_NA); - offset += 1; + offset = add_item_btatt_timestamp(tree, hf_btatt_blood_pressure_measurement_timestamp, tvb, offset); } if (flags & 0x04) { @@ -6540,7 +6586,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_bitmask(tree, tvb, offset, hf_btatt_heart_rate_measurement_flags, ett_btatt_value, hfx_btatt_heart_rate_measurement_flags, ENC_NA); - flags = tvb_get_guint8(tvb, offset); + flags = tvb_get_uint8(tvb, offset); offset += 1; if (flags & 0x01) { @@ -6557,7 +6603,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * } if (flags & 0x10) { - guint interval_count = 0; + unsigned interval_count = 0; sub_item = proto_tree_add_item(tree, hf_btatt_heart_rate_measurement_rr_intervals, tvb, offset, tvb_captured_length_remaining(tvb, offset), ENC_NA); sub_tree = proto_item_add_subtree(sub_item, ett_btatt_list); @@ -6909,7 +6955,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_item(tree, hf_btatt_pnp_id_vendor_id_source, tvb, offset, 1, ENC_NA); - value = tvb_get_guint8(tvb, offset); + value = tvb_get_uint8(tvb, offset); offset += 1; if (value == 1) @@ -6958,11 +7004,11 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_item(tree, hf_btatt_record_access_control_point_opcode, tvb, offset, 1, ENC_NA); - opcode = tvb_get_guint8(tvb, offset); + opcode = tvb_get_uint8(tvb, offset); offset += 1; proto_tree_add_item(tree, hf_btatt_record_access_control_point_operator, tvb, offset, 1, ENC_NA); - operator_value = tvb_get_guint8(tvb, offset); + operator_value = tvb_get_uint8(tvb, offset); offset += 1; sub_item = proto_tree_add_item(tree, hf_btatt_record_access_control_point_operand, tvb, offset, 0, ENC_NA); @@ -6983,7 +7029,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; case 2: /* Less than or equal to */ proto_tree_add_item(sub_tree, hf_btatt_record_access_control_point_operand_filter_type, tvb, offset, 1, ENC_NA); - value = tvb_get_guint8(tvb, offset); + value = tvb_get_uint8(tvb, offset); offset += 1; if (value == 0x01) /* Time offset */ { @@ -6997,7 +7043,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; case 3: /* Greater than or equal to */ proto_tree_add_item(sub_tree, hf_btatt_record_access_control_point_operand_filter_type, tvb, offset, 1, ENC_NA); - value = tvb_get_guint8(tvb, offset); + value = tvb_get_uint8(tvb, offset); offset += 1; if (value == 0x01) /* Time offset */ { @@ -7011,7 +7057,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; case 4: /* Within range of (inclusive) */ proto_tree_add_item(sub_tree, hf_btatt_record_access_control_point_operand_filter_type, tvb, offset, 1, ENC_NA); - value = tvb_get_guint8(tvb, offset); + value = tvb_get_uint8(tvb, offset); offset += 1; if (value == 0x01) /* Time offset */ { @@ -7062,7 +7108,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_bitmask(tree, tvb, offset, hf_btatt_rsc_measurement_flags, ett_btatt_value, hfx_btatt_rsc_measurement_flags, ENC_NA); - flags = tvb_get_guint8(tvb, offset); + flags = tvb_get_uint8(tvb, offset); offset += 1; proto_tree_add_item(tree, hf_btatt_rsc_measurement_instantaneous_speed, tvb, offset, 2, ENC_LITTLE_ENDIAN); @@ -7111,7 +7157,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_item(tree, hf_btatt_sc_control_point_opcode, tvb, offset, 1, ENC_NA); - opcode = tvb_get_guint8(tvb, offset); + opcode = tvb_get_uint8(tvb, offset); offset += 1; switch (opcode) { @@ -7127,13 +7173,13 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; case 16: /* Response Code */ proto_tree_add_item(tree, hf_btatt_sc_control_point_request_opcode, tvb, offset, 1, ENC_NA); - value = tvb_get_guint8(tvb, offset); + value = tvb_get_uint8(tvb, offset); offset += 1; proto_tree_add_item(tree, hf_btatt_sc_control_point_response_value, tvb, offset, 1, ENC_NA); offset += 1; - if (value == 0x04 && tvb_get_guint8(tvb, offset) == 0x01) { /* Request Supported Sensor Locations */ + if (value == 0x04 && tvb_get_uint8(tvb, offset) == 0x01) { /* Request Supported Sensor Locations */ while (tvb_captured_length_remaining(tvb, offset)) { proto_tree_add_item(tree, hf_btatt_sensor_location, tvb, offset, 1, ENC_NA); offset += 1; @@ -7228,7 +7274,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_bitmask(tree, tvb, offset, hf_btatt_csc_measurement_flags, ett_btatt_value, hfx_btatt_csc_measurement_flags, ENC_NA); - flags = tvb_get_guint8(tvb, offset); + flags = tvb_get_uint8(tvb, offset); offset += 1; if (flags & 0x01) { @@ -7295,7 +7341,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_bitmask(tree, tvb, offset, hf_btatt_plx_spot_check_measurement_flags, ett_btatt_value, hfx_btatt_plx_spot_check_measurement_flags, ENC_NA); - flags = tvb_get_guint8(tvb, offset); + flags = tvb_get_uint8(tvb, offset); offset += 1; sub_item = proto_tree_add_item(tree, hf_btatt_plx_spo2pr_spot_check, tvb, offset, 4, ENC_NA); @@ -7341,7 +7387,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_bitmask(tree, tvb, offset, hf_btatt_plx_continuous_measurement_flags, ett_btatt_value, hfx_btatt_plx_continuous_measurement_flags, ENC_NA); - flags = tvb_get_guint8(tvb, offset); + flags = tvb_get_uint8(tvb, offset); offset += 1; sub_item = proto_tree_add_item(tree, hf_btatt_plx_spo2pr_normal, tvb, offset, 4, ENC_NA); @@ -7404,7 +7450,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_bitmask(tree, tvb, offset, hf_btatt_plx_features_supported_features, ett_btatt_value, hfx_btatt_plx_features_supported_features, ENC_LITTLE_ENDIAN); - flags = tvb_get_guint16(tvb, offset, ENC_LITTLE_ENDIAN); + flags = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN); offset += 2; if (flags & 0x01) { @@ -7428,7 +7474,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_bitmask(tree, tvb, offset, hf_btatt_cycling_power_measurement_flags, ett_btatt_value, hfx_btatt_cycling_power_measurement_flags, ENC_LITTLE_ENDIAN); - flags = tvb_get_guint16(tvb, offset, ENC_LITTLE_ENDIAN); + flags = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN); offset += 2; proto_tree_add_item(tree, hf_btatt_cycling_power_measurement_instantaneous_power, tvb, offset, 2, ENC_LITTLE_ENDIAN); @@ -7507,7 +7553,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_bitmask(tree, tvb, offset, hf_btatt_cycling_power_vector_flags, ett_btatt_value, hfx_btatt_cycling_power_vector_flags, ENC_NA); - flags = tvb_get_guint8(tvb, offset); + flags = tvb_get_uint8(tvb, offset); offset += 1; if (flags & 0x01) { @@ -7567,7 +7613,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_item(tree, hf_btatt_cycling_power_control_point_opcode, tvb, offset, 1, ENC_NA); - opcode = tvb_get_guint8(tvb, offset); + opcode = tvb_get_uint8(tvb, offset); offset += 1; switch (opcode) { @@ -7624,7 +7670,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * proto_tree_add_item(tree, hf_btatt_cycling_power_control_point_response_value, tvb, offset, 1, ENC_NA); offset += 1; - switch (tvb_get_guint8(tvb, offset - 2)) { + switch (tvb_get_uint8(tvb, offset - 2)) { case 1: /* Set Cumulative Value */ case 2: /* Update Sensor Location */ case 4: /* Set Crank Length */ @@ -7636,7 +7682,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; case 3: /* Request Supported Sensor Locations */ - if (tvb_get_guint8(tvb, offset - 1) == 0x01) /* Success */ { + if (tvb_get_uint8(tvb, offset - 1) == 0x01) /* Success */ { while (tvb_captured_length_remaining(tvb, offset)) { proto_tree_add_item(tree, hf_btatt_sensor_location, tvb, offset, 1, ENC_NA); offset += 1; @@ -7645,69 +7691,50 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; case 5: /* Request Crank Length */ - if (tvb_get_guint8(tvb, offset - 1) == 0x01) /* Success */ { + if (tvb_get_uint8(tvb, offset - 1) == 0x01) /* Success */ { proto_tree_add_item(tree, hf_btatt_cycling_power_control_point_crank_length, tvb, offset, 2, ENC_LITTLE_ENDIAN); offset += 2; } break; case 7: /* Request Chain Length */ - if (tvb_get_guint8(tvb, offset - 1) == 0x01) /* Success */ { + if (tvb_get_uint8(tvb, offset - 1) == 0x01) /* Success */ { proto_tree_add_item(tree, hf_btatt_cycling_power_control_point_chain_length, tvb, offset, 2, ENC_LITTLE_ENDIAN); offset += 2; } break; case 9: /* Request Chain Weight */ - if (tvb_get_guint8(tvb, offset - 1) == 0x01) /* Success */ { + if (tvb_get_uint8(tvb, offset - 1) == 0x01) /* Success */ { proto_tree_add_item(tree, hf_btatt_cycling_power_control_point_chain_weight, tvb, offset, 2, ENC_LITTLE_ENDIAN); offset += 2; } break; case 11: /* Request Span Length */ - if (tvb_get_guint8(tvb, offset - 1) == 0x01) /* Success */ { + if (tvb_get_uint8(tvb, offset - 1) == 0x01) /* Success */ { proto_tree_add_item(tree, hf_btatt_cycling_power_control_point_span_length, tvb, offset, 2, ENC_LITTLE_ENDIAN); offset += 2; } break; case 12: /* Start Offset Compensation */ - if (tvb_get_guint8(tvb, offset - 1) == 0x01) /* Success */ { + if (tvb_get_uint8(tvb, offset - 1) == 0x01) /* Success */ { proto_tree_add_item(tree, hf_btatt_cycling_power_control_point_start_offset_compensation, tvb, offset, 2, ENC_LITTLE_ENDIAN); offset += 2; } break; case 14: /* Request Sampling Rate */ - if (tvb_get_guint8(tvb, offset - 1) == 0x01) /* Success */ { + if (tvb_get_uint8(tvb, offset - 1) == 0x01) /* Success */ { proto_tree_add_item(tree, hf_btatt_cycling_power_control_point_sampling_rate, tvb, offset, 1, ENC_NA); offset += 1; } break; case 15: /* Request Factory Calibration Date */ - if (tvb_get_guint8(tvb, offset - 1) == 0x01) /* Success */ { - sub_item = proto_tree_add_item(tree, hf_btatt_cycling_power_control_point_factory_calibration_date, tvb, offset, 7, ENC_NA); - sub_tree = proto_item_add_subtree(sub_item, ett_btatt_list); - - proto_tree_add_item(sub_tree, hf_btatt_year, tvb, offset, 2, ENC_LITTLE_ENDIAN); - offset += 2; - - proto_tree_add_item(sub_tree, hf_btatt_month, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_day, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_hours, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_minutes, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_seconds, tvb, offset, 1, ENC_NA); - offset += 1; + if (tvb_get_uint8(tvb, offset - 1) == 0x01) /* Success */ { + offset = add_item_btatt_timestamp(tree, hf_btatt_cycling_power_control_point_factory_calibration_date, tvb, offset); } break; @@ -7726,7 +7753,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_bitmask(tree, tvb, offset, hf_btatt_location_and_speed_flags, ett_btatt_value, hfx_btatt_location_and_speed_flags, ENC_LITTLE_ENDIAN); - flags = tvb_get_guint16(tvb, offset, ENC_LITTLE_ENDIAN); + flags = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN); offset += 2; if (flags & 0x01) { @@ -7763,26 +7790,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * } if (flags & 0x40) { - sub_item = proto_tree_add_item(tree, hf_btatt_location_and_speed_utc_time, tvb, offset, 7, ENC_NA); - sub_tree = proto_item_add_subtree(sub_item, ett_btatt_list); - - proto_tree_add_item(sub_tree, hf_btatt_year, tvb, offset, 2, ENC_LITTLE_ENDIAN); - offset += 2; - - proto_tree_add_item(sub_tree, hf_btatt_month, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_day, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_hours, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_minutes, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_seconds, tvb, offset, 1, ENC_NA); - offset += 1; + offset = add_item_btatt_timestamp(tree, hf_btatt_location_and_speed_utc_time, tvb, offset); } break; @@ -7796,7 +7804,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_bitmask(tree, tvb, offset, hf_btatt_navigation_flags, ett_btatt_value, hfx_btatt_navigation_flags, ENC_LITTLE_ENDIAN); - flags = tvb_get_guint16(tvb, offset, ENC_LITTLE_ENDIAN); + flags = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN); offset += 2; proto_tree_add_item(tree, hf_btatt_navigation_bearing, tvb, offset, 2, ENC_LITTLE_ENDIAN); @@ -7816,26 +7824,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * } if (flags & 0x04) { - sub_item = proto_tree_add_item(tree, hf_btatt_navigation_estimated_time_of_arrival, tvb, offset, 7, ENC_NA); - sub_tree = proto_item_add_subtree(sub_item, ett_btatt_list); - - proto_tree_add_item(sub_tree, hf_btatt_year, tvb, offset, 2, ENC_LITTLE_ENDIAN); - offset += 2; - - proto_tree_add_item(sub_tree, hf_btatt_month, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_day, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_hours, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_minutes, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_seconds, tvb, offset, 1, ENC_NA); - offset += 1; + offset = add_item_btatt_timestamp(tree, hf_btatt_navigation_estimated_time_of_arrival, tvb, offset); } break; @@ -7852,7 +7841,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_bitmask(tree, tvb, offset, hf_btatt_position_quality_flags, ett_btatt_value, hfx_btatt_position_quality_flags, ENC_LITTLE_ENDIAN); - flags = tvb_get_guint16(tvb, offset, ENC_LITTLE_ENDIAN); + flags = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN); offset += 2; if (flags & 0x01) { @@ -7920,7 +7909,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_item(tree, hf_btatt_ln_control_point_opcode, tvb, offset, 1, ENC_NA); - opcode = tvb_get_guint8(tvb, offset); + opcode = tvb_get_uint8(tvb, offset); offset += 1; switch (opcode) { @@ -7966,7 +7955,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * proto_tree_add_item(tree, hf_btatt_ln_control_point_response_value, tvb, offset, 1, ENC_NA); offset += 1; - switch (tvb_get_guint8(tvb, offset - 2)) { + switch (tvb_get_uint8(tvb, offset - 2)) { case 1: /* Set Cumulative Value */ case 2: /* Mask Location and Speed Characteristic Content */ case 3: /* Navigation Control */ @@ -8806,33 +8795,14 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_bitmask(tree, tvb, offset, hf_btatt_body_composition_measurement_flags, ett_btatt_value, hfx_btatt_body_composition_measurement_flags, ENC_LITTLE_ENDIAN); - flags = tvb_get_guint16(tvb, offset, ENC_LITTLE_ENDIAN); + flags = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN); offset += 2; proto_tree_add_item(tree, hf_btatt_body_composition_measurement_body_fat_percentage, tvb, offset, 2, ENC_LITTLE_ENDIAN); offset += 2; if (flags & 0x02) { - sub_item = proto_tree_add_item(tree, hf_btatt_body_composition_measurement_timestamp, tvb, offset, 7, ENC_NA); - sub_tree = proto_item_add_subtree(sub_item, ett_btatt_list); - - proto_tree_add_item(sub_tree, hf_btatt_year, tvb, offset, 2, ENC_LITTLE_ENDIAN); - offset += 2; - - proto_tree_add_item(sub_tree, hf_btatt_month, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_day, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_hours, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_minutes, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_seconds, tvb, offset, 1, ENC_NA); - offset += 1; + offset = add_item_btatt_timestamp(tree, hf_btatt_body_composition_measurement_timestamp, tvb, offset); } if (flags & 0x04) { @@ -8919,7 +8889,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_bitmask(tree, tvb, offset, hf_btatt_weight_measurement_flags, ett_btatt_value, hfx_btatt_weight_measurement_flags, ENC_NA); - flags = tvb_get_guint8(tvb, offset); + flags = tvb_get_uint8(tvb, offset); offset += 1; if (flags & 0x01) @@ -8929,26 +8899,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * offset += 2; if (flags & 0x02) { - sub_item = proto_tree_add_item(tree, hf_btatt_weight_measurement_timestamp, tvb, offset, 7, ENC_NA); - sub_tree = proto_item_add_subtree(sub_item, ett_btatt_list); - - proto_tree_add_item(sub_tree, hf_btatt_year, tvb, offset, 2, ENC_LITTLE_ENDIAN); - offset += 2; - - proto_tree_add_item(sub_tree, hf_btatt_month, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_day, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_hours, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_minutes, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_seconds, tvb, offset, 1, ENC_NA); - offset += 1; + offset = add_item_btatt_timestamp(tree, hf_btatt_weight_measurement_timestamp, tvb, offset); } if (flags & 0x04) { @@ -8997,13 +8948,13 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_item(tree, hf_btatt_user_control_point_opcode, tvb, offset, 1, ENC_NA); - opcode = tvb_get_guint8(tvb, offset); + opcode = tvb_get_uint8(tvb, offset); offset += 1; switch (opcode) { case 0x01: /* Register New User */ sub_item = proto_tree_add_item(tree, hf_btatt_user_control_point_consent_code, tvb, offset, 2, ENC_LITTLE_ENDIAN); - value = tvb_get_guint16(tvb, offset, ENC_LITTLE_ENDIAN); + value = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN); if (value > 9999) expert_add_info(pinfo, sub_item, &ei_btatt_consent_out_of_bounds); offset += 2; @@ -9014,7 +8965,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * offset += 1; sub_item = proto_tree_add_item(tree, hf_btatt_user_control_point_consent_code, tvb, offset, 2, ENC_LITTLE_ENDIAN); - value = tvb_get_guint16(tvb, offset, ENC_LITTLE_ENDIAN); + value = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN); if (value > 9999) expert_add_info(pinfo, sub_item, &ei_btatt_consent_out_of_bounds); offset += 2; @@ -9030,7 +8981,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * proto_tree_add_item(tree, hf_btatt_user_control_point_response_value, tvb, offset, 1, ENC_NA); offset += 1; - if (tvb_get_guint8(tvb, offset - 2) == 0x01 && tvb_get_guint8(tvb, offset - 1) == 0x01) { /* Register New User && Success */ + if (tvb_get_uint8(tvb, offset - 2) == 0x01 && tvb_get_uint8(tvb, offset - 1) == 0x01) { /* Register New User && Success */ proto_tree_add_item(tree, hf_btatt_user_index, tvb, offset, 1, ENC_NA); offset += 1; } @@ -9132,14 +9083,14 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_bitmask(tree, tvb, offset, hf_btatt_bond_management_feature, ett_btatt_value, hfx_btatt_bond_management_feature, ENC_LITTLE_ENDIAN); - flags = tvb_get_guint24(tvb, offset, ENC_LITTLE_ENDIAN); + flags = tvb_get_uint24(tvb, offset, ENC_LITTLE_ENDIAN); offset += 3; if (flags & 0x800000) { do { proto_tree_add_bitmask(tree, tvb, offset, hf_btatt_bond_management_feature_nth, ett_btatt_value, hfx_btatt_bond_management_feature_nth, ENC_LITTLE_ENDIAN); offset += 1; - } while (tvb_get_guint8(tvb, offset - 1) & 0x80); + } while (tvb_get_uint8(tvb, offset - 1) & 0x80); } break; @@ -9166,12 +9117,12 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; sub_item = proto_tree_add_item(tree, hf_btatt_cgm_measurement_size, tvb, offset, 1, ENC_NA); - if (tvb_get_guint8(tvb, offset) >= 6) + if (tvb_get_uint8(tvb, offset) >= 6) expert_add_info(pinfo, sub_item, &ei_btatt_cgm_size_too_small); offset += 1; proto_tree_add_bitmask(tree, tvb, offset, hf_btatt_cgm_measurement_flags, ett_btatt_value, hfx_btatt_cgm_measurement_flags, ENC_NA); - flags = tvb_get_guint8(tvb, offset); + flags = tvb_get_uint8(tvb, offset); offset += 1; proto_tree_add_item(tree, hf_btatt_cgm_measurement_glucose_concentration, tvb, offset, 2, ENC_LITTLE_ENDIAN); @@ -9296,26 +9247,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * if (bluetooth_gatt_has_no_parameter(att_data->opcode)) break; - sub_item = proto_tree_add_item(tree, hf_btatt_cgm_session_start_time, tvb, offset, 7, ENC_NA); - sub_tree = proto_item_add_subtree(sub_item, ett_btatt_list); - - proto_tree_add_item(sub_tree, hf_btatt_year, tvb, offset, 2, ENC_LITTLE_ENDIAN); - offset += 2; - - proto_tree_add_item(sub_tree, hf_btatt_month, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_day, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_hours, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_minutes, tvb, offset, 1, ENC_NA); - offset += 1; - - proto_tree_add_item(sub_tree, hf_btatt_seconds, tvb, offset, 1, ENC_NA); - offset += 1; + offset = add_item_btatt_timestamp(tree, hf_btatt_cgm_session_start_time, tvb, offset); proto_tree_add_item(tree, hf_btatt_timezone, tvb, offset, 1, ENC_NA); offset += 1; @@ -9366,7 +9298,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_item(tree, hf_btatt_cgm_specific_ops_control_point_opcode, tvb, offset, 1, ENC_NA); - opcode = tvb_get_guint8(tvb, offset); + opcode = tvb_get_uint8(tvb, offset); offset += 1; sub_item = proto_tree_add_item(tree, hf_btatt_cgm_specific_ops_control_point_operand, tvb, offset, 0, ENC_NA); @@ -9449,7 +9381,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * proto_tree_add_item(sub_tree, hf_btatt_cgm_specific_ops_control_point_response_code, tvb, offset, 1, ENC_NA); offset += 1; - switch (tvb_get_guint8(tvb, offset - 2)) { + switch (tvb_get_uint8(tvb, offset - 2)) { case 1: /* Set CGM Communication Interval */ case 2: /* Get CGM Communication Interval */ case 4: /* Set Glucose Calibration Value */ @@ -9952,7 +9884,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_item(tree, hf_btatt_ots_action_opcode, tvb, offset, 1, ENC_NA); - opcode = tvb_get_guint8(tvb, offset); + opcode = tvb_get_uint8(tvb, offset); offset += 1; switch (opcode) { @@ -9992,7 +9924,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * proto_tree_add_item(tree, hf_btatt_ots_action_result_code, tvb, offset, 1, ENC_NA); offset += 1; - switch (tvb_get_guint8(tvb, offset)) { + switch (tvb_get_uint8(tvb, offset)) { case 0x01: /* Create */ case 0x02: /* Delete */ case 0x05: /* Read */ @@ -10030,7 +9962,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_item(tree, hf_btatt_ots_list_opcode, tvb, offset, 1, ENC_NA); - opcode = tvb_get_guint8(tvb, offset); + opcode = tvb_get_uint8(tvb, offset); offset += 1; switch (opcode) { @@ -10059,7 +9991,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * proto_tree_add_item(tree, hf_btatt_ots_list_result_code, tvb, offset, 1, ENC_NA); offset += 1; - switch (tvb_get_guint8(tvb, offset - 2)) { + switch (tvb_get_uint8(tvb, offset - 2)) { case 0x01: /* First */ case 0x02: /* Last */ case 0x03: /* Previous */ @@ -10091,7 +10023,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * proto_tree_add_item(tree, hf_btatt_ots_filter, tvb, offset, 1, ENC_NA); offset += 1; - switch (tvb_get_guint8(tvb, offset - 1)) { + switch (tvb_get_uint8(tvb, offset - 1)) { case 0x00: /* No Filter */ case 0x0A: /* Marked Objects */ /* none */ @@ -10410,7 +10342,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * if (bluetooth_gatt_has_no_parameter(att_data->opcode)) break; - guint32 ftm_status_opcode; + uint32_t ftm_status_opcode; proto_tree_add_item_ret_uint(tree, hf_btatt_fitness_machine_status_opcode, tvb, offset, 1, ENC_NA, &ftm_status_opcode); offset += 1; @@ -10611,7 +10543,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * break; proto_tree_add_item(tree, hf_btatt_volume_control_point_procedure, tvb, offset, 1, ENC_NA); - opcode = tvb_get_guint8(tvb, offset); + opcode = tvb_get_uint8(tvb, offset); offset += 1; /* All procedures must have change counter */ @@ -10710,8 +10642,8 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info * return old_offset + offset; } -static gint -btatt_dissect_attribute_handle(guint16 handle, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, btatt_data_t *att_data) +static int +btatt_dissect_attribute_handle(uint16_t handle, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, btatt_data_t *att_data) { dissector_handle_t attribute_handler; const char* attribute_name; @@ -10720,7 +10652,6 @@ btatt_dissect_attribute_handle(guint16 handle, tvbuff_t *tvb, packet_info *pinfo if (attribute_handler == NULL) return 0; - /* XXX - dissector name, or protocol name? */ attribute_name = dissector_handle_get_dissector_name(attribute_handler); /* abbrev */ DISSECTOR_ASSERT(attribute_name); @@ -10733,7 +10664,7 @@ btatt_dissect_attribute_handle(guint16 handle, tvbuff_t *tvb, packet_info *pinfo * from its protocol name and then calls dissect_attribute_value(). */ - return dissector_try_uint_new(att_handle_dissector_table, handle, tvb, pinfo, tree, TRUE, att_data); + return dissector_try_uint_new(att_handle_dissector_table, handle, tvb, pinfo, tree, true, att_data); } static int @@ -10744,12 +10675,12 @@ dissect_btgatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) proto_item *patron_item = NULL; bluetooth_uuid_t uuid; - main_item = proto_tree_add_item(tree, (gint) GPOINTER_TO_UINT(wmem_list_frame_data(wmem_list_tail(pinfo->layers))), tvb, 0, tvb_captured_length(tvb), ENC_NA); + main_item = proto_tree_add_item(tree, (int) GPOINTER_TO_UINT(wmem_list_frame_data(wmem_list_tail(pinfo->layers))), tvb, 0, tvb_captured_length(tvb), ENC_NA); main_tree = proto_item_add_subtree(main_item, ett_btgatt); if (strlen(pinfo->current_proto) > 7) { uuid.size = 2; - uuid.bt_uuid = (guint16) g_ascii_strtoull(pinfo->current_proto + strlen(pinfo->current_proto) - 7, NULL, 16); + uuid.bt_uuid = (uint16_t) g_ascii_strtoull(pinfo->current_proto + strlen(pinfo->current_proto) - 7, NULL, 16); uuid.data[1] = uuid.bt_uuid & 0xFF; uuid.data[0] = (uuid.bt_uuid >> 8) & 0xFF; } else { @@ -10764,7 +10695,7 @@ dissect_btgatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) } -static gboolean +static bool is_long_attribute_value(bluetooth_uuid_t uuid) { switch (uuid.bt_uuid) { @@ -10785,20 +10716,20 @@ is_long_attribute_value(bluetooth_uuid_t uuid) case 0x2AB7: /* HTTP Headers */ case 0x2AB9: /* HTTP Entity Body */ case 0x2ABE: /* Object Name */ - return TRUE; + return true; } - return FALSE; + return false; } -static guint +static unsigned get_mtu(packet_info *pinfo, bluetooth_data_t *bluetooth_data) { wmem_tree_key_t key[3]; - guint32 frame_number; + uint32_t frame_number; mtu_data_t *mtu_data; wmem_tree_t *sub_wmemtree; - guint mtu = 23; + unsigned mtu = 23; if (bluetooth_data) { frame_number = pinfo->num; @@ -10821,10 +10752,10 @@ get_mtu(packet_info *pinfo, bluetooth_data_t *bluetooth_data) } static void -save_mtu(packet_info *pinfo, bluetooth_data_t *bluetooth_data, guint mtu) +save_mtu(packet_info *pinfo, bluetooth_data_t *bluetooth_data, unsigned mtu) { wmem_tree_key_t key[4]; - guint32 frame_number; + uint32_t frame_number; mtu_data_t *mtu_data; frame_number = pinfo->num; @@ -10845,11 +10776,11 @@ save_mtu(packet_info *pinfo, bluetooth_data_t *bluetooth_data, guint mtu) } static void -save_value_fragment(packet_info *pinfo, tvbuff_t *tvb, gint offset, - guint32 handle, guint data_offset, bluetooth_data_t *bluetooth_data) +save_value_fragment(packet_info *pinfo, tvbuff_t *tvb, int offset, + uint32_t handle, unsigned data_offset, bluetooth_data_t *bluetooth_data) { wmem_tree_key_t key[5]; - guint32 frame_number; + uint32_t frame_number; fragment_data_t *fragment_data; frame_number = pinfo->num; @@ -10869,22 +10800,22 @@ save_value_fragment(packet_info *pinfo, tvbuff_t *tvb, gint offset, fragment_data->length = tvb_captured_length_remaining(tvb, offset); fragment_data->offset = data_offset; fragment_data->data_in_frame = frame_number; - fragment_data->data = (guint8 *) tvb_memdup(wmem_file_scope(), tvb, offset, fragment_data->length); + fragment_data->data = (uint8_t *) tvb_memdup(wmem_file_scope(), tvb, offset, fragment_data->length); wmem_tree_insert32_array(fragments, key, fragment_data); } -static guint8 * -get_value(packet_info *pinfo, guint32 handle, bluetooth_data_t *bluetooth_data, guint *length) +static uint8_t * +get_value(packet_info *pinfo, uint32_t handle, bluetooth_data_t *bluetooth_data, unsigned *length) { wmem_tree_key_t key[4]; - guint32 frame_number; + uint32_t frame_number; fragment_data_t *fragment_data; wmem_tree_t *sub_wmemtree; - guint last_offset = G_MAXUINT; - guint size; - gboolean first = TRUE; - guint8 *data = NULL; + unsigned last_offset = UINT_MAX; + unsigned size; + bool first = true; + uint8_t *data = NULL; if (bluetooth_data) { frame_number = pinfo->num; @@ -10906,12 +10837,12 @@ get_value(packet_info *pinfo, guint32 handle, bluetooth_data_t *bluetooth_data, if (first) { size = fragment_data->offset + fragment_data->length; - data = (guint8 *) wmem_alloc(pinfo->pool, size); + data = (uint8_t *) wmem_alloc(pinfo->pool, size); if (length) *length = size; - first = FALSE; + first = false; } else if (fragment_data->offset + fragment_data->length != last_offset) { break; } @@ -10938,17 +10869,17 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) proto_item *sub_item; proto_tree *sub_tree; int offset = 0; - guint8 opcode; - guint8 request_opcode; + uint8_t opcode; + uint8_t request_opcode; bluetooth_data_t *bluetooth_data; btatt_data_t att_data; request_data_t *request_data; - guint16 handle; + uint16_t handle; bluetooth_uuid_t uuid; - guint mtu; + unsigned mtu; /* desegmentation stuff */ // int deseg_offset = 0; -/*end desgementation stuff */ +/*end desegmentation stuff */ memset(&uuid, 0, sizeof uuid); bluetooth_data = (bluetooth_data_t *) data; @@ -10980,7 +10911,7 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) expert_add_info(pinfo, main_item, &ei_btatt_mtu_exceeded); proto_tree_add_bitmask_with_flags(main_tree, tvb, offset, hf_btatt_opcode, ett_btatt_opcode, hfx_btatt_opcode, ENC_NA, BMT_NO_APPEND); - opcode = tvb_get_guint8(tvb, 0); + opcode = tvb_get_uint8(tvb, 0); att_data.opcode = opcode; offset++; request_data = get_request(tvb, offset, pinfo, opcode, bluetooth_data); @@ -10988,22 +10919,22 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) switch (opcode) { case 0x01: /* Error Response */ { - guint8 error_code; + uint8_t error_code; bluetooth_uuid_t service_uuid; const value_string *error_vals = error_code_vals; - gint hfx_btatt_error_code = hf_btatt_error_code; + int hfx_btatt_error_code = hf_btatt_error_code; proto_tree_add_bitmask_with_flags(main_tree, tvb, offset, hf_btatt_req_opcode_in_error, ett_btatt_opcode, hfx_btatt_opcode, ENC_NA, BMT_NO_APPEND); - request_opcode = tvb_get_guint8(tvb, offset); + request_opcode = tvb_get_uint8(tvb, offset); offset += 1; - offset = dissect_handle(main_tree, pinfo, hf_btatt_handle_in_error, tvb, offset, bluetooth_data, NULL, HANDLE_TVB); + offset = dissect_handle(main_tree, pinfo, hf_btatt_handle_in_error, tvb, offset, bluetooth_data, NULL, HANDLE_TVB, opcode); handle = tvb_get_letohs(tvb, offset - 2); - error_code = tvb_get_guint8(tvb, offset); + error_code = tvb_get_uint8(tvb, offset); if (error_code >= 0x80 && error_code <= 0x9F) { - service_uuid = get_service_uuid_from_handle(pinfo, handle, bluetooth_data); + service_uuid = get_service_uuid_from_handle(pinfo, handle, opcode, bluetooth_data); switch (service_uuid.bt_uuid) { case GATT_SERVICE_AUTOMATION_IO: @@ -11094,7 +11025,7 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) col_append_fstr(pinfo->cinfo, COL_INFO, " - %s", val_to_str_const(error_code, error_vals, "<unknown>")); - col_append_info_by_handle(pinfo, handle, bluetooth_data); + col_append_info_by_handle(pinfo, handle, opcode, bluetooth_data); proto_tree_add_item(main_tree, hfx_btatt_error_code, tvb, offset, 1, ENC_LITTLE_ENDIAN); offset++; @@ -11114,7 +11045,7 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) if (!pinfo->fd->visited && bluetooth_data) { union request_parameters_union request_parameters; - request_parameters.mtu.mtu = tvb_get_guint16(tvb, offset - 2, ENC_LITTLE_ENDIAN); + request_parameters.mtu.mtu = tvb_get_uint16(tvb, offset - 2, ENC_LITTLE_ENDIAN); save_request(pinfo, opcode, request_parameters, bluetooth_data); } @@ -11125,9 +11056,9 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) col_append_fstr(pinfo->cinfo, COL_INFO, ", Server Rx MTU: %u", tvb_get_letohs(tvb, offset)); proto_tree_add_item(main_tree, hf_btatt_server_rx_mtu, tvb, offset, 2, ENC_LITTLE_ENDIAN); if (!pinfo->fd->visited && request_data && bluetooth_data) { - guint new_mtu; + unsigned new_mtu; - new_mtu = tvb_get_guint16(tvb, offset, ENC_LITTLE_ENDIAN); + new_mtu = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN); if (new_mtu > request_data->parameters.mtu.mtu) new_mtu = request_data->parameters.mtu.mtu; save_mtu(pinfo, bluetooth_data, new_mtu); @@ -11147,8 +11078,8 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) if (!pinfo->fd->visited && bluetooth_data) { union request_parameters_union request_parameters; - request_parameters.find_information.starting_handle = tvb_get_guint16(tvb, offset - 4, ENC_LITTLE_ENDIAN); - request_parameters.find_information.ending_handle = tvb_get_guint16(tvb, offset - 2, ENC_LITTLE_ENDIAN); + request_parameters.find_information.starting_handle = tvb_get_uint16(tvb, offset - 4, ENC_LITTLE_ENDIAN); + request_parameters.find_information.ending_handle = tvb_get_uint16(tvb, offset - 2, ENC_LITTLE_ENDIAN); save_request(pinfo, opcode, request_parameters, bluetooth_data); } @@ -11157,10 +11088,10 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) case 0x05: /* Find Information Response */ { - guint8 format; + uint8_t format; sub_item = proto_tree_add_item(main_tree, hf_btatt_uuid_format, tvb, offset, 1, ENC_LITTLE_ENDIAN); - format = tvb_get_guint8(tvb, offset); + format = tvb_get_uint8(tvb, offset); offset += 1; if (format == 1) { @@ -11168,8 +11099,8 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) sub_item = proto_tree_add_item(main_tree, hf_btatt_information_data, tvb, offset, 4, ENC_NA); sub_tree = proto_item_add_subtree(sub_item, ett_btatt_list); - offset = dissect_handle(sub_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, NULL, HANDLE_TVB); - handle = tvb_get_guint16(tvb, offset - 2, ENC_LITTLE_ENDIAN); + offset = dissect_handle(sub_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, NULL, HANDLE_TVB, opcode); + handle = tvb_get_uint16(tvb, offset - 2, ENC_LITTLE_ENDIAN); proto_tree_add_item(sub_tree, hf_btatt_uuid16, tvb, offset, 2, ENC_LITTLE_ENDIAN); uuid = get_bluetooth_uuid(tvb, offset, 2); @@ -11180,7 +11111,7 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) save_handle(pinfo, uuid, handle, ATTRIBUTE_TYPE_OTHER, bluetooth_data); - col_append_info_by_handle(pinfo, handle, bluetooth_data); + col_append_info_by_handle(pinfo, handle, opcode, bluetooth_data); } } else if (format == 2) { @@ -11188,8 +11119,8 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) sub_item = proto_tree_add_item(main_tree, hf_btatt_information_data, tvb, offset, 4, ENC_NA); sub_tree = proto_item_add_subtree(sub_item, ett_btatt_list); - offset = dissect_handle(sub_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, NULL, HANDLE_TVB); - handle = tvb_get_guint16(tvb, offset - 2, ENC_LITTLE_ENDIAN); + offset = dissect_handle(sub_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, NULL, HANDLE_TVB, opcode); + handle = tvb_get_uint16(tvb, offset - 2, ENC_LITTLE_ENDIAN); proto_tree_add_item(sub_tree, hf_btatt_uuid128, tvb, offset, 16, ENC_NA); uuid = get_bluetooth_uuid(tvb, offset, 16); @@ -11200,7 +11131,7 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) save_handle(pinfo, uuid, handle, ATTRIBUTE_TYPE_OTHER, bluetooth_data); - col_append_info_by_handle(pinfo, handle, bluetooth_data); + col_append_info_by_handle(pinfo, handle, opcode, bluetooth_data); } } else { @@ -11229,8 +11160,8 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) if (!pinfo->fd->visited && bluetooth_data) { union request_parameters_union request_parameters; - request_parameters.read_by_type.starting_handle = tvb_get_guint16(tvb, offset - 6, ENC_LITTLE_ENDIAN); - request_parameters.read_by_type.ending_handle = tvb_get_guint16(tvb, offset - 4, ENC_LITTLE_ENDIAN); + request_parameters.read_by_type.starting_handle = tvb_get_uint16(tvb, offset - 6, ENC_LITTLE_ENDIAN); + request_parameters.read_by_type.ending_handle = tvb_get_uint16(tvb, offset - 4, ENC_LITTLE_ENDIAN); request_parameters.read_by_type.uuid = uuid; save_request(pinfo, opcode, request_parameters, bluetooth_data); @@ -11248,14 +11179,14 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) sub_tree = proto_item_add_subtree(sub_item, ett_btatt_list); - offset = dissect_handle(sub_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, NULL, HANDLE_TVB); + offset = dissect_handle(sub_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, NULL, HANDLE_TVB, opcode); proto_tree_add_item(sub_tree, hf_btatt_group_end_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN); offset += 2; if (request_data) save_handle(pinfo, request_data->parameters.read_by_type.uuid, - tvb_get_guint16(tvb, offset - 4, ENC_LITTLE_ENDIAN), + tvb_get_uint16(tvb, offset - 4, ENC_LITTLE_ENDIAN), ATTRIBUTE_TYPE_OTHER, bluetooth_data); } @@ -11279,8 +11210,8 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) if (!pinfo->fd->visited && bluetooth_data) { union request_parameters_union request_parameters; - request_parameters.read_by_type.starting_handle = tvb_get_guint16(tvb, offset - 6, ENC_LITTLE_ENDIAN); - request_parameters.read_by_type.ending_handle = tvb_get_guint16(tvb, offset - 4, ENC_LITTLE_ENDIAN); + request_parameters.read_by_type.starting_handle = tvb_get_uint16(tvb, offset - 6, ENC_LITTLE_ENDIAN); + request_parameters.read_by_type.ending_handle = tvb_get_uint16(tvb, offset - 4, ENC_LITTLE_ENDIAN); request_parameters.read_by_type.uuid = get_bluetooth_uuid(tvb, offset - 2, 2); save_request(pinfo, opcode, request_parameters, bluetooth_data); @@ -11294,8 +11225,8 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) if (!pinfo->fd->visited && bluetooth_data) { union request_parameters_union request_parameters; - request_parameters.read_by_type.starting_handle = tvb_get_guint16(tvb, offset - 20, ENC_LITTLE_ENDIAN); - request_parameters.read_by_type.ending_handle = tvb_get_guint16(tvb, offset - 18, ENC_LITTLE_ENDIAN); + request_parameters.read_by_type.starting_handle = tvb_get_uint16(tvb, offset - 20, ENC_LITTLE_ENDIAN); + request_parameters.read_by_type.ending_handle = tvb_get_uint16(tvb, offset - 18, ENC_LITTLE_ENDIAN); request_parameters.read_by_type.uuid = get_bluetooth_uuid(tvb, offset - 16, 16); save_request(pinfo, opcode, request_parameters, bluetooth_data); @@ -11310,7 +11241,7 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) case 0x09: /* Read By Type Response */ { - guint8 length = tvb_get_guint8(tvb, offset); + uint8_t length = tvb_get_uint8(tvb, offset); proto_tree_add_item(main_tree, hf_btatt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN); offset++; @@ -11329,14 +11260,14 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) if (request_data) { save_handle(pinfo, request_data->parameters.read_by_type.uuid, - tvb_get_guint16(tvb, offset, ENC_LITTLE_ENDIAN), + tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN), ATTRIBUTE_TYPE_OTHER, bluetooth_data); } - offset = dissect_handle(sub_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, NULL, HANDLE_TVB); + offset = dissect_handle(sub_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, NULL, HANDLE_TVB, opcode); if (request_data) { - offset = dissect_attribute_value(sub_tree, sub_item, pinfo, tvb, offset, length - 2, tvb_get_guint16(tvb, offset - 2, ENC_LITTLE_ENDIAN), request_data->parameters.read_by_type.uuid, &att_data); + offset = dissect_attribute_value(sub_tree, sub_item, pinfo, tvb, offset, length - 2, tvb_get_uint16(tvb, offset - 2, ENC_LITTLE_ENDIAN), request_data->parameters.read_by_type.uuid, &att_data); } else { proto_tree_add_item(sub_tree, hf_btatt_value, tvb, offset, length - 2, ENC_NA); offset += length - 2; @@ -11352,10 +11283,10 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) break; case 0x0a: /* Read Request */ - offset = dissect_handle(main_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, &uuid, HANDLE_TVB); + offset = dissect_handle(main_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, &uuid, HANDLE_TVB, opcode); handle = tvb_get_letohs(tvb, offset - 2); - col_append_info_by_handle(pinfo, handle, bluetooth_data); + col_append_info_by_handle(pinfo, handle, opcode, bluetooth_data); if (!pinfo->fd->visited && bluetooth_data) { union request_parameters_union request_parameters; @@ -11372,9 +11303,9 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) case 0x0b: /* Read Response */ if (request_data) { - dissect_handle(main_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, &uuid, request_data->parameters.read_write.handle); + dissect_handle(main_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, &uuid, request_data->parameters.read_write.handle, opcode); - col_append_info_by_handle(pinfo, request_data->parameters.read_write.handle, bluetooth_data); + col_append_info_by_handle(pinfo, request_data->parameters.read_write.handle, opcode, bluetooth_data); } if (is_long_attribute_value(uuid) && tvb_captured_length(tvb) >= mtu) { @@ -11395,10 +11326,10 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) break; case 0x0c: /* Read Blob Request */ - offset = dissect_handle(main_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, &uuid, HANDLE_TVB); + offset = dissect_handle(main_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, &uuid, HANDLE_TVB, opcode); handle = tvb_get_letohs(tvb, offset - 2); - col_append_info_by_handle(pinfo, handle, bluetooth_data); + col_append_info_by_handle(pinfo, handle, opcode, bluetooth_data); col_append_fstr(pinfo->cinfo, COL_INFO, ", Offset: %u", tvb_get_letohs(tvb, offset)); proto_tree_add_item(main_tree, hf_btatt_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN); @@ -11411,7 +11342,7 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) union request_parameters_union request_parameters; request_parameters.read_write.handle = handle; - request_parameters.read_write.offset = tvb_get_guint16(tvb, offset - 2, ENC_LITTLE_ENDIAN); + request_parameters.read_write.offset = tvb_get_uint16(tvb, offset - 2, ENC_LITTLE_ENDIAN); save_request(pinfo, opcode, request_parameters, bluetooth_data); } @@ -11419,9 +11350,9 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) case 0x0d: /* Read Blob Response */ if (request_data && request_data->opcode == (opcode - 1)) { - dissect_handle(main_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, &uuid, request_data->parameters.read_write.handle); + dissect_handle(main_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, &uuid, request_data->parameters.read_write.handle, opcode); - col_append_info_by_handle(pinfo, request_data->parameters.read_write.handle, bluetooth_data); + col_append_info_by_handle(pinfo, request_data->parameters.read_write.handle, opcode, bluetooth_data); if (request_data->parameters.read_write.offset == 0 && !is_long_attribute_value(uuid)) { offset = dissect_attribute_value(main_tree, NULL, pinfo, tvb, offset, tvb_captured_length_remaining(tvb, offset), request_data->parameters.read_write.handle, uuid, &att_data); @@ -11431,8 +11362,8 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) if (tvb_captured_length(tvb) < mtu) { tvbuff_t *next_tvb; - guint reassembled_length; - guint8 *reassembled_data; + unsigned reassembled_length; + uint8_t *reassembled_data; sub_item = proto_tree_add_item(main_tree, hf_btatt_value, tvb, offset, -1, ENC_NA); offset = tvb_captured_length(tvb); @@ -11459,6 +11390,7 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) break; case 0x0e: /* Multiple Read Request */ + case 0x20: /* Read Multiple Variable Request */ if(tvb_reported_length_remaining(tvb, offset) < 4) { expert_add_info(pinfo, main_item, &ei_btatt_handle_too_few); break; @@ -11466,7 +11398,7 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) col_append_str(pinfo->cinfo, COL_INFO, ", Handles: "); while (tvb_reported_length_remaining(tvb, offset) >= 2) { - offset = dissect_handle(main_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, &uuid, HANDLE_TVB); + offset = dissect_handle(main_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, &uuid, HANDLE_TVB, opcode); handle = tvb_get_letohs(tvb, offset - 2); col_append_fstr(pinfo->cinfo, COL_INFO, "0x%04x ", handle); @@ -11477,7 +11409,7 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) union request_parameters_union request_parameters; request_parameters.read_multiple.number_of_handles = (tvb_captured_length(tvb) - 1) / 2; - request_parameters.read_multiple.handle = (guint16 *) tvb_memdup(wmem_file_scope(), + request_parameters.read_multiple.handle = (uint16_t *) tvb_memdup(wmem_file_scope(), tvb, 1, request_parameters.read_multiple.number_of_handles * 2); save_request(pinfo, opcode, request_parameters, bluetooth_data); @@ -11485,12 +11417,35 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) break; case 0x0f: /* Multiple Read Response */ + case 0x21: /* Read Multiple Variable Response */ if (request_data && request_data->opcode == (opcode - 1)) { - guint i_handle; + unsigned i_handle; - for (i_handle = 0; i_handle < request_data->parameters.read_multiple.number_of_handles; i_handle += 1) { - dissect_handle(main_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, &uuid, request_data->parameters.read_multiple.handle[i_handle]); - offset = dissect_attribute_value(main_tree, NULL, pinfo, tvb, offset, tvb_captured_length_remaining(tvb, offset), request_data->parameters.read_multiple.handle[i_handle], uuid, &att_data); + if (opcode == 0x0f) { + for (i_handle = 0; i_handle < request_data->parameters.read_multiple.number_of_handles; i_handle += 1) { + dissect_handle(main_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, &uuid, request_data->parameters.read_multiple.handle[i_handle], opcode); + offset = dissect_attribute_value(main_tree, NULL, pinfo, tvb, offset, tvb_captured_length_remaining(tvb, offset), request_data->parameters.read_multiple.handle[i_handle], uuid, &att_data); + } + } else { + i_handle = 0; + /* Read Multiple Variable Response */ + for (;;) { + int remain = tvb_reported_length_remaining(tvb, offset); + uint16_t length; + if (remain < 2) + break; + length = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN); + offset+=2; + remain-=2; + if (remain < length) + break; + + dissect_handle(main_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, &uuid, request_data->parameters.read_multiple.handle[i_handle], opcode); + dissect_attribute_value(main_tree, NULL, pinfo, tvb, offset, length, request_data->parameters.read_multiple.handle[i_handle], uuid, &att_data); + + i_handle++; + offset += length; + } } } else { proto_tree_add_item(main_tree, hf_btatt_value, tvb, offset, -1, ENC_NA); @@ -11500,7 +11455,7 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) case 0x11: /* Read By Group Type Response */ { - guint8 length = tvb_get_guint8(tvb, offset); + uint8_t length = tvb_get_uint8(tvb, offset); proto_tree_add_item(main_tree, hf_btatt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN); offset++; @@ -11515,8 +11470,8 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) sub_tree = proto_item_add_subtree(sub_item, ett_btatt_list); - offset = dissect_handle(sub_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, NULL, HANDLE_TVB); - handle = tvb_get_guint16(tvb, offset - 2, ENC_LITTLE_ENDIAN); + offset = dissect_handle(sub_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, NULL, HANDLE_TVB, opcode); + handle = tvb_get_uint16(tvb, offset - 2, ENC_LITTLE_ENDIAN); proto_tree_add_item(sub_tree, hf_btatt_group_end_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN); offset += 2; @@ -11541,10 +11496,10 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) case 0x1d: /* Handle Value Indication */ case 0x52: /* Write Command */ case 0x1b: /* Handle Value Notification */ - offset = dissect_handle(main_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, &uuid, HANDLE_TVB); + offset = dissect_handle(main_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, &uuid, HANDLE_TVB, opcode); handle = tvb_get_letohs(tvb, offset - 2); - col_append_info_by_handle(pinfo, handle, bluetooth_data); - offset = dissect_attribute_value(main_tree, NULL, pinfo, tvb, offset, tvb_captured_length_remaining(tvb, offset), tvb_get_guint16(tvb, offset - 2, ENC_LITTLE_ENDIAN), uuid, &att_data); + col_append_info_by_handle(pinfo, handle, opcode, bluetooth_data); + offset = dissect_attribute_value(main_tree, NULL, pinfo, tvb, offset, tvb_captured_length_remaining(tvb, offset), tvb_get_uint16(tvb, offset - 2, ENC_LITTLE_ENDIAN), uuid, &att_data); if (!pinfo->fd->visited && bluetooth_data && (opcode == 0x12 || opcode == 0x1d)) { union request_parameters_union request_parameters; @@ -11559,21 +11514,21 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) /* No parameters */ if (request_data && request_data->opcode == (opcode - 1)) { - dissect_handle(main_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, &uuid, request_data->parameters.read_write.handle); + dissect_handle(main_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, &uuid, request_data->parameters.read_write.handle, opcode); dissect_attribute_value(main_tree, NULL, pinfo, tvb, offset, 0, request_data->parameters.read_write.handle, uuid, &att_data); - col_append_info_by_handle(pinfo, request_data->parameters.read_write.handle, bluetooth_data); + col_append_info_by_handle(pinfo, request_data->parameters.read_write.handle, opcode, bluetooth_data); } break; case 0x16: /* Prepare Write Request */ case 0x17: /* Prepare Write Response */ - offset = dissect_handle(main_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, &uuid, HANDLE_TVB); + offset = dissect_handle(main_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, &uuid, HANDLE_TVB, opcode); handle = tvb_get_letohs(tvb, offset - 2); - col_append_info_by_handle(pinfo, handle, bluetooth_data); + col_append_info_by_handle(pinfo, handle, opcode, bluetooth_data); col_append_fstr(pinfo->cinfo, COL_INFO, ", Offset: %u", tvb_get_letohs(tvb, offset)); proto_tree_add_item(main_tree, hf_btatt_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN); @@ -11588,16 +11543,16 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) } if (!pinfo->fd->visited && request_data && bluetooth_data && opcode == 0x16) save_value_fragment(pinfo, tvb, offset, - tvb_get_guint16(tvb, offset - 4, ENC_LITTLE_ENDIAN), - tvb_get_guint16(tvb, offset - 2, ENC_LITTLE_ENDIAN), + tvb_get_uint16(tvb, offset - 4, ENC_LITTLE_ENDIAN), + tvb_get_uint16(tvb, offset - 2, ENC_LITTLE_ENDIAN), bluetooth_data); /* XXX: How to detect there is max data in frame and it is last fragment? (Execute Write Request/Response is good candidate, but there is no one handle) */ if (request_data && request_data->opcode == (opcode - 1) && tvb_captured_length(tvb) < mtu) { tvbuff_t *next_tvb; - guint reassembled_length; - guint8 *reassembled_data; + unsigned reassembled_length; + uint8_t *reassembled_data; sub_item = proto_tree_add_item(main_tree, hf_btatt_value, tvb, offset, -1, ENC_NA); @@ -11618,7 +11573,7 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) case 0x18: /* Execute Write Request */ col_append_fstr(pinfo->cinfo, COL_INFO, ", %s", - val_to_str_const(tvb_get_guint8(tvb, offset), flags_vals, "<unknown>")); + val_to_str_const(tvb_get_uint8(tvb, offset), flags_vals, "<unknown>")); proto_tree_add_item(main_tree, hf_btatt_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN); offset++; @@ -11638,9 +11593,9 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) case 0x1E: /* Handle Value Confirmation */ if (request_data && request_data->opcode == (opcode - 1)) { - dissect_handle(main_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, &uuid, request_data->parameters.read_write.handle); + dissect_handle(main_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, &uuid, request_data->parameters.read_write.handle, opcode); - col_append_info_by_handle(pinfo, request_data->parameters.read_write.handle, bluetooth_data); + col_append_info_by_handle(pinfo, request_data->parameters.read_write.handle, opcode, bluetooth_data); dissect_attribute_value(main_tree, NULL, pinfo, tvb, offset, 0, request_data->parameters.read_write.handle, uuid, &att_data); } @@ -11648,12 +11603,12 @@ dissect_btatt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) case 0xd2: /* Signed Write Command */ { - guint8 length; + uint8_t length; - offset = dissect_handle(main_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, &uuid, HANDLE_TVB); + offset = dissect_handle(main_tree, pinfo, hf_btatt_handle, tvb, offset, bluetooth_data, &uuid, HANDLE_TVB, opcode); handle = tvb_get_letohs(tvb, offset - 2); - col_append_info_by_handle(pinfo, handle, bluetooth_data); + col_append_info_by_handle(pinfo, handle, opcode, bluetooth_data); length = tvb_reported_length_remaining(tvb, offset); dissect_attribute_value(main_tree, NULL, pinfo, tvb, offset, (length > 12) ? length - 12 : 0, handle, uuid, &att_data); @@ -11717,17 +11672,17 @@ dissect_btgatt_nordic_uart_rx(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree static int dissect_btgatt_nordic_dfu_control_point(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) { - gint offset = 0; - guint8 opcode; - guint8 request_opcode; - guint8 status; + int offset = 0; + uint8_t opcode; + uint8_t request_opcode; + uint8_t status; btatt_data_t *att_data = (btatt_data_t *) data; if (bluetooth_gatt_has_no_parameter(att_data->opcode)) return -1; proto_tree_add_item(tree, hf_gatt_nordic_dfu_control_point_opcode, tvb, offset, 1, ENC_NA); - opcode = tvb_get_guint8(tvb, offset); + opcode = tvb_get_uint8(tvb, offset); offset += 1; switch (opcode) { @@ -11758,11 +11713,11 @@ dissect_btgatt_nordic_dfu_control_point(tvbuff_t *tvb, packet_info *pinfo, proto break; case 0x10: /* Response Code */ proto_tree_add_item(tree, hf_gatt_nordic_dfu_control_point_request_opcode, tvb, offset, 1, ENC_NA); - request_opcode = tvb_get_guint8(tvb, offset); + request_opcode = tvb_get_uint8(tvb, offset); offset += 1; proto_tree_add_item(tree, hf_gatt_nordic_dfu_control_point_response_value, tvb, offset, 1, ENC_NA); - status = tvb_get_guint8(tvb, offset); + status = tvb_get_uint8(tvb, offset); offset += 1; if (request_opcode == 0x07 && status == 0x01) { /* Report Received Image Size && Success */ @@ -11804,15 +11759,15 @@ dissect_btgatt_microbit_accelerometer_data(tvbuff_t *tvb, packet_info *pinfo _U_ btatt_data_t *att_data = (btatt_data_t *) data; proto_item *sub_item; proto_tree *sub_tree; - gdouble x_axis, y_axis, z_axis; - gint offset = 0; + double x_axis, y_axis, z_axis; + int offset = 0; if (bluetooth_gatt_has_no_parameter(att_data->opcode)) return -1; - x_axis = (gdouble) (gint) tvb_get_gint16(tvb, offset, ENC_LITTLE_ENDIAN) / 1000.0; - y_axis = (gdouble) (gint) tvb_get_gint16(tvb, offset+2, ENC_LITTLE_ENDIAN) / 1000.0; - z_axis = (gdouble) (gint) tvb_get_gint16(tvb, offset+4, ENC_LITTLE_ENDIAN) / 1000.0; + x_axis = (double) (int) tvb_get_int16(tvb, offset, ENC_LITTLE_ENDIAN) / 1000.0; + y_axis = (double) (int) tvb_get_int16(tvb, offset+2, ENC_LITTLE_ENDIAN) / 1000.0; + z_axis = (double) (int) tvb_get_int16(tvb, offset+4, ENC_LITTLE_ENDIAN) / 1000.0; sub_item = proto_tree_add_item(tree, hf_gatt_microbit_accelerometer_data, tvb, 0, tvb_captured_length(tvb), ENC_NA); sub_tree = proto_item_add_subtree(sub_item, ett_btgatt_microbit_accelerometer); @@ -11832,7 +11787,7 @@ static int dissect_btgatt_microbit_accelerometer_period(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data) { btatt_data_t *att_data = (btatt_data_t *) data; - gint offset = 0; + int offset = 0; if (bluetooth_gatt_has_no_parameter(att_data->opcode)) return -1; @@ -11849,15 +11804,15 @@ dissect_btgatt_microbit_magnetometer_data(tvbuff_t *tvb, packet_info *pinfo _U_, btatt_data_t *att_data = (btatt_data_t *) data; proto_item *sub_item; proto_tree *sub_tree; - gdouble x_axis, y_axis, z_axis; - gint offset = 0; + double x_axis, y_axis, z_axis; + int offset = 0; if (bluetooth_gatt_has_no_parameter(att_data->opcode)) return -1; - x_axis = (gdouble) (gint) tvb_get_gint16(tvb, offset, ENC_LITTLE_ENDIAN) / 1000.0; - y_axis = (gdouble) (gint) tvb_get_gint16(tvb, offset+2, ENC_LITTLE_ENDIAN) / 1000.0; - z_axis = (gdouble) (gint) tvb_get_gint16(tvb, offset+4, ENC_LITTLE_ENDIAN) / 1000.0; + x_axis = (double) (int) tvb_get_int16(tvb, offset, ENC_LITTLE_ENDIAN) / 1000.0; + y_axis = (double) (int) tvb_get_int16(tvb, offset+2, ENC_LITTLE_ENDIAN) / 1000.0; + z_axis = (double) (int) tvb_get_int16(tvb, offset+4, ENC_LITTLE_ENDIAN) / 1000.0; sub_item = proto_tree_add_item(tree, hf_gatt_microbit_magnetometer_data, tvb, 0, tvb_captured_length(tvb), ENC_NA); sub_tree = proto_item_add_subtree(sub_item, ett_btgatt_microbit_magnetometer); @@ -11877,7 +11832,7 @@ static int dissect_btgatt_microbit_magnetometer_period(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data) { btatt_data_t *att_data = (btatt_data_t *) data; - gint offset = 0; + int offset = 0; if (bluetooth_gatt_has_no_parameter(att_data->opcode)) return -1; @@ -11892,7 +11847,7 @@ static int dissect_btgatt_microbit_magnetometer_bearing(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data) { btatt_data_t *att_data = (btatt_data_t *) data; - gint offset = 0; + int offset = 0; if (bluetooth_gatt_has_no_parameter(att_data->opcode)) return -1; @@ -11907,7 +11862,7 @@ static int dissect_btgatt_microbit_button_a_state(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data) { btatt_data_t *att_data = (btatt_data_t *) data; - gint offset = 0; + int offset = 0; if (bluetooth_gatt_has_no_parameter(att_data->opcode)) return -1; @@ -11922,7 +11877,7 @@ static int dissect_btgatt_microbit_button_b_state(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data) { btatt_data_t *att_data = (btatt_data_t *) data; - gint offset = 0; + int offset = 0; if (bluetooth_gatt_has_no_parameter(att_data->opcode)) return -1; @@ -11939,15 +11894,15 @@ dissect_btgatt_microbit_pin_data(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tr btatt_data_t *att_data = (btatt_data_t *) data; proto_item *sub_item; proto_tree *sub_tree; - gint offset = 0; - gint num_pins; - guint32 number, value; + int offset = 0; + int num_pins; + uint32_t number, value; if (bluetooth_gatt_has_no_parameter(att_data->opcode)) return -1; num_pins = tvb_captured_length(tvb) / 2; - for (gint i = 0; i < num_pins; i++) { + for (int i = 0; i < num_pins; i++) { sub_item = proto_tree_add_item(tree, hf_gatt_microbit_pin_data, tvb, offset, 2, ENC_NA); sub_tree = proto_item_add_subtree(sub_item, ett_btgatt_microbit_pin_data); @@ -11955,7 +11910,7 @@ dissect_btgatt_microbit_pin_data(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tr offset++; /* The micro:bit has a 10 bit ADC but values are compressed to 8 bits with a loss of resolution. */ - value = tvb_get_guint8(tvb, offset) * 4; + value = tvb_get_uint8(tvb, offset) * 4; proto_tree_add_uint(sub_tree, hf_gatt_microbit_pin_value, tvb, offset, 1, value); offset++; @@ -12042,7 +11997,7 @@ static int dissect_btgatt_microbit_scrolling_delay(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data) { btatt_data_t *att_data = (btatt_data_t *) data; - gint offset = 0; + int offset = 0; if (bluetooth_gatt_has_no_parameter(att_data->opcode)) return -1; @@ -12109,7 +12064,7 @@ static int dissect_btgatt_microbit_dfu_control(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data) { btatt_data_t *att_data = (btatt_data_t *) data; - gint offset = 0; + int offset = 0; if (bluetooth_gatt_has_no_parameter(att_data->opcode)) return -1; @@ -12124,7 +12079,7 @@ static int dissect_btgatt_microbit_temperature_value(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data) { btatt_data_t *att_data = (btatt_data_t *) data; - gint offset = 0; + int offset = 0; if (bluetooth_gatt_has_no_parameter(att_data->opcode)) return -1; @@ -12139,7 +12094,7 @@ static int dissect_btgatt_microbit_temperature_period(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data) { btatt_data_t *att_data = (btatt_data_t *) data; - gint offset = 0; + int offset = 0; if (bluetooth_gatt_has_no_parameter(att_data->opcode)) return -1; @@ -12159,7 +12114,7 @@ proto_register_btatt(void) module_t *module; expert_module_t *expert_btatt; - //src_port will be filled wiht handle + //src_port will be filled with handle //dst_port will be filled with opcode reassembly_table_register(&msg_reassembly_table, &addresses_ports_reassembly_table_functions); @@ -12703,7 +12658,7 @@ proto_register_btatt(void) }, {&hf_btatt_peripheral_privacy_flag, {"Peripheral Privacy", "btatt.peripheral_privacy_flag", - FT_BOOLEAN, 8, NULL, 0x0, + FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL} }, { &hf_btatt_reconnection_address, @@ -12721,8 +12676,8 @@ proto_register_btatt(void) FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL} }, - {&hf_btatt_slave_latency, - {"Slave Latency", "btatt.slave_latency", + {&hf_btatt_peripheral_latency, + {"Peripheral Latency", "btatt.peripheral_latency", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL} }, @@ -12873,7 +12828,7 @@ proto_register_btatt(void) }, {&hf_btatt_battery_level, {"Battery Level", "btatt.battery_level", - FT_UINT8, BASE_DEC | BASE_UNIT_STRING, &units_percent, 0x0, + FT_UINT8, BASE_DEC | BASE_UNIT_STRING, UNS(&units_percent), 0x0, NULL, HFILL} }, {&hf_btatt_battery_power_state, @@ -14972,7 +14927,7 @@ proto_register_btatt(void) NULL, HFILL} }, {&hf_btatt_cycling_power_measurement_extreme_angles_minimum, - {"Miminum", "btatt.cycling_power_measurement.extreme_angles.minimum", + {"Minimum", "btatt.cycling_power_measurement.extreme_angles.minimum", FT_UINT24, BASE_DEC, NULL, 0x000FFF, NULL, HFILL} }, @@ -17331,32 +17286,32 @@ proto_register_btatt(void) }, {&hf_btatt_supported_heart_rate_range_minimum_heart_rate, {"Minimum Heart Rate", "btatt.supported_heart_rate_range.minimum_heart_rate", - FT_UINT8, BASE_DEC | BASE_UNIT_STRING, &units_bpm, 0x0, + FT_UINT8, BASE_DEC | BASE_UNIT_STRING, UNS(&units_bpm), 0x0, NULL, HFILL} }, {&hf_btatt_supported_heart_rate_range_maximum_heart_rate, {"Maximum Heart Rate", "btatt.supported_heart_rate_range.maximum_heart_rate", - FT_UINT8, BASE_DEC | BASE_UNIT_STRING, &units_bpm, 0x0, + FT_UINT8, BASE_DEC | BASE_UNIT_STRING, UNS(&units_bpm), 0x0, NULL, HFILL} }, {&hf_btatt_supported_heart_rate_range_minimum_increment, {"Minimum Increment", "btatt.supported_heart_rate_range.minimum_increment", - FT_UINT8, BASE_DEC | BASE_UNIT_STRING, &units_bpm, 0x0, + FT_UINT8, BASE_DEC | BASE_UNIT_STRING, UNS(&units_bpm), 0x0, NULL, HFILL} }, {&hf_btatt_supported_power_range_minimum_power, {"Minimum Power", "btatt.supported_power_range.minimum_power", - FT_INT16, BASE_DEC | BASE_UNIT_STRING, &units_watt, 0x0, + FT_INT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_watt), 0x0, NULL, HFILL} }, {&hf_btatt_supported_power_range_maximum_power, {"Maximum Power", "btatt.supported_power_range.maximum_power", - FT_INT16, BASE_DEC | BASE_UNIT_STRING, &units_watt, 0x0, + FT_INT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_watt), 0x0, NULL, HFILL} }, {&hf_btatt_supported_power_range_minimum_increment, {"Minimum Increment", "btatt.supported_power_range.minimum_increment", - FT_UINT16, BASE_DEC | BASE_UNIT_STRING, &units_watt, 0x0, + FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_watt), 0x0, NULL, HFILL} }, {&hf_btatt_fitness_machine_status_opcode, @@ -17391,17 +17346,17 @@ proto_register_btatt(void) }, {&hf_btatt_fitness_machine_power, {"Power", "btatt.fitness_machine.power", - FT_INT16, BASE_DEC | BASE_UNIT_STRING, &units_watt, 0x0, + FT_INT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_watt), 0x0, NULL, HFILL} }, {&hf_btatt_fitness_machine_heart_rate, {"Heart Rate", "btatt.fitness_machine.heart_rate", - FT_UINT8, BASE_DEC | BASE_UNIT_STRING, &units_bpm, 0x0, + FT_UINT8, BASE_DEC | BASE_UNIT_STRING, UNS(&units_bpm), 0x0, NULL, HFILL} }, {&hf_btatt_fitness_machine_expended_energy, {"Expended Energy", "btatt.fitness_machine.expended_energy", - FT_UINT16, BASE_DEC | BASE_UNIT_STRING, &units_calorie, 0x0, + FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_calorie), 0x0, NULL, HFILL} }, {&hf_btatt_fitness_machine_number_of_steps, @@ -17416,12 +17371,12 @@ proto_register_btatt(void) }, {&hf_btatt_fitness_machine_distance, {"Distance", "btatt.fitness_machine.distance", - FT_UINT24, BASE_DEC | BASE_UNIT_STRING, &units_meters, 0x0, + FT_UINT24, BASE_DEC | BASE_UNIT_STRING, UNS(&units_meters), 0x0, NULL, HFILL} }, {&hf_btatt_fitness_machine_training_time, {"Training Time", "btatt.fitness_machine.training_time", - FT_UINT16, BASE_DEC | BASE_UNIT_STRING, &units_seconds, 0x0, + FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_seconds), 0x0, NULL, HFILL} }, {&hf_btatt_fitness_machine_wheel_circumference, @@ -17456,37 +17411,37 @@ proto_register_btatt(void) }, {&hf_btatt_fitness_machine_targeted_time_in_fat_burn_zone, {"Targeted Time in Fat Burn Zone", "btatt.fitness_machine.targeted_time_in_fat_burn_zone", - FT_UINT16, BASE_DEC | BASE_UNIT_STRING, &units_seconds, 0x0, + FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_seconds), 0x0, NULL, HFILL} }, {&hf_btatt_fitness_machine_targeted_time_in_fitness_zone, {"Targeted Time in Fitness Zone", "btatt.fitness_machine.targeted_time_in_fitness_zone", - FT_UINT16, BASE_DEC | BASE_UNIT_STRING, &units_seconds, 0x0, + FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_seconds), 0x0, NULL, HFILL} }, {&hf_btatt_fitness_machine_targeted_time_in_very_light_zone, {"Targeted Time in Very Light Zone", "btatt.fitness_machine.targeted_time_in_very_light_zone", - FT_UINT16, BASE_DEC | BASE_UNIT_STRING, &units_seconds, 0x0, + FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_seconds), 0x0, NULL, HFILL} }, {&hf_btatt_fitness_machine_targeted_time_in_light_zone, {"Targeted Time in Light Zone", "btatt.fitness_machine.targeted_time_in_light_zone", - FT_UINT16, BASE_DEC | BASE_UNIT_STRING, &units_seconds, 0x0, + FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_seconds), 0x0, NULL, HFILL} }, {&hf_btatt_fitness_machine_targeted_time_in_moderate_zone, {"Targeted Time in Moderate Zone", "btatt.fitness_machine.targeted_time_in_moderate_zone", - FT_UINT16, BASE_DEC | BASE_UNIT_STRING, &units_seconds, 0x0, + FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_seconds), 0x0, NULL, HFILL} }, {&hf_btatt_fitness_machine_targeted_time_in_hard_zone, {"Targeted Time in Hard Zone", "btatt.fitness_machine.targeted_time_in_hard_zone", - FT_UINT16, BASE_DEC | BASE_UNIT_STRING, &units_seconds, 0x0, + FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_seconds), 0x0, NULL, HFILL} }, {&hf_btatt_fitness_machine_targeted_time_in_maximum_zone, {"Targeted Time in Maximum Zone", "btatt.fitness_machine.targeted_time_in_maximum_zone", - FT_UINT16, BASE_DEC | BASE_UNIT_STRING, &units_seconds, 0x0, + FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_seconds), 0x0, NULL, HFILL} }, {&hf_btatt_volume_setting, @@ -17561,7 +17516,7 @@ proto_register_btatt(void) }; /* Setup protocol subtree array */ - static gint *ett[] = { + static int *ett[] = { &ett_btatt, &ett_btatt_list, &ett_btatt_value, @@ -17601,6 +17556,7 @@ proto_register_btatt(void) btatt_handle = register_dissector("btatt", dissect_btatt, proto_btatt); att_handle_dissector_table = register_dissector_table("btatt.handle", "BT ATT Handle", proto_btatt, FT_UINT16, BASE_HEX); + att_service_dissector_table = register_dissector_table("btatt.service", "BT ATT Service", proto_btatt, FT_UINT16, BASE_HEX); /* Required function calls to register the header fields and subtrees used */ proto_register_field_array(proto_btatt, hf, array_length(hf)); @@ -17619,12 +17575,14 @@ proto_register_btatt(void) "Version of protocol supported by this dissector."); register_decode_as(&btatt_handle_da); + + btatt_tap_handles = register_tap("btatt.handles"); } void proto_reg_handoff_btatt(void) { - gint i_array; + int i_array; GString *uuid_str = g_string_new(""); http_handle = find_dissector_add_dependency("http", proto_btatt); @@ -17637,14 +17595,12 @@ proto_reg_handoff_btatt(void) dissector_add_uint("btl2cap.psm", BTL2CAP_PSM_EATT, btatt_handle); dissector_add_uint("btl2cap.cid", BTL2CAP_FIXED_CID_ATT, btatt_handle); - btatt_tap_handles = register_tap("btatt.handles"); - for (i_array = 0; bluetooth_uuid_vals[i_array].strptr != NULL; i_array += 1) { - gchar *name; - gchar *short_name; - gchar *abbrev; + char *name; + char *short_name; + char *abbrev; dissector_handle_t handle_tmp; - gint proto_tmp; + int proto_tmp; if (bluetooth_uuid_vals[i_array].value < 0x1800) { continue; @@ -17748,7 +17704,7 @@ proto_register_btgatt(void) }, {&hf_gatt_microbit_accelerometer_period, {"Accelerometer Period", "btgatt.microbit.accelerometer.period", - FT_UINT16, BASE_DEC | BASE_UNIT_STRING, &units_milliseconds, 0x0, + FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0, NULL, HFILL} }, {&hf_gatt_microbit_magnetometer_data, @@ -17773,12 +17729,12 @@ proto_register_btgatt(void) }, {&hf_gatt_microbit_magnetometer_period, {"Magnetometer Period", "btgatt.microbit.magnetometer.period", - FT_UINT16, BASE_DEC | BASE_UNIT_STRING, &units_milliseconds, 0x0, + FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0, NULL, HFILL} }, {&hf_gatt_microbit_magnetometer_bearing, {"Magnetometer Bearing", "btgatt.microbit.magnetometer.bearing", - FT_UINT16, BASE_DEC | BASE_UNIT_STRING, &units_degree_bearing, 0x0, + FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_degree_bearing), 0x0, NULL, HFILL} }, {&hf_gatt_microbit_button_a_state, @@ -18033,7 +17989,7 @@ proto_register_btgatt(void) }, {&hf_gatt_microbit_scrolling_delay, {"Scrolling Delay", "btgatt.microbit.scrolling_delay", - FT_UINT16, BASE_DEC | BASE_UNIT_STRING, &units_milliseconds, 0x0, + FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0, NULL, HFILL} }, {&hf_gatt_microbit_microbit_requirements, @@ -18063,18 +18019,18 @@ proto_register_btgatt(void) }, {&hf_gatt_microbit_temperature_value, {"Temperature", "btgatt.microbit.temperature.value", - FT_INT8, BASE_DEC | BASE_UNIT_STRING, &units_degree_celsius, 0x0, + FT_INT8, BASE_DEC | BASE_UNIT_STRING, UNS(&units_degree_celsius), 0x0, NULL, HFILL} }, {&hf_gatt_microbit_temperature_period, {"Temperature Period", "btgatt.microbit.temperature.period", - FT_UINT16, BASE_DEC | BASE_UNIT_STRING, &units_milliseconds, 0x0, + FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0, NULL, HFILL} } }; - static gint *ett[] = { + static int *ett[] = { &ett_btgatt, &ett_btgatt_microbit_accelerometer, &ett_btgatt_microbit_magnetometer, @@ -18095,8 +18051,8 @@ void proto_reg_handoff_btgatt(void) { const struct uuid_dissectors_t { - const gchar * const uuid; - gchar * const short_name; + const char * const uuid; + char * const short_name; int (* const dissect_func)(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data); } uuid_dissectors[] = { @@ -18141,11 +18097,13 @@ proto_reg_handoff_btgatt(void) { NULL, NULL, NULL }, }; - for (gint i = 0; uuid_dissectors[i].uuid; i++) { + for (int i = 0; uuid_dissectors[i].uuid; i++) { wmem_tree_insert_string(bluetooth_uuids, uuid_dissectors[i].uuid, uuid_dissectors[i].short_name, 0); if (uuid_dissectors[i].dissect_func) { - dissector_handle_t handle = create_dissector_handle(uuid_dissectors[i].dissect_func, proto_btgatt); + dissector_handle_t handle = create_dissector_handle_with_name_and_description( + uuid_dissectors[i].dissect_func, proto_btgatt, + NULL, uuid_dissectors[i].short_name); dissector_add_string("bluetooth.uuid", uuid_dissectors[i].uuid, handle); } } |