// Copyright 2021 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.bluetooth.rfcomm.test;

using fuchsia.bluetooth as bt;
using fuchsia.bluetooth.bredr as bredr;

/// The status of the line.
///
/// These are defined in GSM 07.10 Section 5.4.6.3.10.
type Status = strict enum {
    OK = 0;
    OVERRUN_ERROR = 1;
    PARITY_ERROR = 2;
    FRAMING_ERROR = 3;
};

/// Provides additional methods to initiate RFCOMM protocol behavior. These methods
/// are strictly for testing.
@discoverable
closed protocol RfcommTest {
    /// Disconnect the RFCOMM session with the connected peer.
    ///
    /// This is a no-op if there is no connected peer with identifier `id`.
    ///
    /// + request `id` is the unique identifier associated with the connected RFCOMM peer.
    strict Disconnect(struct {
        id bt.PeerId;
    });

    /// Notify the connected peer of a change in the remote line status.
    ///
    /// This is a no-op if there is no connected peer with identifier `id`.
    ///
    /// + request `id` is the unique identifier associated with the connected RFCOMM peer.
    /// + request `channel_number` is the identifier of the RFCOMM channel whose line status changed.
    /// + request `status` is the status of the line.
    strict RemoteLineStatus(struct {
        id bt.PeerId;
        channel_number bredr.RfcommChannel;
        status Status;
    });
};
