regulators: Implements support for i2c_write_bit

Implements support for parsing the i2c_write_bit JSON elements in the
configuration file parser.

Signed-off-by: Bob King <Bob_King@wistron.com>
Change-Id: I52a16b3391872f2d451ac2bde02f0cb335f4dedd
diff --git a/phosphor-regulators/src/config_file_parser.cpp b/phosphor-regulators/src/config_file_parser.cpp
index 9ac6060..cdf758e 100644
--- a/phosphor-regulators/src/config_file_parser.cpp
+++ b/phosphor-regulators/src/config_file_parser.cpp
@@ -17,6 +17,7 @@
 #include "config_file_parser.hpp"
 
 #include "config_file_parser_error.hpp"
+#include "i2c_interface.hpp"
 #include "pmbus_utils.hpp"
 
 #include <exception>
@@ -102,9 +103,8 @@
     }
     else if (element.contains("i2c_write_bit"))
     {
-        // TODO: Not implemented yet
-        // action = parseI2CWriteBit(element["i2c_write_bit"]);
-        // ++propertyCount;
+        action = parseI2CWriteBit(element["i2c_write_bit"]);
+        ++propertyCount;
     }
     else if (element.contains("i2c_write_byte"))
     {
@@ -194,6 +194,32 @@
     return chassis;
 }
 
+std::unique_ptr<I2CWriteBitAction> parseI2CWriteBit(const json& element)
+{
+    verifyIsObject(element);
+    unsigned int propertyCount{0};
+
+    // Required register property
+    const json& regElement = getRequiredProperty(element, "register");
+    uint8_t reg = parseStringToUint8(regElement);
+    ++propertyCount;
+
+    // Required position property
+    const json& positionElement = getRequiredProperty(element, "position");
+    uint8_t position = parseBitPosition(positionElement);
+    ++propertyCount;
+
+    // Required value property
+    const json& valueElement = getRequiredProperty(element, "value");
+    uint8_t value = parseBitValue(valueElement);
+    ++propertyCount;
+
+    // Verify no invalid properties exist
+    verifyPropertyCount(element, propertyCount);
+
+    return std::make_unique<I2CWriteBitAction>(reg, position, value);
+}
+
 std::unique_ptr<PMBusWriteVoutCommandAction>
     parsePMBusWriteVoutCommand(const json& element)
 {