// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.device.manager;

using zx;

/// Dumps text debug information.
///
/// All methods dump ascii text into a VMO, this allows the caller the flexibility to decide
/// how much data they want. Use the returned `written` value to read the data, no string
/// termination is guaranteed.
@discoverable
@for_deprecated_c_bindings
protocol DebugDumper {
    /// Print device tree into `output`, returns bytes `written` and bytes `available` to write.
    DumpTree(resource struct {
        output zx.handle:VMO;
    }) -> (struct {
        status zx.status;
        written uint64;
        available uint64;
    });

    /// Print information about all drivers into `output`, returns bytes `written` and bytes `available` to write.
    DumpDrivers(resource struct {
        output zx.handle:VMO;
    }) -> (struct {
        status zx.status;
        written uint64;
        available uint64;
    });

    /// Print all devices and their binding properties into `output`, returns bytes `written`
    /// and bytes `available` to write.
    DumpBindingProperties(resource struct {
        output zx.handle:VMO;
    }) -> (struct {
        status zx.status;
        written uint64;
        available uint64;
    });
};
