Create Report and ReportManager interfaces

Both interfaces are created based on Telemetry design described in
openbmc/docs/designs/telemetry.md. Both will be implemented in
Telemetry service in openbmc/telemetry repository.
Ref:
  https://github.com/openbmc/docs/blob/master/designs/telemetry.md

Tested:
  - Successful build and verified changes in server.hpp and
    server.cpp.

Change-Id: Id6578ce1d349ee07b8a07b2d597471ba7433a6c0
Signed-off-by: Krzysztof Grobelny <krzysztof.grobelny@intel.com>
Signed-off-by: Wludzik, Jozef <jozef.wludzik@intel.com>
diff --git a/gen/xyz/openbmc_project/Telemetry/Report/meson.build b/gen/xyz/openbmc_project/Telemetry/Report/meson.build
new file mode 100644
index 0000000..208a11e
--- /dev/null
+++ b/gen/xyz/openbmc_project/Telemetry/Report/meson.build
@@ -0,0 +1,14 @@
+# Generated file; do not modify.
+generated_sources += custom_target(
+    'xyz/openbmc_project/Telemetry/Report__cpp'.underscorify(),
+    input: [ meson.source_root() / 'xyz/openbmc_project/Telemetry/Report.interface.yaml',  ],
+    output: [ 'server.cpp', 'server.hpp', 'client.hpp',  ],
+    command: [
+        sdbuspp_gen_meson_prog, '--command', 'cpp',
+        '--output', meson.current_build_dir(),
+        '--tool', sdbusplusplus_prog,
+        '--directory', meson.source_root(),
+        'xyz/openbmc_project/Telemetry/Report',
+    ],
+)
+
diff --git a/gen/xyz/openbmc_project/Telemetry/ReportManager/meson.build b/gen/xyz/openbmc_project/Telemetry/ReportManager/meson.build
new file mode 100644
index 0000000..757eb64
--- /dev/null
+++ b/gen/xyz/openbmc_project/Telemetry/ReportManager/meson.build
@@ -0,0 +1,14 @@
+# Generated file; do not modify.
+generated_sources += custom_target(
+    'xyz/openbmc_project/Telemetry/ReportManager__cpp'.underscorify(),
+    input: [ meson.source_root() / 'xyz/openbmc_project/Telemetry/ReportManager.interface.yaml',  ],
+    output: [ 'server.cpp', 'server.hpp', 'client.hpp',  ],
+    command: [
+        sdbuspp_gen_meson_prog, '--command', 'cpp',
+        '--output', meson.current_build_dir(),
+        '--tool', sdbusplusplus_prog,
+        '--directory', meson.source_root(),
+        'xyz/openbmc_project/Telemetry/ReportManager',
+    ],
+)
+
diff --git a/gen/xyz/openbmc_project/Telemetry/meson.build b/gen/xyz/openbmc_project/Telemetry/meson.build
new file mode 100644
index 0000000..53ae45c
--- /dev/null
+++ b/gen/xyz/openbmc_project/Telemetry/meson.build
@@ -0,0 +1,31 @@
+# Generated file; do not modify.
+subdir('Report')
+generated_others += custom_target(
+    'xyz/openbmc_project/Telemetry/Report__markdown'.underscorify(),
+    input: [ meson.source_root() / 'xyz/openbmc_project/Telemetry/Report.interface.yaml',  ],
+    output: [ 'Report.md' ],
+    command: [
+        sdbuspp_gen_meson_prog, '--command', 'markdown',
+        '--output', meson.current_build_dir(),
+        '--tool', sdbusplusplus_prog,
+        '--directory', meson.source_root(),
+        'xyz/openbmc_project/Telemetry/Report',
+    ],
+    build_by_default: true,
+)
+
+subdir('ReportManager')
+generated_others += custom_target(
+    'xyz/openbmc_project/Telemetry/ReportManager__markdown'.underscorify(),
+    input: [ meson.source_root() / 'xyz/openbmc_project/Telemetry/ReportManager.interface.yaml',  ],
+    output: [ 'ReportManager.md' ],
+    command: [
+        sdbuspp_gen_meson_prog, '--command', 'markdown',
+        '--output', meson.current_build_dir(),
+        '--tool', sdbusplusplus_prog,
+        '--directory', meson.source_root(),
+        'xyz/openbmc_project/Telemetry/ReportManager',
+    ],
+    build_by_default: true,
+)
+
diff --git a/gen/xyz/openbmc_project/meson.build b/gen/xyz/openbmc_project/meson.build
index 0f50a9d..3c4750f 100644
--- a/gen/xyz/openbmc_project/meson.build
+++ b/gen/xyz/openbmc_project/meson.build
@@ -108,6 +108,7 @@
 subdir('Smbios')
 subdir('Software')
 subdir('State')
+subdir('Telemetry')
 subdir('Time')
 generated_others += custom_target(
     'xyz/openbmc_project/Time__markdown'.underscorify(),
diff --git a/xyz/openbmc_project/Telemetry/Report.interface.yaml b/xyz/openbmc_project/Telemetry/Report.interface.yaml
new file mode 100644
index 0000000..5614890
--- /dev/null
+++ b/xyz/openbmc_project/Telemetry/Report.interface.yaml
@@ -0,0 +1,83 @@
+description: >
+    Implement this interface to provide report inspection features. An
+    implementation service should additionally implement
+    xyz.openbmc_project.Object.Delete for deletion of individual report objects.
+
+methods:
+  - name: Update
+    description: >
+        The Update method is defined for the on demand metric report update.
+        It triggers update of the Readings property. If ReportingType is not
+        set to OnRequest then method does nothing.
+
+properties:
+  - name: Persistency
+    type: boolean
+    description: >
+        Defines if the report configuration is stored in non volatile memory.
+        Configuration contains all Report properties excluding Readings.
+  - name: ReadingParameters
+    type: array[struct[array[object_path],enum[self.OperationType],string,string]]
+    description: >
+        Array of structure that contains list of sensor paths, operation type,
+        metric Id and metadata. Metric Id and metadata are used to store user
+        details, e.g. metadata can be used to map sensor name to DBus path.
+  - name: Readings
+    type: struct[uint64,array[struct[string,string,double,uint64]]]
+    description: >
+        Structure that contains timestamp of readings update in milliseconds and
+        array of metric Id, metadata, reading value and timestamp of single
+        reading update in milliseconds. Metric Id and metadata are equal to its
+        counterparts in ReadingParameters property.
+    flags:
+    - readonly
+  - name: EmitsReadingsUpdate
+    type: boolean
+    description: >
+        On Readings update PropertiesChanged signal is emitted. It allows to
+        decrease generation of load on DBus when Readings property is updated.
+        Redfish Event Service requires this option to be equal to true.
+    flags:
+    - const
+  - name: LogToMetricReportsCollection
+    type: boolean
+    description: >
+        Presence of Report in Metric Report Collection in Redfish Telemetry
+        Service.
+    flags:
+    - const
+  - name: ReportingType
+    type: enum[self.ReportingType]
+    description: Defines how readings are updated.
+  - name: Interval
+    type: uint64
+    description: >
+        Defines period of time in milliseconds when readings are updated.
+
+enumerations:
+   - name: OperationType
+     descritpion: Type of action that is executed on readings.
+     values:
+       - name: Single
+         description: Store a single reading, only allowed on single sensor.
+       - name: Max
+         description: Store maximal reading during defined time period.
+       - name: Min
+         description: Store minimal reading during defined time period.
+       - name: Avg
+         description: Calulate average of readings during defined time period.
+       - name: Sum
+         description: Calulate sum of readings over defined time period.
+   - name: ReportingType
+     description: >
+       The type that defines when Readings are updated.
+     values:
+       - name: OnChange
+         description: >
+           On sensor reading change.
+       - name: OnRequest
+         description: >
+           On Update method call.
+       - name: Periodic
+         description: >
+           After period of time defined by ScanPeriod property.
diff --git a/xyz/openbmc_project/Telemetry/ReportManager.interface.yaml b/xyz/openbmc_project/Telemetry/ReportManager.interface.yaml
new file mode 100644
index 0000000..05a6464
--- /dev/null
+++ b/xyz/openbmc_project/Telemetry/ReportManager.interface.yaml
@@ -0,0 +1,65 @@
+description: >
+    Implement to provide reports management. Contain information about report
+    limitations and allows to add report.
+
+methods:
+  - name: AddReport
+    description: >
+        Create new object that represent Report with
+        xyz.openbmc_project.Telemetry.Report interface stored in path
+        /xyz/openbmc_project/Telemetry/Reports/{Domain}/{Name} where
+        Domain and Name are parameters of this method.
+    parameters:
+      - name: name
+        type: string
+        description: >
+            Defines the name of report to be exposed over D-Bus. Service allows
+            to use separator '/' in name to group reports in directory.
+      - name: reportingType
+        type: enum[xyz.openbmc_project.Telemetry.Report.ReportingType]
+        description: Defines report type
+      - name: emitsReadingsUpdate
+        type: boolean
+        description: >
+            Defines presence of PropertiesChanged signal for
+            xyz.openbmc_project.Telmetry.Report.Readings property.
+      - name: logToMetricReportsCollection
+        type: boolean
+        description: >
+            Defines presence of Report in Metric Report Collection in Redfish
+            Telemetry Service.
+      - name: interval
+        type: uint64
+        description: >
+            Defines period of time in milliseconds when Report is updated with
+            new readings. Minimal interval is defined in MinInterval property.
+      - name: metricParams
+        type: array[struct[array[object_path],enum[xyz.openbmc_project.Telemetry.Report.OperationType],string,string]]
+        description: >
+            Array of metric parameters where first parameter is an array of
+            sensors DBus paths. Second parameter specifies operation type of
+            metric. Third parameter is a metric Id and fourth parameter is a
+            metadata, both are used to store user details.
+    returns:
+      - name: reportPath
+        type: object_path
+        description: >
+            Path to new report -> /xyz/openbmc_project/Telemetry/Reports/{name}.
+
+properties:
+  - name: MaxReports
+    type: size
+    description: >
+        Contains the max number of metric reports supported by the Telemetry.
+        This property is added to be compliant with the Redfish Telemetry
+        Service schema, that contains MaxReports property.
+    flags:
+    - const
+  - name: MinInterval
+    type: uint64
+    description: >
+        Minimal allowed time between readings property updates. It limits
+        Interval property in xyz.openbmc_project.Telemetry.Report and
+        interval parameter in AddReport method.
+    flags:
+    - const