<?xml version="1.0" encoding="UTF-8" ?>

<node name="/org/chromium/debugd"
      xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
  <interface name="org.chromium.debugd">
    <method name="PingStart">
      <tp:docstring>
        Starts pinging the specified hostname with the specified options, with
        output directed to the given output file descriptor. The returned opaque
        string functions as a handle for this particular ping. Multiple pings
        can be running at once.
      </tp:docstring>
      <arg name="outfd" type="h" direction="in">
        <tp:docstring>
          File descriptor to send output to.
        </tp:docstring>
      </arg>
      <arg name="destination" type="s" direction="in">
        <tp:docstring>
          Destination host to connect to.
        </tp:docstring>
      </arg>
      <arg name="options" type="a{sv}" direction="in">
        <tp:docstring>
          Options to pass to the ping command. Accepted keys include:
            broadcast (bool): Send broadcast pings.
            count (int default 4): Number of packets to send.
            interval (int): Time to wait between packets.
            numeric (bool): Print numeric remote hosts.
            packetsize (int): Size of each packet sent.
            v6 (bool): True for ipv6.
            waittime (int): Time to wait for a response.
          Unrecognized keys return a DBus error and print no output to the
          supplied file descriptor.
        </tp:docstring>
      </arg>
      <arg name="handle" type="s" direction="out">
        <tp:docstring>
          Opaque handle for this ping.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="PingStop">
      <tp:docstring>
        Stops a running ping.
      </tp:docstring>
      <arg name="handle" type="s" direction="in">
        Handle to the ping to stop. If an empty string is passed, stops all
        running pings.
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="SystraceStart">
      <tp:docstring>
        Start system/kernel tracing.  If tracing is already enabled it is
        stopped first and any collected events are discarded.  The kernel
        must have been configured to support tracing.
      </tp:docstring>
      <arg name="categories" type="s" direction="in">
        <tp:docstring>
          Trace event categories to enable.  If none are specified then
          all known events are enabled.  Multiple categories are specified
          separated by spaces.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="SystraceStop">
      <tp:docstring>
        Stop system/kernel tracing and write the collected event data.
      </tp:docstring>
      <arg name="outfd" type="h" direction="in">
        <tp:docstring>
          File descriptor to send event data to.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="SystraceStatus">
      <tp:docstring>
        Return current status for system/kernel tracing including whether it
        is enabled, the tracing clock, and the set of events enabled.
      </tp:docstring>
      <arg name="status" type="s" direction="out">
        Free-form text reporting status.
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="TracePathStart">
      <arg name="outfd" type="h" direction="in">
        <tp:docstring>
          File descriptor to send output to.
        </tp:docstring>
      </arg>
      <arg name="destination" type="s" direction="in">
        <tp:docstring>
          Destination host[/port] to trace a path to.
        </tp:docstring>
      </arg>
      <arg name="options" type="a{sv}" direction="in">
        <tp:docstring>
          Options to pass to the tracepath command:
            numeric (bool): Print numeric remote hosts.
            v6 (bool): True for ipv6.
          Unrecognized keys return a DBus error and print no output to the
          supplied file descriptor.
        </tp:docstring>
      </arg>
      <arg name="handle" type="s" direction="out">
        <tp:docstring>
          Opaque handle for this ping.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="TracePathStop">
      <tp:docstring>
        Stops a running tracepath.
      </tp:docstring>
      <arg name="handle" type="s" direction="in">
        <tp:docstring>
          Handle to the tracepath to stop. If an empty string is passed, stops
          all running tracepaths.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="GetRoutes">
      <tp:docstring>
        Returns the routing table.
      </tp:docstring>
      <arg name="options" type="a{sv}" direction="in">
        <tp:docstring>
          Options:
            numeric (bool): Deprecated, numeric hosts are always given.
            v6 (bool): True for ipv6.
        </tp:docstring>
      </arg>
      <arg name="result" type="as" direction="out">
        <tp:docstring>
          The list of routes.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="GetNetworkStatus">
      <tp:docstring>
        Returns network information as a JSON string. See the design document
        for a rationale.
      </tp:docstring>
      <arg name="status" type="s" direction="out">
        <tp:docstring>
          Network information as a JSON string.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="GetPerfOutput">
      <tp:docstring>
        Runs system-wide perf profiling. The profile parameters are selected by
        perf_args.
      </tp:docstring>
      <arg name="duration_sec" type="u" direction="in">
        <tp:docstring>
          Duration to run perf in seconds.
        </tp:docstring>
      </arg>
      <arg name="perf_args" type="as" direction="in">
        <tp:docstring>
          The perf parameters to pass to quipper, which will forward them to
          perf after checking they are safe.
        </tp:docstring>
      </arg>
      <arg name="status" type="i" direction="out">
        <tp:docstring>
          Status code from running perf and serializing the output.
        </tp:docstring>
      </arg>
      <arg name="perf_data" type="ay" direction="out">
        <tp:docstring>
          Perf report output data as a protobuf.
        </tp:docstring>
      </arg>
      <arg name="perf_stat" type="ay" direction="out">
        <tp:docstring>
          Perf stat output data as a protobuf.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="GetPerfOutputFd">
      <tp:docstring>
        Runs system-wide perf profiling. The profile parameters are selected by
        perf_args.
        This method runs quipper asynchronously so that debugd isn't blocked for
        duration_sec. The DBus client reads the perf output using the file
        descriptor. Only one profiler session is allowed to run using this
        method. Calling this method while the profiler is running yields a DBus
        error. The profiler session can optionally be stopped using method
        StopPerf before duration_sec elapses.
      </tp:docstring>
      <arg name="duration_sec" type="u" direction="in">
        <tp:docstring>
          Duration to run perf in seconds.
        </tp:docstring>
      </arg>
      <arg name="perf_args" type="as" direction="in">
        <tp:docstring>
          The perf parameters to pass to quipper, which will forward them to
          perf after checking they are safe.
        </tp:docstring>
      </arg>
      <arg name="stdout" type="h" direction="in">
        <tp:docstring>
          quipper's stdout will be connected to this file descriptor.
        </tp:docstring>
      </arg>
      <arg name="session_id" type="t" direction="out">
        <tp:docstring>
          The identifier of the profiler session. Will be non-zero if the
          profiler is started successfully. It can be used in method
          StopPerf to stop the profiler and gather output right away.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="StopPerf">
      <tp:docstring>
        Stop the existing profiler session and gather perf output right away. If
        the collection started by GetPerfOutputFd has finished, calling this
        method will silently succeed.
      </tp:docstring>
      <arg name="session_id" type="t" direction="in">
        <tp:docstring>
          The profiler session ID returned from the GetPerfOutputFd method. It
          is used to stop the existing profiler session.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="DumpDebugLogs">
      <tp:docstring>
        Packages up system logs into a .tar(.gz) and returns it over the
        supplied file descriptor.
      </tp:docstring>
      <arg name="is_compressed" type="b" direction="in">
        <tp:docstring>
          If true, output content should be compressed (.tar.gz), otherwise
          output content is uncompressed (.tar).
        </tp:docstring>
      </arg>
      <arg name="outfd" type="h" direction="in">
        <tp:docstring>
          File descriptor to emit the .tar.gz file over.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="SetDebugMode">
      <tp:docstring>
        Enables or disables debug mode for a specified subsystem.
      </tp:docstring>
      <arg name="subsystem" type="s" direction="in">
        <tp:docstring>
          Subsystem to change the debug mode of. One of "cellular", "wifi",
          "ethernet" or "none".
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="GetLog">
      <tp:docstring>
        Fetches the contents of a single system log, identified by name. See
        /src/log_tool.cc for a list of valid names.
      </tp:docstring>
      <arg name="log" type="s" direction="in" />
      <arg name="contents" type="s" direction="out" />
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="GetAllLogs">
      <tp:docstring>
        Returns all the system logs.
      </tp:docstring>
      <arg name="logs" type="a{ss}" direction="out" />
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <!-- GetFeedbackLogs has been replaced by GetBigFeedbackLogs -->
    <method name="GetBigFeedbackLogs">
      <tp:docstring>
        Fills the system logs for feedback reports in the file whose file
        descriptor is given. This is used for logs that are so big that they
        exceed the limits of D-Bus returning them.
      </tp:docstring>
      <arg name="outfd" type="h" direction="in">
        <tp:docstring>
          File descriptor to emit the logs to.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="GetJournalLog">
      <tp:docstring>
        Fills the journal log in export format for feedback reports in the
        file whose file descriptor is given.
      </tp:docstring>
      <arg name="outfd" type="h" direction="in">
        <tp:docstring>
          File descriptor to emit the logs to.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="GetExample">
      <tp:docstring>
        Example method. See /doc/hacking.md.
      </tp:docstring>
      <arg name="result" type="s" direction="out" />
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="CupsAddAutoConfiguredPrinter">
      <tp:docstring>
        Add a printer that can be auto-configured to CUPS.  Immediately attempt
        to connect.  Returns true if setup was successful.
      </tp:docstring>
      <arg name="result" type="i" direction="out" />
      <arg name="name" type="s" direction="in" />
      <arg name="uri" type="s" direction="in" />
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="CupsAddManuallyConfiguredPrinter">
      <tp:docstring>
        Add a printer to CUPS using the passed PPD contents.  Immediately
        attempt to connect.  Returns true if setup was successful.
      </tp:docstring>
      <arg name="result" type="i" direction="out" />
      <arg name="name" type="s" direction="in" />
      <arg name="uri" type="s" direction="in" />
      <arg name="ppd_contents" type="ay" direction="in">
        <tp:docstring>
          The contents of the CUPS Postscript Printer Driver for this printer.
          This data may optionally be gzip compressed.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="CupsRemovePrinter">
      <tp:docstring>
        Remove a printer from CUPS.  Returns true if the printer was removed
        successfully.
      </tp:docstring>
      <arg name="result" type="b" direction="out" />
      <arg name="name" type="s" direction="in">
        <tp:docstring>
          The name of the printer to remove.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="GetInterfaces">
      <tp:docstring>
        Returns information about network interfaces as a JSON string.
      </tp:docstring>
      <arg name="result" type="s" direction="out" />
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="TestICMP">
      <tp:docstring>
        Tests ICMP connectivity to a specified host.
      </tp:docstring>
      <arg name="host" type="s" direction="in" />
      <arg name="result" type="s" direction="out" />
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="TestICMPWithOptions">
      <tp:docstring>
        Tests ICMP connectivity to a specified host (with options).
      </tp:docstring>
      <arg name="host" type="s" direction="in" />
      <arg name="options" type="a{ss}" direction="in" />
      <arg name="result" type="s" direction="out" />
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="BatteryFirmware">
      <tp:docstring>
        Runs BatteryFirmware utility.
      </tp:docstring>
      <arg name="option" type="s" direction="in">
        <tp:docstring>
          Option to pass to the BatteryFirmware command:
            info: Get Battery Firmware Info.
            check: Check if AC Adapter is connected.
            update: Trigger Battery Firmware Update.
        </tp:docstring>
      </arg>
      <arg name="result" type="s" direction="out">
        <tp:docstring>
          Battery command output.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="Smartctl">
      <tp:docstring>
        Runs Smartctl utility.
      </tp:docstring>
      <arg name="option" type="s" direction="in">
        <tp:docstring>
          Option to pass to the Smartctl command:
            abort_test: aborts the offline test.
            attributes: prints device attributes.
            capabilities: prints generic smart capabilities.
            error: prints device error messages.
            health: prints device health status.
            selftest: prints offline test results.
            short_test: starts a short offline test.
        </tp:docstring>
      </arg>
      <arg name="result" type="s" direction="out">
        <tp:docstring>
          Smartctl command output.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="Mmc">
      <tp:docstring>
        Runs mmc utility.
      </tp:docstring>
      <arg name="option" type="s" direction="in">
        <tp:docstring>
          Option to pass to the mmc command:
            extcsd_read: print extcsd data from root device.
            extcsd_dump: print raw extcsd data from root device.
        </tp:docstring>
      </arg>
      <arg name="result" type="s" direction="out">
        <tp:docstring>
          `mmc` command output.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="Nvme">
      <tp:docstring>
        Runs nvme utility.
      </tp:docstring>
      <arg name="option" type="s" direction="in">
        <tp:docstring>
          Option to pass to the nvme command:
            identify_controller: prints nvme device identity data.
        </tp:docstring>
      </arg>
      <arg name="result" type="s" direction="out">
        <tp:docstring>
          `nvme` command output.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="MemtesterStart">
      <tp:docstring>
        Starts running memtester.
      </tp:docstring>
      <arg name="outfd" type="h" direction="in">
        <tp:docstring>
          File descriptor to send output to.
        </tp:docstring>
      </arg>
      <arg name="memory" type="u" direction="in">
        <tp:docstring>
          The amount of memory to allocate and test in megabytes.
        </tp:docstring>
      </arg>
      <arg name="status" type="s" direction="out">
        <tp:docstring>
          Opaque handle to the memtester.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="MemtesterStop">
      <tp:docstring>
        Stops running memtester.
      </tp:docstring>
      <arg name="handle" type="s" direction="in">
        <tp:docstring>
          Handle to the memtester to stop. If an empty string is passed, stops
          all running memtests.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="BadblocksStart">
      <tp:docstring>
        Starts running badblocks test.
      </tp:docstring>
      <arg name="outfd" type="h" direction="in">
        <tp:docstring>
          File descriptor to send output to.
        </tp:docstring>
      </arg>
      <arg name="status" type="s" direction="out">
        <tp:docstring>
          Opaque handle to the badblocks.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="BadblocksStop">
      <tp:docstring>
        Stops running badblocks.
      </tp:docstring>
      <arg name="handle" type="s" direction="in">
        <tp:docstring>
          Handle to the badblocks to stop. If an empty string is passed, stops
          all running badblocks.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="PacketCaptureStart">
      <tp:docstring>
        Starts a packet capture with the specified options, with diagnostic
        status directed to the "statfd" file descriptor and packet capture
        data sent to the "outfd" file descriptor.  The returned opaque string
        functions as a handle for this particular packet capture.  Multiple
        captures can be running at once.  Captures can be initiated on
        Ethernet-like devices or WiFi devices in "client mode" (showing only
        Ethernet frames) by specifying the "device" parameter (see below).
        By specifying a channel, the script will find or create a "monitor
        mode" interface if one is available and produce an "over the air"
        packet capture.  The name of the output packet capture file is sent
        to the output file descriptor.
      </tp:docstring>
      <arg name="statfd" type="h" direction="in">
        <tp:docstring>
          File descriptor to send status information to.
        </tp:docstring>
      </arg>
      <arg name="outfd" type="h" direction="in">
        <tp:docstring>
          File descriptor to send packet capture output to.
        </tp:docstring>
      </arg>
      <arg name="options" type="a{sv}" direction="in">
        <tp:docstring>
          Options to pass to the packet capture command. Accepted keys include:
            device (string): An existing device to perform a packet capture on.
            frequency (int): Radio frequency (in MHz) to perform capture on.
            ht_location (string): The string "above" or "below", representing
                the offset of any secondary channel used in a 40 MHz HT
                (high throughput) caputre.
            monitor_connection_on (string): Instead of providing the "frequency"
                and "ht_location" parameters above, this paramter specifies the
                name of a currently connected 802.11 interface.  A packet
                capture is initated on the same channel as this connection.
          Unrecognized keys return a DBus error and print no output to the
          supplied file descriptor.
        </tp:docstring>
      </arg>
      <arg name="handle" type="s" direction="out">
        <tp:docstring>
          Opaque handle for this packet capture.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="PacketCaptureStop">
      <tp:docstring>
        Stops a running packet capture.
      </tp:docstring>
      <arg name="handle" type="s" direction="in">
        Handle to the packet capture to stop. If an empty string is passed,
        stops all running packet captures.
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="LogKernelTaskStates">
      <tp:docstring>
        Triggers show-task-states(T) SysRq.
        See https://www.kernel.org/doc/Documentation/sysrq.txt.
      </tp:docstring>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="UploadCrashes">
      <tp:docstring>
        Triggers uploading of system crashes (the crash_sender program).
      </tp:docstring>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="UploadSingleCrash">
      <tp:docstring>
        Uploads a single crash report immediately. Crash report data is
        contained in the message.
      </tp:docstring>
      <arg name="files" type="a(sh)" direction="in">
        <tp:docstring>
          Array of files to include in the crash report. String is the base
          file name.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <tp:property name="CrashSenderTestMode" type="b" access="readwrite">
      <tp:docstring>
        If true, any UploadSingleCrash call will invoke crash_sender with
        --test_mode.
      </tp:docstring>
    </tp:property>
    <method name="RemoveRootfsVerification">
      <tp:docstring>
        Removes rootfs verification. Requires a system reboot before it will
        take effect. Restricted to pre-owner dev mode.
      </tp:docstring>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="EnableBootFromUsb">
      <tp:docstring>
        Enables OS booting from a USB image. Restricted to pre-owner dev mode.
      </tp:docstring>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="ConfigureSshServer">
      <tp:docstring>
        Sets up sshd to provide an SSH server immediately and on future reboots.
        Also installs the test SSH keys to allow access by cros tools. Requires
        that rootfs verification has been removed. Restricted to pre-owner dev
        mode.
      </tp:docstring>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="SetUserPassword">
      <tp:docstring>
        Sets both the system and dev mode password for the indicated account.
        Restricted to pre-owner dev mode.
      </tp:docstring>
      <arg name="username" type="s" direction="in">
        <tp:docstring>
          Username to set the new password for.
        </tp:docstring>
      </arg>
      <arg name="password" type="s" direction="in">
        <tp:docstring>
          Password to assign.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="EnableChromeRemoteDebugging">
      <tp:docstring>
        Sets up Chrome for remote debugging. It will take effect after a reboot
        and using port 9222.
        Requires that rootfs verification has been removed. Restricted to
        pre-owner dev mode.
      </tp:docstring>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="EnableChromeDevFeatures">
      <tp:docstring>
        Convenience function to enable a predefined set of tools from the Chrome
        UI. Equivalent to calling these functions in order:
          1. EnableBootFromUsb()
          2. ConfigureSshServer()
          3. SetUserPassword("root", root_password)
        Requires that rootfs verification has been removed. If any sub-function
        fails, this function will exit with an error without attempting any
        further configuration or rollback. Restricted to pre-owner dev mode.
      </tp:docstring>
      <arg name="root_password" type="s" direction="in">
        <tp:docstring>
          Password to assign to the root user. If the string is empty, it will
          default to "test0000".
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="QueryDevFeatures">
      <tp:docstring>
        Queries which dev features have been enabled. Each dev feature will be
        indicated by a bit flag in the return value. Flags are defined in the
        DevFeatureFlag enumeration. If the dev tools are unavailable (system is
        not in dev mode/pre-login state), the DEV_FEATURES_DISABLED flag will be
        set and the rest of the bits will always be set to 0.
      </tp:docstring>
      <arg name="features" type="i" direction="out">
        <tp:docstring>
          Feature enabled flags or DEV_FEATURES_DISABLED flag.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <tp:enum name="DevFeatureFlag" type="i">
      <tp:docstring>
        Bit flags representing individual development features. Currently
        dbusxx-xml2cpp does not extract enum values, so any changes here should
        be manually flushed to platform/system_api/dbus/service_constants.h.
      </tp:docstring>
      <tp:enumvalue suffix="DEV_FEATURES_DISABLED" value="0x0001">
        <tp:docstring>
          Dev features query is unavailable due to access restrictions.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="DEV_FEATURE_ROOTFS_VERIFICATION_REMOVED"
                    value="0x0002">
        <tp:docstring>
          Rootfs verification has been removed, including the required system
          reset.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="DEV_FEATURE_BOOT_FROM_USB_ENABLED" value="0x0004">
        <tp:docstring>
          Booting from USB has been enabled.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="DEV_FEATURE_SSH_SERVER_CONFIGURED" value="0x0008">
        <tp:docstring>
          The SSH server has been configured to auto-start on boot and the test
          SSH keys have been installed. Both of these conditions must be met
          for this flag to be signaled.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="DEV_FEATURE_DEV_MODE_ROOT_PASSWORD_SET"
                    value="0x0010">
        <tp:docstring>
          The devmode root account password has been set.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="DEV_FEATURE_SYSTEM_ROOT_PASSWORD_SET"
                    value="0x0020">
        <tp:docstring>
          The system root account password has been set.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="DEV_FEATURE_CHROME_REMOTE_DEBUGGING_ENABLED"
                    value="0x0040">
        <tp:docstring>
          The Chrome remote debugging feature has been enabled. Chrome will
          be listening on port 9222. The port is not publicly accessible. User
          needs to use SSH port forwarding to be able to access it.
        </tp:docstring>
      </tp:enumvalue>
    </tp:enum>
    <method name="EnableDevCoredumpUpload">
      <tp:docstring>
        Allow uploading of device coredump files.
      </tp:docstring>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="DisableDevCoredumpUpload">
      <tp:docstring>
        Disallow uploading of device coredump files.
      </tp:docstring>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="SetOomScoreAdj">
      <tp:docstring>
        Set OOM score by writing scores to procfs /proc/pid/oom_score_adj.
        It is an operation which needs root privilege so needs to be handled
        carefully:
        1. Only user chronos can request the operation.
        2. It can only modify processes owned by chronos or run in Android
        container.
      </tp:docstring>
      <arg name="scores" type="a{ii}" direction="in">
        <tp:docstring>
          Arrays of (pid, score) pairs.
        </tp:docstring>
      </arg>
      <arg name="out" type="s" direction="out">
        <tp:docstring>
          Output from the helper of the operation. Empty on success.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="SwapEnable">
      <tp:docstring>
        Enable swap file usage via config files.
      </tp:docstring>
      <arg name="status" type="s" direction="out">
        Free-form text reporting status.
      </arg>
      <arg name="size" type="i" direction="in">
        <tp:docstring>
          Size (in MB) for the swap file.
        </tp:docstring>
      </arg>
      <arg name="change_now" type="b" direction="in">
        <tp:docstring>
          Whether to enable immediately, or wait until next reboot.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="SwapDisable">
      <tp:docstring>
        Disable swap file usage via config files.
      </tp:docstring>
      <arg name="status" type="s" direction="out">
        Free-form text reporting status.
      </arg>
      <arg name="change_now" type="b" direction="in">
        <tp:docstring>
          Whether to disable immediately, or wait until next reboot.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="KstaledSetRatio">
      <tp:docstring>
       Sets the ratio to use for kstaled, 0 will disable the feature.
       The kstaled ratio is a control of how aggressively kstaled will
       attempt to swap, higher values are more aggressive and consume
       more CPU.
      </tp:docstring>
      <arg name="result" type="b" direction="out" />
      <arg name="ratio" type="y" direction="in">
        <tp:docstring>
          The kstaled ratio to use.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="SwapStartStop">
      <tp:docstring>
        Turn swap usage on/off (leaves config files alone).
      </tp:docstring>
      <arg name="status" type="s" direction="out">
        Free-form text reporting status.
      </arg>
      <arg name="on" type="b" direction="in">
        <tp:docstring>
          Whether to turn it on or off.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="SwapStatus">
      <tp:docstring>
        Show current swap status.
      </tp:docstring>
      <arg name="status" type="s" direction="out">
        Free-form text reporting status.
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="SwapSetParameter">
      <tp:docstring>
        Persistently change the value of various parameters.
      </tp:docstring>
      <arg name="status" type="s" direction="out">
        Free-form text reporting status.
      </arg>
      <arg name="command_name" type="s" direction="in">
        <tp:docstring>
          The name of the swap subcommand, usually set_something.
        </tp:docstring>
      </arg>
      <arg name="value" type="i" direction="in">
        <tp:docstring>
          The unsigned integer value that some parameter is set to.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="SetU2fFlags">
      <tp:docstring>
        Modify u2fd daemon debugging/override flags.
      </tp:docstring>
      <arg name="flags" type="s" direction="in">
        <tp:docstring>
          Flags (comma separated) to force debugging features.
          See debugd::u2f_flags in system_api for supported flags.
        </tp:docstring>
      </arg>
      <arg name="status" type="s" direction="out" />
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="GetU2fFlags">
      <tp:docstring>
        Get u2fd daemon debugging/override flags.
      </tp:docstring>
      <arg name="flags" type="s" direction="out">
        <tp:docstring>
          Flags (comma separated) that are currently set.
          See debugd::u2f_flags in system_api for supported flags.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="ContainerStarted">
      <tp:docstring>
        Notify debugd that a container is starting up.
      </tp:docstring>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="ContainerStopped">
      <tp:docstring>
        Notify debugd that a container has stopped.
      </tp:docstring>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="SetWifiPowerSave">
      <tp:docstring>
        Enable/disable WiFi power save mode.
      </tp:docstring>
      <arg name="enable" type="b" direction="in">
        <tp:docstring>
          Whether to enable or disable.
        </tp:docstring>
      </arg>
      <arg name="status" type="s" direction="out">
        New power save mode, or error.
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="GetWifiPowerSave">
      <tp:docstring>
        Show current WiFi power save mode.
      </tp:docstring>
      <arg name="status" type="s" direction="out">
        Current power save mode.
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="RunShillScriptStart">
      <tp:docstring>
        Run a shill debug script in a sandboxed environment.
      </tp:docstring>
      <arg name="outfd" type="h" direction="in">
        <tp:docstring>
          File descriptor to send output to.
        </tp:docstring>
      </arg>
      <arg name="script" type="s" direction="in">
        <tp:docstring>
          The script to run.
        </tp:docstring>
      </arg>
      <arg name="script_args" type="as" direction="in">
        <tp:docstring>
          The command line flags to pass to the script.
        </tp:docstring>
      </arg>
      <arg name="handle" type="s" direction="out">
        <tp:docstring>
          Opaque handle for this run.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="RunShillScriptStop">
      <tp:docstring>
        Stops a running script.
      </tp:docstring>
      <arg name="handle" type="s" direction="in">
        Handle to the script to stop.
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="StartVmConcierge">
      <tp:docstring>
        Starts the virtual machine concierge service.  Returns true if the
        service was successfully started and is available over dbus, false
        otherwise.
      </tp:docstring>
      <arg name="status" type="b" direction="out">
        Whether the concierge service is ready to handle requests.
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="async"/>
    </method>
    <method name="StopVmConcierge">
      <tp:docstring>
        Stops the virtual machine concierge service.
      </tp:docstring>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="StartVmPluginDispatcher">
      <tp:docstring>
        Starts the VM Plugin Dispatcher service.  Returns true if the service was
        successfully started and is available over dbus, false otherwise.
      </tp:docstring>
      <arg name="user_id_hash" type="s" direction="in">
        Cryptohome ID of the user owning the session that will own this
        dispatcher instance.
      </arg>
      <arg name="status" type="b" direction="out">
        Whether the VM Plugin dispather service is ready to handle requests.
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="async"/>
    </method>
    <method name="StopVmPluginDispatcher">
      <tp:docstring>
        Stops the VM Plugin dispatcher service.
      </tp:docstring>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="SetRlzPingSent">
      <tp:docstring>
        Sets should_send_rlz_ping in RW_VPD to 0. Upon success, proceeds to
        remove rlz_embargo_end_date in RW_VPD.
      </tp:docstring>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="UpdateAndVerifyFWOnUsbStart">
      <tp:docstring>
        Start updating the GSC FW of the USB-connected device (only if the
        device's FW is not up-to-date) and verifying AP and EC RO FW integrity
        of the device.
      </tp:docstring>
      <arg name="outfd" type="h" direction="in">
        <tp:docstring>
          File descriptor to forward process output to.
        </tp:docstring>
      </arg>
      <arg name="image_file" type="s" direction="in">
        <tp:docstring>
          Path to the local Cr50 image file.
        </tp:docstring>
      </arg>
      <arg name="ro_db_dir" type="s" direction="in">
        <tp:docstring>
          Path to the local RO descriptor files folder.
        </tp:docstring>
      </arg>
      <arg name="handle" type="s" direction="out">
        <tp:docstring>
          Opaque handle for the VerifyRo process.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="UpdateAndVerifyFWOnUsbStop">
      <tp:docstring>
        Stops a running VerifyRo.
      </tp:docstring>
      <arg name="handle" type="s" direction="in">
        Handle to the VerifyRo process to stop.
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="SetSchedulerConfiguration">
      <tp:docstring>
        Set the scheduler configuration policy.
      </tp:docstring>
      <arg name="policy" type="s" direction="in">
        Either "conservative" or "performance".
      </arg>
      <arg name="result" type="b" direction="out">
        <tp:docstring>
          Whether setting the policy was successful.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="EvaluateProbeFunction">
      <tp:docstring>
        Evaluates the statment with runtime_probe_helper with pre-defined
        sandbox options in rootfs.
      </tp:docstring>
      <arg name="sandbox_info" type="s" direction="in">
        <tp:docstring>
          Information about how to sandbox the probe_statement. A string is
          taken to look for multiple files that define different sandbox
          details in /etc/runtime_probe/sandbox. Unless the OS allows debug
          feature (i.e. cros_debug=1), failing to read/enforce any sandbox
          detail will raise a DBus error.
        </tp:docstring>
      </arg>
      <arg name="probe_statement" type="s" direction="in">
        <tp:docstring>
          A JSON string passed as an argument to runtime_probe_helper
          executable.
        </tp:docstring>
      </arg>
      <arg name="outfd" type="h" direction="out">
        <tp:docstring>
          File descriptor to send output to.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="SetSchedulerConfigurationV2">
      <tp:docstring>
        Set the scheduler configuration policy.
      </tp:docstring>
      <arg name="policy" type="s" direction="in">
        Either "conservative" or "performance".
      </arg>
      <arg name="lock_policy" type="b" direction="in">
        Argument to lock the policy till the device is rebooted. Only takes
        effect if set to true and policy is "conservative". Results in error if
        set to true and the policy is "performance". Has no effect if set to
        false.
      </arg>
      <arg name="result" type="b" direction="out">
        <tp:docstring>
          Whether setting the policy, and optionally locking it, was successful.
          Returns false if locked to "consevative" and the policy argument is
          "performance". Returns true if policy was locked to "conservative" and
          the policy argument is "conservative".
        </tp:docstring>
      </arg>
      <arg name="num_cores_disabled" type="u" direction="out">
        <tp:docstring>
          The number of logical CPU cores disabled after the D-Bus call is done.
          This is always populated regardless of whether the |result| argument
          is true.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="WifiFWDump">
      <tp:docstring>
        Trigger wifi firmware dump.
      </tp:docstring>
      <arg name="output" type="s" direction="out">
        <tp:docstring>
          Output message. Indicates success/failure of the command to the user.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="CollectSmartBatteryMetric">
      <tp:docstring>
        Runs the ectool i2cread command with pre-defined
        sandbox options in rootfs and retrieves the
        requested smart battery metric used by cros_healthd.
      </tp:docstring>
      <arg name="metric_name" type="s" direction="in">
        <tp:docstring>
          The name of the smart battery cros_healthd wants to collect.
          Examples include manufacture_date_smart and temperature_smart.
        </tp:docstring>
      </arg>
      <arg name="outfd" type="h" direction="out">
        <tp:docstring>
          File descriptor to send output to.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
  </interface>
</node>
