// 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 zx;

@transport("Syscall")
protocol debug {
    /// Read a message from the debug serial port.
    /// Rights: handle must have resource kind ZX_RSRC_KIND_ROOT.
    debug_read(resource struct {
        handle handle:RESOURCE;
    }) -> (struct {
        status status;
        buffer string;
        actual usize;
    });

    /// Write a message to the debug serial port.
    /// Rights: None.
    debug_write(struct {
        buffer string;
    }) -> (struct {
        status status;
    });

    /// Rights: resource must have resource kind ZX_RSRC_KIND_ROOT.
    debug_send_command(resource struct {
        resource handle:RESOURCE;
        buffer string;
    }) -> (struct {
        status status;
    });
};
