Fan control: Create Fan class

This class contains the inventory name of the fan,
and the sensor names representing the rotors.

Calling setSpeed on this object will set the speed
on all contained sensors.

Change-Id: I850e2d69067813005270105618fcf69b04382b03
Signed-off-by: Matt Spinler <spinler@us.ibm.com>
diff --git a/control/fan.hpp b/control/fan.hpp
new file mode 100644
index 0000000..e23d44e
--- /dev/null
+++ b/control/fan.hpp
@@ -0,0 +1,79 @@
+#pragma once
+#include <sdbusplus/bus.hpp>
+#include "types.hpp"
+
+namespace phosphor
+{
+namespace fan
+{
+namespace control
+{
+
+
+/**
+ * @class Fan
+ *
+ * Represents a fan.  It has sensors used for setting speeds
+ * on all of the contained rotors.  There may or may not be
+ * a 1 to 1 correspondence between rotors and sensors, depending
+ * on how the hardware and hwmon is configured.
+ *
+ */
+class Fan
+{
+    public:
+
+        Fan() = delete;
+        Fan(const Fan&) = delete;
+        Fan(Fan&&) = default;
+        Fan& operator=(const Fan&) = delete;
+        Fan& operator=(Fan&&) = default;
+        ~Fan() = default;
+
+        /**
+         * Creates a fan object with sensors specified by
+         * the fan definition data.
+         *
+         * @param[in] bus - the dbus object
+         * @param[in] def - the fan definition data
+         */
+        Fan(sdbusplus::bus::bus& bus, const FanDefinition& def);
+
+        /**
+         * Sets the speed value on all contained sensors
+         *
+         * @param[in] speed - the value to set
+         */
+        void setSpeed(uint64_t speed);
+
+    private:
+
+        /**
+         * Returns the service name to use for interacting
+         * with the fan sensor passed in.
+         *
+         * @param[in] sensor - the fan tach sensor name
+         * @return - the service name
+         */
+        std::string getService(const std::string& sensor);
+
+        /**
+         * The dbus object
+         */
+        sdbusplus::bus::bus& _bus;
+
+        /**
+         * The inventory name of the fan
+         */
+        std::string _name;
+
+        /**
+         * Vector of hwmon sensors for the rotors
+         */
+        std::vector<std::string> _sensors;
+};
+
+
+}
+}
+}