// Copyright 2020 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.
@available(added=7)
library fuchsia.factory.wlan;

using zx;

const MAX_BUFFER_SIZE uint64 = 16384;

/// Allows the factory testing tool to communicate to the firmware via the driver using
/// a pre-formatted command buffer to observe and/or control the WLAN hardware's behavior.
closed protocol Iovar {

    /// + request `iface_idx` interface index in the firmware
    /// + request `cmd` pre-defined command index specified by the manufacturer
    /// + request `request` additional data associated with the command
    /// - response `result` pre-formatted response data retrieved from firmware
    /// * error a status code indicating why the request could not be completed.
    strict Get(struct {
        iface_idx int32;
        cmd int32;
        request vector<uint8>:MAX_BUFFER_SIZE;
    }) -> (struct {
        result vector<uint8>:MAX_BUFFER_SIZE;
    }) error zx.Status;

    /// + request `iface_idx` interface index in the firmware
    /// + request `cmd` pre-defined command index specified by the manufacturer
    /// + request `request` additional data associated with the command
    /// * error a status code indicating why the request could not be completed.
    strict Set(struct {
        iface_idx int32;
        cmd int32;
        request vector<uint8>:MAX_BUFFER_SIZE;
    }) -> () error zx.Status;
};
