// 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.hardware.telephony.transport;

using zx;
using fuchsia.telephony.snoop as qmi_snoop;

closed protocol Qmi {
    /// Give a channel handle that transports bi-directional QMI messages
    strict SetChannel(resource struct {
        transport zx.Handle:<CHANNEL, zx.Rights.WAIT | zx.Rights.WRITE | zx.Rights.READ>;
    }) -> () error zx.Status;

    /// Configure the network used by the transport
    /// Currently only sets network up/down
    strict SetNetwork(struct {
        connected bool;
    }) -> ();

    /// Pass an interface for QMI message snooping
    strict SetSnoopChannel(resource struct {
        interface client_end:qmi_snoop.Publisher;
    }) -> () error zx.Status;
};
