xref: /openbmc/bmcweb/features/redfish/include/utils/sensor_utils.hpp (revision 1516c21b27faf8dcf7c41e9b7253da97025a5f28)
1*1516c21bSJanet Adkins #pragma once
2*1516c21bSJanet Adkins 
3*1516c21bSJanet Adkins #include <algorithm>
4*1516c21bSJanet Adkins #include <format>
5*1516c21bSJanet Adkins #include <ranges>
6*1516c21bSJanet Adkins #include <string>
7*1516c21bSJanet Adkins #include <string_view>
8*1516c21bSJanet Adkins #include <utility>
9*1516c21bSJanet Adkins #include <vector>
10*1516c21bSJanet Adkins 
11*1516c21bSJanet Adkins namespace redfish
12*1516c21bSJanet Adkins {
13*1516c21bSJanet Adkins namespace sensor_utils
14*1516c21bSJanet Adkins {
15*1516c21bSJanet Adkins 
16*1516c21bSJanet Adkins inline std::string getSensorId(std::string_view sensorName,
17*1516c21bSJanet Adkins                                std::string_view sensorType)
18*1516c21bSJanet Adkins {
19*1516c21bSJanet Adkins     std::string normalizedType(sensorType);
20*1516c21bSJanet Adkins     auto remove = std::ranges::remove(normalizedType, '_');
21*1516c21bSJanet Adkins     normalizedType.erase(std::ranges::begin(remove), normalizedType.end());
22*1516c21bSJanet Adkins 
23*1516c21bSJanet Adkins     return std::format("{}_{}", normalizedType, sensorName);
24*1516c21bSJanet Adkins }
25*1516c21bSJanet Adkins 
26*1516c21bSJanet Adkins inline std::pair<std::string, std::string>
27*1516c21bSJanet Adkins     splitSensorNameAndType(std::string_view sensorId)
28*1516c21bSJanet Adkins {
29*1516c21bSJanet Adkins     size_t index = sensorId.find('_');
30*1516c21bSJanet Adkins     if (index == std::string::npos)
31*1516c21bSJanet Adkins     {
32*1516c21bSJanet Adkins         return std::make_pair<std::string, std::string>("", "");
33*1516c21bSJanet Adkins     }
34*1516c21bSJanet Adkins     std::string sensorType{sensorId.substr(0, index)};
35*1516c21bSJanet Adkins     std::string sensorName{sensorId.substr(index + 1)};
36*1516c21bSJanet Adkins     // fan_pwm and fan_tach need special handling
37*1516c21bSJanet Adkins     if (sensorType == "fantach" || sensorType == "fanpwm")
38*1516c21bSJanet Adkins     {
39*1516c21bSJanet Adkins         sensorType.insert(3, 1, '_');
40*1516c21bSJanet Adkins     }
41*1516c21bSJanet Adkins     return std::make_pair(sensorType, sensorName);
42*1516c21bSJanet Adkins }
43*1516c21bSJanet Adkins 
44*1516c21bSJanet Adkins } // namespace sensor_utils
45*1516c21bSJanet Adkins } // namespace redfish
46