// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.bluetooth;

/// Possible values for the LE Appearance property which describes the external
/// appearance of a peer at a high level.
/// (See the Bluetooth assigned-numbers document:
/// https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.characteristic.gap.appearance.xml)
/// This enum is flexible as newer devices may use new appearance values and in the future the
/// assigned numbers document may have additional entries.
flexible enum Appearance : uint16 {
    UNKNOWN = 0;
    PHONE = 64;
    COMPUTER = 128;
    WATCH = 192;
    WATCH_SPORTS = 193;
    CLOCK = 256;
    DISPLAY = 320;
    REMOTE_CONTROL = 384;
    EYE_GLASSES = 448;
    TAG = 512;
    KEYRING = 576;
    MEDIA_PLAYER = 640;
    BARCODE_SCANNER = 704;
    THERMOMETER = 768;
    THERMOMETER_EAR = 769;
    HEART_RATE_SENSOR = 832;
    HEART_RATE_SENSOR_BELT = 833;
    BLOOD_PRESSURE = 896;
    BLOOD_PRESSURE_ARM = 897;
    BLOOD_PRESSURE_WRIST = 898;
    HID = 960;
    HID_KEYBOARD = 961;
    HID_MOUSE = 962;
    HID_JOYSTICK = 963;
    HID_GAMEPAD = 964;
    HID_DIGITIZER_TABLET = 965;
    HID_CARD_READER = 966;
    HID_DIGITAL_PEN = 967;
    HID_BARCODE_SCANNER = 968;
    GLUCOSE_METER = 1024;
    RUNNING_WALKING_SENSOR = 1088;
    RUNNING_WALKING_SENSOR_IN_SHOE = 1089;
    RUNNING_WALKING_SENSOR_ON_SHOE = 1090;
    RUNNING_WALKING_SENSOR_ON_HIP = 1091;
    CYCLING = 1152;
    CYCLING_COMPUTER = 1153;
    CYCLING_SPEED_SENSOR = 1154;
    CYCLING_CADENCE_SENSOR = 1155;
    CYCLING_POWER_SENSOR = 1156;
    CYCLING_SPEED_AND_CADENCE_SENSOR = 1157;
    PULSE_OXIMETER = 3136;
    PULSE_OXIMETER_FINGERTIP = 3137;
    PULSE_OXIMETER_WRIST = 3138;
    WEIGHT_SCALE = 3200;
    PERSONAL_MOBILITY = 3264;
    PERSONAL_MOBILITY_WHEELCHAIR = 3265;
    PERSONAL_MOBILITY_SCOOTER = 3266;
    GLUCOSE_MONITOR = 3328;
    SPORTS_ACTIVITY = 5184;
    SPORTS_ACTIVITY_LOCATION_DISPLAY = 5185;
    SPORTS_ACTIVITY_LOCATION_AND_NAV_DISPLAY = 5186;
    SPORTS_ACTIVITY_LOCATION_POD = 5187;
    SPORTS_ACTIVITY_LOCATION_AND_NAV_POD = 5188;
};
