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

protocol Qmi {
    /// Give a channel handle that transports bi-directional QMI messages
    SetChannel(handle<channel> transport) -> () error zx.status;

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

    /// Pass an interface for QMI message snooping
    SetSnoopChannel(qmi_snoop.Publisher interface) -> () error zx.status;
};
