Add ZCL reporting plugin to be compiled in various examples (#3608)

diff --git a/src/app/reporting/reporting.h b/src/app/reporting/reporting.h
index aaba2f8..643d231 100644
--- a/src/app/reporting/reporting.h
+++ b/src/app/reporting/reporting.h
@@ -48,6 +48,11 @@
 // The default reporting will generate a table that is mandatory
 // but user may still allocate some table for adding more reporting over
 // the air or by cli as part of reporting plugin.
+
+#ifndef EMBER_AF_PLUGIN_REPORTING_TABLE_SIZE
+#define EMBER_AF_PLUGIN_REPORTING_TABLE_SIZE 5
+#endif // EMBER_AF_PLUGIN_REPORTING_TABLE_SIZE
+
 #ifndef REPORT_TABLE_SIZE
 #if defined EMBER_AF_GENERATED_REPORTING_CONFIG_DEFAULTS_TABLE_SIZE
 #define REPORT_TABLE_SIZE (EMBER_AF_GENERATED_REPORTING_CONFIG_DEFAULTS_TABLE_SIZE + EMBER_AF_PLUGIN_REPORTING_TABLE_SIZE)
@@ -76,4 +81,87 @@
 uint8_t emAfPluginReportingConditionallyAddReportingEntry(EmberAfPluginReportingEntry * newEntry);
 void emberAfPluginReportingLoadReportingConfigDefaults(void);
 bool emberAfPluginReportingGetReportingConfigDefaults(EmberAfPluginReportingEntry * defaultConfiguration);
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+/** @brief Configure Reporting Command
+ *
+ * This function is called by the application framework when a Configure
+ * Reporting command is received from an external device.  The Configure
+ * Reporting command contains a series of attribute reporting configuration
+ * records.  The application should return true if the message was processed or
+ * false if it was not.
+ *
+ * @param cmd   Ver.: always
+ */
+bool emberAfConfigureReportingCommandCallback(const EmberAfClusterCommand * cmd);
+
+/** @brief Read Reporting Configuration Command
+ *
+ * This function is called by the application framework when a Read Reporting
+ * Configuration command is received from an external device.  The application
+ * should return true if the message was processed or false if it was not.
+ *
+ * @param cmd   Ver.: always
+ */
+bool emberAfReadReportingConfigurationCommandCallback(const EmberAfClusterCommand * cmd);
+
+/** @brief Clear Report Table
+ *
+ * This function is called by the framework when the application should clear
+ * the report table.
+ *
+ */
+EmberStatus emberAfClearReportTableCallback(void);
+
+/** @brief Configure Reporting Response
+ *
+ * This function is called by the application framework when a Configure
+ * Reporting Response command is received from an external device.  The
+ * application should return true if the message was processed or false if it
+ * was not.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param buffer Buffer containing the list of attribute status records.  Ver.:
+ * always
+ * @param bufLen The length in bytes of the list.  Ver.: always
+ */
+bool emberAfConfigureReportingResponseCallback(EmberAfClusterId clusterId, uint8_t * buffer, uint16_t bufLen);
+
+/** @brief Read Reporting Configuration Response
+ *
+ * This function is called by the application framework when a Read Reporting
+ * Configuration Response command is received from an external device.  The
+ * application should return true if the message was processed or false if it
+ * was not.
+ *
+ * @param clusterId The cluster identifier of this response.  Ver.: always
+ * @param buffer Buffer containing the list of attribute reporting configuration
+ * records.  Ver.: always
+ * @param bufLen The length in bytes of the list.  Ver.: always
+ */
+bool emberAfReadReportingConfigurationResponseCallback(EmberAfClusterId clusterId, uint8_t * buffer, uint16_t bufLen);
+
+/** @brief Reporting Attribute Change
+ *
+ * This function is called by the framework when an attribute managed by the
+ * framework changes.  The application should call this function when an
+ * externally-managed attribute changes.  The application should use the change
+ * notification to inform its reporting decisions.
+ *
+ * @param endpoint   Ver.: always
+ * @param clusterId   Ver.: always
+ * @param attributeId   Ver.: always
+ * @param mask   Ver.: always
+ * @param manufacturerCode   Ver.: always
+ * @param type   Ver.: always
+ * @param data   Ver.: always
+ */
+void emberAfReportingAttributeChangeCallback(uint8_t endpoint, EmberAfClusterId clusterId, EmberAfAttributeId attributeId,
+                                             uint8_t mask, uint16_t manufacturerCode, EmberAfAttributeType type, uint8_t * data);
+
+#ifdef __cplusplus
+}
+#endif
 #endif