blob: 2a1a701ce30cacaf64742c4a11a32670a4445a4e [file]
#include "tlbmc/hal/fru_scanner_gpio.h"
#include <memory>
#include <string>
#include <utility>
#include <vector>
#include "bus_topology.pb.h"
#include "absl/log/log.h"
#include "absl/memory/memory.h"
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "g3/macros.h"
#include "tlbmc/collector/gpio_collector.h"
#include "gpio_config.pb.h"
#include "gpio_fru_config.pb.h"
#include "tlbmc/hal/fru_scanner.h"
#include "status.pb.h"
namespace milotic_tlbmc {
absl::StatusOr<std::unique_ptr<FruScannerGpio>> FruScannerGpio::Create(
const Options& options) {
if (options.gpio_collector == nullptr) {
return absl::InvalidArgumentError(
"FruScannerGpio::Create: GpioCollector cannot be null");
}
return absl::WrapUnique(
new FruScannerGpio(options.components, options.gpio_collector));
}
absl::StatusOr<std::vector<std::unique_ptr<GpioFruInfo>>>
FruScannerGpio::ScanAllGpioFrus() const {
if (gpio_collector_ == nullptr) {
return absl::InternalError(
"FruScannerGpio::ScanAllGpioFrus: GpioCollector is null");
}
std::vector<std::unique_ptr<GpioFruInfo>> gpio_frus;
for (const auto& component : gpio_components_) {
if (component.gpio_line_name().empty()) {
continue;
}
auto gpio_fru = std::make_unique<GpioFruInfo>();
gpio_fru->expected_barepath = component.barepath();
ECCLESIA_ASSIGN_OR_RETURN(
bool is_active, gpio_collector_->IsActive(component.gpio_line_name()));
if (is_active) {
gpio_fru->presence_status = PresenceStatus::PRESENCE_STATUS_PRESENT;
} else {
gpio_fru->presence_status = PresenceStatus::PRESENCE_STATUS_NOT_FOUND;
}
gpio_frus.push_back(std::move(gpio_fru));
}
return gpio_frus;
}
} // namespace milotic_tlbmc