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

#ifndef SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_TEST_FAKE_UCODE_TEST_H_
#define SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_TEST_FAKE_UCODE_TEST_H_

#include <memory>

#include <zxtest/zxtest.h>

#include "third_party/iwlwifi/test/sim-trans.h"
#include "src/devices/testing/mock-ddk/mock-device.h"

namespace wlan::testing {

// Helper class for unit test code to inherit in order to create an fake firmware with
// customized ucode capability.
//
// Note that the contructor will call the init function of transportation layer,
// and assert it is successful. The test case doesn't need to init again.
//
class FakeUcodeTest : public ::zxtest::Test {
 public:
  // The constructor takes four parameters. They will be assigned to the API flags and capabilities.
  // The *_index are the array index in iwl_ucode_capabilities._api[] and ._capa[]. The *_value are
  // limited from 0 to 31. These 2 fields are used to present all values of IWL_UCODE_TLV_API_* and
  // IWL_UCODE_TLV_CAPA_*.
  //
  // TODO(fxbug.dev/92106): support multiple bits.
  //
  // For how iwlwifi driver is parsing the ucode capabilities from firmware tlv binary, please refer
  // to iwl_set_ucode_capabilities() in iwlwifi/iwl-drv.c. For the value options, please refer to
  // enum iwl_ucode_tlv_capa and enum iwl_ucode_tlv_api in iwlwifi/fw/file.h.
  FakeUcodeTest(uint32_t capa_index, uint32_t capa_val, uint32_t api_index, uint32_t api_val);
  ~FakeUcodeTest() = default;

 protected:
  std::shared_ptr<MockDevice> fake_parent_;
  SimTransport sim_trans_;
};

}  // namespace wlan::testing

#endif  // SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_TEST_FAKE_UCODE_TEST_H_
