Support event multi targets

Description:
- Support event multi targets.

Design:
- The origin multi-gpio-monitor doesn't detect the comming events are
  rising or falling and it can only start one service after events
  triggered.

- We need to do corresponding actions when gpio pin rising or falling.
  So we modify multi-gpio-monitor config json and read the rising
  actions and falling actions in it.

- When service monitored one gpio status is changed,
  service will detect that it is a rising or falling event and then
  call systemd startUnit to start services that set in config json.

- For example with config json below:
  When PowerGood is falling, "PowerGoodFalling.service"
  and "PowerOff.service" will start.
[
  {
	"Name": "PowerGood",
	"ChipId": "0",
	"GpioNum": 14,
	"EventMon": "BOTH",
	"Targets": {
	  "FALLING": ["PowerGoodFalling.service", "PowerOff.service"],
	  "RISING": ["PowerGoodRising.service", "PowerOn.service"]
	},
	"Continue": true
  }
]

Test Case:
Check that corresponding targets start or not - pass

Signed-off-by: Delphine CC Chiu <Delphine_CC_Chiu@wiwynn.com>
Change-Id: I043d4385b91a04d360a4d50048320db15e63ac74
diff --git a/gpioMon.hpp b/gpioMon.hpp
index 51772ab..5750d39 100644
--- a/gpioMon.hpp
+++ b/gpioMon.hpp
@@ -4,6 +4,8 @@
 
 #include <boost/asio/io_context.hpp>
 #include <boost/asio/posix/stream_descriptor.hpp>
+#include <map>
+#include <vector>
 
 namespace phosphor
 {
@@ -31,15 +33,18 @@
      *  @param[in] io          - io service
      *  @param[in] target      - systemd unit to be started on GPIO
      *                           value change
+     *  @param[in] targets     - systemd units to be started on GPIO
+     *                           value change
      *  @param[in] lineMsg     - GPIO line message to be used for log
      *  @param[in] continueRun - Whether to continue after event occur
      */
     GpioMonitor(gpiod_line* line, gpiod_line_request_config& config,
                 boost::asio::io_context& io, const std::string& target,
+                const std::map<std::string, std::vector<std::string>>& targets,
                 const std::string& lineMsg, bool continueRun) :
         gpioLine(line),
         gpioConfig(config), gpioEventDescriptor(io), target(target),
-        gpioLineMsg(lineMsg), continueAfterEvent(continueRun)
+        targets(targets), gpioLineMsg(lineMsg), continueAfterEvent(continueRun)
     {
         requestGPIOEvents();
     };
@@ -57,6 +62,9 @@
     /** @brief Systemd unit to be started when the condition is met */
     const std::string target;
 
+    /** @brief Multi systemd units to be started when the condition is met */
+    std::map<std::string, std::vector<std::string>> targets;
+
     /** @brief GPIO line name message */
     std::string gpioLineMsg;