meta-romulus: Add id-button.bb

This recipe adds the function to assert/deassert identify LED Group
when the ID button is pressed:
1. Add phosphor-gpio-monitor for the ID button GPIO key;
2. Start id-button-pressed.service when the key is pressed;
3. The service starts a script to check the identify LED group state,
   and assert or de-assert it.

Tested: Assert/De-assert identify LED group by pressing the ID button
        on Romulus.

Change-Id: I782dbc15563a313418aa90bee1f48fc97a6d25fb
Signed-off-by: Lei YU <mine260309@gmail.com>
diff --git a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-romulus/recipes-phosphor/gpio/id-button.bb b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-romulus/recipes-phosphor/gpio/id-button.bb
new file mode 100644
index 0000000..7267ee3
--- /dev/null
+++ b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-romulus/recipes-phosphor/gpio/id-button.bb
@@ -0,0 +1,29 @@
+SUMMARY = "Romulus ID Button pressed application"
+PR = "r1"
+
+inherit obmc-phosphor-systemd
+inherit obmc-phosphor-license
+
+DEPENDS += "virtual/obmc-gpio-monitor"
+RDEPENDS_${PN} += "virtual/obmc-gpio-monitor"
+
+S = "${WORKDIR}"
+SRC_URI += "file://toggle_identify_led.sh"
+
+do_install() {
+        install -d ${D}${bindir}
+        install -m 0755 ${WORKDIR}/toggle_identify_led.sh \
+            ${D}${bindir}/toggle_identify_led.sh
+}
+
+SYSTEMD_ENVIRONMENT_FILE_${PN} +="obmc/gpio/id_button"
+
+ID_BUTTON_SERVICE = "id_button"
+
+TMPL = "phosphor-gpio-monitor@.service"
+INSTFMT = "phosphor-gpio-monitor@{0}.service"
+TGT = "${SYSTEMD_DEFAULT_TARGET}"
+FMT = "../${TMPL}:${TGT}.requires/${INSTFMT}"
+
+SYSTEMD_SERVICE_${PN} += "id-button-pressed.service"
+SYSTEMD_LINK_${PN} += "${@compose_list(d, 'FMT', 'ID_BUTTON_SERVICE')}"
diff --git a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-romulus/recipes-phosphor/gpio/id-button/id-button-pressed.service b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-romulus/recipes-phosphor/gpio/id-button/id-button-pressed.service
new file mode 100644
index 0000000..f633fc3
--- /dev/null
+++ b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-romulus/recipes-phosphor/gpio/id-button/id-button-pressed.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=ID Button Pressed Service
+Wants=mapper-wait@-xyz-openbmc_project-led-groups.service
+After=mapper-wait@-xyz-openbmc_project-led-groups.service
+StartLimitIntervalSec=0
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/env toggle_identify_led.sh
+SyslogIdentifier=id-button
diff --git a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-romulus/recipes-phosphor/gpio/id-button/obmc/gpio/id_button b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-romulus/recipes-phosphor/gpio/id-button/obmc/gpio/id_button
new file mode 100644
index 0000000..ee966a5
--- /dev/null
+++ b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-romulus/recipes-phosphor/gpio/id-button/obmc/gpio/id_button
@@ -0,0 +1,5 @@
+DEVPATH=/dev/input/by-path/platform-gpio-keys-event
+KEY=135
+POLARITY=1
+TARGET=id-button-pressed.service
+CONTINUE=true
diff --git a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-romulus/recipes-phosphor/gpio/id-button/toggle_identify_led.sh b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-romulus/recipes-phosphor/gpio/id-button/toggle_identify_led.sh
new file mode 100755
index 0000000..eec96d3
--- /dev/null
+++ b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-romulus/recipes-phosphor/gpio/id-button/toggle_identify_led.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+# Toggle the state of identify LED Group
+
+SERVICE="xyz.openbmc_project.LED.GroupManager"
+INTERFACE="xyz.openbmc_project.Led.Group"
+PROPERTY="Asserted"
+
+# Get current state
+object=$(busctl tree $SERVICE --list | grep identify)
+state=$(busctl get-property $SERVICE $object $INTERFACE $PROPERTY \
+	  |  awk '{print $NF;}')
+
+if [ "$state" == "false" ]; then
+    target='true'
+else
+    target='false'
+fi
+
+# Set target state
+busctl set-property $SERVICE $object $INTERFACE $PROPERTY b $target
diff --git a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-romulus/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-romulus/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend
index 74866b3..55f036c 100644
--- a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-romulus/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend
+++ b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-romulus/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend
@@ -1 +1 @@
-RDEPENDS_${PN}-inventory += " openpower-occ-control phosphor-cooling-type"
+RDEPENDS_${PN}-inventory += " openpower-occ-control phosphor-cooling-type id-button"