/*
 * This file is auto-generated, do not modify!
 *
 * SPDX-License-Identifier: LGPL-2.1-or-later
 */

#pragma once
#include <libfwupd/fwupd-build.h>
/**
 * FwupdDeviceFlags:
 *
 * Flags used to represent device attributes
 */
typedef enum {
    /**
     * FWUPD_DEVICE_FLAG_NONE:
     *
     * No flags set
     */
    FWUPD_DEVICE_FLAG_NONE = 0,
    /**
     * FWUPD_DEVICE_FLAG_INTERNAL:
     *
     * Device is internal to the platform and cannot be removed easily.
     */
    FWUPD_DEVICE_FLAG_INTERNAL = 1 << 0,
    /**
     * FWUPD_DEVICE_FLAG_UPDATABLE:
     *
     * Device has the ability to be updated in this or any other mode.
     */
    FWUPD_DEVICE_FLAG_UPDATABLE = 1 << 1,
    /**
     * FWUPD_DEVICE_FLAG_REQUIRE_AC:
     *
     * Device requires an external power source to be connected or the battery
     * level at a minimum threshold to update.
     */
    FWUPD_DEVICE_FLAG_REQUIRE_AC = 1 << 3,
    /**
     * FWUPD_DEVICE_FLAG_LOCKED:
     *
     * The device can not be updated without manual user interaction.
     */
    FWUPD_DEVICE_FLAG_LOCKED = 1 << 4,
    /**
     * FWUPD_DEVICE_FLAG_SUPPORTED:
     *
     * The device is found in metadata loaded into the daemon.
     */
    FWUPD_DEVICE_FLAG_SUPPORTED = 1 << 5,
    /**
     * FWUPD_DEVICE_FLAG_NEEDS_BOOTLOADER:
     *
     * The device requires entering a bootloader mode to be manually.
     */
    FWUPD_DEVICE_FLAG_NEEDS_BOOTLOADER = 1 << 6,
    /**
     * FWUPD_DEVICE_FLAG_NEEDS_REBOOT:
     *
     * The device requires a system reboot to apply firmware or to reload hardware.
     */
    FWUPD_DEVICE_FLAG_NEEDS_REBOOT = 1 << 8,
    /**
     * FWUPD_DEVICE_FLAG_REPORTED:
     *
     * The success or failure of a previous update has been reported to a metadata server.
     */
    FWUPD_DEVICE_FLAG_REPORTED = 1 << 9,
    /**
     * FWUPD_DEVICE_FLAG_NOTIFIED:
     *
     * The user has been notified about a change in the device state.
     */
    FWUPD_DEVICE_FLAG_NOTIFIED = 1 << 10,
    /**
     * FWUPD_DEVICE_FLAG_IS_BOOTLOADER:
     *
     * The device is currently in a read-only bootloader mode and not running application code.
     */
    FWUPD_DEVICE_FLAG_IS_BOOTLOADER = 1 << 13,
    /**
     * FWUPD_DEVICE_FLAG_WAIT_FOR_REPLUG:
     *
     * The device is in the middle of and update and the hardware is waiting to be probed or
     * replugged.
     */
    FWUPD_DEVICE_FLAG_WAIT_FOR_REPLUG = 1 << 14,
    /**
     * FWUPD_DEVICE_FLAG_NEEDS_SHUTDOWN:
     *
     * The device requires the system to be shutdown to finish application of new firmware.
     */
    FWUPD_DEVICE_FLAG_NEEDS_SHUTDOWN = 1 << 17,
    /**
     * FWUPD_DEVICE_FLAG_ANOTHER_WRITE_REQUIRED:
     *
     * The device requires the update to be retried, possibly with a different plugin.
     */
    FWUPD_DEVICE_FLAG_ANOTHER_WRITE_REQUIRED = 1 << 18,
    /**
     * FWUPD_DEVICE_FLAG_NEEDS_ACTIVATION:
     *
     * The device update needs to be separately activated.
     * This process may occur automatically on shutdown in some operating systems or when the
     * device is unplugged with some devices.
     */
    FWUPD_DEVICE_FLAG_NEEDS_ACTIVATION = 1 << 20,
    /**
     * FWUPD_DEVICE_FLAG_HISTORICAL:
     *
     * The device is used for historical data only.
     */
    FWUPD_DEVICE_FLAG_HISTORICAL = 1 << 22,
    /**
     * FWUPD_DEVICE_FLAG_WILL_DISAPPEAR:
     *
     * The device will disappear after the update is complete and success or failure can't be
     * verified.
     */
    FWUPD_DEVICE_FLAG_WILL_DISAPPEAR = 1 << 24,
    /**
     * FWUPD_DEVICE_FLAG_CAN_VERIFY:
     *
     * The device checksums can be compared against metadata.
     */
    FWUPD_DEVICE_FLAG_CAN_VERIFY = 1 << 25,
    /**
     * FWUPD_DEVICE_FLAG_CAN_VERIFY_IMAGE:
     *
     * The device application firmware image can be dumped from device for verification.
     */
    FWUPD_DEVICE_FLAG_CAN_VERIFY_IMAGE = 1 << 26,
    /**
     * FWUPD_DEVICE_FLAG_DUAL_IMAGE:
     *
     * The device firmware update architecture uses a redundancy mechanism such as A/B
     * partitions for updates.
     */
    FWUPD_DEVICE_FLAG_DUAL_IMAGE = 1 << 27,
    /**
     * FWUPD_DEVICE_FLAG_SELF_RECOVERY:
     *
     * In flashing mode, the device will only accept intended payloads and will revert back to
     * a valid firmware image if an invalid or incomplete payload was sent.
     */
    FWUPD_DEVICE_FLAG_SELF_RECOVERY = 1 << 28,
    /**
     * FWUPD_DEVICE_FLAG_USABLE_DURING_UPDATE:
     *
     * The device remains usable while the update flashes or schedules the update.
     * The update will implicitly be applied next time the device is power cycled or possibly
     * activated.
     */
    FWUPD_DEVICE_FLAG_USABLE_DURING_UPDATE = 1 << 29,
    /**
     * FWUPD_DEVICE_FLAG_VERSION_CHECK_REQUIRED:
     *
     * All firmware updates for this device require a firmware version check.
     */
    FWUPD_DEVICE_FLAG_VERSION_CHECK_REQUIRED = 1 << 30,
    /**
     * FWUPD_DEVICE_FLAG_INSTALL_ALL_RELEASES:
     *
     * Install each intermediate releases for the device rather than jumping directly to the
     * newest.
     */
    FWUPD_DEVICE_FLAG_INSTALL_ALL_RELEASES = 1ull<< 31,
    /**
     * FWUPD_DEVICE_FLAG_UPDATABLE_HIDDEN:
     *
     * The device is updatable but is currently inhibited from updates in the client.
     * Reasons include but are not limited to low power or requiring reboot from a previous
     * update.
     */
    FWUPD_DEVICE_FLAG_UPDATABLE_HIDDEN = 1ull<< 37,
    /**
     * FWUPD_DEVICE_FLAG_HAS_MULTIPLE_BRANCHES:
     *
     * The device supports switching to a different stream of firmware.
     */
    FWUPD_DEVICE_FLAG_HAS_MULTIPLE_BRANCHES = 1ull<< 39,
    /**
     * FWUPD_DEVICE_FLAG_BACKUP_BEFORE_INSTALL:
     *
     * The device firmware should be saved before installing firmware.
     */
    FWUPD_DEVICE_FLAG_BACKUP_BEFORE_INSTALL = 1ull<< 40,
    /**
     * FWUPD_DEVICE_FLAG_WILDCARD_INSTALL:
     *
     * All devices with matching GUIDs will be updated at the same time.
     * For some devices it is not possible to have different versions of firmware
     * for hardware of the same type. Updating one device will force update of
     * others with exactly the same instance IDs.
     */
    FWUPD_DEVICE_FLAG_WILDCARD_INSTALL = 1ull<< 42,
    /**
     * FWUPD_DEVICE_FLAG_ONLY_VERSION_UPGRADE:
     *
     * The device firmware can only be updated to a newer version and never downgraded or
     * reinstalled.
     */
    FWUPD_DEVICE_FLAG_ONLY_VERSION_UPGRADE = 1ull<< 43,
    /**
     * FWUPD_DEVICE_FLAG_UNREACHABLE:
     *
     * The device is currently unreachable, perhaps because it is in a lower power state or is
     * out of wireless range.
     */
    FWUPD_DEVICE_FLAG_UNREACHABLE = 1ull<< 44,
    /**
     * FWUPD_DEVICE_FLAG_AFFECTS_FDE:
     *
     * The device is warning that a volume with full-disk-encryption was found on this machine,
     * typically a Windows NTFS partition with BitLocker.
     * Updating the firmware on this device may invalidate secrets used to decrypt the volume,
     * and the recovery key may be required.
     * Supported clients will display this information as a warning to the user.
     */
    FWUPD_DEVICE_FLAG_AFFECTS_FDE = 1ull<< 45,
    /**
     * FWUPD_DEVICE_FLAG_END_OF_LIFE:
     *
     * The device is no longer supported by the original hardware vendor as it is considered
     * end-of-life. It it unlikely to receive firmware updates, even for security issues.
     */
    FWUPD_DEVICE_FLAG_END_OF_LIFE = 1ull<< 46,
    /**
     * FWUPD_DEVICE_FLAG_SIGNED_PAYLOAD:
     *
     * The firmware payload is verified on-device the payload using strong cryptography such
     * as RSA, AES or ECC.
     * It is usually not possible to modify or flash custom firmware not provided by the vendor.
     */
    FWUPD_DEVICE_FLAG_SIGNED_PAYLOAD = 1ull<< 47,
    /**
     * FWUPD_DEVICE_FLAG_UNSIGNED_PAYLOAD:
     *
     * The firmware payload is unsigned and it is possible to modify and flash custom firmware.
     */
    FWUPD_DEVICE_FLAG_UNSIGNED_PAYLOAD = 1ull<< 48,
    /**
     * FWUPD_DEVICE_FLAG_EMULATED:
     *
     * The device is emulated and should not be recorded by the backend.
     */
    FWUPD_DEVICE_FLAG_EMULATED = 1ull<< 49,
    /**
     * FWUPD_DEVICE_FLAG_EMULATION_TAG:
     *
     * The device should be recorded by the backend, allowing emulation.
     */
    FWUPD_DEVICE_FLAG_EMULATION_TAG = 1ull<< 50,
    /**
     * FWUPD_DEVICE_FLAG_ONLY_EXPLICIT_UPDATES:
     *
     * The device should stay on one firmware version unless the new version is explicitly
     * specified.
     * This can either be done using `fwupdmgr install`, using GNOME Firmware, or using a BKC
     * config.
     */
    FWUPD_DEVICE_FLAG_ONLY_EXPLICIT_UPDATES = 1ull<< 51,
    /**
     * FWUPD_DEVICE_FLAG_CAN_EMULATION_TAG:
     *
     * The device can be recorded by the backend, allowing emulation.
     */
    FWUPD_DEVICE_FLAG_CAN_EMULATION_TAG = 1ull<< 52,
    /**
     * FWUPD_DEVICE_FLAG_INSTALL_SKIP_VERSION_CHECK:
     *
     * The device doesn't require verification of the newly installed version.
     */
    FWUPD_DEVICE_FLAG_INSTALL_SKIP_VERSION_CHECK = 1ull<< 53,
    /**
     * FWUPD_DEVICE_FLAG_UNKNOWN:
     *
     * This flag is not defined, this typically will happen from mismatched fwupd library and
     * clients.
     */
    FWUPD_DEVICE_FLAG_UNKNOWN = G_MAXUINT64,
}  FwupdDeviceFlags;
const gchar *fwupd_device_flag_to_string(FwupdDeviceFlags val) G_GNUC_CONST;
FwupdDeviceFlags fwupd_device_flag_from_string(const gchar *val) G_GNUC_CONST G_GNUC_NON_NULL(1);
/**
 * FwupdDeviceProblem:
 *
 * Problems are reasons why the device is not updatable.
 * All problems have to be fixable by the user, rather than the plugin author.
 */
typedef enum {
    /**
     * FWUPD_DEVICE_PROBLEM_NONE:
     *
     * No device problems detected.
     */
    FWUPD_DEVICE_PROBLEM_NONE = 0,
    /**
     * FWUPD_DEVICE_PROBLEM_SYSTEM_POWER_TOO_LOW:
     *
     * The system power is too low to perform the update.
     */
    FWUPD_DEVICE_PROBLEM_SYSTEM_POWER_TOO_LOW = 1 << 0,
    /**
     * FWUPD_DEVICE_PROBLEM_UNREACHABLE:
     *
     * The device is unreachable, or out of wireless range.
     */
    FWUPD_DEVICE_PROBLEM_UNREACHABLE = 1 << 1,
    /**
     * FWUPD_DEVICE_PROBLEM_POWER_TOO_LOW:
     *
     * The device battery power is too low.
     */
    FWUPD_DEVICE_PROBLEM_POWER_TOO_LOW = 1 << 2,
    /**
     * FWUPD_DEVICE_PROBLEM_UPDATE_PENDING:
     *
     * The device is waiting for the update to be applied.
     */
    FWUPD_DEVICE_PROBLEM_UPDATE_PENDING = 1 << 3,
    /**
     * FWUPD_DEVICE_PROBLEM_REQUIRE_AC_POWER:
     *
     * The device requires AC power to be connected.
     */
    FWUPD_DEVICE_PROBLEM_REQUIRE_AC_POWER = 1 << 4,
    /**
     * FWUPD_DEVICE_PROBLEM_LID_IS_CLOSED:
     *
     * The device cannot be used while the laptop lid is closed.
     */
    FWUPD_DEVICE_PROBLEM_LID_IS_CLOSED = 1 << 5,
    /**
     * FWUPD_DEVICE_PROBLEM_IS_EMULATED:
     *
     * The device is emulated from a different host.
     */
    FWUPD_DEVICE_PROBLEM_IS_EMULATED = 1 << 6,
    /**
     * FWUPD_DEVICE_PROBLEM_MISSING_LICENSE:
     *
     * The device cannot be updated due to missing vendor's license.
     */
    FWUPD_DEVICE_PROBLEM_MISSING_LICENSE = 1 << 7,
    /**
     * FWUPD_DEVICE_PROBLEM_SYSTEM_INHIBIT:
     *
     * The device cannot be updated due to a system-wide inhibit.
     */
    FWUPD_DEVICE_PROBLEM_SYSTEM_INHIBIT = 1 << 8,
    /**
     * FWUPD_DEVICE_PROBLEM_UPDATE_IN_PROGRESS:
     *
     * The device cannot be updated as it is already being updated.
     */
    FWUPD_DEVICE_PROBLEM_UPDATE_IN_PROGRESS = 1 << 9,
    /**
     * FWUPD_DEVICE_PROBLEM_IN_USE:
     *
     * The device is in use and cannot be interrupted, for instance taking a phone call.
     */
    FWUPD_DEVICE_PROBLEM_IN_USE = 1 << 10,
    /**
     * FWUPD_DEVICE_PROBLEM_DISPLAY_REQUIRED:
     *
     * The device cannot be used while there are no displays plugged in.
     */
    FWUPD_DEVICE_PROBLEM_DISPLAY_REQUIRED = 1 << 11,
    /**
     * FWUPD_DEVICE_PROBLEM_LOWER_PRIORITY:
     *
     * We have two ways of communicating with one physical device, so we hide the worse one.
     */
    FWUPD_DEVICE_PROBLEM_LOWER_PRIORITY = 1 << 12,
    /**
     * FWUPD_DEVICE_PROBLEM_INSECURE_PLATFORM:
     *
     * The device is signed with an insecure key
     */
    FWUPD_DEVICE_PROBLEM_INSECURE_PLATFORM = 1 << 13,
    /**
     * FWUPD_DEVICE_PROBLEM_FIRMWARE_LOCKED:
     *
     * The firmware is locked in the system setup.
     */
    FWUPD_DEVICE_PROBLEM_FIRMWARE_LOCKED = 1 << 14,
    /**
     * FWUPD_DEVICE_PROBLEM_UNKNOWN:
     *
     * This problem is not defined, this typically will happen from mismatched
     * fwupd library and clients.
     */
    FWUPD_DEVICE_PROBLEM_UNKNOWN = G_MAXUINT64,
}  FwupdDeviceProblem;
const gchar *fwupd_device_problem_to_string(FwupdDeviceProblem val) G_GNUC_CONST;
FwupdDeviceProblem fwupd_device_problem_from_string(const gchar *val) G_GNUC_CONST G_GNUC_NON_NULL(1);
