/* // Copyright (c) 2017 2018 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. */ #pragma once #include #include #pragma pack(push, 1) struct SensorThresholdResp { uint8_t readable; uint8_t lowernc; uint8_t lowercritical; uint8_t lowernonrecoverable; uint8_t uppernc; uint8_t uppercritical; uint8_t uppernonrecoverable; }; #pragma pack(pop) enum class IPMIThresholdRespBits { lowerNonCritical, lowerCritical, lowerNonRecoverable, upperNonCritical, upperCritical, upperNonRecoverable }; enum class IPMISensorReadingByte2 : uint8_t { eventMessagesEnable = (1 << 7), sensorScanningEnable = (1 << 6), readingStateUnavailable = (1 << 5), }; enum class IPMISensorReadingByte3 : uint8_t { upperNonRecoverable = (1 << 5), upperCritical = (1 << 4), upperNonCritical = (1 << 3), lowerNonRecoverable = (1 << 2), lowerCritical = (1 << 1), lowerNonCritical = (1 << 0), }; enum class IPMISensorEventEnableByte2 : uint8_t { eventMessagesEnable = (1 << 7), sensorScanningEnable = (1 << 6), }; enum class IPMISensorEventEnableThresholds : uint8_t { nonRecoverableThreshold = (1 << 6), criticalThreshold = (1 << 5), nonCriticalThreshold = (1 << 4), upperNonRecoverableGoingHigh = (1 << 3), upperNonRecoverableGoingLow = (1 << 2), upperCriticalGoingHigh = (1 << 1), upperCriticalGoingLow = (1 << 0), upperNonCriticalGoingHigh = (1 << 7), upperNonCriticalGoingLow = (1 << 6), lowerNonRecoverableGoingHigh = (1 << 5), lowerNonRecoverableGoingLow = (1 << 4), lowerCriticalGoingHigh = (1 << 3), lowerCriticalGoingLow = (1 << 2), lowerNonCriticalGoingHigh = (1 << 1), lowerNonCriticalGoingLow = (1 << 0), }; enum class IPMIGetSensorEventEnableThresholds : uint8_t { lowerNonCriticalGoingLow = 0, lowerNonCriticalGoingHigh = 1, lowerCriticalGoingLow = 2, lowerCriticalGoingHigh = 3, lowerNonRecoverableGoingLow = 4, lowerNonRecoverableGoingHigh = 5, upperNonCriticalGoingLow = 6, upperNonCriticalGoingHigh = 7, upperCriticalGoingLow = 8, upperCriticalGoingHigh = 9, upperNonRecoverableGoingLow = 10, upperNonRecoverableGoingHigh = 11, }; namespace ipmi { uint16_t getNumberOfSensors(); SensorSubTree& getSensorTree(); ipmi::Cc getSensorConnection(ipmi::Context::ptr ctx, uint8_t sensnum, std::string& connection, std::string& path, std::vector* interfaces = nullptr); struct IPMIThresholds { std::optional warningLow; std::optional warningHigh; std::optional criticalLow; std::optional criticalHigh; }; namespace sensor { /** * @brief Retrieve the number of sensors that are not included in the list of * sensors published via D-Bus * * @param[in]: ctx: the pointer to the D-Bus context * @return: The number of additional sensors separate from those published * dynamically on D-Bus */ size_t getOtherSensorsCount(ipmi::Context::ptr ctx); /** * @brief Retrieve the record data for the sensors not published via D-Bus * * @param[in]: ctx: the pointer to the D-Bus context * @param[in]: recordID: the integer index for the sensor to retrieve * @param[out]: SDR data for the indexed sensor * @return: 0: success * negative number: error condition */ int getOtherSensorsDataRecord(ipmi::Context::ptr ctx, uint16_t recordID, std::vector& recordData); } // namespace sensor namespace dcmi { struct sensorInfo { std::string objectPath; uint8_t type; uint16_t recordId; uint8_t entityId; uint8_t entityInstance; }; } // namespace dcmi } // namespace ipmi