blob: 72b11bfc49a77a062724a080931fb4e2522924a2 [file] [log] [blame]
#include "tlbmc/hal/fake_fru_scanner_fram.h"
#include <algorithm>
#include <cstddef>
#include <cstdint>
#include <memory>
#include <utility>
#include <vector>
#include "absl/log/log.h"
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "absl/strings/str_cat.h"
#include "absl/time/time.h"
#include "tlbmc/hal/fru_scanner.h"
namespace milotic_tlbmc {
absl::StatusOr<std::unique_ptr<I2cFruInfo>>
FakeFruScannerFram::GetI2cFruInfoFromBus(
int bus, int address, absl::Duration delay_between_reads) const {
LOG(INFO) << "FakeFruScannerFram::GetI2cFruInfoFromBus called for bus " << bus
<< " address " << address;
if (bus == options_.bus && address == options_.address) {
auto fake_fru_info = std::make_unique<I2cFruInfo>();
fake_fru_info->bus = bus;
fake_fru_info->address = address;
fake_fru_info->data = GetCaviumFramData(kCaviumFramDataSize);
return fake_fru_info;
}
return absl::NotFoundError(absl::StrCat("No fake data configured for bus ",
bus, " address ", address));
}
absl::StatusOr<std::vector<std::unique_ptr<I2cFruInfo>>>
FakeFruScannerFram::ScanAllI2cFrus() const {
LOG(INFO) << "FakeFruScannerFram::ScanAllI2cFrus called";
std::vector<std::unique_ptr<I2cFruInfo>> frus;
auto fru_info = GetI2cFruInfoFromBus(options_.bus, options_.address,
absl::Milliseconds(1));
if (!fru_info.ok()) {
LOG(ERROR) << "Failed to read FRAM at bus " << options_.bus << " address "
<< options_.address << " with status: " << fru_info.status();
return fru_info.status();
}
frus.push_back(std::move(*fru_info));
return frus;
}
std::vector<uint8_t> FakeFruScannerFram::GetCaviumFramData(size_t size) {
size_t copy_size = std::min(size, kCaviumFramDataSize);
std::vector<uint8_t> data(kCaviumFramData, kCaviumFramData + copy_size);
LOG(INFO) << "GetI2cDumpTestData returning data of size: " << data.size();
return data;
}
} // namespace milotic_tlbmc