diff --git a/dcmihandler.hpp b/dcmihandler.hpp
index 5388344..6e64faf 100644
--- a/dcmihandler.hpp
+++ b/dcmihandler.hpp
@@ -1,11 +1,12 @@
 #ifndef __HOST_IPMI_DCMI_HANDLER_H__
 #define __HOST_IPMI_DCMI_HANDLER_H__
 
+#include "nlohmann/json.hpp"
+
 #include <map>
+#include <sdbusplus/bus.hpp>
 #include <string>
 #include <vector>
-#include <sdbusplus/bus.hpp>
-#include "nlohmann/json.hpp"
 
 namespace dcmi
 {
@@ -33,25 +34,24 @@
 
 static constexpr auto propIntf = "org.freedesktop.DBus.Properties";
 static constexpr auto assetTagIntf =
-        "xyz.openbmc_project.Inventory.Decorator.AssetTag";
+    "xyz.openbmc_project.Inventory.Decorator.AssetTag";
 static constexpr auto assetTagProp = "AssetTag";
 static constexpr auto networkServiceName = "xyz.openbmc_project.Network";
-static constexpr auto networkConfigObj =
-        "/xyz/openbmc_project/network/config";
+static constexpr auto networkConfigObj = "/xyz/openbmc_project/network/config";
 static constexpr auto networkConfigIntf =
-        "xyz.openbmc_project.Network.SystemConfiguration";
+    "xyz.openbmc_project.Network.SystemConfiguration";
 static constexpr auto hostNameProp = "HostName";
 static constexpr auto temperatureSensorType = 0x01;
 static constexpr auto maxInstances = 255;
 static constexpr auto configFile =
     "/usr/share/ipmi-providers/dcmi_sensors.json";
 static constexpr auto ethernetIntf =
-        "xyz.openbmc_project.Network.EthernetInterface";
+    "xyz.openbmc_project.Network.EthernetInterface";
 static constexpr auto ethernetDefaultChannelNum = 0x1;
 static constexpr auto networkRoot = "/xyz/openbmc_project/network";
 static constexpr auto dhcpObj = "/xyz/openbmc_project/network/config/dhcp";
 static constexpr auto dhcpIntf =
-        "xyz.openbmc_project.Network.DHCPConfiguration";
+    "xyz.openbmc_project.Network.DHCPConfiguration";
 static constexpr auto systemBusName = "org.freedesktop.systemd1";
 static constexpr auto systemPath = "/org/freedesktop/systemd1";
 static constexpr auto systemIntf = "org.freedesktop.systemd1.Manager";
@@ -59,56 +59,56 @@
 namespace assettag
 {
 
-    using ObjectPath = std::string;
-    using Service = std::string;
-    using Interfaces = std::vector<std::string>;
-    using ObjectTree = std::map<ObjectPath, std::map<Service, Interfaces>>;
+using ObjectPath = std::string;
+using Service = std::string;
+using Interfaces = std::vector<std::string>;
+using ObjectTree = std::map<ObjectPath, std::map<Service, Interfaces>>;
 
-} //namespace assettag
+} // namespace assettag
 
 namespace temp_readings
 {
-    static constexpr auto maxDataSets = 8;
-    static constexpr auto maxTemp = 127; // degrees C
+static constexpr auto maxDataSets = 8;
+static constexpr auto maxTemp = 127; // degrees C
 
-    /** @struct Response
-     *
-     *  DCMI payload for Get Temperature Readings response
-     */
-    struct Response
-    {
+/** @struct Response
+ *
+ *  DCMI payload for Get Temperature Readings response
+ */
+struct Response
+{
 #if BYTE_ORDER == LITTLE_ENDIAN
-        uint8_t temperature: 7;   //!< Temperature reading in Celsius
-        uint8_t sign: 1;          //!< Sign bit
+    uint8_t temperature : 7; //!< Temperature reading in Celsius
+    uint8_t sign : 1;        //!< Sign bit
 #endif
 #if BYTE_ORDER == BIG_ENDIAN
-        uint8_t sign: 1;          //!< Sign bit
-        uint8_t temperature: 7;   //!< Temperature reading in Celsius
+    uint8_t sign : 1;        //!< Sign bit
+    uint8_t temperature : 7; //!< Temperature reading in Celsius
 #endif
-        uint8_t instance;       //!< Entity instance number
-    } __attribute__((packed));
+    uint8_t instance; //!< Entity instance number
+} __attribute__((packed));
 
-    using ResponseList = std::vector<Response>;
-    using Value = uint8_t;
-    using Sign = bool;
-    using Temperature = std::tuple<Value, Sign>;
-}
+using ResponseList = std::vector<Response>;
+using Value = uint8_t;
+using Sign = bool;
+using Temperature = std::tuple<Value, Sign>;
+} // namespace temp_readings
 
 namespace sensor_info
 {
-    static constexpr auto maxRecords = 8;
+static constexpr auto maxRecords = 8;
 
-    /** @struct Response
-     *
-     *  DCMI payload for Get Sensor Info response
-     */
-    struct Response
-    {
-        uint8_t recordIdLsb;       //!< SDR record id LS byte
-        uint8_t recordIdMsb;       //!< SDR record id MS byte
-    } __attribute__((packed));
+/** @struct Response
+ *
+ *  DCMI payload for Get Sensor Info response
+ */
+struct Response
+{
+    uint8_t recordIdLsb; //!< SDR record id LS byte
+    uint8_t recordIdMsb; //!< SDR record id MS byte
+} __attribute__((packed));
 
-    using ResponseList = std::vector<Response>;
+using ResponseList = std::vector<Response>;
 } // namespace sensor_info
 
 static constexpr auto groupExtId = 0xDC;
@@ -124,9 +124,9 @@
  */
 struct GetAssetTagRequest
 {
-    uint8_t groupID;            //!< Group extension identification.
-    uint8_t offset;             //!< Offset to read.
-    uint8_t bytes;              //!< Number of bytes to read.
+    uint8_t groupID; //!< Group extension identification.
+    uint8_t offset;  //!< Offset to read.
+    uint8_t bytes;   //!< Number of bytes to read.
 } __attribute__((packed));
 
 /** @struct GetAssetTagResponse
@@ -135,8 +135,8 @@
  */
 struct GetAssetTagResponse
 {
-    uint8_t groupID;            //!< Group extension identification.
-    uint8_t tagLength;          //!< Total asset tag length.
+    uint8_t groupID;   //!< Group extension identification.
+    uint8_t tagLength; //!< Total asset tag length.
 } __attribute__((packed));
 
 /** @struct SetAssetTagRequest
@@ -145,9 +145,9 @@
  */
 struct SetAssetTagRequest
 {
-    uint8_t groupID;            //!< Group extension identification.
-    uint8_t offset;             //!< Offset to write.
-    uint8_t bytes;              //!< Number of bytes to write.
+    uint8_t groupID; //!< Group extension identification.
+    uint8_t offset;  //!< Offset to write.
+    uint8_t bytes;   //!< Number of bytes to write.
 } __attribute__((packed));
 
 /** @struct SetAssetTagResponse
@@ -156,8 +156,8 @@
  */
 struct SetAssetTagResponse
 {
-    uint8_t groupID;            //!< Group extension identification.
-    uint8_t tagLength;          //!< Total asset tag length.
+    uint8_t groupID;   //!< Group extension identification.
+    uint8_t tagLength; //!< Total asset tag length.
 } __attribute__((packed));
 
 /** @brief Read the object tree to fetch the object path that implemented the
@@ -205,8 +205,8 @@
  */
 struct GetPowerLimitRequest
 {
-    uint8_t groupID;            //!< Group extension identification.
-    uint16_t reserved;          //!< Reserved
+    uint8_t groupID;   //!< Group extension identification.
+    uint16_t reserved; //!< Reserved
 } __attribute__((packed));
 
 /** @struct GetPowerLimitResponse
@@ -215,13 +215,13 @@
  */
 struct GetPowerLimitResponse
 {
-    uint8_t groupID;            //!< Group extension identification.
-    uint16_t reserved;          //!< Reserved.
-    uint8_t exceptionAction;    //!< Exception action.
-    uint16_t powerLimit;        //!< Power limit requested in watts.
-    uint32_t correctionTime;    //!< Correction time limit in milliseconds.
-    uint16_t reserved1;         //!< Reserved.
-    uint16_t samplingPeriod;    //!< Statistics sampling period in seconds.
+    uint8_t groupID;         //!< Group extension identification.
+    uint16_t reserved;       //!< Reserved.
+    uint8_t exceptionAction; //!< Exception action.
+    uint16_t powerLimit;     //!< Power limit requested in watts.
+    uint32_t correctionTime; //!< Correction time limit in milliseconds.
+    uint16_t reserved1;      //!< Reserved.
+    uint16_t samplingPeriod; //!< Statistics sampling period in seconds.
 } __attribute__((packed));
 
 /** @brief Set the power cap value
@@ -237,14 +237,14 @@
  */
 struct SetPowerLimitRequest
 {
-    uint8_t groupID;            //!< Group extension identification.
-    uint16_t reserved;          //!< Reserved
-    uint8_t reserved1;          //!< Reserved
-    uint8_t exceptionAction;    //!< Exception action.
-    uint16_t powerLimit;        //!< Power limit requested in watts.
-    uint32_t correctionTime;    //!< Correction time limit in milliseconds.
-    uint16_t reserved2;         //!< Reserved.
-    uint16_t samplingPeriod;    //!< Statistics sampling period in seconds.
+    uint8_t groupID;         //!< Group extension identification.
+    uint16_t reserved;       //!< Reserved
+    uint8_t reserved1;       //!< Reserved
+    uint8_t exceptionAction; //!< Exception action.
+    uint16_t powerLimit;     //!< Power limit requested in watts.
+    uint32_t correctionTime; //!< Correction time limit in milliseconds.
+    uint16_t reserved2;      //!< Reserved.
+    uint16_t samplingPeriod; //!< Statistics sampling period in seconds.
 } __attribute__((packed));
 
 /** @struct SetPowerLimitResponse
@@ -253,7 +253,7 @@
  */
 struct SetPowerLimitResponse
 {
-    uint8_t groupID;            //!< Group extension identification.
+    uint8_t groupID; //!< Group extension identification.
 } __attribute__((packed));
 
 /** @brief Enable or disable the power capping
@@ -269,9 +269,9 @@
  */
 struct ApplyPowerLimitRequest
 {
-    uint8_t groupID;            //!< Group extension identification.
-    uint8_t powerLimitAction;   //!< Power limit activation
-    uint16_t reserved;          //!< Reserved
+    uint8_t groupID;          //!< Group extension identification.
+    uint8_t powerLimitAction; //!< Power limit activation
+    uint16_t reserved;        //!< Reserved
 } __attribute__((packed));
 
 /** @struct ApplyPowerLimitResponse
@@ -280,7 +280,7 @@
  */
 struct ApplyPowerLimitResponse
 {
-    uint8_t groupID;            //!< Group extension identification.
+    uint8_t groupID; //!< Group extension identification.
 } __attribute__((packed));
 
 /** @struct GetMgmntCtrlIdStrRequest
@@ -289,9 +289,9 @@
  */
 struct GetMgmntCtrlIdStrRequest
 {
-    uint8_t groupID;            //!< Group extension identification.
-    uint8_t offset;             //!< Offset to read.
-    uint8_t bytes;              //!< Number of bytes to read.
+    uint8_t groupID; //!< Group extension identification.
+    uint8_t offset;  //!< Offset to read.
+    uint8_t bytes;   //!< Number of bytes to read.
 } __attribute__((packed));
 
 /** @struct GetMgmntCtrlIdStrResponse
@@ -300,9 +300,9 @@
  */
 struct GetMgmntCtrlIdStrResponse
 {
-    uint8_t groupID;            //!< Group extension identification.
-    uint8_t strLen;             //!< ID string length.
-    char data[];                //!< ID string
+    uint8_t groupID; //!< Group extension identification.
+    uint8_t strLen;  //!< ID string length.
+    char data[];     //!< ID string
 } __attribute__((packed));
 
 /** @struct SetMgmntCtrlIdStrRequest
@@ -311,10 +311,10 @@
  */
 struct SetMgmntCtrlIdStrRequest
 {
-    uint8_t groupID;            //!< Group extension identification.
-    uint8_t offset;             //!< Offset to write.
-    uint8_t bytes;              //!< Number of bytes to read.
-    char data[];                //!< ID string
+    uint8_t groupID; //!< Group extension identification.
+    uint8_t offset;  //!< Offset to write.
+    uint8_t bytes;   //!< Number of bytes to read.
+    char data[];     //!< ID string
 } __attribute__((packed));
 
 /** @struct GetMgmntCtrlIdStrResponse
@@ -323,8 +323,8 @@
  */
 struct SetMgmntCtrlIdStrResponse
 {
-    uint8_t groupID;            //!< Group extension identification.
-    uint8_t offset;             //!< Last Offset Written.
+    uint8_t groupID; //!< Group extension identification.
+    uint8_t offset;  //!< Last Offset Written.
 } __attribute__((packed));
 
 /** @enum DCMICapParameters
@@ -345,8 +345,8 @@
  */
 struct GetDCMICapRequest
 {
-    uint8_t groupID;            //!< Group extension identification.
-    uint8_t param;              //!< Capability parameter selector.
+    uint8_t groupID; //!< Group extension identification.
+    uint8_t param;   //!< Capability parameter selector.
 } __attribute__((packed));
 
 /** @struct GetDCMICapRequest
@@ -355,11 +355,11 @@
  */
 struct GetDCMICapResponse
 {
-    uint8_t groupID;            //!< Group extension identification.
-    uint8_t major;              //!< DCMI Specification Conformance - major ver
-    uint8_t minor;              //!< DCMI Specification Conformance - minor ver
-    uint8_t paramRevision;      //!< Parameter Revision = 02h
-    uint8_t data[];             //!< Capability array
+    uint8_t groupID;       //!< Group extension identification.
+    uint8_t major;         //!< DCMI Specification Conformance - major ver
+    uint8_t minor;         //!< DCMI Specification Conformance - minor ver
+    uint8_t paramRevision; //!< Parameter Revision = 02h
+    uint8_t data[];        //!< Capability array
 } __attribute__((packed));
 
 /** @struct DCMICap
@@ -368,10 +368,10 @@
  */
 struct DCMICap
 {
-    std::string name;           //!< Name of DCMI capability.
-    uint8_t bytePosition;       //!< Starting byte number from DCMI spec.
-    uint8_t position;           //!< bit position from the DCMI spec.
-    uint8_t length;             //!< Length of the value from DCMI spec.
+    std::string name;     //!< Name of DCMI capability.
+    uint8_t bytePosition; //!< Starting byte number from DCMI spec.
+    uint8_t position;     //!< bit position from the DCMI spec.
+    uint8_t length;       //!< Length of the value from DCMI spec.
 };
 
 using DCMICapList = std::vector<DCMICap>;
@@ -382,8 +382,8 @@
  */
 struct DCMICapEntry
 {
-    uint8_t size;               //!< Size of capability array in bytes.
-    DCMICapList capList;        //!< List of capabilities for a parameter.
+    uint8_t size;        //!< Size of capability array in bytes.
+    DCMICapList capList; //!< List of capabilities for a parameter.
 };
 
 using DCMICaps = std::map<DCMICapParameters, DCMICapEntry>;
@@ -394,11 +394,11 @@
  */
 struct GetTempReadingsRequest
 {
-    uint8_t groupID;             //!< Group extension identification.
-    uint8_t sensorType;          //!< Type of the sensor
-    uint8_t entityId;            //!< Entity ID
-    uint8_t entityInstance;      //!< Entity Instance (0 means all instances)
-    uint8_t instanceStart;       //!< Instance start (used if instance is 0)
+    uint8_t groupID;        //!< Group extension identification.
+    uint8_t sensorType;     //!< Type of the sensor
+    uint8_t entityId;       //!< Entity ID
+    uint8_t entityInstance; //!< Entity Instance (0 means all instances)
+    uint8_t instanceStart;  //!< Instance start (used if instance is 0)
 } __attribute__((packed));
 
 /** @struct GetTempReadingsResponse
@@ -407,9 +407,9 @@
  */
 struct GetTempReadingsResponseHdr
 {
-    uint8_t groupID;                //!< Group extension identification.
-    uint8_t numInstances;           //!< No. of instances for requested id
-    uint8_t numDataSets;            //!< No. of sets of temperature data
+    uint8_t groupID;      //!< Group extension identification.
+    uint8_t numInstances; //!< No. of instances for requested id
+    uint8_t numDataSets;  //!< No. of sets of temperature data
 } __attribute__((packed));
 
 /** @brief Parse out JSON config file containing information
@@ -421,83 +421,81 @@
 
 namespace temp_readings
 {
-    /** @brief Read temperature from a d-bus object, scale it as per dcmi
-     *         get temperature reading requirements.
-     *
-     *  @param[in] dbusService - the D-Bus service
-     *  @param[in] dbusPath - the D-Bus path
-     *
-     *  @return A temperature reading
-     */
-    Temperature readTemp(const std::string& dbusService,
-                         const std::string& dbusPath);
+/** @brief Read temperature from a d-bus object, scale it as per dcmi
+ *         get temperature reading requirements.
+ *
+ *  @param[in] dbusService - the D-Bus service
+ *  @param[in] dbusPath - the D-Bus path
+ *
+ *  @return A temperature reading
+ */
+Temperature readTemp(const std::string& dbusService,
+                     const std::string& dbusPath);
 
-    /** @brief Read temperatures and fill up DCMI response for the Get
-     *         Temperature Readings command. This looks at a specific
-     *         instance.
-     *
-     *  @param[in] type - one of "inlet", "cpu", "baseboard"
-     *  @param[in] instance - A non-zero Entity instance number
-     *
-     *  @return A tuple, containing a temperature reading and the
-     *          number of instances.
-     */
-    std::tuple<Response, NumInstances> read (const std::string& type,
-                                             uint8_t instance);
+/** @brief Read temperatures and fill up DCMI response for the Get
+ *         Temperature Readings command. This looks at a specific
+ *         instance.
+ *
+ *  @param[in] type - one of "inlet", "cpu", "baseboard"
+ *  @param[in] instance - A non-zero Entity instance number
+ *
+ *  @return A tuple, containing a temperature reading and the
+ *          number of instances.
+ */
+std::tuple<Response, NumInstances> read(const std::string& type,
+                                        uint8_t instance);
 
-    /** @brief Read temperatures and fill up DCMI response for the Get
-     *         Temperature Readings command. This looks at a range of
-     *         instances.
-     *
-     *  @param[in] type - one of "inlet", "cpu", "baseboard"
-     *  @param[in] instanceStart - Entity instance start index
-     *
-     *  @return A tuple, containing a list of temperature readings and the
-     *          number of instances.
-     */
-    std::tuple<ResponseList, NumInstances> readAll(const std::string& type,
-                                                   uint8_t instanceStart);
-}
+/** @brief Read temperatures and fill up DCMI response for the Get
+ *         Temperature Readings command. This looks at a range of
+ *         instances.
+ *
+ *  @param[in] type - one of "inlet", "cpu", "baseboard"
+ *  @param[in] instanceStart - Entity instance start index
+ *
+ *  @return A tuple, containing a list of temperature readings and the
+ *          number of instances.
+ */
+std::tuple<ResponseList, NumInstances> readAll(const std::string& type,
+                                               uint8_t instanceStart);
+} // namespace temp_readings
 
 namespace sensor_info
 {
-    /** @brief Create response from JSON config.
-     *
-     *  @param[in] config - JSON config info about DCMI sensors
-     *
-     *  @return Sensor info response
-     */
-    Response createFromJson(const Json& config);
+/** @brief Create response from JSON config.
+ *
+ *  @param[in] config - JSON config info about DCMI sensors
+ *
+ *  @return Sensor info response
+ */
+Response createFromJson(const Json& config);
 
-    /** @brief Read sensor info and fill up DCMI response for the Get
-     *         Sensor Info command. This looks at a specific
-     *         instance.
-     *
-     *  @param[in] type - one of "inlet", "cpu", "baseboard"
-     *  @param[in] instance - A non-zero Entity instance number
-     *  @param[in] config - JSON config info about DCMI sensors
-     *
-     *  @return A tuple, containing a sensor info response and
-     *          number of instances.
-     */
-    std::tuple<Response, NumInstances> read(const std::string& type,
-                                            uint8_t instance,
-                                            const Json& config);
+/** @brief Read sensor info and fill up DCMI response for the Get
+ *         Sensor Info command. This looks at a specific
+ *         instance.
+ *
+ *  @param[in] type - one of "inlet", "cpu", "baseboard"
+ *  @param[in] instance - A non-zero Entity instance number
+ *  @param[in] config - JSON config info about DCMI sensors
+ *
+ *  @return A tuple, containing a sensor info response and
+ *          number of instances.
+ */
+std::tuple<Response, NumInstances> read(const std::string& type,
+                                        uint8_t instance, const Json& config);
 
-    /** @brief Read sensor info and fill up DCMI response for the Get
-     *         Sensor Info command. This looks at a range of
-     *         instances.
-     *
-     *  @param[in] type - one of "inlet", "cpu", "baseboard"
-     *  @param[in] instanceStart - Entity instance start index
-     *  @param[in] config - JSON config info about DCMI sensors
-     *
-     *  @return A tuple, containing a list of sensor info responses and the
-     *          number of instances.
-     */
-    std::tuple<ResponseList, NumInstances> readAll(const std::string& type,
-                                                   uint8_t instanceStart,
-                                                   const Json& config);
+/** @brief Read sensor info and fill up DCMI response for the Get
+ *         Sensor Info command. This looks at a range of
+ *         instances.
+ *
+ *  @param[in] type - one of "inlet", "cpu", "baseboard"
+ *  @param[in] instanceStart - Entity instance start index
+ *  @param[in] config - JSON config info about DCMI sensors
+ *
+ *  @return A tuple, containing a list of sensor info responses and the
+ *          number of instances.
+ */
+std::tuple<ResponseList, NumInstances>
+    readAll(const std::string& type, uint8_t instanceStart, const Json& config);
 } // namespace sensor_info
 
 /** @brief Read power reading from power reading sensor object
@@ -515,9 +513,9 @@
  */
 struct GetPowerReadingRequest
 {
-    uint8_t groupID;        //!< Group extension identification.
-    uint8_t mode;           //!< Mode
-    uint8_t modeAttribute;  //!< Mode Attributes
+    uint8_t groupID;       //!< Group extension identification.
+    uint8_t mode;          //!< Mode
+    uint8_t modeAttribute; //!< Mode Attributes
 } __attribute__((packed));
 
 /** @struct GetPowerReadingResponse
@@ -527,18 +525,18 @@
  */
 struct GetPowerReadingResponse
 {
-    uint8_t groupID;            //!< Group extension identification.
-    uint16_t currentPower;      //!< Current power in watts
-    uint16_t minimumPower;      //!< Minimum power over sampling duration
-                                //!< in watts
-    uint16_t maximumPower;      //!< Maximum power over sampling duration
-                                //!< in watts
-    uint16_t averagePower;      //!< Average power over sampling duration
-                                //!< in watts
-    uint32_t timeStamp;         //!< IPMI specification based time stamp
-    uint32_t timeFrame;         //!< Statistics reporting time period in milli
-                                //!< seconds.
-    uint8_t powerReadingState;  //!< Power Reading State
+    uint8_t groupID;           //!< Group extension identification.
+    uint16_t currentPower;     //!< Current power in watts
+    uint16_t minimumPower;     //!< Minimum power over sampling duration
+                               //!< in watts
+    uint16_t maximumPower;     //!< Maximum power over sampling duration
+                               //!< in watts
+    uint16_t averagePower;     //!< Average power over sampling duration
+                               //!< in watts
+    uint32_t timeStamp;        //!< IPMI specification based time stamp
+    uint32_t timeFrame;        //!< Statistics reporting time period in milli
+                               //!< seconds.
+    uint8_t powerReadingState; //!< Power Reading State
 } __attribute__((packed));
 
 /** @struct GetSensorInfoRequest
@@ -547,11 +545,11 @@
  */
 struct GetSensorInfoRequest
 {
-    uint8_t groupID;             //!< Group extension identification.
-    uint8_t sensorType;          //!< Type of the sensor
-    uint8_t entityId;            //!< Entity ID
-    uint8_t entityInstance;      //!< Entity Instance (0 means all instances)
-    uint8_t instanceStart;       //!< Instance start (used if instance is 0)
+    uint8_t groupID;        //!< Group extension identification.
+    uint8_t sensorType;     //!< Type of the sensor
+    uint8_t entityId;       //!< Entity ID
+    uint8_t entityInstance; //!< Entity Instance (0 means all instances)
+    uint8_t instanceStart;  //!< Instance start (used if instance is 0)
 } __attribute__((packed));
 
 /** @struct GetSensorInfoResponseHdr
@@ -560,14 +558,14 @@
  */
 struct GetSensorInfoResponseHdr
 {
-    uint8_t groupID;                //!< Group extension identification.
-    uint8_t numInstances;           //!< No. of instances for requested id
-    uint8_t numRecords;             //!< No. of record ids in the response
+    uint8_t groupID;      //!< Group extension identification.
+    uint8_t numInstances; //!< No. of instances for requested id
+    uint8_t numRecords;   //!< No. of record ids in the response
 } __attribute__((packed));
 /**
  *  @brief Parameters for DCMI Configuration Parameters
  */
-enum class DCMIConfigParameters: uint8_t
+enum class DCMIConfigParameters : uint8_t
 {
     ActivateDHCP = 1,
     DiscoveryConfig,
@@ -583,11 +581,11 @@
  */
 struct SetConfParamsRequest
 {
-    uint8_t groupID;        //!< Group extension identification.
-    uint8_t paramSelect;    //!< Parameter selector.
-    uint8_t setSelect;      //!< Set Selector (use 00h for parameters that only
-                            //!< have one set).
-    uint8_t data[];         //!< Configuration parameter data.
+    uint8_t groupID;     //!< Group extension identification.
+    uint8_t paramSelect; //!< Parameter selector.
+    uint8_t setSelect;   //!< Set Selector (use 00h for parameters that only
+                         //!< have one set).
+    uint8_t data[];      //!< Configuration parameter data.
 } __attribute__((packed));
 
 /** @struct SetConfParamsResponse
@@ -597,7 +595,7 @@
  */
 struct SetConfParamsResponse
 {
-    uint8_t  groupID;        //!< Group extension identification.
+    uint8_t groupID; //!< Group extension identification.
 } __attribute__((packed));
 
 /** @struct GetConfParamsRequest
@@ -607,11 +605,11 @@
  */
 struct GetConfParamsRequest
 {
-    uint8_t groupID;        //!< Group extension identification.
-    uint8_t paramSelect;    //!< Parameter selector.
-    uint8_t setSelect;      //!< Set Selector. Selects a given set of parameters
-                            //!< under a given Parameter selector value. 00h if
-                            //!< parameter doesn't use a Set Selector.
+    uint8_t groupID;     //!< Group extension identification.
+    uint8_t paramSelect; //!< Parameter selector.
+    uint8_t setSelect;   //!< Set Selector. Selects a given set of parameters
+                         //!< under a given Parameter selector value. 00h if
+                         //!< parameter doesn't use a Set Selector.
 } __attribute__((packed));
 
 /** @struct GetConfParamsResponse
@@ -621,11 +619,11 @@
  */
 struct GetConfParamsResponse
 {
-    uint8_t groupID;         //!< Group extension identification.
-    uint8_t major;           //!< DCMI Spec Conformance - major ver = 01h.
-    uint8_t minor;           //!< DCMI Spec Conformance - minor ver = 05h.
-    uint8_t paramRevision;   //!< Parameter Revision = 01h.
-    uint8_t data[];          //!< Parameter data.
+    uint8_t groupID;       //!< Group extension identification.
+    uint8_t major;         //!< DCMI Spec Conformance - major ver = 01h.
+    uint8_t minor;         //!< DCMI Spec Conformance - minor ver = 05h.
+    uint8_t paramRevision; //!< Parameter Revision = 01h.
+    uint8_t data[];        //!< Parameter data.
 
 } __attribute__((packed));
 
