presence: New parser

Adopt an easy on the tongue acronym similar to other projects.
Add a robust parser with support for sensors and policies.
  Sensors: gpio, tach
  Policies: fallback
Add an example yaml file.

Change-Id: I9158a0ce2a08ef6b7bb3f5d659ea0e0433af5b96
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
diff --git a/presence/example/example.yaml b/presence/example/example.yaml
new file mode 100644
index 0000000..aea0139
--- /dev/null
+++ b/presence/example/example.yaml
@@ -0,0 +1,66 @@
+# Phosphor Fan Presence (PFP) example configuration file.
+#
+# The configuration represents an array of fans the application
+# should check for presence.  The name attribute is required
+# and is used as the PrettyName attribute for the
+# xyz.openbmc_project.Inventory.Item interface.  Path is required
+# and is the location where the fan inventory object will be
+# created.  Additional configuration directives described below
+# in the examples.
+
+- name: Example Fan0
+  description: >
+    'Example fan with tach feedback detection method.
+
+    Fans without any special presence detection hardware
+    can use one or more tach speed sensor feedbacks as
+    an indicator of presence.  Listed sensors are expected to
+    be found in the /xyz/openbmc_project/sensors/fan_tach
+    namespace as required by the OpenBMC DBus API.
+
+    Supported policy types are all_of or any_of.'
+  path: /system/chassis/motherboard/fan0
+  methods:
+    - type: tach
+      sensors:
+        - fan0
+
+- name: Example Fan1
+  description: >
+    'Example fan with gpio detection method.
+
+    Fans with dedicated gpios can use the gpio detection
+    method.  The gpio detection uses Linux gpio-keys: the
+    event number must be provided via the key property.'
+  path: /system/chassis/motherboard/fan1
+  methods:
+    - type: gpio
+      key: 123
+      physpath: /sys/devices/foo/bar
+
+- name: Example Fan2
+  description: >
+    'Example fan with fallback redundancy policy.
+
+    Multiple detection methods for a single fan are allowed.
+    When multiple detection methods are provided a redundancy
+    algorithm must be specified with the rpolicy attribute.
+
+    Note that the redundancy policy algorithm may or may not
+    factor the order the detection methods are listed into
+    its logic.
+
+    The fallback algorithm falls back to subsequently listed
+    detection methods when the first method does not detect
+    a fan and the second method does.'
+  path: /system/chassis/motherboard/fan2
+  methods:
+    - type: gpio
+      key: 124
+      physpath: /sys/devices/foo/bar
+    - type: tach
+      sensors:
+        - fan2
+  rpolicy:
+    type: fallback
+