1 // SPDX-License-Identifier: Apache-2.0 2 // SPDX-FileCopyrightText: Copyright 2017 Google Inc 3 4 #include "failsafeloggers/builder.hpp" 5 6 #include "failsafeloggers/failsafe_logger.hpp" 7 #include "failsafeloggers/failsafe_logger_utility.hpp" 8 9 #include <algorithm> 10 #include <cstddef> 11 #include <cstdint> 12 #include <iostream> 13 #include <memory> 14 #include <string> 15 #include <unordered_map> 16 #include <vector> 17 18 namespace pid_control 19 { 20 buildFailsafeLoggers(const std::unordered_map<int64_t,std::shared_ptr<ZoneInterface>> & zones,const size_t logMaxCountPerSecond)21void buildFailsafeLoggers( 22 const std::unordered_map<int64_t, std::shared_ptr<ZoneInterface>>& zones, 23 const size_t logMaxCountPerSecond /* = 20 */) 24 { 25 zoneIdToFailsafeLogger = 26 std::unordered_map<int64_t, 27 std::shared_ptr<pid_control::FailsafeLogger>>(); 28 sensorNameToZoneId = 29 std::unordered_map<std::string, std::vector<int64_t>>(); 30 for (const auto& zoneIdToZone : zones) 31 { 32 int64_t zoneId = zoneIdToZone.first; 33 // Create a failsafe logger for each zone. 34 zoneIdToFailsafeLogger[zoneId] = std::make_shared<FailsafeLogger>( 35 logMaxCountPerSecond, zoneIdToZone.second->getFailSafeMode()); 36 // Build the sensor-zone topology map. 37 std::vector<std::string> sensorNames = 38 zoneIdToZone.second->getSensorNames(); 39 for (const std::string& sensorName : sensorNames) 40 { 41 if (std::find(sensorNameToZoneId[sensorName].begin(), 42 sensorNameToZoneId[sensorName].end(), zoneId) == 43 sensorNameToZoneId[sensorName].end()) 44 { 45 sensorNameToZoneId[sensorName].push_back(zoneId); 46 } 47 } 48 std::cerr << "Build failsafe logger for Zone " << zoneId 49 << " with initial " 50 << "failsafe mode: " << zoneIdToZone.second->getFailSafeMode() 51 << "\n"; 52 } 53 } 54 55 } // namespace pid_control 56