<?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.
          Frequency-based capture options are only available in developer mode.
          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>
    <method name="EcTypeCExitMode">
      <tp:docstring>
        Runs the 'ectool typeccontrol' command with pre-defined
        sandbox options in rootfs to exit 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 exit mode
          command will be run. This wil be used in the ectool command
          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>
    <method name="KernelFeatureEnable">
      <tp:docstring>
        Execute a sequence of commands to enable a kernel feature.
      </tp:docstring>
      <arg name="name" type="s" direction="in">
        <tp:docstring>
          The name of the feature to enable.
        </tp:docstring>
      </arg>
      <arg name="result" type="b" direction="out">
        <tp:docstring>
          The result of the method call (success or fail).
        </tp:docstring>
      </arg>
      <arg name="err_str" type="s" direction="out">
        <tp:docstring>
          An err_str that describing the reasons for failure.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <method name="KernelFeatureList">
      <tp:docstring>
        Get a CSV list of kernel features that are available to be enabled.
      </tp:docstring>
      <arg name="result" type="b" direction="out">
        <tp:docstring>
          The result of the method call (success or fail).
        </tp:docstring>
      </arg>
      <arg name="csv" type="s" direction="out">
        <tp:docstring>
          The CSV result or an error string that describing the reasons for failure.
        </tp:docstring>
      </arg>
      <annotation name="org.chromium.DBus.Method.Kind" value="normal"/>
    </method>
    <signal name="PacketCaptureStart">
      <tp:docstring>
        The signal is emitted when a packet capture process starts in debugd.
        The signal is expected to be received by Chrome to send a notification
        to the user to indicate the ongoing packet capture.
      </tp:docstring>
    </signal>
    <signal name="PacketCaptureStop">
      <tp:docstring>
        The signal is emitted when the packet capture process is stopped in
        debugd. The signal is expected to be received by Chrome to close the
        notification about packet capture.
      </tp:docstring>
    </signal>
  </interface>
</node>
