<!DOCTYPE node PUBLIC
"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
  <interface name='org.freedesktop.fwupd'>
    <doc:doc>
      <doc:description>
        <doc:para>
          The interface used for querying firmware for the system.
        </doc:para>
      </doc:description>
    </doc:doc>

    <!--***********************************************************-->
    <property name='DaemonVersion' type='s' access='read'>
      <doc:doc>
        <doc:description>
          <doc:para>
            The daemon version.
          </doc:para>
        </doc:description>
      </doc:doc>
    </property>

    <!--***********************************************************-->
    <property name='HostBkc' type='s' access='read'>
      <doc:doc>
        <doc:description>
          <doc:para>
            The optional best known configuration to use when syncing back to a
            known state, e.g. <doc:tt>vendor-factory-2021q1</doc:tt>.
          </doc:para>
        </doc:description>
      </doc:doc>
    </property>

    <!--***********************************************************-->
    <property name='HostProduct' type='s' access='read'>
      <doc:doc>
        <doc:description>
          <doc:para>
            The product name string for the host.
          </doc:para>
        </doc:description>
      </doc:doc>
    </property>

    <!--***********************************************************-->
    <property name='HostMachineId' type='s' access='read'>
      <doc:doc>
        <doc:description>
          <doc:para>
            The machine ID for the host.
          </doc:para>
        </doc:description>
      </doc:doc>
    </property>

    <!--***********************************************************-->
    <property name='HostSecurityId' type='s' access='read'>
      <doc:doc>
        <doc:description>
          <doc:para>
            The Host Security ID, for instance <doc:tt>HSI:2</doc:tt>
          </doc:para>
        </doc:description>
      </doc:doc>
    </property>

    <!--***********************************************************-->
    <property name='Tainted' type='b' access='read'>
      <doc:doc>
        <doc:description>
          <doc:para>
            If the daemon has been tainted with a 3rd party plugin.
          </doc:para>
        </doc:description>
      </doc:doc>
    </property>

    <!--***********************************************************-->
    <property name='Interactive' type='b' access='read'>
      <doc:doc>
        <doc:description>
          <doc:para>
            If the daemon is running on an interactive terminal.
          </doc:para>
        </doc:description>
      </doc:doc>
    </property>

    <!--***********************************************************-->
    <property name='Status' type='u' access='read'>
      <doc:doc>
        <doc:description>
          <doc:para>
            The daemon status, e.g. <doc:tt>decompressing</doc:tt>.
          </doc:para>
        </doc:description>
      </doc:doc>
    </property>

    <!--***********************************************************-->
    <property name='Percentage' type='u' access='read'>
      <doc:doc>
        <doc:description>
          <doc:para>
            The job percentage completion, or 0 for unknown.
          </doc:para>
        </doc:description>
      </doc:doc>
    </property>

    <!--***********************************************************-->
    <property name='BatteryLevel' type='u' access='read'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Returns the system battery level, or 101 for unknown.
          </doc:para>
        </doc:description>
      </doc:doc>
    </property>

    <!--***********************************************************-->
    <property name='BatteryThreshold' type='u' access='read'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Returns the system battery threshold under which a firmware update cannot be performed.
          </doc:para>
        </doc:description>
      </doc:doc>
    </property>

    <!--***********************************************************-->
    <property name='OnlyTrusted' type='b' access='read'>
      <doc:doc>
        <doc:description>
          <doc:para>
            If the daemon requires trusted payloads.
          </doc:para>
        </doc:description>
      </doc:doc>
    </property>

    <!--***********************************************************-->
    <method name='GetDevices'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Gets a list of all the devices that are supported.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='aa{sv}' name='devices' direction='out'>
        <doc:doc>
          <doc:summary>
            <doc:para>An array of devices, with any properties set on each.</doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='GetPlugins'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Gets a list of all the plugins being used by the daemon.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='aa{sv}' name='plugins' direction='out'>
        <doc:doc>
          <doc:summary>
            <doc:para>An array of plugins, with any properties set on each.</doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='GetReleases'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Gets a list of all the releases for a specific device.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='s' name='device_id' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              A device ID.
            </doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
      <arg type='aa{sv}' name='releases' direction='out'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              An array of releases (with the release number as the key),
              with any properties set on each.
            </doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='GetDowngrades'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Gets a list of all the downgrades possible for a specific device.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='s' name='device_id' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              A device ID.
            </doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
      <arg type='aa{sv}' name='releases' direction='out'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              An array of releases (with the release number as the key),
              with any properties set on each.
            </doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='GetUpgrades'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Gets a list of all the upgrades possible for a specific device.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='s' name='device_id' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              A device ID.
            </doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
      <arg type='aa{sv}' name='releases' direction='out'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              An array of releases (with the release number as the key),
              with any properties set on each.
            </doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='GetDetails'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Gets details about a local firmware file.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='h' name='handle' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              An index into the array of file descriptors that may have
              been sent with the DBus message.
            </doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
      <arg type='aa{sv}' name='results' direction='out'>
        <doc:doc>
          <doc:summary>
            <doc:para>An array of results, with any properties set on each.</doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='GetHistory'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Gets a list of all the past firmware updates.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='aa{sv}' name='devices' direction='out'>
        <doc:doc>
          <doc:summary>
            <doc:para>An array of devices, with any properties set on each.</doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='GetHostSecurityAttrs'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Gets a list of all the Host Security ID attributes.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='aa{sv}' name='attrs' direction='out'>
        <doc:doc>
          <doc:summary>
            <doc:para>An array of HSI attributes, with any properties set on each.</doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='GetHostSecurityEvents'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Gets a list of all the Host Security ID events.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='u' name='limit' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>The maximum number of events, or 0 for no limit.</doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
      <arg type='aa{sv}' name='attrs' direction='out'>
        <doc:doc>
          <doc:summary>
            <doc:para>An array of HSI attributes, with any properties set on each.</doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='GetReportMetadata'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Gets metadata to include with the firmware and security reports.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='a{ss}' name='attrs' direction='out'>
        <doc:doc>
          <doc:summary>
            <doc:para>An array of string key values.</doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='SetHints'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Sets optional hints from the client that may affect the list of devices.
            A typical hint might be <doc:tt>locale</doc:tt> and unknown hints should be ignored.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='a{ss}' name='hints' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>An array of string key values.</doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='Install'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Schedules a firmware to be installed.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='s' name='id' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              An ID, typically a GUID of the hardware to update, or the string
              <doc:tt>*</doc:tt> to match any applicable hardware.</doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
      <arg type='h' name='handle' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              An index into the array of file descriptors that may have
              been sent with the DBus message.
            </doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
      <arg type='a{sv}' name='options' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              Options to be used when constructing the profile, e.g.
              <doc:tt>offline=True</doc:tt>.
            </doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='Verify'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Verifies firmware on a device by reading it back and performing
            a cryptographic hash, typically SHA1.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='s' name='id' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              An ID, typically a GUID of the hardware.</doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='VerifyUpdate'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Updates the cryptographic hash stored for a device.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='s' name='id' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              An ID, typically a GUID of the hardware.</doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='Unlock'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Unlock the device to allow firmware access.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='s' name='id' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              An ID, typically a GUID of the hardware.</doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='Activate'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Activate a firmware update on the device.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='s' name='id' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              An ID, typically the sha hash of the device string.</doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='GetResults'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Gets the results of an offline update.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='s' name='id' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              An ID, typically a GUID of the hardware that was updated, or the
              string <doc:tt>*</doc:tt> to match any hardware.</doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
      <arg type='a{sv}' name='results' direction='out'>
        <doc:doc>
          <doc:summary>
            <doc:para>Results about the update, e.g. <doc:tt>success=True</doc:tt></doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='GetRemotes'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Gets the list of remotes.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='aa{sv}' name='results' direction='out'>
        <doc:doc>
          <doc:summary>
            <doc:para>The array remotes, with properties</doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='GetApprovedFirmware'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Gets the list of approved firmware that can be applied to devices.
            In an enterprise this will be configured by a domain administrator.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='as' name='checksums' direction='out'>
        <doc:doc>
          <doc:summary>
            <doc:para>The checksums of the archives</doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='SetApprovedFirmware'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Sets the list of approved firmware that can be applied to devices.
            In an enterprise this will be configured by a domain administrator.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='as' name='checksums' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>The checksums of the archives</doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='GetBlockedFirmware'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Gets the list of blocked firmware.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='as' name='checksums' direction='out'>
        <doc:doc>
          <doc:summary>
            <doc:para>The checksums of the archives</doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='SetBlockedFirmware'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Sets the list of blocked firmware that can be applied to devices.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='as' name='checksums' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>The checksums of the archives</doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='SetFeatureFlags'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Sets the features the client supports. This allows firmware to depend on
            specific front-end features, for instance showing the user an image on
            how to detach the hardware.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='t' name='feature_flags' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>The features the front end supports</doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='ClearResults'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Clears the results of an offline update.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='s' name='id' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              An ID, typically a GUID of the hardware that was updated, or the
              string <doc:tt>*</doc:tt> to match any hardware.</doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='ModifyDevice'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Modifies a remote in some way.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='s' name='device_id' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              A device ID, or the string <doc:tt>*</doc:tt> to match any hardware.
            </doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
      <arg type='s' name='key' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              The key, e.g. 'Flags'.
            </doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
      <arg type='s' name='value' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              The value of the correct type, e.g. a URL.
            </doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='ModifyConfig'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Modify persistent configuration for daemon
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='s' name='key' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              The key, e.g. 'DisabledPlugins'.
            </doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
      <arg type='s' name='value' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              The value of the correct type, e.g. a URL.
            </doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='UpdateMetadata'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Adds AppStream resource information from a session client.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='s' name='remote_id' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              Remote ID to tag the metadata objects with, e.g. 'lvfs-testing'.
            </doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
      <arg type='h' name='data' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              File handle to AppStream metadata.
            </doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
      <arg type='h' name='signature' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              File handle to AppStream metadata GPG signature.
            </doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='ModifyRemote'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Modifies a remote in some way.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='s' name='remote_id' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              Remote ID, e.g. 'lvfs-testing'.
            </doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
      <arg type='s' name='key' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              The key, e.g. 'Enabled'.
            </doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
      <arg type='s' name='value' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              The value of the correct type, e.g. a URL.
            </doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='SelfSign'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Signs some text, typically using a self-signed PKCS-7 certificate.
          </doc:para>
        </doc:description>
      </doc:doc>
      <arg type='s' name='data' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              String input data, certainly *NOT* binary data.
            </doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
      <arg type='a{sv}' name='options' direction='in'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              Options to be used when signing, e.g.
              <doc:tt>add-cert=True</doc:tt> or <doc:tt>add-timestamp=True</doc:tt>.
            </doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
      <arg type='s' name='sig' direction='out'>
        <doc:doc>
          <doc:summary>
            <doc:para>
              The detached signature string.
            </doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
    </method>

    <!--***********************************************************-->
    <method name='Quit'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Ask the daemon to quit. This can only be called by the root user.
          </doc:para>
        </doc:description>
      </doc:doc>
    </method>

    <!--***********************************************************-->
    <signal name='Changed'>
      <doc:doc>
        <doc:description>
          <doc:para>
            Some value on the interface or the number of devices or
            profiles has changed.
          </doc:para>
        </doc:description>
      </doc:doc>
    </signal>

    <!--***********************************************************-->
    <signal name='DeviceAdded'>
      <arg type='a{sv}' name='device' direction='out'>
        <doc:doc>
          <doc:summary>
            <doc:para>A device structure.</doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
      <doc:doc>
        <doc:description>
          <doc:para>
            A device has been added.
          </doc:para>
        </doc:description>
      </doc:doc>
    </signal>

    <!--***********************************************************-->
    <signal name='DeviceRemoved'>
      <arg type='a{sv}' name='device' direction='out'>
        <doc:doc>
          <doc:summary>
            <doc:para>A device structure.</doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
      <doc:doc>
        <doc:description>
          <doc:para>
            A device has been removed.
          </doc:para>
        </doc:description>
      </doc:doc>
    </signal>

    <!--***********************************************************-->
    <signal name='DeviceChanged'>
      <arg type='a{sv}' name='device' direction='out'>
        <doc:doc>
          <doc:summary>
            <doc:para>A device structure.</doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
      <doc:doc>
        <doc:description>
          <doc:para>
            A device has been changed.
          </doc:para>
        </doc:description>
      </doc:doc>
    </signal>

    <!--***********************************************************-->
    <signal name='DeviceRequest'>
      <arg type='a{sv}' name='request' direction='out'>
        <doc:doc>
          <doc:summary>
            <doc:para>A device request.</doc:para>
          </doc:summary>
        </doc:doc>
      </arg>
      <doc:doc>
        <doc:description>
          <doc:para>
            A device request to the client.
          </doc:para>
        </doc:description>
      </doc:doc>
    </signal>

  </interface>
</node>
