// Copyright 2023 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 test.wlan.testcontroller;

using fuchsia.wlan.fullmac;
using zx;

alias FullmacId = uint32;

closed protocol TestController {

    /// Create and bind Fullmac driver that forwards all incoming calls
    /// to the |bridge_client|. The Fullmac driver will also create an instance
    /// of SME on binding.
    ///
    /// The user should expect to receive a call to
    /// WlanFullmacImpl::Start shortly after calling this.
    ///
    /// Returns an |id| that uniquely identifies the new instance of the Fullmac driver,
    /// which can be used to delete the driver instance later.
    strict CreateFullmac(resource struct {
        bridge_client client_end:fuchsia.wlan.fullmac.WlanFullmacImpl;
    }) -> (resource struct {
        id FullmacId;
    }) error zx.Status;

    /// Deletes the Fullmac driver with the given |id|.
    strict DeleteFullmac(resource struct {
        id FullmacId;
    }) -> () error zx.Status;
};
