/** * Copyright © 2020 IBM 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 "action_environment.hpp" #include "i2c_action.hpp" #include #include namespace phosphor::power::regulators { /** * @class I2CCompareByteAction * * Compares a device register to a byte value. Communicates with the device * directly using the I2C interface. * * Implements the i2c_compare_byte action in the JSON config file. */ class I2CCompareByteAction : public I2CAction { public: // Specify which compiler-generated methods we want I2CCompareByteAction() = delete; I2CCompareByteAction(const I2CCompareByteAction&) = delete; I2CCompareByteAction(I2CCompareByteAction&&) = delete; I2CCompareByteAction& operator=(const I2CCompareByteAction&) = delete; I2CCompareByteAction& operator=(I2CCompareByteAction&&) = delete; virtual ~I2CCompareByteAction() = default; /** * Constructor. * * @param reg Device register address. Note: named 'reg' because 'register' * is a reserved keyword. * @param value Expected byte value. * @param mask Bit mask. Specifies which bits should be compared within the * byte value. Only the bits with a value of 1 in the mask will * be compared. If not specified, defaults to 0xFF which means * that all bits will be compared. */ explicit I2CCompareByteAction(uint8_t reg, uint8_t value, uint8_t mask = 0xFF) : reg{reg}, value{value}, mask{mask} {} /** * Executes this action. * * Compares a device register to a byte value using the I2C interface. * * The device register, byte value, and mask (if any) were specified in the * constructor. * * The device is obtained from the specified action environment. * * Throws an exception if an error occurs. * * @param environment action execution environment * @return true if the register contained the expected value, otherwise * returns false. */ virtual bool execute(ActionEnvironment& environment) override; /** * Returns the device register address. * * @return register address */ uint8_t getRegister() const { return reg; } /** * Returns the expected byte value. * * @return expected value */ uint8_t getValue() const { return value; } /** * Returns the bit mask. * * Specifies which bits should be compared within the byte value. Only the * bits with a value of 1 in the mask will be compared. * * @return bit mask */ uint8_t getMask() const { return mask; } /** * Returns a string description of this action. * * @return description of action */ virtual std::string toString() const override; private: /** * Device register address. Note: named 'reg' because 'register' is a * reserved keyword. */ const uint8_t reg{0x00}; /** * Expected byte value. */ const uint8_t value{0x00}; /** * Bit mask. Specifies which bits should be compared within the byte value. * Only the bits with a value of 1 in the mask will be compared. */ const uint8_t mask{0xFF}; }; } // namespace phosphor::power::regulators