<?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="GetIpAddresses">
      <tp:docstring>
        Returns the IP addresses.
      </tp:docstring>
      <arg name="options" type="a{sv}" direction="in">
        <tp:docstring>
          Options:
            v6 (bool): True for IPv6.
        </tp:docstring>
      </arg>
      <arg name="result" type="as" direction="out">
        <tp:docstring>
          The list of address output.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </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>
      <arg name="username" type="s" direction="in">
        <tp:docstring>
          Username of the user for which the logs are requested.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="BackupArcBugReport">
      <tp:docstring>
        Retrieves the ARC bug report and saves it in debugd daemon store.
        If a backup already exists, it is over-written.
        If backup operation fails, an error is logged.
      </tp:docstring>
      <arg name="username" type="s" direction="in">
        <tp:docstring>
          Username or hash of the user for which the report is backed up.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="DeleteArcBugReportBackup">
      <tp:docstring>
        Deletes the backed up ARC bug report saved in daemon store.
        If delete operation fails, an error is logged.
      </tp:docstring>
      <arg name="username" type="s" direction="in">
        <tp:docstring>
          Username or hash of the user for which the report is backed up.
        </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.
            short_self_test: launches short-time nvme self-test.
            long_self_test: launches long-time nvme self-test.
            stop_self_test: stops nvme self-test.
        </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="NvmeLog">
      <tp:docstring>
        Runs nvme utility to fetch log message.
      </tp:docstring>
      <arg name="page_id" type="u" direction="in">
        <tp:docstring>
          ID of desired log page in NVMe controller.
        </tp:docstring>
      </arg>
      <arg name="length" type="u" direction="in">
        <tp:docstring>
          Required length of byte-data.
        </tp:docstring>
      </arg>
      <arg name="raw_binary" type="b" direction="in">
        <tp:docstring>
          Flag to NVMe controller for raw binary output.
        </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="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="lang" type="s" direction="in">
        Language that user owning the session has selected for the UI to be
        passed to the dispatcher instance.
      </arg>
      <arg name="status" type="b" direction="out">
        Whether the VM Plugin dispatcher 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 a probe statement by the runtime_probe helper with pre-defined
        sandbox options in rootfs.
      </tp:docstring>
      <arg name="probe_statement" type="s" direction="in">
        <tp:docstring>
          A JSON string representing a probe function which will be executed by
          the runtime_probe helper.
        </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="output" type="s" direction="out">
        <tp:docstring>
          Output of the ectool i2cread command.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="EcGetInventory">
      <tp:docstring>
        Runs the 'ectool inventory' command with pre-defined
        sandbox options in rootfs and returns the output.
      </tp:docstring>
      <arg name="output" type="s" direction="out">
        Returns the output of the 'ectool inventory' command.
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="simple"/>
    </method>
    <method name="CallDmesg">
      <tp:docstring>
        Runs the command 'dmesg' with the given inputs.
      </tp:docstring>
      <arg name="options" type="a{sv}" direction="in">
        <tp:docstring>
          Options to pass to the dmesg command:
          show-delta (bool): Display the timestamp and the time delta
            spent between messages.
          human (bool): Enable human-readable output.
          kernel (bool): Print kernel messages.
          force-prefix (bool): Add facility, level or timestamp
            information to each line of a multi-line message.
          raw (bool): Print the raw message buffer.
          ctime (bool): Print human-readable timestamps.
          notime (bool): Do not print kernel's timestamps.
          userspace (bool): Print userspace messages.
          decode (bool): Decode facility and level (priority) numbers
            to human-readable prefixes.
        </tp:docstring>
      </arg>
      <arg name="output" type="s" direction="out">
        Returns the output of the 'dmesg' command.
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="EcTypeCEnterMode">
      <tp:docstring>
        Runs the 'ectool typeccontrol' command with pre-defined
        sandbox options in rootfs to enter a USB Type-C mode on the
        specified port.
      </tp:docstring>
      <arg name="port_num" type="u" direction="in">
        <tp:docstring>
          The index number of the port for which the enter mode
          command will be run. This wil be used in the ectool command
          without changes.
        </tp:docstring>
      </arg>
      <arg name="mode" type="u" direction="in">
        <tp:docstring>
          The mode number argument specifying the mode to be entered.
          This will be used in the ectool command directly without changes.
        </tp:docstring>
      </arg>
      <arg name="output" type="s" direction="out">
        Returns the output of the 'ectool typeccontrol' command.
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
  </interface>
</node>
