defmodule ExtFit.Profile.Types do
  use ExtFit.Profile, :types
  @version "21.126.00"
  type(:mesg_num, :uint16, [
    {0, "file_id"},
    {1, "capabilities"},
    {2, "device_settings"},
    {3, "user_profile"},
    {4, "hrm_profile"},
    {5, "sdm_profile"},
    {6, "bike_profile"},
    {7, "zones_target"},
    {8, "hr_zone"},
    {9, "power_zone"},
    {10, "met_zone"},
    {12, "sport"},
    {15, "goal"},
    {18, "session"},
    {19, "lap"},
    {20, "record"},
    {21, "event"},
    {23, "device_info"},
    {26, "workout"},
    {27, "workout_step"},
    {28, "schedule"},
    {30, "weight_scale"},
    {31, "course"},
    {32, "course_point"},
    {33, "totals"},
    {34, "activity"},
    {35, "software"},
    {37, "file_capabilities"},
    {38, "mesg_capabilities"},
    {39, "field_capabilities"},
    {49, "file_creator"},
    {51, "blood_pressure"},
    {53, "speed_zone"},
    {55, "monitoring"},
    {72, "training_file"},
    {78, "hrv"},
    {80, "ant_rx"},
    {81, "ant_tx"},
    {82, "ant_channel_id"},
    {101, "length"},
    {103, "monitoring_info"},
    {105, "pad"},
    {106, "slave_device"},
    {127, "connectivity"},
    {128, "weather_conditions"},
    {129, "weather_alert"},
    {131, "cadence_zone"},
    {132, "hr"},
    {142, "segment_lap"},
    {145, "memo_glob"},
    {148, "segment_id"},
    {149, "segment_leaderboard_entry"},
    {150, "segment_point"},
    {151, "segment_file"},
    {158, "workout_session"},
    {159, "watchface_settings"},
    {160, "gps_metadata"},
    {161, "camera_event"},
    {162, "timestamp_correlation"},
    {164, "gyroscope_data"},
    {165, "accelerometer_data"},
    {167, "three_d_sensor_calibration"},
    {169, "video_frame"},
    {174, "obdii_data"},
    {177, "nmea_sentence"},
    {178, "aviation_attitude"},
    {184, "video"},
    {185, "video_title"},
    {186, "video_description"},
    {187, "video_clip"},
    {188, "ohr_settings"},
    {200, "exd_screen_configuration"},
    {201, "exd_data_field_configuration"},
    {202, "exd_data_concept_configuration"},
    {206, "field_description"},
    {207, "developer_data_id"},
    {208, "magnetometer_data"},
    {209, "barometer_data"},
    {210, "one_d_sensor_calibration"},
    {211, "monitoring_hr_data"},
    {216, "time_in_zone"},
    {225, "set"},
    {227, "stress_level"},
    {229, "max_met_data"},
    {258, "dive_settings"},
    {259, "dive_gas"},
    {262, "dive_alarm"},
    {264, "exercise_title"},
    {268, "dive_summary"},
    {269, "spo2_data"},
    {275, "sleep_level"},
    {285, "jump"},
    {290, "beat_intervals"},
    {297, "respiration_rate"},
    {312, "split"},
    {313, "split_summary"},
    {317, "climb_pro"},
    {319, "tank_update"},
    {323, "tank_summary"},
    {346, "sleep_assessment"},
    {370, "hrv_status_summary"},
    {371, "hrv_value"},
    {375, "device_aux_battery_info"},
    {393, "dive_apnea_alarm"},
    {65280, "mfg_range_min", %{comment: "0xFF00 - 0xFFFE reserved for manufacturer specific messages"}},
    {65534, "mfg_range_max", %{comment: "0xFF00 - 0xFFFE reserved for manufacturer specific messages"}}
  ])

  type(:activity_subtype, :enum, [
    {0, "generic"},
    {1, "treadmill", %{comment: "Run"}},
    {2, "street", %{comment: "Run"}},
    {3, "trail", %{comment: "Run"}},
    {4, "track", %{comment: "Run"}},
    {5, "spin", %{comment: "Cycling"}},
    {6, "indoor_cycling", %{comment: "Cycling"}},
    {7, "road", %{comment: "Cycling"}},
    {8, "mountain", %{comment: "Cycling"}},
    {9, "downhill", %{comment: "Cycling"}},
    {10, "recumbent", %{comment: "Cycling"}},
    {11, "cyclocross", %{comment: "Cycling"}},
    {12, "hand_cycling", %{comment: "Cycling"}},
    {13, "track_cycling", %{comment: "Cycling"}},
    {14, "indoor_rowing", %{comment: "Fitness Equipment"}},
    {15, "elliptical", %{comment: "Fitness Equipment"}},
    {16, "stair_climbing", %{comment: "Fitness Equipment"}},
    {17, "lap_swimming", %{comment: "Swimming"}},
    {18, "open_water", %{comment: "Swimming"}},
    {254, "all"}
  ])

  type(:local_device_type, :uint8, [
    {0, "gps", %{comment: "Onboard gps receiver"}},
    {1, "glonass", %{comment: "Onboard glonass receiver"}},
    {2, "gps_glonass", %{comment: "Onboard gps glonass receiver"}},
    {3, "accelerometer", %{comment: "Onboard sensor"}},
    {4, "barometer", %{comment: "Onboard sensor"}},
    {5, "temperature", %{comment: "Onboard sensor"}},
    {10, "whr", %{comment: "Onboard wrist HR sensor"}},
    {12, "sensor_hub", %{comment: "Onboard software package"}}
  ])

  type(:tissue_model_type, :enum, [
    {0, "zhl_16c", %{comment: "Buhlmann's decompression algorithm, version C"}}
  ])

  type(:timer_trigger, :enum, [{0, "manual"}, {1, "auto"}, {2, "fitness_equipment"}])
  type(:time_into_day, :uint32, [])

  type(:wkt_step_target, :enum, [
    {0, "speed"},
    {1, "heart_rate"},
    {2, "open"},
    {3, "cadence"},
    {4, "power"},
    {5, "grade"},
    {6, "resistance"},
    {7, "power_3s"},
    {8, "power_10s"},
    {9, "power_30s"},
    {10, "power_lap"},
    {11, "swim_stroke"},
    {12, "speed_lap"},
    {13, "heart_rate_lap"}
  ])

  type(:display_position, :enum, [
    {0, "degree", %{comment: "dd.dddddd"}},
    {1, "degree_minute", %{comment: "dddmm.mmm"}},
    {2, "degree_minute_second", %{comment: "dddmmss"}},
    {3, "austrian_grid", %{comment: "Austrian Grid (BMN)"}},
    {4, "british_grid", %{comment: "British National Grid"}},
    {5, "dutch_grid", %{comment: "Dutch grid system"}},
    {6, "hungarian_grid", %{comment: "Hungarian grid system"}},
    {7, "finnish_grid", %{comment: "Finnish grid system Zone3 KKJ27"}},
    {8, "german_grid", %{comment: "Gausss Krueger (German)"}},
    {9, "icelandic_grid", %{comment: "Icelandic Grid"}},
    {10, "indonesian_equatorial", %{comment: "Indonesian Equatorial LCO"}},
    {11, "indonesian_irian", %{comment: "Indonesian Irian LCO"}},
    {12, "indonesian_southern", %{comment: "Indonesian Southern LCO"}},
    {13, "india_zone_0", %{comment: "India zone 0"}},
    {14, "india_zone_IA", %{comment: "India zone IA"}},
    {15, "india_zone_IB", %{comment: "India zone IB"}},
    {16, "india_zone_IIA", %{comment: "India zone IIA"}},
    {17, "india_zone_IIB", %{comment: "India zone IIB"}},
    {18, "india_zone_IIIA", %{comment: "India zone IIIA"}},
    {19, "india_zone_IIIB", %{comment: "India zone IIIB"}},
    {20, "india_zone_IVA", %{comment: "India zone IVA"}},
    {21, "india_zone_IVB", %{comment: "India zone IVB"}},
    {22, "irish_transverse", %{comment: "Irish Transverse Mercator"}},
    {23, "irish_grid", %{comment: "Irish Grid"}},
    {24, "loran", %{comment: "Loran TD"}},
    {25, "maidenhead_grid", %{comment: "Maidenhead grid system"}},
    {26, "mgrs_grid", %{comment: "MGRS grid system"}},
    {27, "new_zealand_grid", %{comment: "New Zealand grid system"}},
    {28, "new_zealand_transverse", %{comment: "New Zealand Transverse Mercator"}},
    {29, "qatar_grid", %{comment: "Qatar National Grid"}},
    {30, "modified_swedish_grid", %{comment: "Modified RT-90 (Sweden)"}},
    {31, "swedish_grid", %{comment: "RT-90 (Sweden)"}},
    {32, "south_african_grid", %{comment: "South African Grid"}},
    {33, "swiss_grid", %{comment: "Swiss CH-1903 grid"}},
    {34, "taiwan_grid", %{comment: "Taiwan Grid"}},
    {35, "united_states_grid", %{comment: "United States National Grid"}},
    {36, "utm_ups_grid", %{comment: "UTM/UPS grid system"}},
    {37, "west_malayan", %{comment: "West Malayan RSO"}},
    {38, "borneo_rso", %{comment: "Borneo RSO"}},
    {39, "estonian_grid", %{comment: "Estonian grid system"}},
    {40, "latvian_grid", %{comment: "Latvian Transverse Mercator"}},
    {41, "swedish_ref_99_grid", %{comment: "Reference Grid 99 TM (Swedish)"}}
  ])

  type(:shrug_exercise_name, :uint16, [
    {0, "barbell_jump_shrug"},
    {1, "barbell_shrug"},
    {2, "barbell_upright_row"},
    {3, "behind_the_back_smith_machine_shrug"},
    {4, "dumbbell_jump_shrug"},
    {5, "dumbbell_shrug"},
    {6, "dumbbell_upright_row"},
    {7, "incline_dumbbell_shrug"},
    {8, "overhead_barbell_shrug"},
    {9, "overhead_dumbbell_shrug"},
    {10, "scaption_and_shrug"},
    {11, "scapular_retraction"},
    {12, "serratus_chair_shrug"},
    {13, "weighted_serratus_chair_shrug"},
    {14, "serratus_shrug"},
    {15, "weighted_serratus_shrug"},
    {16, "wide_grip_jump_shrug"}
  ])

  type(:course_capabilities, :uint32z, [
    {1, "processed"},
    {2, "valid"},
    {4, "time"},
    {8, "distance"},
    {16, "position"},
    {32, "heart_rate"},
    {64, "power"},
    {128, "cadence"},
    {256, "training"},
    {512, "navigation"},
    {1024, "bikeway"},
    {4096, "aviation", %{comment: "Denote course files to be used as flight plans"}}
  ])

  type(:turn_type, :enum, [
    {0, "arriving_idx"},
    {1, "arriving_left_idx"},
    {2, "arriving_right_idx"},
    {3, "arriving_via_idx"},
    {4, "arriving_via_left_idx"},
    {5, "arriving_via_right_idx"},
    {6, "bear_keep_left_idx"},
    {7, "bear_keep_right_idx"},
    {8, "continue_idx"},
    {9, "exit_left_idx"},
    {10, "exit_right_idx"},
    {11, "ferry_idx"},
    {12, "roundabout_45_idx"},
    {13, "roundabout_90_idx"},
    {14, "roundabout_135_idx"},
    {15, "roundabout_180_idx"},
    {16, "roundabout_225_idx"},
    {17, "roundabout_270_idx"},
    {18, "roundabout_315_idx"},
    {19, "roundabout_360_idx"},
    {20, "roundabout_neg_45_idx"},
    {21, "roundabout_neg_90_idx"},
    {22, "roundabout_neg_135_idx"},
    {23, "roundabout_neg_180_idx"},
    {24, "roundabout_neg_225_idx"},
    {25, "roundabout_neg_270_idx"},
    {26, "roundabout_neg_315_idx"},
    {27, "roundabout_neg_360_idx"},
    {28, "roundabout_generic_idx"},
    {29, "roundabout_neg_generic_idx"},
    {30, "sharp_turn_left_idx"},
    {31, "sharp_turn_right_idx"},
    {32, "turn_left_idx"},
    {33, "turn_right_idx"},
    {34, "uturn_left_idx"},
    {35, "uturn_right_idx"},
    {36, "icon_inv_idx"},
    {37, "icon_idx_cnt"}
  ])

  type(:language_bits_2, :uint8z, [
    {1, "slovenian"},
    {2, "swedish"},
    {4, "russian"},
    {8, "turkish"},
    {16, "latvian"},
    {32, "ukrainian"},
    {64, "arabic"},
    {128, "farsi"}
  ])

  type(:workout_power, :uint32, [{1000, "watts_offset"}])
  type(:backlight_timeout, :uint8, [{0, "infinite", %{comment: "Backlight stays on forever."}}])

  type(:ant_channel_id, :uint32z, [
    {65535, "ant_device_number"},
    {16_711_680, "ant_device_type"},
    {251_658_240, "ant_transmission_type_lower_nibble"},
    {4_026_531_840, "ant_extended_device_number_upper_nibble"}
  ])

  type(:wkt_step_duration, :enum, [
    {0, "time"},
    {1, "distance"},
    {2, "hr_less_than"},
    {3, "hr_greater_than"},
    {4, "calories"},
    {5, "open"},
    {6, "repeat_until_steps_cmplt"},
    {7, "repeat_until_time"},
    {8, "repeat_until_distance"},
    {9, "repeat_until_calories"},
    {10, "repeat_until_hr_less_than"},
    {11, "repeat_until_hr_greater_than"},
    {12, "repeat_until_power_less_than"},
    {13, "repeat_until_power_greater_than"},
    {14, "power_less_than"},
    {15, "power_greater_than"},
    {16, "training_peaks_tss"},
    {17, "repeat_until_power_last_lap_less_than"},
    {18, "repeat_until_max_power_last_lap_less_than"},
    {19, "power_3s_less_than"},
    {20, "power_10s_less_than"},
    {21, "power_30s_less_than"},
    {22, "power_3s_greater_than"},
    {23, "power_10s_greater_than"},
    {24, "power_30s_greater_than"},
    {25, "power_lap_less_than"},
    {26, "power_lap_greater_than"},
    {27, "repeat_until_training_peaks_tss"},
    {28, "repetition_time"},
    {29, "reps"},
    {31, "time_only"}
  ])

  type(:split_type, :enum, [
    {1, "ascent_split"},
    {2, "descent_split"},
    {3, "interval_active"},
    {4, "interval_rest"},
    {5, "interval_warmup"},
    {6, "interval_cooldown"},
    {7, "interval_recovery"},
    {8, "interval_other"},
    {9, "climb_active"},
    {10, "climb_rest"},
    {11, "surf_active"},
    {12, "run_active"},
    {13, "run_rest"},
    {14, "workout_round"},
    {17, "rwd_run", %{comment: "run/walk detection running"}},
    {18, "rwd_walk", %{comment: "run/walk detection walking"}},
    {21, "windsurf_active"},
    {22, "rwd_stand", %{comment: "run/walk detection standing"}},
    {23, "transition", %{comment: "Marks the time going from ascent_split to descent_split/used in backcountry ski"}},
    {28, "ski_lift_split"},
    {29, "ski_run_split"}
  ])

  type(:activity_level, :enum, [{0, "low"}, {1, "medium"}, {2, "high"}])
  type(:localtime_into_day, :uint32, [])
  type(:run_exercise_name, :uint16, [{0, "run"}, {1, "walk"}, {2, "jog"}, {3, "sprint"}])

  type(:device_index, :uint8, [
    {0, "creator", %{comment: "Creator of the file is always device index 0."}}
  ])

  type(:ant_network, :enum, [{0, "public"}, {1, "antplus"}, {2, "antfs"}, {3, "private"}])

  type(:spo2_measurement_type, :enum, [
    {0, "off_wrist"},
    {1, "spot_check"},
    {2, "continuous_check"},
    {3, "periodic"}
  ])

  type(:watchface_mode, :enum, [{0, "digital"}, {1, "analog"}, {2, "connect_iq"}, {3, "disabled"}])

  type(:sit_up_exercise_name, :uint16, [
    {0, "alternating_sit_up"},
    {1, "weighted_alternating_sit_up"},
    {2, "bent_knee_v_up"},
    {3, "weighted_bent_knee_v_up"},
    {4, "butterfly_sit_up"},
    {5, "weighted_butterfly_situp"},
    {6, "cross_punch_roll_up"},
    {7, "weighted_cross_punch_roll_up"},
    {8, "crossed_arms_sit_up"},
    {9, "weighted_crossed_arms_sit_up"},
    {10, "get_up_sit_up"},
    {11, "weighted_get_up_sit_up"},
    {12, "hovering_sit_up"},
    {13, "weighted_hovering_sit_up"},
    {14, "kettlebell_sit_up"},
    {15, "medicine_ball_alternating_v_up"},
    {16, "medicine_ball_sit_up"},
    {17, "medicine_ball_v_up"},
    {18, "modified_sit_up"},
    {19, "negative_sit_up"},
    {20, "one_arm_full_sit_up"},
    {21, "reclining_circle"},
    {22, "weighted_reclining_circle"},
    {23, "reverse_curl_up"},
    {24, "weighted_reverse_curl_up"},
    {25, "single_leg_swiss_ball_jackknife"},
    {26, "weighted_single_leg_swiss_ball_jackknife"},
    {27, "the_teaser"},
    {28, "the_teaser_weighted"},
    {29, "three_part_roll_down"},
    {30, "weighted_three_part_roll_down"},
    {31, "v_up"},
    {32, "weighted_v_up"},
    {33, "weighted_russian_twist_on_swiss_ball"},
    {34, "weighted_sit_up"},
    {35, "x_abs"},
    {36, "weighted_x_abs"},
    {37, "sit_up"}
  ])

  type(:garmin_product, :uint16, [
    {1, "hrm1"},
    {2, "axh01", %{comment: "AXH01 HRM chipset"}},
    {3, "axb01"},
    {4, "axb02"},
    {5, "hrm2ss"},
    {6, "dsi_alf02"},
    {7, "hrm3ss"},
    {8, "hrm_run_single_byte_product_id", %{comment: "hrm_run model for HRM ANT+ messaging"}},
    {9, "bsm", %{comment: "BSM model for ANT+ messaging"}},
    {10, "bcm", %{comment: "BCM model for ANT+ messaging"}},
    {11, "axs01", %{comment: "AXS01 HRM Bike Chipset model for ANT+ messaging"}},
    {12, "hrm_tri_single_byte_product_id", %{comment: "hrm_tri model for HRM ANT+ messaging"}},
    {13, "hrm4_run_single_byte_product_id", %{comment: "hrm4 run model for HRM ANT+ messaging"}},
    {14, "fr225_single_byte_product_id", %{comment: "fr225 model for HRM ANT+ messaging"}},
    {15, "gen3_bsm_single_byte_product_id", %{comment: "gen3_bsm model for Bike Speed ANT+ messaging"}},
    {16, "gen3_bcm_single_byte_product_id", %{comment: "gen3_bcm model for Bike Cadence ANT+ messaging"}},
    {255, "OHR", %{comment: "Garmin Wearable Optical Heart Rate Sensor for ANT+ HR Profile Broadcasting"}},
    {473, "fr301_china"},
    {474, "fr301_japan"},
    {475, "fr301_korea"},
    {494, "fr301_taiwan"},
    {717, "fr405", %{comment: "Forerunner 405"}},
    {782, "fr50", %{comment: "Forerunner 50"}},
    {987, "fr405_japan"},
    {988, "fr60", %{comment: "Forerunner 60"}},
    {1011, "dsi_alf01"},
    {1018, "fr310xt", %{comment: "Forerunner 310"}},
    {1036, "edge500"},
    {1124, "fr110", %{comment: "Forerunner 110"}},
    {1169, "edge800"},
    {1199, "edge500_taiwan"},
    {1213, "edge500_japan"},
    {1253, "chirp"},
    {1274, "fr110_japan"},
    {1325, "edge200"},
    {1328, "fr910xt"},
    {1333, "edge800_taiwan"},
    {1334, "edge800_japan"},
    {1341, "alf04"},
    {1345, "fr610"},
    {1360, "fr210_japan"},
    {1380, "vector_ss"},
    {1381, "vector_cp"},
    {1386, "edge800_china"},
    {1387, "edge500_china"},
    {1405, "approach_g10"},
    {1410, "fr610_japan"},
    {1422, "edge500_korea"},
    {1436, "fr70"},
    {1446, "fr310xt_4t"},
    {1461, "amx"},
    {1482, "fr10"},
    {1497, "edge800_korea"},
    {1499, "swim"},
    {1537, "fr910xt_china"},
    {1551, "fenix"},
    {1555, "edge200_taiwan"},
    {1561, "edge510"},
    {1567, "edge810"},
    {1570, "tempe"},
    {1600, "fr910xt_japan"},
    {1623, "fr620"},
    {1632, "fr220"},
    {1664, "fr910xt_korea"},
    {1688, "fr10_japan"},
    {1721, "edge810_japan"},
    {1735, "virb_elite"},
    {1736, "edge_touring", %{comment: "Also Edge Touring Plus"}},
    {1742, "edge510_japan"},
    {1743, "hrm_tri", %{comment: "Also HRM-Swim"}},
    {1752, "hrm_run"},
    {1765, "fr920xt"},
    {1821, "edge510_asia"},
    {1822, "edge810_china"},
    {1823, "edge810_taiwan"},
    {1836, "edge1000"},
    {1837, "vivo_fit"},
    {1853, "virb_remote"},
    {1885, "vivo_ki"},
    {1903, "fr15"},
    {1907, "vivo_active"},
    {1918, "edge510_korea"},
    {1928, "fr620_japan"},
    {1929, "fr620_china"},
    {1930, "fr220_japan"},
    {1931, "fr220_china"},
    {1936, "approach_s6"},
    {1956, "vivo_smart"},
    {1967, "fenix2"},
    {1988, "epix"},
    {2050, "fenix3"},
    {2052, "edge1000_taiwan"},
    {2053, "edge1000_japan"},
    {2061, "fr15_japan"},
    {2067, "edge520"},
    {2070, "edge1000_china"},
    {2072, "fr620_russia"},
    {2073, "fr220_russia"},
    {2079, "vector_s"},
    {2100, "edge1000_korea"},
    {2130, "fr920xt_taiwan"},
    {2131, "fr920xt_china"},
    {2132, "fr920xt_japan"},
    {2134, "virbx"},
    {2135, "vivo_smart_apac"},
    {2140, "etrex_touch"},
    {2147, "edge25"},
    {2148, "fr25"},
    {2150, "vivo_fit2"},
    {2153, "fr225"},
    {2156, "fr630"},
    {2157, "fr230"},
    {2158, "fr735xt"},
    {2160, "vivo_active_apac"},
    {2161, "vector_2"},
    {2162, "vector_2s"},
    {2172, "virbxe"},
    {2173, "fr620_taiwan"},
    {2174, "fr220_taiwan"},
    {2175, "truswing"},
    {2187, "d2airvenu"},
    {2188, "fenix3_china"},
    {2189, "fenix3_twn"},
    {2192, "varia_headlight"},
    {2193, "varia_taillight_old"},
    {2204, "edge_explore_1000"},
    {2219, "fr225_asia"},
    {2225, "varia_radar_taillight"},
    {2226, "varia_radar_display"},
    {2238, "edge20"},
    {2260, "edge520_asia"},
    {2261, "edge520_japan"},
    {2262, "d2_bravo"},
    {2266, "approach_s20"},
    {2271, "vivo_smart2"},
    {2274, "edge1000_thai"},
    {2276, "varia_remote"},
    {2288, "edge25_asia"},
    {2289, "edge25_jpn"},
    {2290, "edge20_asia"},
    {2292, "approach_x40"},
    {2293, "fenix3_japan"},
    {2294, "vivo_smart_emea"},
    {2310, "fr630_asia"},
    {2311, "fr630_jpn"},
    {2313, "fr230_jpn"},
    {2327, "hrm4_run"},
    {2332, "epix_japan"},
    {2337, "vivo_active_hr"},
    {2347, "vivo_smart_gps_hr"},
    {2348, "vivo_smart_hr"},
    {2361, "vivo_smart_hr_asia"},
    {2362, "vivo_smart_gps_hr_asia"},
    {2368, "vivo_move"},
    {2379, "varia_taillight"},
    {2396, "fr235_asia"},
    {2397, "fr235_japan"},
    {2398, "varia_vision"},
    {2406, "vivo_fit3"},
    {2407, "fenix3_korea"},
    {2408, "fenix3_sea"},
    {2413, "fenix3_hr"},
    {2417, "virb_ultra_30"},
    {2429, "index_smart_scale"},
    {2431, "fr235"},
    {2432, "fenix3_chronos"},
    {2441, "oregon7xx"},
    {2444, "rino7xx"},
    {2457, "epix_korea"},
    {2473, "fenix3_hr_chn"},
    {2474, "fenix3_hr_twn"},
    {2475, "fenix3_hr_jpn"},
    {2476, "fenix3_hr_sea"},
    {2477, "fenix3_hr_kor"},
    {2496, "nautix"},
    {2497, "vivo_active_hr_apac"},
    {2503, "fr35"},
    {2512, "oregon7xx_ww"},
    {2530, "edge_820"},
    {2531, "edge_explore_820"},
    {2533, "fr735xt_apac"},
    {2534, "fr735xt_japan"},
    {2544, "fenix5s"},
    {2547, "d2_bravo_titanium"},
    {2567, "varia_ut800", %{comment: "Varia UT 800 SW"}},
    {2593, "running_dynamics_pod"},
    {2599, "edge_820_china"},
    {2600, "edge_820_japan"},
    {2604, "fenix5x"},
    {2606, "vivo_fit_jr"},
    {2622, "vivo_smart3"},
    {2623, "vivo_sport"},
    {2628, "edge_820_taiwan"},
    {2629, "edge_820_korea"},
    {2630, "edge_820_sea"},
    {2650, "fr35_hebrew"},
    {2656, "approach_s60"},
    {2667, "fr35_apac"},
    {2668, "fr35_japan"},
    {2675, "fenix3_chronos_asia"},
    {2687, "virb_360"},
    {2691, "fr935"},
    {2697, "fenix5"},
    {2700, "vivoactive3"},
    {2713, "edge_1030"},
    {2727, "fr35_sea"},
    {2733, "fr235_china_nfc"},
    {2769, "foretrex_601_701"},
    {2772, "vivo_move_hr"},
    {2787, "vector_3"},
    {2796, "fenix5_asia"},
    {2797, "fenix5s_asia"},
    {2798, "fenix5x_asia"},
    {2806, "approach_z80"},
    {2814, "fr35_korea"},
    {2819, "d2charlie"},
    {2831, "vivo_smart3_apac"},
    {2832, "vivo_sport_apac"},
    {2833, "fr935_asia"},
    {2859, "descent"},
    {2878, "vivo_fit4"},
    {2886, "fr645"},
    {2888, "fr645m"},
    {2891, "fr30"},
    {2900, "fenix5s_plus"},
    {2909, "Edge_130"},
    {2924, "edge_1030_asia"},
    {2927, "vivosmart_4"},
    {2945, "vivo_move_hr_asia"},
    {2962, "approach_x10"},
    {2977, "fr30_asia"},
    {2988, "vivoactive3m_w"},
    {3003, "fr645_asia"},
    {3004, "fr645m_asia"},
    {3011, "edge_explore"},
    {3028, "gpsmap66"},
    {3049, "approach_s10"},
    {3066, "vivoactive3m_l"},
    {3085, "approach_g80"},
    {3092, "edge_130_asia"},
    {3095, "edge_1030_bontrager"},
    {3110, "fenix5_plus"},
    {3111, "fenix5x_plus"},
    {3112, "edge_520_plus"},
    {3113, "fr945"},
    {3121, "edge_530"},
    {3122, "edge_830"},
    {3126, "instinct_esports"},
    {3134, "fenix5s_plus_apac"},
    {3135, "fenix5x_plus_apac"},
    {3142, "edge_520_plus_apac"},
    {3143, "descent_t1"},
    {3144, "fr235l_asia"},
    {3145, "fr245_asia"},
    {3163, "vivo_active3m_apac"},
    {3192, "gen3_bsm", %{comment: "gen3 bike speed sensor"}},
    {3193, "gen3_bcm", %{comment: "gen3 bike cadence sensor"}},
    {3218, "vivo_smart4_asia"},
    {3224, "vivoactive4_small"},
    {3225, "vivoactive4_large"},
    {3226, "venu"},
    {3246, "marq_driver"},
    {3247, "marq_aviator"},
    {3248, "marq_captain"},
    {3249, "marq_commander"},
    {3250, "marq_expedition"},
    {3251, "marq_athlete"},
    {3258, "descent_mk2"},
    {3284, "gpsmap66i"},
    {3287, "fenix6S_sport"},
    {3288, "fenix6S"},
    {3289, "fenix6_sport"},
    {3290, "fenix6"},
    {3291, "fenix6x"},
    {3299, "hrm_dual", %{comment: "HRM-Dual"}},
    {3300, "hrm_pro", %{comment: "HRM-Pro"}},
    {3308, "vivo_move3_premium"},
    {3314, "approach_s40"},
    {3321, "fr245m_asia"},
    {3349, "edge_530_apac"},
    {3350, "edge_830_apac"},
    {3378, "vivo_move3"},
    {3387, "vivo_active4_small_asia"},
    {3388, "vivo_active4_large_asia"},
    {3389, "vivo_active4_oled_asia"},
    {3405, "swim2"},
    {3420, "marq_driver_asia"},
    {3421, "marq_aviator_asia"},
    {3422, "vivo_move3_asia"},
    {3441, "fr945_asia"},
    {3446, "vivo_active3t_chn"},
    {3448, "marq_captain_asia"},
    {3449, "marq_commander_asia"},
    {3450, "marq_expedition_asia"},
    {3451, "marq_athlete_asia"},
    {3466, "instinct_solar"},
    {3469, "fr45_asia"},
    {3473, "vivoactive3_daimler"},
    {3498, "legacy_rey"},
    {3499, "legacy_darth_vader"},
    {3500, "legacy_captain_marvel"},
    {3501, "legacy_first_avenger"},
    {3512, "fenix6s_sport_asia"},
    {3513, "fenix6s_asia"},
    {3514, "fenix6_sport_asia"},
    {3515, "fenix6_asia"},
    {3516, "fenix6x_asia"},
    {3535, "legacy_captain_marvel_asia"},
    {3536, "legacy_first_avenger_asia"},
    {3537, "legacy_rey_asia"},
    {3538, "legacy_darth_vader_asia"},
    {3542, "descent_mk2s"},
    {3558, "edge_130_plus"},
    {3570, "edge_1030_plus"},
    {3578, "rally_200", %{comment: "Rally 100/200 Power Meter Series"}},
    {3589, "fr745"},
    {3600, "venusq"},
    {3615, "lily"},
    {3624, "marq_adventurer"},
    {3638, "enduro"},
    {3639, "swim2_apac"},
    {3648, "marq_adventurer_asia"},
    {3652, "fr945_lte"},
    {3702, "descent_mk2_asia", %{comment: "Mk2 and Mk2i"}},
    {3703, "venu2"},
    {3704, "venu2s"},
    {3737, "venu_daimler_asia"},
    {3739, "marq_golfer"},
    {3740, "venu_daimler"},
    {3794, "fr745_asia"},
    {3808, "varia_rct715"},
    {3809, "lily_asia"},
    {3812, "edge_1030_plus_asia"},
    {3813, "edge_130_plus_asia"},
    {3823, "approach_s12"},
    {3837, "venusq_asia"},
    {3843, "edge_1040"},
    {3850, "marq_golfer_asia"},
    {3851, "venu2_plus"},
    {3865, "gnss"},
    {3869, "fr55"},
    {3872, "enduro_asia"},
    {3888, "instinct_2"},
    {3905, "fenix7s"},
    {3906, "fenix7"},
    {3907, "fenix7x"},
    {3908, "fenix7s_apac"},
    {3909, "fenix7_apac"},
    {3910, "fenix7x_apac"},
    {3927, "approach_g12"},
    {3930, "descent_mk2s_asia"},
    {3934, "approach_s42"},
    {3943, "epix_gen2"},
    {3944, "epix_gen2_apac"},
    {3949, "venu2s_asia"},
    {3950, "venu2_asia"},
    {3978, "fr945_lte_asia"},
    {3982, "vivo_move_sport"},
    {3983, "vivomove_trend"},
    {3986, "approach_S12_asia"},
    {3990, "fr255_music"},
    {3991, "fr255_small_music"},
    {3992, "fr255"},
    {3993, "fr255_small"},
    {4001, "approach_g12_asia"},
    {4002, "approach_s42_asia"},
    {4005, "descent_g1"},
    {4017, "venu2_plus_asia"},
    {4024, "fr955"},
    {4033, "fr55_asia"},
    {4061, "edge_540"},
    {4062, "edge_840"},
    {4063, "vivosmart_5"},
    {4071, "instinct_2_asia"},
    {4105, "marq_gen2", %{comment: "Adventurer, Athlete, Captain, Golfer"}},
    {4115, "venusq2"},
    {4116, "venusq2music"},
    {4124, "marq_gen2_aviator"},
    {4125, "d2_air_x10"},
    {4130, "hrm_pro_plus"},
    {4132, "descent_g1_asia"},
    {4135, "tactix7"},
    {4155, "instinct_crossover"},
    {4169, "edge_explore2"},
    {4233, "approach_s70"},
    {4257, "fr265_large"},
    {4258, "fr265_small"},
    {4260, "venu3"},
    {4261, "venu3s"},
    {4265, "tacx_neo_smart", %{comment: "Neo Smart, Tacx"}},
    {4266, "tacx_neo2_smart", %{comment: "Neo 2 Smart, Tacx"}},
    {4267, "tacx_neo2_t_smart", %{comment: "Neo 2T Smart, Tacx"}},
    {4268, "tacx_neo_smart_bike", %{comment: "Neo Smart Bike, Tacx"}},
    {4269, "tacx_satori_smart", %{comment: "Satori Smart, Tacx"}},
    {4270, "tacx_flow_smart", %{comment: "Flow Smart, Tacx"}},
    {4271, "tacx_vortex_smart", %{comment: "Vortex Smart, Tacx"}},
    {4272, "tacx_bushido_smart", %{comment: "Bushido Smart, Tacx"}},
    {4273, "tacx_genius_smart", %{comment: "Genius Smart, Tacx"}},
    {4274, "tacx_flux_flux_s_smart", %{comment: "Flux/Flux S Smart, Tacx"}},
    {4275, "tacx_flux2_smart", %{comment: "Flux 2 Smart, Tacx"}},
    {4276, "tacx_magnum", %{comment: "Magnum, Tacx"}},
    {4305, "edge_1040_asia"},
    {4312, "epix_gen2_pro_42"},
    {4313, "epix_gen2_pro_47"},
    {4314, "epix_gen2_pro_51"},
    {4315, "fr965"},
    {4341, "enduro2"},
    {4374, "fenix7s_pro_solar"},
    {4375, "fenix7_pro_solar"},
    {4376, "fenix7x_pro_solar"},
    {4394, "instinct_2x"},
    {4426, "vivoactive5"},
    {4442, "descent_t2"},
    {4472, "marq_gen2_commander"},
    {4556, "d2_mach1_pro"},
    {10007, "sdm4", %{comment: "SDM4 footpod"}},
    {10014, "edge_remote"},
    {20119, "training_center"},
    {20533, "tacx_training_app_win"},
    {20534, "tacx_training_app_mac"},
    {20565, "tacx_training_app_mac_catalyst"},
    {30045, "tacx_training_app_android"},
    {30046, "tacx_training_app_ios"},
    {30047, "tacx_training_app_legacy"},
    {65531, "connectiq_simulator"},
    {65532, "android_antplus_plugin"},
    {65534, "connect", %{comment: "Garmin Connect website"}}
  ])

  type(:autolap_trigger, :enum, [
    {0, "time"},
    {1, "distance"},
    {2, "position_start"},
    {3, "position_lap"},
    {4, "position_waypoint"},
    {5, "position_marked"},
    {6, "off"}
  ])

  type(:hr_zone_calc, :enum, [
    {0, "custom"},
    {1, "percent_max_hr"},
    {2, "percent_hrr"},
    {3, "percent_lthr"}
  ])

  type(:exd_display_type, :enum, [
    {0, "numerical"},
    {1, "simple"},
    {2, "graph"},
    {3, "bar"},
    {4, "circle_graph"},
    {5, "virtual_partner"},
    {6, "balance"},
    {7, "string_list"},
    {8, "string"},
    {9, "simple_dynamic_icon"},
    {10, "gauge"}
  ])

  type(:date_mode, :enum, [{0, "day_month"}, {1, "month_day"}])

  type(:fitness_equipment_state, :enum, [
    {0, "ready"},
    {1, "in_use"},
    {2, "paused"},
    {3, "unknown", %{comment: "lost connection to fitness equipment"}}
  ])

  type(:attitude_validity, :uint16, [
    {1, "track_angle_heading_valid"},
    {2, "pitch_valid"},
    {4, "roll_valid"},
    {8, "lateral_body_accel_valid"},
    {16, "normal_body_accel_valid"},
    {32, "turn_rate_valid"},
    {64, "hw_fail"},
    {128, "mag_invalid"},
    {256, "no_gps"},
    {512, "gps_invalid"},
    {1024, "solution_coasting"},
    {2048, "true_track_angle"},
    {4096, "magnetic_heading"}
  ])

  type(:file, :enum, [
    {1, "device", %{comment: "Read only, single file. Must be in root directory."}},
    {2, "settings", %{comment: "Read/write, single file. Directory=Settings"}},
    {3, "sport", %{comment: "Read/write, multiple files, file number = sport type. Directory=Sports"}},
    {4, "activity", %{comment: "Read/erase, multiple files. Directory=Activities"}},
    {5, "workout", %{comment: "Read/write/erase, multiple files. Directory=Workouts"}},
    {6, "course", %{comment: "Read/write/erase, multiple files. Directory=Courses"}},
    {7, "schedules", %{comment: "Read/write, single file. Directory=Schedules"}},
    {9, "weight",
     %{comment: "Read only, single file. Circular buffer. All message definitions at start of file. Directory=Weight"}},
    {10, "totals", %{comment: "Read only, single file. Directory=Totals"}},
    {11, "goals", %{comment: "Read/write, single file. Directory=Goals"}},
    {14, "blood_pressure", %{comment: "Read only. Directory=Blood Pressure"}},
    {15, "monitoring_a", %{comment: "Read only. Directory=Monitoring. File number=sub type."}},
    {20, "activity_summary", %{comment: "Read/erase, multiple files. Directory=Activities"}},
    {28, "monitoring_daily"},
    {32, "monitoring_b", %{comment: "Read only. Directory=Monitoring. File number=identifier"}},
    {34, "segment", %{comment: "Read/write/erase. Multiple Files. Directory=Segments"}},
    {35, "segment_list", %{comment: "Read/write/erase. Single File. Directory=Segments"}},
    {40, "exd_configuration", %{comment: "Read/write/erase. Single File. Directory=Settings"}},
    {247, "mfg_range_min", %{comment: "0xF7 - 0xFE reserved for manufacturer specific file types"}},
    {254, "mfg_range_max", %{comment: "0xF7 - 0xFE reserved for manufacturer specific file types"}}
  ])

  type(:exd_layout, :enum, [
    {0, "full_screen"},
    {1, "half_vertical"},
    {2, "half_horizontal"},
    {3, "half_vertical_right_split"},
    {4, "half_horizontal_bottom_split"},
    {5, "full_quarter_split"},
    {6, "half_vertical_left_split"},
    {7, "half_horizontal_top_split"},
    {8, "dynamic", %{comment: "The EXD may display the configured concepts in any layout it sees fit."}}
  ])

  type(:camera_orientation_type, :enum, [
    {0, "camera_orientation_0"},
    {1, "camera_orientation_90"},
    {2, "camera_orientation_180"},
    {3, "camera_orientation_270"}
  ])

  type(:auto_activity_detect, :uint32, [
    {0, "none"},
    {1, "running"},
    {2, "cycling"},
    {4, "swimming"},
    {8, "walking"},
    {32, "elliptical"},
    {1024, "sedentary"}
  ])

  type(:goal, :enum, [
    {0, "time"},
    {1, "distance"},
    {2, "calories"},
    {3, "frequency"},
    {4, "steps"},
    {5, "ascent"},
    {6, "active_minutes"}
  ])

  type(:pwr_zone_calc, :enum, [{0, "custom"}, {1, "percent_ftp"}])

  type(:display_orientation, :enum, [
    {0, "auto", %{comment: "automatic if the device supports it"}},
    {1, "portrait"},
    {2, "landscape"},
    {3, "portrait_flipped", %{comment: "portrait mode but rotated 180 degrees"}},
    {4, "landscape_flipped", %{comment: "landscape mode but rotated 180 degrees"}}
  ])

  type(:core_exercise_name, :uint16, [
    {0, "abs_jabs"},
    {1, "weighted_abs_jabs"},
    {2, "alternating_plate_reach"},
    {3, "barbell_rollout"},
    {4, "weighted_barbell_rollout"},
    {5, "body_bar_oblique_twist"},
    {6, "cable_core_press"},
    {7, "cable_side_bend"},
    {8, "side_bend"},
    {9, "weighted_side_bend"},
    {10, "crescent_circle"},
    {11, "weighted_crescent_circle"},
    {12, "cycling_russian_twist"},
    {13, "weighted_cycling_russian_twist"},
    {14, "elevated_feet_russian_twist"},
    {15, "weighted_elevated_feet_russian_twist"},
    {16, "half_turkish_get_up"},
    {17, "kettlebell_windmill"},
    {18, "kneeling_ab_wheel"},
    {19, "weighted_kneeling_ab_wheel"},
    {20, "modified_front_lever"},
    {21, "open_knee_tucks"},
    {22, "weighted_open_knee_tucks"},
    {23, "side_abs_leg_lift"},
    {24, "weighted_side_abs_leg_lift"},
    {25, "swiss_ball_jackknife"},
    {26, "weighted_swiss_ball_jackknife"},
    {27, "swiss_ball_pike"},
    {28, "weighted_swiss_ball_pike"},
    {29, "swiss_ball_rollout"},
    {30, "weighted_swiss_ball_rollout"},
    {31, "triangle_hip_press"},
    {32, "weighted_triangle_hip_press"},
    {33, "trx_suspended_jackknife"},
    {34, "weighted_trx_suspended_jackknife"},
    {35, "u_boat"},
    {36, "weighted_u_boat"},
    {37, "windmill_switches"},
    {38, "weighted_windmill_switches"},
    {39, "alternating_slide_out"},
    {40, "weighted_alternating_slide_out"},
    {41, "ghd_back_extensions"},
    {42, "weighted_ghd_back_extensions"},
    {43, "overhead_walk"},
    {44, "inchworm"},
    {45, "weighted_modified_front_lever"},
    {46, "russian_twist"},
    {47, "abdominal_leg_rotations", %{comment: "Deprecated do not use"}},
    {48, "arm_and_leg_extension_on_knees"},
    {49, "bicycle"},
    {50, "bicep_curl_with_leg_extension"},
    {51, "cat_cow"},
    {52, "corkscrew"},
    {53, "criss_cross"},
    {54, "criss_cross_with_ball", %{comment: "Deprecated do not use"}},
    {55, "double_leg_stretch"},
    {56, "knee_folds"},
    {57, "lower_lift"},
    {58, "neck_pull"},
    {59, "pelvic_clocks"},
    {60, "roll_over"},
    {61, "roll_up"},
    {62, "rolling"},
    {63, "rowing_1"},
    {64, "rowing_2"},
    {65, "scissors"},
    {66, "single_leg_circles"},
    {67, "single_leg_stretch"},
    {68, "snake_twist_1_and_2", %{comment: "Deprecated do not use"}},
    {69, "swan"},
    {70, "swimming"},
    {71, "teaser"},
    {72, "the_hundred"}
  ])

  type(:connectivity_capabilities, :uint32z, [
    {1, "bluetooth"},
    {2, "bluetooth_le"},
    {4, "ant"},
    {8, "activity_upload"},
    {16, "course_download"},
    {32, "workout_download"},
    {64, "live_track"},
    {128, "weather_conditions"},
    {256, "weather_alerts"},
    {512, "gps_ephemeris_download"},
    {1024, "explicit_archive"},
    {2048, "setup_incomplete"},
    {4096, "continue_sync_after_software_update"},
    {8192, "connect_iq_app_download"},
    {16384, "golf_course_download"},
    {32768, "device_initiates_sync", %{comment: "Indicates device is in control of initiating all syncs"}},
    {65536, "connect_iq_watch_app_download"},
    {131_072, "connect_iq_widget_download"},
    {262_144, "connect_iq_watch_face_download"},
    {524_288, "connect_iq_data_field_download"},
    {1_048_576, "connect_iq_app_managment", %{comment: "Device supports delete and reorder of apps via GCM"}},
    {2_097_152, "swing_sensor"},
    {4_194_304, "swing_sensor_remote"},
    {8_388_608, "incident_detection", %{comment: "Device supports incident detection"}},
    {16_777_216, "audio_prompts"},
    {33_554_432, "wifi_verification", %{comment: "Device supports reporting wifi verification via GCM"}},
    {67_108_864, "true_up", %{comment: "Device supports True Up"}},
    {134_217_728, "find_my_watch", %{comment: "Device supports Find My Watch"}},
    {268_435_456, "remote_manual_sync"},
    {536_870_912, "live_track_auto_start", %{comment: "Device supports LiveTrack auto start"}},
    {1_073_741_824, "live_track_messaging", %{comment: "Device supports LiveTrack Messaging"}},
    {2_147_483_648, "instant_input", %{comment: "Device supports instant input feature"}}
  ])

  type(:file_flags, :uint8z, [{2, "read"}, {4, "write"}, {8, "erase"}])

  type(:exd_data_units, :enum, [
    {0, "no_units"},
    {1, "laps"},
    {2, "miles_per_hour"},
    {3, "kilometers_per_hour"},
    {4, "feet_per_hour"},
    {5, "meters_per_hour"},
    {6, "degrees_celsius"},
    {7, "degrees_farenheit"},
    {8, "zone"},
    {9, "gear"},
    {10, "rpm"},
    {11, "bpm"},
    {12, "degrees"},
    {13, "millimeters"},
    {14, "meters"},
    {15, "kilometers"},
    {16, "feet"},
    {17, "yards"},
    {18, "kilofeet"},
    {19, "miles"},
    {20, "time"},
    {21, "enum_turn_type"},
    {22, "percent"},
    {23, "watts"},
    {24, "watts_per_kilogram"},
    {25, "enum_battery_status"},
    {26, "enum_bike_light_beam_angle_mode"},
    {27, "enum_bike_light_battery_status"},
    {28, "enum_bike_light_network_config_type"},
    {29, "lights"},
    {30, "seconds"},
    {31, "minutes"},
    {32, "hours"},
    {33, "calories"},
    {34, "kilojoules"},
    {35, "milliseconds"},
    {36, "second_per_mile"},
    {37, "second_per_kilometer"},
    {38, "centimeter"},
    {39, "enum_course_point"},
    {40, "bradians"},
    {41, "enum_sport"},
    {42, "inches_hg"},
    {43, "mm_hg"},
    {44, "mbars"},
    {45, "hecto_pascals"},
    {46, "feet_per_min"},
    {47, "meters_per_min"},
    {48, "meters_per_sec"},
    {49, "eight_cardinal"}
  ])

  type(:plyo_exercise_name, :uint16, [
    {0, "alternating_jump_lunge"},
    {1, "weighted_alternating_jump_lunge"},
    {2, "barbell_jump_squat"},
    {3, "body_weight_jump_squat"},
    {4, "weighted_jump_squat"},
    {5, "cross_knee_strike"},
    {6, "weighted_cross_knee_strike"},
    {7, "depth_jump"},
    {8, "weighted_depth_jump"},
    {9, "dumbbell_jump_squat"},
    {10, "dumbbell_split_jump"},
    {11, "front_knee_strike"},
    {12, "weighted_front_knee_strike"},
    {13, "high_box_jump"},
    {14, "weighted_high_box_jump"},
    {15, "isometric_explosive_body_weight_jump_squat"},
    {16, "weighted_isometric_explosive_jump_squat"},
    {17, "lateral_leap_and_hop"},
    {18, "weighted_lateral_leap_and_hop"},
    {19, "lateral_plyo_squats"},
    {20, "weighted_lateral_plyo_squats"},
    {21, "lateral_slide"},
    {22, "weighted_lateral_slide"},
    {23, "medicine_ball_overhead_throws"},
    {24, "medicine_ball_side_throw"},
    {25, "medicine_ball_slam"},
    {26, "side_to_side_medicine_ball_throws"},
    {27, "side_to_side_shuffle_jump"},
    {28, "weighted_side_to_side_shuffle_jump"},
    {29, "squat_jump_onto_box"},
    {30, "weighted_squat_jump_onto_box"},
    {31, "squat_jumps_in_and_out"},
    {32, "weighted_squat_jumps_in_and_out"}
  ])

  type(:manufacturer, :uint16, [
    {1, "garmin"},
    {2, "garmin_fr405_antfs", %{comment: "Do not use. Used by FR405 for ANTFS man id."}},
    {3, "zephyr"},
    {4, "dayton"},
    {5, "idt"},
    {6, "srm"},
    {7, "quarq"},
    {8, "ibike"},
    {9, "saris"},
    {10, "spark_hk"},
    {11, "tanita"},
    {12, "echowell"},
    {13, "dynastream_oem"},
    {14, "nautilus"},
    {15, "dynastream"},
    {16, "timex"},
    {17, "metrigear"},
    {18, "xelic"},
    {19, "beurer"},
    {20, "cardiosport"},
    {21, "a_and_d"},
    {22, "hmm"},
    {23, "suunto"},
    {24, "thita_elektronik"},
    {25, "gpulse"},
    {26, "clean_mobile"},
    {27, "pedal_brain"},
    {28, "peaksware"},
    {29, "saxonar"},
    {30, "lemond_fitness"},
    {31, "dexcom"},
    {32, "wahoo_fitness"},
    {33, "octane_fitness"},
    {34, "archinoetics"},
    {35, "the_hurt_box"},
    {36, "citizen_systems"},
    {37, "magellan"},
    {38, "osynce"},
    {39, "holux"},
    {40, "concept2"},
    {41, "shimano"},
    {42, "one_giant_leap"},
    {43, "ace_sensor"},
    {44, "brim_brothers"},
    {45, "xplova"},
    {46, "perception_digital"},
    {47, "bf1systems"},
    {48, "pioneer"},
    {49, "spantec"},
    {50, "metalogics"},
    {51, "4iiiis"},
    {52, "seiko_epson"},
    {53, "seiko_epson_oem"},
    {54, "ifor_powell"},
    {55, "maxwell_guider"},
    {56, "star_trac"},
    {57, "breakaway"},
    {58, "alatech_technology_ltd"},
    {59, "mio_technology_europe"},
    {60, "rotor"},
    {61, "geonaute"},
    {62, "id_bike"},
    {63, "specialized"},
    {64, "wtek"},
    {65, "physical_enterprises"},
    {66, "north_pole_engineering"},
    {67, "bkool"},
    {68, "cateye"},
    {69, "stages_cycling"},
    {70, "sigmasport"},
    {71, "tomtom"},
    {72, "peripedal"},
    {73, "wattbike"},
    {76, "moxy"},
    {77, "ciclosport"},
    {78, "powerbahn"},
    {79, "acorn_projects_aps"},
    {80, "lifebeam"},
    {81, "bontrager"},
    {82, "wellgo"},
    {83, "scosche"},
    {84, "magura"},
    {85, "woodway"},
    {86, "elite"},
    {87, "nielsen_kellerman"},
    {88, "dk_city"},
    {89, "tacx"},
    {90, "direction_technology"},
    {91, "magtonic"},
    {92, "1partcarbon"},
    {93, "inside_ride_technologies"},
    {94, "sound_of_motion"},
    {95, "stryd"},
    {96, "icg", %{comment: "Indoorcycling Group"}},
    {97, "MiPulse"},
    {98, "bsx_athletics"},
    {99, "look"},
    {100, "campagnolo_srl"},
    {101, "body_bike_smart"},
    {102, "praxisworks"},
    {103, "limits_technology", %{comment: "Limits Technology Ltd."}},
    {104, "topaction_technology", %{comment: "TopAction Technology Inc."}},
    {105, "cosinuss"},
    {106, "fitcare"},
    {107, "magene"},
    {108, "giant_manufacturing_co"},
    {109, "tigrasport", %{comment: "Tigrasport"}},
    {110, "salutron"},
    {111, "technogym"},
    {112, "bryton_sensors"},
    {113, "latitude_limited"},
    {114, "soaring_technology"},
    {115, "igpsport"},
    {116, "thinkrider"},
    {117, "gopher_sport"},
    {118, "waterrower"},
    {119, "orangetheory"},
    {120, "inpeak"},
    {121, "kinetic"},
    {122, "johnson_health_tech"},
    {123, "polar_electro"},
    {124, "seesense"},
    {125, "nci_technology"},
    {126, "iqsquare"},
    {127, "leomo"},
    {128, "ifit_com"},
    {129, "coros_byte"},
    {130, "versa_design"},
    {131, "chileaf"},
    {132, "cycplus"},
    {133, "gravaa_byte"},
    {134, "sigeyi"},
    {135, "coospo"},
    {136, "geoid"},
    {137, "bosch"},
    {138, "kyto"},
    {139, "kinetic_sports"},
    {140, "decathlon_byte"},
    {141, "tq_systems"},
    {142, "tag_heuer"},
    {143, "keiser_fitness"},
    {144, "zwift_byte"},
    {145, "porsche_ep"},
    {146, "blackbird"},
    {147, "meilan_byte"},
    {148, "ezon"},
    {149, "laisi"},
    {150, "myzone"},
    {255, "development"},
    {257, "healthandlife"},
    {258, "lezyne"},
    {259, "scribe_labs"},
    {260, "zwift"},
    {261, "watteam"},
    {262, "recon"},
    {263, "favero_electronics"},
    {264, "dynovelo"},
    {265, "strava"},
    {266, "precor", %{comment: "Amer Sports"}},
    {267, "bryton"},
    {268, "sram"},
    {269, "navman", %{comment: "MiTAC Global Corporation (Mio Technology)"}},
    {270, "cobi", %{comment: "COBI GmbH"}},
    {271, "spivi"},
    {272, "mio_magellan"},
    {273, "evesports"},
    {274, "sensitivus_gauge"},
    {275, "podoon"},
    {276, "life_time_fitness"},
    {277, "falco_e_motors", %{comment: "Falco eMotors Inc."}},
    {278, "minoura"},
    {279, "cycliq"},
    {280, "luxottica"},
    {281, "trainer_road"},
    {282, "the_sufferfest"},
    {283, "fullspeedahead"},
    {284, "virtualtraining"},
    {285, "feedbacksports"},
    {286, "omata"},
    {287, "vdo"},
    {288, "magneticdays"},
    {289, "hammerhead"},
    {290, "kinetic_by_kurt"},
    {291, "shapelog"},
    {292, "dabuziduo"},
    {293, "jetblack"},
    {294, "coros"},
    {295, "virtugo"},
    {296, "velosense"},
    {297, "cycligentinc"},
    {298, "trailforks"},
    {299, "mahle_ebikemotion"},
    {300, "nurvv"},
    {301, "microprogram"},
    {302, "zone5cloud"},
    {303, "greenteg"},
    {304, "yamaha_motors"},
    {305, "whoop"},
    {306, "gravaa"},
    {307, "onelap"},
    {308, "monark_exercise"},
    {309, "form"},
    {310, "decathlon"},
    {311, "syncros"},
    {312, "heatup"},
    {313, "cannondale"},
    {314, "true_fitness"},
    {315, "RGT_cycling"},
    {316, "vasa"},
    {317, "race_republic"},
    {318, "fazua"},
    {319, "oreka_training"},
    {320, "lsec", %{comment: "Lishun Electric & Communication"}},
    {321, "lululemon_studio"},
    {322, "shanyue"},
    {323, "spinning_mda"},
    {324, "hilldating"},
    {325, "aero_sensor"},
    {326, "nike"},
    {327, "magicshine"},
    {5759, "actigraphcorp"}
  ])

  type(:bench_press_exercise_name, :uint16, [
    {0, "alternating_dumbbell_chest_press_on_swiss_ball"},
    {1, "barbell_bench_press"},
    {2, "barbell_board_bench_press"},
    {3, "barbell_floor_press"},
    {4, "close_grip_barbell_bench_press"},
    {5, "decline_dumbbell_bench_press"},
    {6, "dumbbell_bench_press"},
    {7, "dumbbell_floor_press"},
    {8, "incline_barbell_bench_press"},
    {9, "incline_dumbbell_bench_press"},
    {10, "incline_smith_machine_bench_press"},
    {11, "isometric_barbell_bench_press"},
    {12, "kettlebell_chest_press"},
    {13, "neutral_grip_dumbbell_bench_press"},
    {14, "neutral_grip_dumbbell_incline_bench_press"},
    {15, "one_arm_floor_press"},
    {16, "weighted_one_arm_floor_press"},
    {17, "partial_lockout"},
    {18, "reverse_grip_barbell_bench_press"},
    {19, "reverse_grip_incline_bench_press"},
    {20, "single_arm_cable_chest_press"},
    {21, "single_arm_dumbbell_bench_press"},
    {22, "smith_machine_bench_press"},
    {23, "swiss_ball_dumbbell_chest_press"},
    {24, "triple_stop_barbell_bench_press"},
    {25, "wide_grip_barbell_bench_press"},
    {26, "alternating_dumbbell_chest_press"}
  ])

  type(:battery_status, :uint8, [
    {1, "new"},
    {2, "good"},
    {3, "ok"},
    {4, "low"},
    {5, "critical"},
    {6, "charging"},
    {7, "unknown"}
  ])

  type(:max_met_heart_rate_source, :enum, [
    {0, "whr", %{comment: "Wrist Heart Rate Monitor"}},
    {1, "hrm", %{comment: "Chest Strap Heart Rate Monitor"}}
  ])

  type(:weather_severe_type, :enum, [
    {0, "unspecified"},
    {1, "tornado"},
    {2, "tsunami"},
    {3, "hurricane"},
    {4, "extreme_wind"},
    {5, "typhoon"},
    {6, "inland_hurricane"},
    {7, "hurricane_force_wind"},
    {8, "waterspout"},
    {9, "severe_thunderstorm"},
    {10, "wreckhouse_winds"},
    {11, "les_suetes_wind"},
    {12, "avalanche"},
    {13, "flash_flood"},
    {14, "tropical_storm"},
    {15, "inland_tropical_storm"},
    {16, "blizzard"},
    {17, "ice_storm"},
    {18, "freezing_rain"},
    {19, "debris_flow"},
    {20, "flash_freeze"},
    {21, "dust_storm"},
    {22, "high_wind"},
    {23, "winter_storm"},
    {24, "heavy_freezing_spray"},
    {25, "extreme_cold"},
    {26, "wind_chill"},
    {27, "cold_wave"},
    {28, "heavy_snow_alert"},
    {29, "lake_effect_blowing_snow"},
    {30, "snow_squall"},
    {31, "lake_effect_snow"},
    {32, "winter_weather"},
    {33, "sleet"},
    {34, "snowfall"},
    {35, "snow_and_blowing_snow"},
    {36, "blowing_snow"},
    {37, "snow_alert"},
    {38, "arctic_outflow"},
    {39, "freezing_drizzle"},
    {40, "storm"},
    {41, "storm_surge"},
    {42, "rainfall"},
    {43, "areal_flood"},
    {44, "coastal_flood"},
    {45, "lakeshore_flood"},
    {46, "excessive_heat"},
    {47, "heat"},
    {48, "weather"},
    {49, "high_heat_and_humidity"},
    {50, "humidex_and_health"},
    {51, "humidex"},
    {52, "gale"},
    {53, "freezing_spray"},
    {54, "special_marine"},
    {55, "squall"},
    {56, "strong_wind"},
    {57, "lake_wind"},
    {58, "marine_weather"},
    {59, "wind"},
    {60, "small_craft_hazardous_seas"},
    {61, "hazardous_seas"},
    {62, "small_craft"},
    {63, "small_craft_winds"},
    {64, "small_craft_rough_bar"},
    {65, "high_water_level"},
    {66, "ashfall"},
    {67, "freezing_fog"},
    {68, "dense_fog"},
    {69, "dense_smoke"},
    {70, "blowing_dust"},
    {71, "hard_freeze"},
    {72, "freeze"},
    {73, "frost"},
    {74, "fire_weather"},
    {75, "flood"},
    {76, "rip_tide"},
    {77, "high_surf"},
    {78, "smog"},
    {79, "air_quality"},
    {80, "brisk_wind"},
    {81, "air_stagnation"},
    {82, "low_water"},
    {83, "hydrological"},
    {84, "special_weather"}
  ])

  type(:session_trigger, :enum, [
    {0, "activity_end"},
    {1, "manual", %{comment: "User changed sport."}},
    {2, "auto_multi_sport",
     %{comment: "Auto multi-sport feature is enabled and user pressed lap button to advance session."}},
    {3, "fitness_equipment", %{comment: "Auto sport change caused by user linking to fitness equipment."}}
  ])

  type(:ccr_setpoint_switch_mode, :enum, [
    {0, "manual", %{comment: "User switches setpoints manually"}},
    {1, "automatic", %{comment: "Switch automatically based on depth"}}
  ])

  type(:sport_event, :enum, [
    {0, "uncategorized"},
    {1, "geocaching"},
    {2, "fitness"},
    {3, "recreation"},
    {4, "race"},
    {5, "special_event"},
    {6, "training"},
    {7, "transportation"},
    {8, "touring"}
  ])

  type(:lateral_raise_exercise_name, :uint16, [
    {0, "45_degree_cable_external_rotation"},
    {1, "alternating_lateral_raise_with_static_hold"},
    {2, "bar_muscle_up"},
    {3, "bent_over_lateral_raise"},
    {4, "cable_diagonal_raise"},
    {5, "cable_front_raise"},
    {6, "calorie_row"},
    {7, "combo_shoulder_raise"},
    {8, "dumbbell_diagonal_raise"},
    {9, "dumbbell_v_raise"},
    {10, "front_raise"},
    {11, "leaning_dumbbell_lateral_raise"},
    {12, "lying_dumbbell_raise"},
    {13, "muscle_up"},
    {14, "one_arm_cable_lateral_raise"},
    {15, "overhand_grip_rear_lateral_raise"},
    {16, "plate_raises"},
    {17, "ring_dip"},
    {18, "weighted_ring_dip"},
    {19, "ring_muscle_up"},
    {20, "weighted_ring_muscle_up"},
    {21, "rope_climb"},
    {22, "weighted_rope_climb"},
    {23, "scaption"},
    {24, "seated_lateral_raise"},
    {25, "seated_rear_lateral_raise"},
    {26, "side_lying_lateral_raise"},
    {27, "standing_lift"},
    {28, "suspended_row"},
    {29, "underhand_grip_rear_lateral_raise"},
    {30, "wall_slide"},
    {31, "weighted_wall_slide"},
    {32, "arm_circles"},
    {33, "shaving_the_head"}
  ])

  type(:power_phase_type, :enum, [
    {0, "power_phase_start_angle"},
    {1, "power_phase_end_angle"},
    {2, "power_phase_arc_length"},
    {3, "power_phase_center"}
  ])

  type(:flye_exercise_name, :uint16, [
    {0, "cable_crossover"},
    {1, "decline_dumbbell_flye"},
    {2, "dumbbell_flye"},
    {3, "incline_dumbbell_flye"},
    {4, "kettlebell_flye"},
    {5, "kneeling_rear_flye"},
    {6, "single_arm_standing_cable_reverse_flye"},
    {7, "swiss_ball_dumbbell_flye"},
    {8, "arm_rotations"},
    {9, "hug_a_tree"}
  ])

  type(:rider_position_type, :enum, [
    {0, "seated"},
    {1, "standing"},
    {2, "transition_to_seated"},
    {3, "transition_to_standing"}
  ])

  type(:fit_base_unit, :uint16, [{0, "other"}, {1, "kilogram"}, {2, "pound"}])
  type(:display_power, :enum, [{0, "watts"}, {1, "percent_ftp"}])

  type(:swim_stroke, :enum, [
    {0, "freestyle"},
    {1, "backstroke"},
    {2, "breaststroke"},
    {3, "butterfly"},
    {4, "drill"},
    {5, "mixed"},
    {6, "im",
     %{
       comment:
         "IM is a mixed interval containing the same number of lengths for each of: Butterfly, Backstroke, Breaststroke, Freestyle, swam in that order."
     }}
  ])

  type(:calf_raise_exercise_name, :uint16, [
    {0, "3_way_calf_raise"},
    {1, "3_way_weighted_calf_raise"},
    {2, "3_way_single_leg_calf_raise"},
    {3, "3_way_weighted_single_leg_calf_raise"},
    {4, "donkey_calf_raise"},
    {5, "weighted_donkey_calf_raise"},
    {6, "seated_calf_raise"},
    {7, "weighted_seated_calf_raise"},
    {8, "seated_dumbbell_toe_raise"},
    {9, "single_leg_bent_knee_calf_raise"},
    {10, "weighted_single_leg_bent_knee_calf_raise"},
    {11, "single_leg_decline_push_up"},
    {12, "single_leg_donkey_calf_raise"},
    {13, "weighted_single_leg_donkey_calf_raise"},
    {14, "single_leg_hip_raise_with_knee_hold"},
    {15, "single_leg_standing_calf_raise"},
    {16, "single_leg_standing_dumbbell_calf_raise"},
    {17, "standing_barbell_calf_raise"},
    {18, "standing_calf_raise"},
    {19, "weighted_standing_calf_raise"},
    {20, "standing_dumbbell_calf_raise"}
  ])

  type(:tap_sensitivity, :enum, [{0, "high"}, {1, "medium"}, {2, "low"}])

  type(:sport_bits_4, :uint8z, [
    {1, "sailing"},
    {2, "ice_skating"},
    {4, "sky_diving"},
    {8, "snowshoeing"},
    {16, "snowmobiling"},
    {32, "stand_up_paddleboarding"},
    {64, "surfing"},
    {128, "wakeboarding"}
  ])

  type(:bool, :enum, [{0, false}, {1, true}])
  type(:switch, :enum, [{0, "off"}, {1, "on"}, {2, "auto"}])
  type(:activity, :enum, [{0, "manual"}, {1, "auto_multi_sport"}])

  type(:exd_descriptors, :enum, [
    {0, "bike_light_battery_status"},
    {1, "beam_angle_status"},
    {2, "batery_level"},
    {3, "light_network_mode"},
    {4, "number_lights_connected"},
    {5, "cadence"},
    {6, "distance"},
    {7, "estimated_time_of_arrival"},
    {8, "heading"},
    {9, "time"},
    {10, "battery_level"},
    {11, "trainer_resistance"},
    {12, "trainer_target_power"},
    {13, "time_seated"},
    {14, "time_standing"},
    {15, "elevation"},
    {16, "grade"},
    {17, "ascent"},
    {18, "descent"},
    {19, "vertical_speed"},
    {20, "di2_battery_level"},
    {21, "front_gear"},
    {22, "rear_gear"},
    {23, "gear_ratio"},
    {24, "heart_rate"},
    {25, "heart_rate_zone"},
    {26, "time_in_heart_rate_zone"},
    {27, "heart_rate_reserve"},
    {28, "calories"},
    {29, "gps_accuracy"},
    {30, "gps_signal_strength"},
    {31, "temperature"},
    {32, "time_of_day"},
    {33, "balance"},
    {34, "pedal_smoothness"},
    {35, "power"},
    {36, "functional_threshold_power"},
    {37, "intensity_factor"},
    {38, "work"},
    {39, "power_ratio"},
    {40, "normalized_power"},
    {41, "training_stress_Score"},
    {42, "time_on_zone"},
    {43, "speed"},
    {44, "laps"},
    {45, "reps"},
    {46, "workout_step"},
    {47, "course_distance"},
    {48, "navigation_distance"},
    {49, "course_estimated_time_of_arrival"},
    {50, "navigation_estimated_time_of_arrival"},
    {51, "course_time"},
    {52, "navigation_time"},
    {53, "course_heading"},
    {54, "navigation_heading"},
    {55, "power_zone"},
    {56, "torque_effectiveness"},
    {57, "timer_time"},
    {58, "power_weight_ratio"},
    {59, "left_platform_center_offset"},
    {60, "right_platform_center_offset"},
    {61, "left_power_phase_start_angle"},
    {62, "right_power_phase_start_angle"},
    {63, "left_power_phase_finish_angle"},
    {64, "right_power_phase_finish_angle"},
    {65, "gears", %{comment: "Combined gear information"}},
    {66, "pace"},
    {67, "training_effect"},
    {68, "vertical_oscillation"},
    {69, "vertical_ratio"},
    {70, "ground_contact_time"},
    {71, "left_ground_contact_time_balance"},
    {72, "right_ground_contact_time_balance"},
    {73, "stride_length"},
    {74, "running_cadence"},
    {75, "performance_condition"},
    {76, "course_type"},
    {77, "time_in_power_zone"},
    {78, "navigation_turn"},
    {79, "course_location"},
    {80, "navigation_location"},
    {81, "compass"},
    {82, "gear_combo"},
    {83, "muscle_oxygen"},
    {84, "icon"},
    {85, "compass_heading"},
    {86, "gps_heading"},
    {87, "gps_elevation"},
    {88, "anaerobic_training_effect"},
    {89, "course"},
    {90, "off_course"},
    {91, "glide_ratio"},
    {92, "vertical_distance"},
    {93, "vmg"},
    {94, "ambient_pressure"},
    {95, "pressure"},
    {96, "vam"}
  ])

  type(:date_time, :uint32, [
    {268_435_456, "min",
     %{comment: "if date_time is < 0x10000000 then it is system time (seconds from device power on)"}}
  ])

  type(:weather_severity, :enum, [
    {0, "unknown"},
    {1, "warning"},
    {2, "watch"},
    {3, "advisory"},
    {4, "statement"}
  ])

  type(:mesg_count, :enum, [{0, "num_per_file"}, {1, "max_per_file"}, {2, "max_per_file_type"}])

  type(:user_local_id, :uint16, [
    {0, "local_min"},
    {15, "local_max"},
    {16, "stationary_min"},
    {255, "stationary_max"},
    {256, "portable_min"},
    {65534, "portable_max"}
  ])

  type(:course_point, :enum, [
    {0, "generic"},
    {1, "summit"},
    {2, "valley"},
    {3, "water"},
    {4, "food"},
    {5, "danger"},
    {6, "left"},
    {7, "right"},
    {8, "straight"},
    {9, "first_aid"},
    {10, "fourth_category"},
    {11, "third_category"},
    {12, "second_category"},
    {13, "first_category"},
    {14, "hors_category"},
    {15, "sprint"},
    {16, "left_fork"},
    {17, "right_fork"},
    {18, "middle_fork"},
    {19, "slight_left"},
    {20, "sharp_left"},
    {21, "slight_right"},
    {22, "sharp_right"},
    {23, "u_turn"},
    {24, "segment_start"},
    {25, "segment_end"},
    {27, "campsite"},
    {28, "aid_station"},
    {29, "rest_area"},
    {30, "general_distance", %{comment: "Used with UpAhead"}},
    {31, "service"},
    {32, "energy_gel"},
    {33, "sports_drink"},
    {34, "mile_marker"},
    {35, "checkpoint"},
    {36, "shelter"},
    {37, "meeting_spot"},
    {38, "overlook"},
    {39, "toilet"},
    {40, "shower"},
    {41, "gear"},
    {42, "sharp_curve"},
    {43, "steep_incline"},
    {44, "tunnel"},
    {45, "bridge"},
    {46, "obstacle"},
    {47, "crossing"},
    {48, "store"},
    {49, "transition"},
    {50, "navaid"},
    {51, "transport"},
    {52, "alert"},
    {53, "info"}
  ])

  type(:sport, :enum, [
    {0, "generic"},
    {1, "running"},
    {2, "cycling"},
    {3, "transition", %{comment: "Mulitsport transition"}},
    {4, "fitness_equipment"},
    {5, "swimming"},
    {6, "basketball"},
    {7, "soccer"},
    {8, "tennis"},
    {9, "american_football"},
    {10, "training"},
    {11, "walking"},
    {12, "cross_country_skiing"},
    {13, "alpine_skiing"},
    {14, "snowboarding"},
    {15, "rowing"},
    {16, "mountaineering"},
    {17, "hiking"},
    {18, "multisport"},
    {19, "paddling"},
    {20, "flying"},
    {21, "e_biking"},
    {22, "motorcycling"},
    {23, "boating"},
    {24, "driving"},
    {25, "golf"},
    {26, "hang_gliding"},
    {27, "horseback_riding"},
    {28, "hunting"},
    {29, "fishing"},
    {30, "inline_skating"},
    {31, "rock_climbing"},
    {32, "sailing"},
    {33, "ice_skating"},
    {34, "sky_diving"},
    {35, "snowshoeing"},
    {36, "snowmobiling"},
    {37, "stand_up_paddleboarding"},
    {38, "surfing"},
    {39, "wakeboarding"},
    {40, "water_skiing"},
    {41, "kayaking"},
    {42, "rafting"},
    {43, "windsurfing"},
    {44, "kitesurfing"},
    {45, "tactical"},
    {46, "jumpmaster"},
    {47, "boxing"},
    {48, "floor_climbing"},
    {53, "diving"},
    {62, "hiit"},
    {64, "racket"},
    {65, "wheelchair_push_walk"},
    {66, "wheelchair_push_run"},
    {67, "meditation"},
    {76, "water_tubing"},
    {77, "wakesurfing"},
    {254, "all", %{comment: "All is for goals only to include all sports."}}
  ])

  type(:language_bits_0, :uint8z, [
    {1, "english"},
    {2, "french"},
    {4, "italian"},
    {8, "german"},
    {16, "spanish"},
    {32, "croatian"},
    {64, "czech"},
    {128, "danish"}
  ])

  type(:push_up_exercise_name, :uint16, [
    {0, "chest_press_with_band"},
    {1, "alternating_staggered_push_up"},
    {2, "weighted_alternating_staggered_push_up"},
    {3, "alternating_hands_medicine_ball_push_up"},
    {4, "weighted_alternating_hands_medicine_ball_push_up"},
    {5, "bosu_ball_push_up"},
    {6, "weighted_bosu_ball_push_up"},
    {7, "clapping_push_up"},
    {8, "weighted_clapping_push_up"},
    {9, "close_grip_medicine_ball_push_up"},
    {10, "weighted_close_grip_medicine_ball_push_up"},
    {11, "close_hands_push_up"},
    {12, "weighted_close_hands_push_up"},
    {13, "decline_push_up"},
    {14, "weighted_decline_push_up"},
    {15, "diamond_push_up"},
    {16, "weighted_diamond_push_up"},
    {17, "explosive_crossover_push_up"},
    {18, "weighted_explosive_crossover_push_up"},
    {19, "explosive_push_up"},
    {20, "weighted_explosive_push_up"},
    {21, "feet_elevated_side_to_side_push_up"},
    {22, "weighted_feet_elevated_side_to_side_push_up"},
    {23, "hand_release_push_up"},
    {24, "weighted_hand_release_push_up"},
    {25, "handstand_push_up"},
    {26, "weighted_handstand_push_up"},
    {27, "incline_push_up"},
    {28, "weighted_incline_push_up"},
    {29, "isometric_explosive_push_up"},
    {30, "weighted_isometric_explosive_push_up"},
    {31, "judo_push_up"},
    {32, "weighted_judo_push_up"},
    {33, "kneeling_push_up"},
    {34, "weighted_kneeling_push_up"},
    {35, "medicine_ball_chest_pass"},
    {36, "medicine_ball_push_up"},
    {37, "weighted_medicine_ball_push_up"},
    {38, "one_arm_push_up"},
    {39, "weighted_one_arm_push_up"},
    {40, "weighted_push_up"},
    {41, "push_up_and_row"},
    {42, "weighted_push_up_and_row"},
    {43, "push_up_plus"},
    {44, "weighted_push_up_plus"},
    {45, "push_up_with_feet_on_swiss_ball"},
    {46, "weighted_push_up_with_feet_on_swiss_ball"},
    {47, "push_up_with_one_hand_on_medicine_ball"},
    {48, "weighted_push_up_with_one_hand_on_medicine_ball"},
    {49, "shoulder_push_up"},
    {50, "weighted_shoulder_push_up"},
    {51, "single_arm_medicine_ball_push_up"},
    {52, "weighted_single_arm_medicine_ball_push_up"},
    {53, "spiderman_push_up"},
    {54, "weighted_spiderman_push_up"},
    {55, "stacked_feet_push_up"},
    {56, "weighted_stacked_feet_push_up"},
    {57, "staggered_hands_push_up"},
    {58, "weighted_staggered_hands_push_up"},
    {59, "suspended_push_up"},
    {60, "weighted_suspended_push_up"},
    {61, "swiss_ball_push_up"},
    {62, "weighted_swiss_ball_push_up"},
    {63, "swiss_ball_push_up_plus"},
    {64, "weighted_swiss_ball_push_up_plus"},
    {65, "t_push_up"},
    {66, "weighted_t_push_up"},
    {67, "triple_stop_push_up"},
    {68, "weighted_triple_stop_push_up"},
    {69, "wide_hands_push_up"},
    {70, "weighted_wide_hands_push_up"},
    {71, "parallette_handstand_push_up"},
    {72, "weighted_parallette_handstand_push_up"},
    {73, "ring_handstand_push_up"},
    {74, "weighted_ring_handstand_push_up"},
    {75, "ring_push_up"},
    {76, "weighted_ring_push_up"},
    {77, "push_up"},
    {78, "pilates_pushup"}
  ])

  type(:camera_event_type, :enum, [
    {0, "video_start", %{comment: "Start of video recording"}},
    {1, "video_split", %{comment: "Mark of video file split (end of one file, beginning of the other)"}},
    {2, "video_end", %{comment: "End of video recording"}},
    {3, "photo_taken", %{comment: "Still photo taken"}},
    {4, "video_second_stream_start"},
    {5, "video_second_stream_split"},
    {6, "video_second_stream_end"},
    {7, "video_split_start", %{comment: "Mark of video file split start"}},
    {8, "video_second_stream_split_start"},
    {11, "video_pause", %{comment: "Mark when a video recording has been paused"}},
    {12, "video_second_stream_pause"},
    {13, "video_resume", %{comment: "Mark when a video recording has been resumed"}},
    {14, "video_second_stream_resume"}
  ])

  type(:sport_bits_6, :uint8z, [{1, "floor_climbing"}])

  type(:pull_up_exercise_name, :uint16, [
    {0, "banded_pull_ups"},
    {1, "30_degree_lat_pulldown"},
    {2, "band_assisted_chin_up"},
    {3, "close_grip_chin_up"},
    {4, "weighted_close_grip_chin_up"},
    {5, "close_grip_lat_pulldown"},
    {6, "crossover_chin_up"},
    {7, "weighted_crossover_chin_up"},
    {8, "ez_bar_pullover"},
    {9, "hanging_hurdle"},
    {10, "weighted_hanging_hurdle"},
    {11, "kneeling_lat_pulldown"},
    {12, "kneeling_underhand_grip_lat_pulldown"},
    {13, "lat_pulldown"},
    {14, "mixed_grip_chin_up"},
    {15, "weighted_mixed_grip_chin_up"},
    {16, "mixed_grip_pull_up"},
    {17, "weighted_mixed_grip_pull_up"},
    {18, "reverse_grip_pulldown"},
    {19, "standing_cable_pullover"},
    {20, "straight_arm_pulldown"},
    {21, "swiss_ball_ez_bar_pullover"},
    {22, "towel_pull_up"},
    {23, "weighted_towel_pull_up"},
    {24, "weighted_pull_up"},
    {25, "wide_grip_lat_pulldown"},
    {26, "wide_grip_pull_up"},
    {27, "weighted_wide_grip_pull_up"},
    {28, "burpee_pull_up"},
    {29, "weighted_burpee_pull_up"},
    {30, "jumping_pull_ups"},
    {31, "weighted_jumping_pull_ups"},
    {32, "kipping_pull_up"},
    {33, "weighted_kipping_pull_up"},
    {34, "l_pull_up"},
    {35, "weighted_l_pull_up"},
    {36, "suspended_chin_up"},
    {37, "weighted_suspended_chin_up"},
    {38, "pull_up"}
  ])

  type(:favero_product, :uint16, [{10, "assioma_uno"}, {12, "assioma_duo"}])

  type(:stroke_type, :enum, [
    {0, "no_event"},
    {1, "other", %{comment: "stroke was detected but cannot be identified"}},
    {2, "serve"},
    {3, "forehand"},
    {4, "backhand"},
    {5, "smash"}
  ])

  type(:common_fields, :enum, [{250, "part_index"}, {253, "timestamp"}, {254, "message_index"}])

  type(:fit_base_type, :uint8, [
    {0, "enum"},
    {1, "sint8"},
    {2, "uint8"},
    {7, "string"},
    {10, "uint8z"},
    {13, "byte"},
    {131, "sint16"},
    {132, "uint16"},
    {133, "sint32"},
    {134, "uint32"},
    {136, "float32"},
    {137, "float64"},
    {139, "uint16z"},
    {140, "uint32z"},
    {142, "sint64"},
    {143, "uint64"},
    {144, "uint64z"}
  ])

  type(:bp_status, :enum, [
    {0, "no_error"},
    {1, "error_incomplete_data"},
    {2, "error_no_measurement"},
    {3, "error_data_out_of_range"},
    {4, "error_irregular_heart_rate"}
  ])

  type(:curl_exercise_name, :uint16, [
    {0, "alternating_dumbbell_biceps_curl"},
    {1, "alternating_dumbbell_biceps_curl_on_swiss_ball"},
    {2, "alternating_incline_dumbbell_biceps_curl"},
    {3, "barbell_biceps_curl"},
    {4, "barbell_reverse_wrist_curl"},
    {5, "barbell_wrist_curl"},
    {6, "behind_the_back_barbell_reverse_wrist_curl"},
    {7, "behind_the_back_one_arm_cable_curl"},
    {8, "cable_biceps_curl"},
    {9, "cable_hammer_curl"},
    {10, "cheating_barbell_biceps_curl"},
    {11, "close_grip_ez_bar_biceps_curl"},
    {12, "cross_body_dumbbell_hammer_curl"},
    {13, "dead_hang_biceps_curl"},
    {14, "decline_hammer_curl"},
    {15, "dumbbell_biceps_curl_with_static_hold"},
    {16, "dumbbell_hammer_curl"},
    {17, "dumbbell_reverse_wrist_curl"},
    {18, "dumbbell_wrist_curl"},
    {19, "ez_bar_preacher_curl"},
    {20, "forward_bend_biceps_curl"},
    {21, "hammer_curl_to_press"},
    {22, "incline_dumbbell_biceps_curl"},
    {23, "incline_offset_thumb_dumbbell_curl"},
    {24, "kettlebell_biceps_curl"},
    {25, "lying_concentration_cable_curl"},
    {26, "one_arm_preacher_curl"},
    {27, "plate_pinch_curl"},
    {28, "preacher_curl_with_cable"},
    {29, "reverse_ez_bar_curl"},
    {30, "reverse_grip_wrist_curl"},
    {31, "reverse_grip_barbell_biceps_curl"},
    {32, "seated_alternating_dumbbell_biceps_curl"},
    {33, "seated_dumbbell_biceps_curl"},
    {34, "seated_reverse_dumbbell_curl"},
    {35, "split_stance_offset_pinky_dumbbell_curl"},
    {36, "standing_alternating_dumbbell_curls"},
    {37, "standing_dumbbell_biceps_curl"},
    {38, "standing_ez_bar_biceps_curl"},
    {39, "static_curl"},
    {40, "swiss_ball_dumbbell_overhead_triceps_extension"},
    {41, "swiss_ball_ez_bar_preacher_curl"},
    {42, "twisting_standing_dumbbell_biceps_curl"},
    {43, "wide_grip_ez_bar_biceps_curl"}
  ])

  type(:weather_report, :enum, [{0, "current"}, {1, "hourly_forecast"}, {2, "daily_forecast"}])

  type(:weather_status, :enum, [
    {0, "clear"},
    {1, "partly_cloudy"},
    {2, "mostly_cloudy"},
    {3, "rain"},
    {4, "snow"},
    {5, "windy"},
    {6, "thunderstorms"},
    {7, "wintry_mix"},
    {8, "fog"},
    {11, "hazy"},
    {12, "hail"},
    {13, "scattered_showers"},
    {14, "scattered_thunderstorms"},
    {15, "unknown_precipitation"},
    {16, "light_rain"},
    {17, "heavy_rain"},
    {18, "light_snow"},
    {19, "heavy_snow"},
    {20, "light_rain_snow"},
    {21, "heavy_rain_snow"},
    {22, "cloudy"}
  ])

  type(:length_type, :enum, [
    {0, "idle", %{comment: "Rest period. Length with no strokes"}},
    {1, "active", %{comment: "Length with strokes."}}
  ])

  type(:segment_lap_status, :enum, [{0, "end"}, {1, "fail"}])
  type(:bike_light_beam_angle_mode, :uint8, [{0, "manual"}, {1, "auto"}])

  type(:source_type, :enum, [
    {0, "ant", %{comment: "External device connected with ANT"}},
    {1, "antplus", %{comment: "External device connected with ANT+"}},
    {2, "bluetooth", %{comment: "External device connected with BT"}},
    {3, "bluetooth_low_energy", %{comment: "External device connected with BLE"}},
    {4, "wifi", %{comment: "External device connected with Wifi"}},
    {5, "local", %{comment: "Onboard device"}}
  ])

  type(:attitude_stage, :enum, [{0, "failed"}, {1, "aligning"}, {2, "degraded"}, {3, "valid"}])

  type(:segment_delete_status, :enum, [{0, "do_not_delete"}, {1, "delete_one"}, {2, "delete_all"}])

  type(:day_of_week, :enum, [
    {0, "sunday"},
    {1, "monday"},
    {2, "tuesday"},
    {3, "wednesday"},
    {4, "thursday"},
    {5, "friday"},
    {6, "saturday"}
  ])

  type(:digital_watchface_layout, :enum, [{0, "traditional"}, {1, "modern"}, {2, "bold"}])

  type(:sensor_type, :enum, [
    {0, "accelerometer"},
    {1, "gyroscope"},
    {2, "compass", %{comment: "Magnetometer"}},
    {3, "barometer"}
  ])

  type(:triceps_extension_exercise_name, :uint16, [
    {0, "bench_dip"},
    {1, "weighted_bench_dip"},
    {2, "body_weight_dip"},
    {3, "cable_kickback"},
    {4, "cable_lying_triceps_extension"},
    {5, "cable_overhead_triceps_extension"},
    {6, "dumbbell_kickback"},
    {7, "dumbbell_lying_triceps_extension"},
    {8, "ez_bar_overhead_triceps_extension"},
    {9, "incline_dip"},
    {10, "weighted_incline_dip"},
    {11, "incline_ez_bar_lying_triceps_extension"},
    {12, "lying_dumbbell_pullover_to_extension"},
    {13, "lying_ez_bar_triceps_extension"},
    {14, "lying_triceps_extension_to_close_grip_bench_press"},
    {15, "overhead_dumbbell_triceps_extension"},
    {16, "reclining_triceps_press"},
    {17, "reverse_grip_pressdown"},
    {18, "reverse_grip_triceps_pressdown"},
    {19, "rope_pressdown"},
    {20, "seated_barbell_overhead_triceps_extension"},
    {21, "seated_dumbbell_overhead_triceps_extension"},
    {22, "seated_ez_bar_overhead_triceps_extension"},
    {23, "seated_single_arm_overhead_dumbbell_extension"},
    {24, "single_arm_dumbbell_overhead_triceps_extension"},
    {25, "single_dumbbell_seated_overhead_triceps_extension"},
    {26, "single_leg_bench_dip_and_kick"},
    {27, "weighted_single_leg_bench_dip_and_kick"},
    {28, "single_leg_dip"},
    {29, "weighted_single_leg_dip"},
    {30, "static_lying_triceps_extension"},
    {31, "suspended_dip"},
    {32, "weighted_suspended_dip"},
    {33, "swiss_ball_dumbbell_lying_triceps_extension"},
    {34, "swiss_ball_ez_bar_lying_triceps_extension"},
    {35, "swiss_ball_ez_bar_overhead_triceps_extension"},
    {36, "tabletop_dip"},
    {37, "weighted_tabletop_dip"},
    {38, "triceps_extension_on_floor"},
    {39, "triceps_pressdown"},
    {40, "weighted_dip"}
  ])

  type(:segment_selection_type, :enum, [{0, "starred"}, {1, "suggested"}])

  type(:hrv_status, :enum, [
    {0, "none"},
    {1, "poor"},
    {2, "low"},
    {3, "unbalanced"},
    {4, "balanced"}
  ])

  type(:max_met_speed_source, :enum, [{0, "onboard_gps"}, {1, "connected_gps"}, {2, "cadence"}])
  type(:version, :uint16, [{0, "patch"}, {21, "major"}, {126, "minor"}])

  type(:time_zone, :enum, [
    {0, "almaty"},
    {1, "bangkok"},
    {2, "bombay"},
    {3, "brasilia"},
    {4, "cairo"},
    {5, "cape_verde_is"},
    {6, "darwin"},
    {7, "eniwetok"},
    {8, "fiji"},
    {9, "hong_kong"},
    {10, "islamabad"},
    {11, "kabul"},
    {12, "magadan"},
    {13, "mid_atlantic"},
    {14, "moscow"},
    {15, "muscat"},
    {16, "newfoundland"},
    {17, "samoa"},
    {18, "sydney"},
    {19, "tehran"},
    {20, "tokyo"},
    {21, "us_alaska"},
    {22, "us_atlantic"},
    {23, "us_central"},
    {24, "us_eastern"},
    {25, "us_hawaii"},
    {26, "us_mountain"},
    {27, "us_pacific"},
    {28, "other"},
    {29, "auckland"},
    {30, "kathmandu"},
    {31, "europe_western_wet"},
    {32, "europe_central_cet"},
    {33, "europe_eastern_eet"},
    {34, "jakarta"},
    {35, "perth"},
    {36, "adelaide"},
    {37, "brisbane"},
    {38, "tasmania"},
    {39, "iceland"},
    {40, "amsterdam"},
    {41, "athens"},
    {42, "barcelona"},
    {43, "berlin"},
    {44, "brussels"},
    {45, "budapest"},
    {46, "copenhagen"},
    {47, "dublin"},
    {48, "helsinki"},
    {49, "lisbon"},
    {50, "london"},
    {51, "madrid"},
    {52, "munich"},
    {53, "oslo"},
    {54, "paris"},
    {55, "prague"},
    {56, "reykjavik"},
    {57, "rome"},
    {58, "stockholm"},
    {59, "vienna"},
    {60, "warsaw"},
    {61, "zurich"},
    {62, "quebec"},
    {63, "ontario"},
    {64, "manitoba"},
    {65, "saskatchewan"},
    {66, "alberta"},
    {67, "british_columbia"},
    {68, "boise"},
    {69, "boston"},
    {70, "chicago"},
    {71, "dallas"},
    {72, "denver"},
    {73, "kansas_city"},
    {74, "las_vegas"},
    {75, "los_angeles"},
    {76, "miami"},
    {77, "minneapolis"},
    {78, "new_york"},
    {79, "new_orleans"},
    {80, "phoenix"},
    {81, "santa_fe"},
    {82, "seattle"},
    {83, "washington_dc"},
    {84, "us_arizona"},
    {85, "chita"},
    {86, "ekaterinburg"},
    {87, "irkutsk"},
    {88, "kaliningrad"},
    {89, "krasnoyarsk"},
    {90, "novosibirsk"},
    {91, "petropavlovsk_kamchatskiy"},
    {92, "samara"},
    {93, "vladivostok"},
    {94, "mexico_central"},
    {95, "mexico_mountain"},
    {96, "mexico_pacific"},
    {97, "cape_town"},
    {98, "winkhoek"},
    {99, "lagos"},
    {100, "riyahd"},
    {101, "venezuela"},
    {102, "australia_lh"},
    {103, "santiago"},
    {253, "manual"},
    {254, "automatic"}
  ])

  type(:goal_source, :enum, [
    {0, "auto", %{comment: "Device generated"}},
    {1, "community", %{comment: "Social network sourced goal"}},
    {2, "user", %{comment: "Manually generated"}}
  ])

  type(:message_index, :uint16, [
    {4095, "mask", %{comment: "index"}},
    {28672, "reserved", %{comment: "reserved (default 0)"}},
    {32768, "selected", %{comment: "message is selected if set"}}
  ])

  type(:language, :enum, [
    {0, "english"},
    {1, "french"},
    {2, "italian"},
    {3, "german"},
    {4, "spanish"},
    {5, "croatian"},
    {6, "czech"},
    {7, "danish"},
    {8, "dutch"},
    {9, "finnish"},
    {10, "greek"},
    {11, "hungarian"},
    {12, "norwegian"},
    {13, "polish"},
    {14, "portuguese"},
    {15, "slovakian"},
    {16, "slovenian"},
    {17, "swedish"},
    {18, "russian"},
    {19, "turkish"},
    {20, "latvian"},
    {21, "ukrainian"},
    {22, "arabic"},
    {23, "farsi"},
    {24, "bulgarian"},
    {25, "romanian"},
    {26, "chinese"},
    {27, "japanese"},
    {28, "korean"},
    {29, "taiwanese"},
    {30, "thai"},
    {31, "hebrew"},
    {32, "brazilian_portuguese"},
    {33, "indonesian"},
    {34, "malaysian"},
    {35, "vietnamese"},
    {36, "burmese"},
    {37, "mongolian"},
    {254, "custom"}
  ])

  type(:display_measure, :enum, [{0, "metric"}, {1, "statute"}, {2, "nautical"}])

  type(:radar_threat_level_type, :enum, [
    {0, "threat_unknown"},
    {1, "threat_none"},
    {2, "threat_approaching"},
    {3, "threat_approaching_fast"}
  ])

  type(:sleep_level, :enum, [
    {0, "unmeasurable"},
    {1, "awake"},
    {2, "light"},
    {3, "deep"},
    {4, "rem"}
  ])

  type(:deadlift_exercise_name, :uint16, [
    {0, "barbell_deadlift"},
    {1, "barbell_straight_leg_deadlift"},
    {2, "dumbbell_deadlift"},
    {3, "dumbbell_single_leg_deadlift_to_row"},
    {4, "dumbbell_straight_leg_deadlift"},
    {5, "kettlebell_floor_to_shelf"},
    {6, "one_arm_one_leg_deadlift"},
    {7, "rack_pull"},
    {8, "rotational_dumbbell_straight_leg_deadlift"},
    {9, "single_arm_deadlift"},
    {10, "single_leg_barbell_deadlift"},
    {11, "single_leg_barbell_straight_leg_deadlift"},
    {12, "single_leg_deadlift_with_barbell"},
    {13, "single_leg_rdl_circuit"},
    {14, "single_leg_romanian_deadlift_with_dumbbell"},
    {15, "sumo_deadlift"},
    {16, "sumo_deadlift_high_pull"},
    {17, "trap_bar_deadlift"},
    {18, "wide_grip_barbell_deadlift"}
  ])

  type(:cardio_exercise_name, :uint16, [
    {0, "bob_and_weave_circle"},
    {1, "weighted_bob_and_weave_circle"},
    {2, "cardio_core_crawl"},
    {3, "weighted_cardio_core_crawl"},
    {4, "double_under"},
    {5, "weighted_double_under"},
    {6, "jump_rope"},
    {7, "weighted_jump_rope"},
    {8, "jump_rope_crossover"},
    {9, "weighted_jump_rope_crossover"},
    {10, "jump_rope_jog"},
    {11, "weighted_jump_rope_jog"},
    {12, "jumping_jacks"},
    {13, "weighted_jumping_jacks"},
    {14, "ski_moguls"},
    {15, "weighted_ski_moguls"},
    {16, "split_jacks"},
    {17, "weighted_split_jacks"},
    {18, "squat_jacks"},
    {19, "weighted_squat_jacks"},
    {20, "triple_under"},
    {21, "weighted_triple_under"}
  ])

  type(:left_right_balance_100, :uint16, [
    {16383, "mask", %{comment: "% contribution scaled by 100"}},
    {32768, "right", %{comment: "data corresponds to right if set, otherwise unknown"}}
  ])

  type(:schedule, :enum, [{0, "workout"}, {1, "course"}])

  type(:checksum, :uint8, [
    {0, "clear",
     %{comment: "Allows clear of checksum for flash memory where can only write 1 to 0 without erasing sector."}},
    {1, "ok",
     %{
       comment:
         "Set to mark checksum as valid if computes to invalid values 0 or 0xFF. Checksum can also be set to ok to save encoding computation time."
     }}
  ])

  type(:lunge_exercise_name, :uint16, [
    {0, "overhead_lunge"},
    {1, "lunge_matrix"},
    {2, "weighted_lunge_matrix"},
    {3, "alternating_barbell_forward_lunge"},
    {4, "alternating_dumbbell_lunge_with_reach"},
    {5, "back_foot_elevated_dumbbell_split_squat"},
    {6, "barbell_box_lunge"},
    {7, "barbell_bulgarian_split_squat"},
    {8, "barbell_crossover_lunge"},
    {9, "barbell_front_split_squat"},
    {10, "barbell_lunge"},
    {11, "barbell_reverse_lunge"},
    {12, "barbell_side_lunge"},
    {13, "barbell_split_squat"},
    {14, "core_control_rear_lunge"},
    {15, "diagonal_lunge"},
    {16, "drop_lunge"},
    {17, "dumbbell_box_lunge"},
    {18, "dumbbell_bulgarian_split_squat"},
    {19, "dumbbell_crossover_lunge"},
    {20, "dumbbell_diagonal_lunge"},
    {21, "dumbbell_lunge"},
    {22, "dumbbell_lunge_and_rotation"},
    {23, "dumbbell_overhead_bulgarian_split_squat"},
    {24, "dumbbell_reverse_lunge_to_high_knee_and_press"},
    {25, "dumbbell_side_lunge"},
    {26, "elevated_front_foot_barbell_split_squat"},
    {27, "front_foot_elevated_dumbbell_split_squat"},
    {28, "gunslinger_lunge"},
    {29, "lawnmower_lunge"},
    {30, "low_lunge_with_isometric_adduction"},
    {31, "low_side_to_side_lunge"},
    {32, "lunge"},
    {33, "weighted_lunge"},
    {34, "lunge_with_arm_reach"},
    {35, "lunge_with_diagonal_reach"},
    {36, "lunge_with_side_bend"},
    {37, "offset_dumbbell_lunge"},
    {38, "offset_dumbbell_reverse_lunge"},
    {39, "overhead_bulgarian_split_squat"},
    {40, "overhead_dumbbell_reverse_lunge"},
    {41, "overhead_dumbbell_split_squat"},
    {42, "overhead_lunge_with_rotation"},
    {43, "reverse_barbell_box_lunge"},
    {44, "reverse_box_lunge"},
    {45, "reverse_dumbbell_box_lunge"},
    {46, "reverse_dumbbell_crossover_lunge"},
    {47, "reverse_dumbbell_diagonal_lunge"},
    {48, "reverse_lunge_with_reach_back"},
    {49, "weighted_reverse_lunge_with_reach_back"},
    {50, "reverse_lunge_with_twist_and_overhead_reach"},
    {51, "weighted_reverse_lunge_with_twist_and_overhead_reach"},
    {52, "reverse_sliding_box_lunge"},
    {53, "weighted_reverse_sliding_box_lunge"},
    {54, "reverse_sliding_lunge"},
    {55, "weighted_reverse_sliding_lunge"},
    {56, "runners_lunge_to_balance"},
    {57, "weighted_runners_lunge_to_balance"},
    {58, "shifting_side_lunge"},
    {59, "side_and_crossover_lunge"},
    {60, "weighted_side_and_crossover_lunge"},
    {61, "side_lunge"},
    {62, "weighted_side_lunge"},
    {63, "side_lunge_and_press"},
    {64, "side_lunge_jump_off"},
    {65, "side_lunge_sweep"},
    {66, "weighted_side_lunge_sweep"},
    {67, "side_lunge_to_crossover_tap"},
    {68, "weighted_side_lunge_to_crossover_tap"},
    {69, "side_to_side_lunge_chops"},
    {70, "weighted_side_to_side_lunge_chops"},
    {71, "siff_jump_lunge"},
    {72, "weighted_siff_jump_lunge"},
    {73, "single_arm_reverse_lunge_and_press"},
    {74, "sliding_lateral_lunge"},
    {75, "weighted_sliding_lateral_lunge"},
    {76, "walking_barbell_lunge"},
    {77, "walking_dumbbell_lunge"},
    {78, "walking_lunge"},
    {79, "weighted_walking_lunge"},
    {80, "wide_grip_overhead_barbell_split_squat"}
  ])

  type(:dive_alert, :enum, [
    {0, "ndl_reached"},
    {1, "gas_switch_prompted"},
    {2, "near_surface"},
    {3, "approaching_ndl"},
    {4, "po2_warn"},
    {5, "po2_crit_high"},
    {6, "po2_crit_low"},
    {7, "time_alert"},
    {8, "depth_alert"},
    {9, "deco_ceiling_broken"},
    {10, "deco_complete"},
    {11, "safety_stop_broken"},
    {12, "safety_stop_complete"},
    {13, "cns_warning"},
    {14, "cns_critical"},
    {15, "otu_warning"},
    {16, "otu_critical"},
    {17, "ascent_critical"},
    {18, "alert_dismissed_by_key"},
    {19, "alert_dismissed_by_timeout"},
    {20, "battery_low"},
    {21, "battery_critical"},
    {22, "safety_stop_started"},
    {23, "approaching_first_deco_stop"},
    {24, "setpoint_switch_auto_low"},
    {25, "setpoint_switch_auto_high"},
    {26, "setpoint_switch_manual_low"},
    {27, "setpoint_switch_manual_high"},
    {28, "auto_setpoint_switch_ignored"},
    {29, "switched_to_open_circuit"},
    {30, "switched_to_closed_circuit"},
    {32, "tank_battery_low"},
    {33, "po2_ccr_dil_low", %{comment: "ccr diluent has low po2"}},
    {34, "deco_stop_cleared", %{comment: "a deco stop has been cleared"}},
    {35, "apnea_neutral_buoyancy", %{comment: "Target Depth Apnea Alarm triggered"}},
    {36, "apnea_target_depth", %{comment: "Neutral Buoyance Apnea Alarm triggered"}},
    {37, "apnea_surface", %{comment: "Surface Apnea Alarm triggered"}},
    {38, "apnea_high_speed", %{comment: "High Speed Apnea Alarm triggered"}},
    {39, "apnea_low_speed", %{comment: "Low Speed Apnea Alarm triggered"}}
  ])

  type(:activity_type, :enum, [
    {0, "generic"},
    {1, "running"},
    {2, "cycling"},
    {3, "transition", %{comment: "Mulitsport transition"}},
    {4, "fitness_equipment"},
    {5, "swimming"},
    {6, "walking"},
    {8, "sedentary"},
    {254, "all", %{comment: "All is for goals only to include all sports."}}
  ])

  type(:hip_swing_exercise_name, :uint16, [
    {0, "single_arm_kettlebell_swing"},
    {1, "single_arm_dumbbell_swing"},
    {2, "step_out_swing"}
  ])

  type(:event, :enum, [
    {0, "timer", %{comment: "Group 0. Start / stop_all"}},
    {3, "workout", %{comment: "start / stop"}},
    {4, "workout_step", %{comment: "Start at beginning of workout. Stop at end of each step."}},
    {5, "power_down", %{comment: "stop_all group 0"}},
    {6, "power_up", %{comment: "stop_all group 0"}},
    {7, "off_course", %{comment: "start / stop group 0"}},
    {8, "session", %{comment: "Stop at end of each session."}},
    {9, "lap", %{comment: "Stop at end of each lap."}},
    {10, "course_point", %{comment: "marker"}},
    {11, "battery", %{comment: "marker"}},
    {12, "virtual_partner_pace",
     %{
       comment:
         "Group 1. Start at beginning of activity if VP enabled, when VP pace is changed during activity or VP enabled mid activity. stop_disable when VP disabled."
     }},
    {13, "hr_high_alert", %{comment: "Group 0. Start / stop when in alert condition."}},
    {14, "hr_low_alert", %{comment: "Group 0. Start / stop when in alert condition."}},
    {15, "speed_high_alert", %{comment: "Group 0. Start / stop when in alert condition."}},
    {16, "speed_low_alert", %{comment: "Group 0. Start / stop when in alert condition."}},
    {17, "cad_high_alert", %{comment: "Group 0. Start / stop when in alert condition."}},
    {18, "cad_low_alert", %{comment: "Group 0. Start / stop when in alert condition."}},
    {19, "power_high_alert", %{comment: "Group 0. Start / stop when in alert condition."}},
    {20, "power_low_alert", %{comment: "Group 0. Start / stop when in alert condition."}},
    {21, "recovery_hr", %{comment: "marker"}},
    {22, "battery_low", %{comment: "marker"}},
    {23, "time_duration_alert",
     %{
       comment:
         "Group 1. Start if enabled mid activity (not required at start of activity). Stop when duration is reached. stop_disable if disabled."
     }},
    {24, "distance_duration_alert",
     %{
       comment:
         "Group 1. Start if enabled mid activity (not required at start of activity). Stop when duration is reached. stop_disable if disabled."
     }},
    {25, "calorie_duration_alert",
     %{
       comment:
         "Group 1. Start if enabled mid activity (not required at start of activity). Stop when duration is reached. stop_disable if disabled."
     }},
    {26, "activity", %{comment: "Group 1.. Stop at end of activity."}},
    {27, "fitness_equipment", %{comment: "marker"}},
    {28, "length", %{comment: "Stop at end of each length."}},
    {32, "user_marker", %{comment: "marker"}},
    {33, "sport_point", %{comment: "marker"}},
    {36, "calibration", %{comment: "start/stop/marker"}},
    {42, "front_gear_change", %{comment: "marker"}},
    {43, "rear_gear_change", %{comment: "marker"}},
    {44, "rider_position_change", %{comment: "marker"}},
    {45, "elev_high_alert", %{comment: "Group 0. Start / stop when in alert condition."}},
    {46, "elev_low_alert", %{comment: "Group 0. Start / stop when in alert condition."}},
    {47, "comm_timeout", %{comment: "marker"}},
    {54, "auto_activity_detect", %{comment: "marker"}},
    {56, "dive_alert", %{comment: "marker"}},
    {57, "dive_gas_switched", %{comment: "marker"}},
    {71, "tank_pressure_reserve", %{comment: "marker"}},
    {72, "tank_pressure_critical", %{comment: "marker"}},
    {73, "tank_lost", %{comment: "marker"}},
    {75, "radar_threat_alert", %{comment: "start/stop/marker"}},
    {76, "tank_battery_low", %{comment: "marker"}},
    {81, "tank_pod_connected", %{comment: "marker - tank pod has connected"}},
    {82, "tank_pod_disconnected", %{comment: "marker - tank pod has lost connection"}}
  ])

  type(:dive_backlight_mode, :enum, [{0, "at_depth"}, {1, "always_on"}])

  type(:sub_sport, :enum, [
    {0, "generic"},
    {1, "treadmill", %{comment: "Run/Fitness Equipment"}},
    {2, "street", %{comment: "Run"}},
    {3, "trail", %{comment: "Run"}},
    {4, "track", %{comment: "Run"}},
    {5, "spin", %{comment: "Cycling"}},
    {6, "indoor_cycling", %{comment: "Cycling/Fitness Equipment"}},
    {7, "road", %{comment: "Cycling"}},
    {8, "mountain", %{comment: "Cycling"}},
    {9, "downhill", %{comment: "Cycling"}},
    {10, "recumbent", %{comment: "Cycling"}},
    {11, "cyclocross", %{comment: "Cycling"}},
    {12, "hand_cycling", %{comment: "Cycling"}},
    {13, "track_cycling", %{comment: "Cycling"}},
    {14, "indoor_rowing", %{comment: "Fitness Equipment"}},
    {15, "elliptical", %{comment: "Fitness Equipment"}},
    {16, "stair_climbing", %{comment: "Fitness Equipment"}},
    {17, "lap_swimming", %{comment: "Swimming"}},
    {18, "open_water", %{comment: "Swimming"}},
    {19, "flexibility_training", %{comment: "Training"}},
    {20, "strength_training", %{comment: "Training"}},
    {21, "warm_up", %{comment: "Tennis"}},
    {22, "match", %{comment: "Tennis"}},
    {23, "exercise", %{comment: "Tennis"}},
    {24, "challenge"},
    {25, "indoor_skiing", %{comment: "Fitness Equipment"}},
    {26, "cardio_training", %{comment: "Training"}},
    {27, "indoor_walking", %{comment: "Walking/Fitness Equipment"}},
    {28, "e_bike_fitness", %{comment: "E-Biking"}},
    {29, "bmx", %{comment: "Cycling"}},
    {30, "casual_walking", %{comment: "Walking"}},
    {31, "speed_walking", %{comment: "Walking"}},
    {32, "bike_to_run_transition", %{comment: "Transition"}},
    {33, "run_to_bike_transition", %{comment: "Transition"}},
    {34, "swim_to_bike_transition", %{comment: "Transition"}},
    {35, "atv", %{comment: "Motorcycling"}},
    {36, "motocross", %{comment: "Motorcycling"}},
    {37, "backcountry", %{comment: "Alpine Skiing/Snowboarding"}},
    {38, "resort", %{comment: "Alpine Skiing/Snowboarding"}},
    {39, "rc_drone", %{comment: "Flying"}},
    {40, "wingsuit", %{comment: "Flying"}},
    {41, "whitewater", %{comment: "Kayaking/Rafting"}},
    {42, "skate_skiing", %{comment: "Cross Country Skiing"}},
    {43, "yoga", %{comment: "Training"}},
    {44, "pilates", %{comment: "Fitness Equipment"}},
    {45, "indoor_running", %{comment: "Run"}},
    {46, "gravel_cycling", %{comment: "Cycling"}},
    {47, "e_bike_mountain", %{comment: "Cycling"}},
    {48, "commuting", %{comment: "Cycling"}},
    {49, "mixed_surface", %{comment: "Cycling"}},
    {50, "navigate"},
    {51, "track_me"},
    {52, "map"},
    {53, "single_gas_diving", %{comment: "Diving"}},
    {54, "multi_gas_diving", %{comment: "Diving"}},
    {55, "gauge_diving", %{comment: "Diving"}},
    {56, "apnea_diving", %{comment: "Diving"}},
    {57, "apnea_hunting", %{comment: "Diving"}},
    {58, "virtual_activity"},
    {59, "obstacle", %{comment: "Used for events where participants run, crawl through mud, climb over walls, etc."}},
    {62, "breathing"},
    {65, "sail_race", %{comment: "Sailing"}},
    {67, "ultra", %{comment: "Ultramarathon"}},
    {68, "indoor_climbing", %{comment: "Climbing"}},
    {69, "bouldering", %{comment: "Climbing"}},
    {70, "hiit", %{comment: "High Intensity Interval Training"}},
    {73, "amrap", %{comment: "HIIT"}},
    {74, "emom", %{comment: "HIIT"}},
    {75, "tabata", %{comment: "HIIT"}},
    {84, "pickleball", %{comment: "Racket"}},
    {85, "padel", %{comment: "Racket"}},
    {86, "indoor_wheelchair_walk"},
    {87, "indoor_wheelchair_run"},
    {88, "indoor_hand_cycling"},
    {110, "fly_canopy", %{comment: "Flying"}},
    {111, "fly_paraglide", %{comment: "Flying"}},
    {112, "fly_paramotor", %{comment: "Flying"}},
    {113, "fly_pressurized", %{comment: "Flying"}},
    {114, "fly_navigate", %{comment: "Flying"}},
    {115, "fly_timer", %{comment: "Flying"}},
    {116, "fly_altimeter", %{comment: "Flying"}},
    {117, "fly_wx", %{comment: "Flying"}},
    {118, "fly_vfr", %{comment: "Flying"}},
    {119, "fly_ifr", %{comment: "Flying"}},
    {254, "all"}
  ])

  type(:goal_recurrence, :enum, [
    {0, "off"},
    {1, "daily"},
    {2, "weekly"},
    {3, "monthly"},
    {4, "yearly"},
    {5, "custom"}
  ])

  type(:language_bits_4, :uint8z, [
    {1, "brazilian_portuguese"},
    {2, "indonesian"},
    {4, "malaysian"},
    {8, "vietnamese"},
    {16, "burmese"},
    {32, "mongolian"}
  ])

  type(:sport_bits_1, :uint8z, [
    {1, "tennis"},
    {2, "american_football"},
    {4, "training"},
    {8, "walking"},
    {16, "cross_country_skiing"},
    {32, "alpine_skiing"},
    {64, "snowboarding"},
    {128, "rowing"}
  ])

  type(:shoulder_press_exercise_name, :uint16, [
    {0, "alternating_dumbbell_shoulder_press"},
    {1, "arnold_press"},
    {2, "barbell_front_squat_to_push_press"},
    {3, "barbell_push_press"},
    {4, "barbell_shoulder_press"},
    {5, "dead_curl_press"},
    {6, "dumbbell_alternating_shoulder_press_and_twist"},
    {7, "dumbbell_hammer_curl_to_lunge_to_press"},
    {8, "dumbbell_push_press"},
    {9, "floor_inverted_shoulder_press"},
    {10, "weighted_floor_inverted_shoulder_press"},
    {11, "inverted_shoulder_press"},
    {12, "weighted_inverted_shoulder_press"},
    {13, "one_arm_push_press"},
    {14, "overhead_barbell_press"},
    {15, "overhead_dumbbell_press"},
    {16, "seated_barbell_shoulder_press"},
    {17, "seated_dumbbell_shoulder_press"},
    {18, "single_arm_dumbbell_shoulder_press"},
    {19, "single_arm_step_up_and_press"},
    {20, "smith_machine_overhead_press"},
    {21, "split_stance_hammer_curl_to_press"},
    {22, "swiss_ball_dumbbell_shoulder_press"},
    {23, "weight_plate_front_raise"}
  ])

  type(:carry_exercise_name, :uint16, [
    {0, "bar_holds"},
    {1, "farmers_walk"},
    {2, "farmers_walk_on_toes"},
    {3, "hex_dumbbell_hold"},
    {4, "overhead_carry"}
  ])

  type(:leg_curl_exercise_name, :uint16, [
    {0, "leg_curl"},
    {1, "weighted_leg_curl"},
    {2, "good_morning"},
    {3, "seated_barbell_good_morning"},
    {4, "single_leg_barbell_good_morning"},
    {5, "single_leg_sliding_leg_curl"},
    {6, "sliding_leg_curl"},
    {7, "split_barbell_good_morning"},
    {8, "split_stance_extension"},
    {9, "staggered_stance_good_morning"},
    {10, "swiss_ball_hip_raise_and_leg_curl"},
    {11, "zercher_good_morning"}
  ])

  type(:squat_exercise_name, :uint16, [
    {0, "leg_press"},
    {1, "back_squat_with_body_bar"},
    {2, "back_squats"},
    {3, "weighted_back_squats"},
    {4, "balancing_squat"},
    {5, "weighted_balancing_squat"},
    {6, "barbell_back_squat"},
    {7, "barbell_box_squat"},
    {8, "barbell_front_squat"},
    {9, "barbell_hack_squat"},
    {10, "barbell_hang_squat_snatch"},
    {11, "barbell_lateral_step_up"},
    {12, "barbell_quarter_squat"},
    {13, "barbell_siff_squat"},
    {14, "barbell_squat_snatch"},
    {15, "barbell_squat_with_heels_raised"},
    {16, "barbell_stepover"},
    {17, "barbell_step_up"},
    {18, "bench_squat_with_rotational_chop"},
    {19, "weighted_bench_squat_with_rotational_chop"},
    {20, "body_weight_wall_squat"},
    {21, "weighted_wall_squat"},
    {22, "box_step_squat"},
    {23, "weighted_box_step_squat"},
    {24, "braced_squat"},
    {25, "crossed_arm_barbell_front_squat"},
    {26, "crossover_dumbbell_step_up"},
    {27, "dumbbell_front_squat"},
    {28, "dumbbell_split_squat"},
    {29, "dumbbell_squat"},
    {30, "dumbbell_squat_clean"},
    {31, "dumbbell_stepover"},
    {32, "dumbbell_step_up"},
    {33, "elevated_single_leg_squat"},
    {34, "weighted_elevated_single_leg_squat"},
    {35, "figure_four_squats"},
    {36, "weighted_figure_four_squats"},
    {37, "goblet_squat"},
    {38, "kettlebell_squat"},
    {39, "kettlebell_swing_overhead"},
    {40, "kettlebell_swing_with_flip_to_squat"},
    {41, "lateral_dumbbell_step_up"},
    {42, "one_legged_squat"},
    {43, "overhead_dumbbell_squat"},
    {44, "overhead_squat"},
    {45, "partial_single_leg_squat"},
    {46, "weighted_partial_single_leg_squat"},
    {47, "pistol_squat"},
    {48, "weighted_pistol_squat"},
    {49, "plie_slides"},
    {50, "weighted_plie_slides"},
    {51, "plie_squat"},
    {52, "weighted_plie_squat"},
    {53, "prisoner_squat"},
    {54, "weighted_prisoner_squat"},
    {55, "single_leg_bench_get_up"},
    {56, "weighted_single_leg_bench_get_up"},
    {57, "single_leg_bench_squat"},
    {58, "weighted_single_leg_bench_squat"},
    {59, "single_leg_squat_on_swiss_ball"},
    {60, "weighted_single_leg_squat_on_swiss_ball"},
    {61, "squat"},
    {62, "weighted_squat"},
    {63, "squats_with_band"},
    {64, "staggered_squat"},
    {65, "weighted_staggered_squat"},
    {66, "step_up"},
    {67, "weighted_step_up"},
    {68, "suitcase_squats"},
    {69, "sumo_squat"},
    {70, "sumo_squat_slide_in"},
    {71, "weighted_sumo_squat_slide_in"},
    {72, "sumo_squat_to_high_pull"},
    {73, "sumo_squat_to_stand"},
    {74, "weighted_sumo_squat_to_stand"},
    {75, "sumo_squat_with_rotation"},
    {76, "weighted_sumo_squat_with_rotation"},
    {77, "swiss_ball_body_weight_wall_squat"},
    {78, "weighted_swiss_ball_wall_squat"},
    {79, "thrusters"},
    {80, "uneven_squat"},
    {81, "weighted_uneven_squat"},
    {82, "waist_slimming_squat"},
    {83, "wall_ball"},
    {84, "wide_stance_barbell_squat"},
    {85, "wide_stance_goblet_squat"},
    {86, "zercher_squat"},
    {87, "kbs_overhead", %{comment: "Deprecated do not use"}},
    {88, "squat_and_side_kick"},
    {89, "squat_jumps_in_n_out"},
    {90, "pilates_plie_squats_parallel_turned_out_flat_and_heels"},
    {91, "releve_straight_leg_and_knee_bent_with_one_leg_variation"}
  ])

  type(:comm_timeout_type, :uint16, [
    {0, "wildcard_pairing_timeout", %{comment: "Timeout pairing to any device"}},
    {1, "pairing_timeout", %{comment: "Timeout pairing to previously paired device"}},
    {2, "connection_lost", %{comment: "Temporary loss of communications"}},
    {3, "connection_timeout", %{comment: "Connection closed due to extended bad communications"}}
  ])

  type(:tone, :enum, [{0, "off"}, {1, "tone"}, {2, "vibrate"}, {3, "tone_and_vibrate"}])

  type(:row_exercise_name, :uint16, [
    {0, "barbell_straight_leg_deadlift_to_row"},
    {1, "cable_row_standing"},
    {2, "dumbbell_row"},
    {3, "elevated_feet_inverted_row"},
    {4, "weighted_elevated_feet_inverted_row"},
    {5, "face_pull"},
    {6, "face_pull_with_external_rotation"},
    {7, "inverted_row_with_feet_on_swiss_ball"},
    {8, "weighted_inverted_row_with_feet_on_swiss_ball"},
    {9, "kettlebell_row"},
    {10, "modified_inverted_row"},
    {11, "weighted_modified_inverted_row"},
    {12, "neutral_grip_alternating_dumbbell_row"},
    {13, "one_arm_bent_over_row"},
    {14, "one_legged_dumbbell_row"},
    {15, "renegade_row"},
    {16, "reverse_grip_barbell_row"},
    {17, "rope_handle_cable_row"},
    {18, "seated_cable_row"},
    {19, "seated_dumbbell_row"},
    {20, "single_arm_cable_row"},
    {21, "single_arm_cable_row_and_rotation"},
    {22, "single_arm_inverted_row"},
    {23, "weighted_single_arm_inverted_row"},
    {24, "single_arm_neutral_grip_dumbbell_row"},
    {25, "single_arm_neutral_grip_dumbbell_row_and_rotation"},
    {26, "suspended_inverted_row"},
    {27, "weighted_suspended_inverted_row"},
    {28, "t_bar_row"},
    {29, "towel_grip_inverted_row"},
    {30, "weighted_towel_grip_inverted_row"},
    {31, "underhand_grip_cable_row"},
    {32, "v_grip_cable_row"},
    {33, "wide_grip_seated_cable_row"}
  ])

  type(:workout_equipment, :enum, [
    {0, "none"},
    {1, "swim_fins"},
    {2, "swim_kickboard"},
    {3, "swim_paddles"},
    {4, "swim_pull_buoy"},
    {5, "swim_snorkel"}
  ])

  type(:sport_bits_3, :uint8z, [
    {1, "driving"},
    {2, "golf"},
    {4, "hang_gliding"},
    {8, "horseback_riding"},
    {16, "hunting"},
    {32, "fishing"},
    {64, "inline_skating"},
    {128, "rock_climbing"}
  ])

  type(:hip_raise_exercise_name, :uint16, [
    {0, "barbell_hip_thrust_on_floor"},
    {1, "barbell_hip_thrust_with_bench"},
    {2, "bent_knee_swiss_ball_reverse_hip_raise"},
    {3, "weighted_bent_knee_swiss_ball_reverse_hip_raise"},
    {4, "bridge_with_leg_extension"},
    {5, "weighted_bridge_with_leg_extension"},
    {6, "clam_bridge"},
    {7, "front_kick_tabletop"},
    {8, "weighted_front_kick_tabletop"},
    {9, "hip_extension_and_cross"},
    {10, "weighted_hip_extension_and_cross"},
    {11, "hip_raise"},
    {12, "weighted_hip_raise"},
    {13, "hip_raise_with_feet_on_swiss_ball"},
    {14, "weighted_hip_raise_with_feet_on_swiss_ball"},
    {15, "hip_raise_with_head_on_bosu_ball"},
    {16, "weighted_hip_raise_with_head_on_bosu_ball"},
    {17, "hip_raise_with_head_on_swiss_ball"},
    {18, "weighted_hip_raise_with_head_on_swiss_ball"},
    {19, "hip_raise_with_knee_squeeze"},
    {20, "weighted_hip_raise_with_knee_squeeze"},
    {21, "incline_rear_leg_extension"},
    {22, "weighted_incline_rear_leg_extension"},
    {23, "kettlebell_swing"},
    {24, "marching_hip_raise"},
    {25, "weighted_marching_hip_raise"},
    {26, "marching_hip_raise_with_feet_on_a_swiss_ball"},
    {27, "weighted_marching_hip_raise_with_feet_on_a_swiss_ball"},
    {28, "reverse_hip_raise"},
    {29, "weighted_reverse_hip_raise"},
    {30, "single_leg_hip_raise"},
    {31, "weighted_single_leg_hip_raise"},
    {32, "single_leg_hip_raise_with_foot_on_bench"},
    {33, "weighted_single_leg_hip_raise_with_foot_on_bench"},
    {34, "single_leg_hip_raise_with_foot_on_bosu_ball"},
    {35, "weighted_single_leg_hip_raise_with_foot_on_bosu_ball"},
    {36, "single_leg_hip_raise_with_foot_on_foam_roller"},
    {37, "weighted_single_leg_hip_raise_with_foot_on_foam_roller"},
    {38, "single_leg_hip_raise_with_foot_on_medicine_ball"},
    {39, "weighted_single_leg_hip_raise_with_foot_on_medicine_ball"},
    {40, "single_leg_hip_raise_with_head_on_bosu_ball"},
    {41, "weighted_single_leg_hip_raise_with_head_on_bosu_ball"},
    {42, "weighted_clam_bridge"},
    {43, "single_leg_swiss_ball_hip_raise_and_leg_curl"},
    {44, "clams"},
    {45, "inner_thigh_circles", %{comment: "Deprecated do not use"}},
    {46, "inner_thigh_side_lift", %{comment: "Deprecated do not use"}},
    {47, "leg_circles"},
    {48, "leg_lift"},
    {49, "leg_lift_in_external_rotation"}
  ])

  type(:autoscroll, :enum, [{0, "none"}, {1, "slow"}, {2, "medium"}, {3, "fast"}])

  type(:plank_exercise_name, :uint16, [
    {0, "45_degree_plank"},
    {1, "weighted_45_degree_plank"},
    {2, "90_degree_static_hold"},
    {3, "weighted_90_degree_static_hold"},
    {4, "bear_crawl"},
    {5, "weighted_bear_crawl"},
    {6, "cross_body_mountain_climber"},
    {7, "weighted_cross_body_mountain_climber"},
    {8, "elbow_plank_pike_jacks"},
    {9, "weighted_elbow_plank_pike_jacks"},
    {10, "elevated_feet_plank"},
    {11, "weighted_elevated_feet_plank"},
    {12, "elevator_abs"},
    {13, "weighted_elevator_abs"},
    {14, "extended_plank"},
    {15, "weighted_extended_plank"},
    {16, "full_plank_passe_twist"},
    {17, "weighted_full_plank_passe_twist"},
    {18, "inching_elbow_plank"},
    {19, "weighted_inching_elbow_plank"},
    {20, "inchworm_to_side_plank"},
    {21, "weighted_inchworm_to_side_plank"},
    {22, "kneeling_plank"},
    {23, "weighted_kneeling_plank"},
    {24, "kneeling_side_plank_with_leg_lift"},
    {25, "weighted_kneeling_side_plank_with_leg_lift"},
    {26, "lateral_roll"},
    {27, "weighted_lateral_roll"},
    {28, "lying_reverse_plank"},
    {29, "weighted_lying_reverse_plank"},
    {30, "medicine_ball_mountain_climber"},
    {31, "weighted_medicine_ball_mountain_climber"},
    {32, "modified_mountain_climber_and_extension"},
    {33, "weighted_modified_mountain_climber_and_extension"},
    {34, "mountain_climber"},
    {35, "weighted_mountain_climber"},
    {36, "mountain_climber_on_sliding_discs"},
    {37, "weighted_mountain_climber_on_sliding_discs"},
    {38, "mountain_climber_with_feet_on_bosu_ball"},
    {39, "weighted_mountain_climber_with_feet_on_bosu_ball"},
    {40, "mountain_climber_with_hands_on_bench"},
    {41, "mountain_climber_with_hands_on_swiss_ball"},
    {42, "weighted_mountain_climber_with_hands_on_swiss_ball"},
    {43, "plank"},
    {44, "plank_jacks_with_feet_on_sliding_discs"},
    {45, "weighted_plank_jacks_with_feet_on_sliding_discs"},
    {46, "plank_knee_twist"},
    {47, "weighted_plank_knee_twist"},
    {48, "plank_pike_jumps"},
    {49, "weighted_plank_pike_jumps"},
    {50, "plank_pikes"},
    {51, "weighted_plank_pikes"},
    {52, "plank_to_stand_up"},
    {53, "weighted_plank_to_stand_up"},
    {54, "plank_with_arm_raise"},
    {55, "weighted_plank_with_arm_raise"},
    {56, "plank_with_knee_to_elbow"},
    {57, "weighted_plank_with_knee_to_elbow"},
    {58, "plank_with_oblique_crunch"},
    {59, "weighted_plank_with_oblique_crunch"},
    {60, "plyometric_side_plank"},
    {61, "weighted_plyometric_side_plank"},
    {62, "rolling_side_plank"},
    {63, "weighted_rolling_side_plank"},
    {64, "side_kick_plank"},
    {65, "weighted_side_kick_plank"},
    {66, "side_plank"},
    {67, "weighted_side_plank"},
    {68, "side_plank_and_row"},
    {69, "weighted_side_plank_and_row"},
    {70, "side_plank_lift"},
    {71, "weighted_side_plank_lift"},
    {72, "side_plank_with_elbow_on_bosu_ball"},
    {73, "weighted_side_plank_with_elbow_on_bosu_ball"},
    {74, "side_plank_with_feet_on_bench"},
    {75, "weighted_side_plank_with_feet_on_bench"},
    {76, "side_plank_with_knee_circle"},
    {77, "weighted_side_plank_with_knee_circle"},
    {78, "side_plank_with_knee_tuck"},
    {79, "weighted_side_plank_with_knee_tuck"},
    {80, "side_plank_with_leg_lift"},
    {81, "weighted_side_plank_with_leg_lift"},
    {82, "side_plank_with_reach_under"},
    {83, "weighted_side_plank_with_reach_under"},
    {84, "single_leg_elevated_feet_plank"},
    {85, "weighted_single_leg_elevated_feet_plank"},
    {86, "single_leg_flex_and_extend"},
    {87, "weighted_single_leg_flex_and_extend"},
    {88, "single_leg_side_plank"},
    {89, "weighted_single_leg_side_plank"},
    {90, "spiderman_plank"},
    {91, "weighted_spiderman_plank"},
    {92, "straight_arm_plank"},
    {93, "weighted_straight_arm_plank"},
    {94, "straight_arm_plank_with_shoulder_touch"},
    {95, "weighted_straight_arm_plank_with_shoulder_touch"},
    {96, "swiss_ball_plank"},
    {97, "weighted_swiss_ball_plank"},
    {98, "swiss_ball_plank_leg_lift"},
    {99, "weighted_swiss_ball_plank_leg_lift"},
    {100, "swiss_ball_plank_leg_lift_and_hold"},
    {101, "swiss_ball_plank_with_feet_on_bench"},
    {102, "weighted_swiss_ball_plank_with_feet_on_bench"},
    {103, "swiss_ball_prone_jackknife"},
    {104, "weighted_swiss_ball_prone_jackknife"},
    {105, "swiss_ball_side_plank"},
    {106, "weighted_swiss_ball_side_plank"},
    {107, "three_way_plank"},
    {108, "weighted_three_way_plank"},
    {109, "towel_plank_and_knee_in"},
    {110, "weighted_towel_plank_and_knee_in"},
    {111, "t_stabilization"},
    {112, "weighted_t_stabilization"},
    {113, "turkish_get_up_to_side_plank"},
    {114, "weighted_turkish_get_up_to_side_plank"},
    {115, "two_point_plank"},
    {116, "weighted_two_point_plank"},
    {117, "weighted_plank"},
    {118, "wide_stance_plank_with_diagonal_arm_lift"},
    {119, "weighted_wide_stance_plank_with_diagonal_arm_lift"},
    {120, "wide_stance_plank_with_diagonal_leg_lift"},
    {121, "weighted_wide_stance_plank_with_diagonal_leg_lift"},
    {122, "wide_stance_plank_with_leg_lift"},
    {123, "weighted_wide_stance_plank_with_leg_lift"},
    {124, "wide_stance_plank_with_opposite_arm_and_leg_lift"},
    {125, "weighted_mountain_climber_with_hands_on_bench"},
    {126, "weighted_swiss_ball_plank_leg_lift_and_hold"},
    {127, "weighted_wide_stance_plank_with_opposite_arm_and_leg_lift"},
    {128, "plank_with_feet_on_swiss_ball"},
    {129, "side_plank_to_plank_with_reach_under"},
    {130, "bridge_with_glute_lower_lift"},
    {131, "bridge_one_leg_bridge"},
    {132, "plank_with_arm_variations"},
    {133, "plank_with_leg_lift"},
    {134, "reverse_plank_with_leg_pull"}
  ])

  type(:display_heart, :enum, [{0, "bpm"}, {1, "max"}, {2, "reserve"}])

  type(:sport_bits_2, :uint8z, [
    {1, "mountaineering"},
    {2, "hiking"},
    {4, "multisport"},
    {8, "paddling"},
    {16, "flying"},
    {32, "e_biking"},
    {64, "motorcycling"},
    {128, "boating"}
  ])

  type(:crunch_exercise_name, :uint16, [
    {0, "bicycle_crunch"},
    {1, "cable_crunch"},
    {2, "circular_arm_crunch"},
    {3, "crossed_arms_crunch"},
    {4, "weighted_crossed_arms_crunch"},
    {5, "cross_leg_reverse_crunch"},
    {6, "weighted_cross_leg_reverse_crunch"},
    {7, "crunch_chop"},
    {8, "weighted_crunch_chop"},
    {9, "double_crunch"},
    {10, "weighted_double_crunch"},
    {11, "elbow_to_knee_crunch"},
    {12, "weighted_elbow_to_knee_crunch"},
    {13, "flutter_kicks"},
    {14, "weighted_flutter_kicks"},
    {15, "foam_roller_reverse_crunch_on_bench"},
    {16, "weighted_foam_roller_reverse_crunch_on_bench"},
    {17, "foam_roller_reverse_crunch_with_dumbbell"},
    {18, "foam_roller_reverse_crunch_with_medicine_ball"},
    {19, "frog_press"},
    {20, "hanging_knee_raise_oblique_crunch"},
    {21, "weighted_hanging_knee_raise_oblique_crunch"},
    {22, "hip_crossover"},
    {23, "weighted_hip_crossover"},
    {24, "hollow_rock"},
    {25, "weighted_hollow_rock"},
    {26, "incline_reverse_crunch"},
    {27, "weighted_incline_reverse_crunch"},
    {28, "kneeling_cable_crunch"},
    {29, "kneeling_cross_crunch"},
    {30, "weighted_kneeling_cross_crunch"},
    {31, "kneeling_oblique_cable_crunch"},
    {32, "knees_to_elbow"},
    {33, "leg_extensions"},
    {34, "weighted_leg_extensions"},
    {35, "leg_levers"},
    {36, "mcgill_curl_up"},
    {37, "weighted_mcgill_curl_up"},
    {38, "modified_pilates_roll_up_with_ball"},
    {39, "weighted_modified_pilates_roll_up_with_ball"},
    {40, "pilates_crunch"},
    {41, "weighted_pilates_crunch"},
    {42, "pilates_roll_up_with_ball"},
    {43, "weighted_pilates_roll_up_with_ball"},
    {44, "raised_legs_crunch"},
    {45, "weighted_raised_legs_crunch"},
    {46, "reverse_crunch"},
    {47, "weighted_reverse_crunch"},
    {48, "reverse_crunch_on_a_bench"},
    {49, "weighted_reverse_crunch_on_a_bench"},
    {50, "reverse_curl_and_lift"},
    {51, "weighted_reverse_curl_and_lift"},
    {52, "rotational_lift"},
    {53, "weighted_rotational_lift"},
    {54, "seated_alternating_reverse_crunch"},
    {55, "weighted_seated_alternating_reverse_crunch"},
    {56, "seated_leg_u"},
    {57, "weighted_seated_leg_u"},
    {58, "side_to_side_crunch_and_weave"},
    {59, "weighted_side_to_side_crunch_and_weave"},
    {60, "single_leg_reverse_crunch"},
    {61, "weighted_single_leg_reverse_crunch"},
    {62, "skater_crunch_cross"},
    {63, "weighted_skater_crunch_cross"},
    {64, "standing_cable_crunch"},
    {65, "standing_side_crunch"},
    {66, "step_climb"},
    {67, "weighted_step_climb"},
    {68, "swiss_ball_crunch"},
    {69, "swiss_ball_reverse_crunch"},
    {70, "weighted_swiss_ball_reverse_crunch"},
    {71, "swiss_ball_russian_twist"},
    {72, "weighted_swiss_ball_russian_twist"},
    {73, "swiss_ball_side_crunch"},
    {74, "weighted_swiss_ball_side_crunch"},
    {75, "thoracic_crunches_on_foam_roller"},
    {76, "weighted_thoracic_crunches_on_foam_roller"},
    {77, "triceps_crunch"},
    {78, "weighted_bicycle_crunch"},
    {79, "weighted_crunch"},
    {80, "weighted_swiss_ball_crunch"},
    {81, "toes_to_bar"},
    {82, "weighted_toes_to_bar"},
    {83, "crunch"},
    {84, "straight_leg_crunch_with_ball"}
  ])

  type(:side, :enum, [{0, "right"}, {1, "left"}])
  type(:max_met_category, :enum, [{0, "generic"}, {1, "cycling"}])

  type(:gas_consumption_rate_type, :enum, [
    {0, "pressure_sac", %{comment: "Pressure-based Surface Air Consumption"}},
    {1, "volume_sac", %{comment: "Volumetric Surface Air Consumption"}},
    {2, "rmv", %{comment: "Respiratory Minute Volume"}}
  ])

  type(:left_right_balance, :uint8, [
    {127, "mask", %{comment: "% contribution"}},
    {128, "right", %{comment: "data corresponds to right if set, otherwise unknown"}}
  ])

  type(:dive_alarm_type, :enum, [
    {0, "depth", %{comment: "Alarm when a certain depth is crossed"}},
    {1, "time", %{comment: "Alarm when a certain time has transpired"}},
    {2, "speed", %{comment: "Alarm when a certain ascent or descent rate is exceeded"}}
  ])

  type(:bike_light_network_config_type, :enum, [
    {0, "auto"},
    {4, "individual"},
    {5, "high_visibility"},
    {6, "trail"}
  ])

  type(:segment_leaderboard_type, :enum, [
    {0, "overall"},
    {1, "personal_best"},
    {2, "connections"},
    {3, "group"},
    {4, "challenger"},
    {5, "kom"},
    {6, "qom"},
    {7, "pr"},
    {8, "goal"},
    {9, "rival"},
    {10, "club_leader"}
  ])

  type(:set_type, :uint8, [{0, "rest"}, {1, "active"}])

  type(:sport_bits_0, :uint8z, [
    {1, "generic"},
    {2, "running"},
    {4, "cycling"},
    {8, "transition", %{comment: "Mulitsport transition"}},
    {16, "fitness_equipment"},
    {32, "swimming"},
    {64, "basketball"},
    {128, "soccer"}
  ])

  type(:antplus_device_type, :uint8, [
    {1, "antfs"},
    {11, "bike_power"},
    {12, "environment_sensor_legacy"},
    {15, "multi_sport_speed_distance"},
    {16, "control"},
    {17, "fitness_equipment"},
    {18, "blood_pressure"},
    {19, "geocache_node"},
    {20, "light_electric_vehicle"},
    {25, "env_sensor"},
    {26, "racquet"},
    {27, "control_hub"},
    {31, "muscle_oxygen"},
    {34, "shifting"},
    {35, "bike_light_main"},
    {36, "bike_light_shared"},
    {38, "exd"},
    {40, "bike_radar"},
    {46, "bike_aero"},
    {119, "weight_scale"},
    {120, "heart_rate"},
    {121, "bike_speed_cadence"},
    {122, "bike_cadence"},
    {123, "bike_speed"},
    {124, "stride_speed_distance"}
  ])

  type(:hr_type, :enum, [{0, "normal"}, {1, "irregular"}])

  type(:body_location, :enum, [
    {0, "left_leg"},
    {1, "left_calf"},
    {2, "left_shin"},
    {3, "left_hamstring"},
    {4, "left_quad"},
    {5, "left_glute"},
    {6, "right_leg"},
    {7, "right_calf"},
    {8, "right_shin"},
    {9, "right_hamstring"},
    {10, "right_quad"},
    {11, "right_glute"},
    {12, "torso_back"},
    {13, "left_lower_back"},
    {14, "left_upper_back"},
    {15, "right_lower_back"},
    {16, "right_upper_back"},
    {17, "torso_front"},
    {18, "left_abdomen"},
    {19, "left_chest"},
    {20, "right_abdomen"},
    {21, "right_chest"},
    {22, "left_arm"},
    {23, "left_shoulder"},
    {24, "left_bicep"},
    {25, "left_tricep"},
    {26, "left_brachioradialis", %{comment: "Left anterior forearm"}},
    {27, "left_forearm_extensors", %{comment: "Left posterior forearm"}},
    {28, "right_arm"},
    {29, "right_shoulder"},
    {30, "right_bicep"},
    {31, "right_tricep"},
    {32, "right_brachioradialis", %{comment: "Right anterior forearm"}},
    {33, "right_forearm_extensors", %{comment: "Right posterior forearm"}},
    {34, "neck"},
    {35, "throat"},
    {36, "waist_mid_back"},
    {37, "waist_front"},
    {38, "waist_left"},
    {39, "waist_right"}
  ])

  type(:language_bits_1, :uint8z, [
    {1, "dutch"},
    {2, "finnish"},
    {4, "greek"},
    {8, "hungarian"},
    {16, "norwegian"},
    {32, "polish"},
    {64, "portuguese"},
    {128, "slovakian"}
  ])

  type(:hip_stability_exercise_name, :uint16, [
    {0, "band_side_lying_leg_raise"},
    {1, "dead_bug"},
    {2, "weighted_dead_bug"},
    {3, "external_hip_raise"},
    {4, "weighted_external_hip_raise"},
    {5, "fire_hydrant_kicks"},
    {6, "weighted_fire_hydrant_kicks"},
    {7, "hip_circles"},
    {8, "weighted_hip_circles"},
    {9, "inner_thigh_lift"},
    {10, "weighted_inner_thigh_lift"},
    {11, "lateral_walks_with_band_at_ankles"},
    {12, "pretzel_side_kick"},
    {13, "weighted_pretzel_side_kick"},
    {14, "prone_hip_internal_rotation"},
    {15, "weighted_prone_hip_internal_rotation"},
    {16, "quadruped"},
    {17, "quadruped_hip_extension"},
    {18, "weighted_quadruped_hip_extension"},
    {19, "quadruped_with_leg_lift"},
    {20, "weighted_quadruped_with_leg_lift"},
    {21, "side_lying_leg_raise"},
    {22, "weighted_side_lying_leg_raise"},
    {23, "sliding_hip_adduction"},
    {24, "weighted_sliding_hip_adduction"},
    {25, "standing_adduction"},
    {26, "weighted_standing_adduction"},
    {27, "standing_cable_hip_abduction"},
    {28, "standing_hip_abduction"},
    {29, "weighted_standing_hip_abduction"},
    {30, "standing_rear_leg_raise"},
    {31, "weighted_standing_rear_leg_raise"},
    {32, "supine_hip_internal_rotation"},
    {33, "weighted_supine_hip_internal_rotation"}
  ])

  type(:climb_pro_event, :enum, [{0, "approach"}, {1, "start"}, {2, "complete"}])
  type(:dive_gas_mode, :enum, [{0, "open_circuit"}, {1, "closed_circuit_diluent"}])

  type(:leg_raise_exercise_name, :uint16, [
    {0, "hanging_knee_raise"},
    {1, "hanging_leg_raise"},
    {2, "weighted_hanging_leg_raise"},
    {3, "hanging_single_leg_raise"},
    {4, "weighted_hanging_single_leg_raise"},
    {5, "kettlebell_leg_raises"},
    {6, "leg_lowering_drill"},
    {7, "weighted_leg_lowering_drill"},
    {8, "lying_straight_leg_raise"},
    {9, "weighted_lying_straight_leg_raise"},
    {10, "medicine_ball_leg_drops"},
    {11, "quadruped_leg_raise"},
    {12, "weighted_quadruped_leg_raise"},
    {13, "reverse_leg_raise"},
    {14, "weighted_reverse_leg_raise"},
    {15, "reverse_leg_raise_on_swiss_ball"},
    {16, "weighted_reverse_leg_raise_on_swiss_ball"},
    {17, "single_leg_lowering_drill"},
    {18, "weighted_single_leg_lowering_drill"},
    {19, "weighted_hanging_knee_raise"},
    {20, "lateral_stepover"},
    {21, "weighted_lateral_stepover"}
  ])

  type(:water_type, :enum, [{0, "fresh"}, {1, "salt"}, {2, "en13319"}, {3, "custom"}])

  type(:lap_trigger, :enum, [
    {0, "manual"},
    {1, "time"},
    {2, "distance"},
    {3, "position_start"},
    {4, "position_lap"},
    {5, "position_waypoint"},
    {6, "position_marked"},
    {7, "session_end"},
    {8, "fitness_equipment"}
  ])

  type(:exercise_category, :uint16, [
    {0, "bench_press"},
    {1, "calf_raise"},
    {2, "cardio"},
    {3, "carry"},
    {4, "chop"},
    {5, "core"},
    {6, "crunch"},
    {7, "curl"},
    {8, "deadlift"},
    {9, "flye"},
    {10, "hip_raise"},
    {11, "hip_stability"},
    {12, "hip_swing"},
    {13, "hyperextension"},
    {14, "lateral_raise"},
    {15, "leg_curl"},
    {16, "leg_raise"},
    {17, "lunge"},
    {18, "olympic_lift"},
    {19, "plank"},
    {20, "plyo"},
    {21, "pull_up"},
    {22, "push_up"},
    {23, "row"},
    {24, "shoulder_press"},
    {25, "shoulder_stability"},
    {26, "shrug"},
    {27, "sit_up"},
    {28, "squat"},
    {29, "total_body"},
    {30, "triceps_extension"},
    {31, "warm_up"},
    {32, "run"},
    {65534, "unknown"}
  ])

  type(:intensity, :enum, [
    {0, "active"},
    {1, "rest"},
    {2, "warmup"},
    {3, "cooldown"},
    {4, "recovery"},
    {5, "interval"},
    {6, "other"}
  ])

  type(:dive_gas_status, :enum, [{0, "disabled"}, {1, "enabled"}, {2, "backup_only"}])

  type(:supported_exd_screen_layouts, :uint32z, [
    {1, "full_screen"},
    {2, "half_vertical"},
    {4, "half_horizontal"},
    {8, "half_vertical_right_split"},
    {16, "half_horizontal_bottom_split"},
    {32, "full_quarter_split"},
    {64, "half_vertical_left_split"},
    {128, "half_horizontal_top_split"}
  ])

  type(:time_mode, :enum, [
    {0, "hour12"},
    {1, "hour24", %{comment: "Does not use a leading zero and has a colon"}},
    {2, "military", %{comment: "Uses a leading zero and does not have a colon"}},
    {3, "hour_12_with_seconds"},
    {4, "hour_24_with_seconds"},
    {5, "utc"}
  ])

  type(:event_type, :enum, [
    {0, "start"},
    {1, "stop"},
    {2, "consecutive_depreciated"},
    {3, "marker"},
    {4, "stop_all"},
    {5, "begin_depreciated"},
    {6, "end_depreciated"},
    {7, "end_all_depreciated"},
    {8, "stop_disable"},
    {9, "stop_disable_all"}
  ])

  type(:backlight_mode, :enum, [
    {0, "off"},
    {1, "manual"},
    {2, "key_and_messages"},
    {3, "auto_brightness"},
    {4, "smart_notifications"},
    {5, "key_and_messages_night"},
    {6, "key_and_messages_and_smart_notifications"}
  ])

  type(:weight, :uint16, [{65534, "calculating"}])

  type(:sport_bits_5, :uint8z, [
    {1, "water_skiing"},
    {2, "kayaking"},
    {4, "rafting"},
    {8, "windsurfing"},
    {16, "kitesurfing"},
    {32, "tactical"},
    {64, "jumpmaster"},
    {128, "boxing"}
  ])

  type(:local_date_time, :uint32, [
    {268_435_456, "min",
     %{comment: "if date_time is < 0x10000000 then it is system time (seconds from device power on)"}}
  ])

  type(:activity_class, :enum, [
    {100, "level_max"},
    {127, "level", %{comment: "0 to 100"}},
    {128, "athlete"}
  ])

  type(:ble_device_type, :uint8, [
    {0, "connected_gps", %{comment: "GPS that is provided over a proprietary bluetooth service"}},
    {1, "heart_rate"},
    {2, "bike_power"},
    {3, "bike_speed_cadence"},
    {4, "bike_speed"},
    {5, "bike_cadence"},
    {6, "footpod"},
    {7, "bike_trainer", %{comment: "Indoor-Bike FTMS protocol"}}
  ])

  type(:chop_exercise_name, :uint16, [
    {0, "cable_pull_through"},
    {1, "cable_rotational_lift"},
    {2, "cable_woodchop"},
    {3, "cross_chop_to_knee"},
    {4, "weighted_cross_chop_to_knee"},
    {5, "dumbbell_chop"},
    {6, "half_kneeling_rotation"},
    {7, "weighted_half_kneeling_rotation"},
    {8, "half_kneeling_rotational_chop"},
    {9, "half_kneeling_rotational_reverse_chop"},
    {10, "half_kneeling_stability_chop"},
    {11, "half_kneeling_stability_reverse_chop"},
    {12, "kneeling_rotational_chop"},
    {13, "kneeling_rotational_reverse_chop"},
    {14, "kneeling_stability_chop"},
    {15, "kneeling_woodchopper"},
    {16, "medicine_ball_wood_chops"},
    {17, "power_squat_chops"},
    {18, "weighted_power_squat_chops"},
    {19, "standing_rotational_chop"},
    {20, "standing_split_rotational_chop"},
    {21, "standing_split_rotational_reverse_chop"},
    {22, "standing_stability_reverse_chop"}
  ])

  type(:no_fly_time_mode, :enum, [
    {0, "standard", %{comment: "Standard Diver Alert Network no-fly guidance"}},
    {1, "flat_24_hours", %{comment: "Flat 24 hour no-fly guidance"}}
  ])

  type(:analog_watchface_layout, :enum, [{0, "minimal"}, {1, "traditional"}, {2, "modern"}])

  type(:workout_capabilities, :uint32z, [
    {1, "interval"},
    {2, "custom"},
    {4, "fitness_equipment"},
    {8, "firstbeat"},
    {16, "new_leaf"},
    {32, "tcx", %{comment: "For backwards compatibility. Watch should add missing id fields then clear flag."}},
    {128, "speed", %{comment: "Speed source required for workout step."}},
    {256, "heart_rate", %{comment: "Heart rate source required for workout step."}},
    {512, "distance", %{comment: "Distance source required for workout step."}},
    {1024, "cadence", %{comment: "Cadence source required for workout step."}},
    {2048, "power", %{comment: "Power source required for workout step."}},
    {4096, "grade", %{comment: "Grade source required for workout step."}},
    {8192, "resistance", %{comment: "Resistance source required for workout step."}},
    {16384, "protected"}
  ])

  type(:olympic_lift_exercise_name, :uint16, [
    {0, "barbell_hang_power_clean"},
    {1, "barbell_hang_squat_clean"},
    {2, "barbell_power_clean"},
    {3, "barbell_power_snatch"},
    {4, "barbell_squat_clean"},
    {5, "clean_and_jerk"},
    {6, "barbell_hang_power_snatch"},
    {7, "barbell_hang_pull"},
    {8, "barbell_high_pull"},
    {9, "barbell_snatch"},
    {10, "barbell_split_jerk"},
    {11, "clean"},
    {12, "dumbbell_clean"},
    {13, "dumbbell_hang_pull"},
    {14, "one_hand_dumbbell_split_snatch"},
    {15, "push_jerk"},
    {16, "single_arm_dumbbell_snatch"},
    {17, "single_arm_hang_snatch"},
    {18, "single_arm_kettlebell_snatch"},
    {19, "split_jerk"},
    {20, "squat_clean_and_jerk"}
  ])

  type(:hyperextension_exercise_name, :uint16, [
    {0, "back_extension_with_opposite_arm_and_leg_reach"},
    {1, "weighted_back_extension_with_opposite_arm_and_leg_reach"},
    {2, "base_rotations"},
    {3, "weighted_base_rotations"},
    {4, "bent_knee_reverse_hyperextension"},
    {5, "weighted_bent_knee_reverse_hyperextension"},
    {6, "hollow_hold_and_roll"},
    {7, "weighted_hollow_hold_and_roll"},
    {8, "kicks"},
    {9, "weighted_kicks"},
    {10, "knee_raises"},
    {11, "weighted_knee_raises"},
    {12, "kneeling_superman"},
    {13, "weighted_kneeling_superman"},
    {14, "lat_pull_down_with_row"},
    {15, "medicine_ball_deadlift_to_reach"},
    {16, "one_arm_one_leg_row"},
    {17, "one_arm_row_with_band"},
    {18, "overhead_lunge_with_medicine_ball"},
    {19, "plank_knee_tucks"},
    {20, "weighted_plank_knee_tucks"},
    {21, "side_step"},
    {22, "weighted_side_step"},
    {23, "single_leg_back_extension"},
    {24, "weighted_single_leg_back_extension"},
    {25, "spine_extension"},
    {26, "weighted_spine_extension"},
    {27, "static_back_extension"},
    {28, "weighted_static_back_extension"},
    {29, "superman_from_floor"},
    {30, "weighted_superman_from_floor"},
    {31, "swiss_ball_back_extension"},
    {32, "weighted_swiss_ball_back_extension"},
    {33, "swiss_ball_hyperextension"},
    {34, "weighted_swiss_ball_hyperextension"},
    {35, "swiss_ball_opposite_arm_and_leg_lift"},
    {36, "weighted_swiss_ball_opposite_arm_and_leg_lift"},
    {37, "superman_on_swiss_ball"},
    {38, "cobra"},
    {39, "supine_floor_barre", %{comment: "Deprecated do not use"}}
  ])

  type(:workout_hr, :uint32, [{100, "bpm_offset"}])

  type(:total_body_exercise_name, :uint16, [
    {0, "burpee"},
    {1, "weighted_burpee"},
    {2, "burpee_box_jump"},
    {3, "weighted_burpee_box_jump"},
    {4, "high_pull_burpee"},
    {5, "man_makers"},
    {6, "one_arm_burpee"},
    {7, "squat_thrusts"},
    {8, "weighted_squat_thrusts"},
    {9, "squat_plank_push_up"},
    {10, "weighted_squat_plank_push_up"},
    {11, "standing_t_rotation_balance"},
    {12, "weighted_standing_t_rotation_balance"}
  ])

  type(:gender, :enum, [{0, "female"}, {1, "male"}])

  type(:auto_sync_frequency, :enum, [
    {0, "never"},
    {1, "occasionally"},
    {2, "frequent"},
    {3, "once_a_day"},
    {4, "remote"}
  ])

  type(:language_bits_3, :uint8z, [
    {1, "bulgarian"},
    {2, "romanian"},
    {4, "chinese"},
    {8, "japanese"},
    {16, "korean"},
    {32, "taiwanese"},
    {64, "thai"},
    {128, "hebrew"}
  ])

  type(:exd_qualifiers, :enum, [
    {0, "no_qualifier"},
    {1, "instantaneous"},
    {2, "average"},
    {3, "lap"},
    {4, "maximum"},
    {5, "maximum_average"},
    {6, "maximum_lap"},
    {7, "last_lap"},
    {8, "average_lap"},
    {9, "to_destination"},
    {10, "to_go"},
    {11, "to_next"},
    {12, "next_course_point"},
    {13, "total"},
    {14, "three_second_average"},
    {15, "ten_second_average"},
    {16, "thirty_second_average"},
    {17, "percent_maximum"},
    {18, "percent_maximum_average"},
    {19, "lap_percent_maximum"},
    {20, "elapsed"},
    {21, "sunrise"},
    {22, "sunset"},
    {23, "compared_to_virtual_partner"},
    {24, "maximum_24h"},
    {25, "minimum_24h"},
    {26, "minimum"},
    {27, "first"},
    {28, "second"},
    {29, "third"},
    {30, "shifter"},
    {31, "last_sport"},
    {32, "moving"},
    {33, "stopped"},
    {34, "estimated_total"},
    {242, "zone_9"},
    {243, "zone_8"},
    {244, "zone_7"},
    {245, "zone_6"},
    {246, "zone_5"},
    {247, "zone_4"},
    {248, "zone_3"},
    {249, "zone_2"},
    {250, "zone_1"}
  ])

  type(:warm_up_exercise_name, :uint16, [
    {0, "quadruped_rocking"},
    {1, "neck_tilts"},
    {2, "ankle_circles"},
    {3, "ankle_dorsiflexion_with_band"},
    {4, "ankle_internal_rotation"},
    {5, "arm_circles"},
    {6, "bent_over_reach_to_sky"},
    {7, "cat_camel"},
    {8, "elbow_to_foot_lunge"},
    {9, "forward_and_backward_leg_swings"},
    {10, "groiners"},
    {11, "inverted_hamstring_stretch"},
    {12, "lateral_duck_under"},
    {13, "neck_rotations"},
    {14, "opposite_arm_and_leg_balance"},
    {15, "reach_roll_and_lift"},
    {16, "scorpion", %{comment: "Deprecated do not use"}},
    {17, "shoulder_circles"},
    {18, "side_to_side_leg_swings"},
    {19, "sleeper_stretch"},
    {20, "slide_out"},
    {21, "swiss_ball_hip_crossover"},
    {22, "swiss_ball_reach_roll_and_lift"},
    {23, "swiss_ball_windshield_wipers"},
    {24, "thoracic_rotation"},
    {25, "walking_high_kicks"},
    {26, "walking_high_knees"},
    {27, "walking_knee_hugs"},
    {28, "walking_leg_cradles"},
    {29, "walkout"},
    {30, "walkout_from_push_up_position"}
  ])

  type(:shoulder_stability_exercise_name, :uint16, [
    {0, "90_degree_cable_external_rotation"},
    {1, "band_external_rotation"},
    {2, "band_internal_rotation"},
    {3, "bent_arm_lateral_raise_and_external_rotation"},
    {4, "cable_external_rotation"},
    {5, "dumbbell_face_pull_with_external_rotation"},
    {6, "floor_i_raise"},
    {7, "weighted_floor_i_raise"},
    {8, "floor_t_raise"},
    {9, "weighted_floor_t_raise"},
    {10, "floor_y_raise"},
    {11, "weighted_floor_y_raise"},
    {12, "incline_i_raise"},
    {13, "weighted_incline_i_raise"},
    {14, "incline_l_raise"},
    {15, "weighted_incline_l_raise"},
    {16, "incline_t_raise"},
    {17, "weighted_incline_t_raise"},
    {18, "incline_w_raise"},
    {19, "weighted_incline_w_raise"},
    {20, "incline_y_raise"},
    {21, "weighted_incline_y_raise"},
    {22, "lying_external_rotation"},
    {23, "seated_dumbbell_external_rotation"},
    {24, "standing_l_raise"},
    {25, "swiss_ball_i_raise"},
    {26, "weighted_swiss_ball_i_raise"},
    {27, "swiss_ball_t_raise"},
    {28, "weighted_swiss_ball_t_raise"},
    {29, "swiss_ball_w_raise"},
    {30, "weighted_swiss_ball_w_raise"},
    {31, "swiss_ball_y_raise"},
    {32, "weighted_swiss_ball_y_raise"}
  ])

  @doc "Shortcut to quickly get common message num without going through mesg type\n"
  @spec mesg_num(:hr | :file_id | :field_description | :developer_data_id) :: integer
  def mesg_num(:file_id) do
    0
  end

  def mesg_num(:field_description) do
    206
  end

  def mesg_num(:developer_data_id) do
    207
  end

  def mesg_num(:hr) do
    132
  end
end