mbed client lightswitch demo

Dependencies:   mbed Socket lwip-eth lwip-sys lwip

Fork of mbed-client-classic-example-lwip by Austin Blackstone

Revision:
11:cada08fc8a70
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/include/m2mreporthandler.h	Thu Jun 09 17:08:36 2016 +0000
@@ -0,0 +1,181 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef M2MREPORTHANDLER_H
+#define M2MREPORTHANDLER_H
+
+// Support for std args
+#include <stdint.h>
+#include "mbed-client/m2mconfig.h"
+#include "mbed-client/m2mbase.h"
+#include "mbed-client/m2mtimerobserver.h"
+#include "mbed-client/m2mresourceinstance.h"
+
+//FORWARD DECLARATION
+class M2MReportObserver;
+class M2MTimer;
+class M2MResourceInstance;
+
+/**
+ *  @brief M2MReportHandler.
+ *  This class is handles all the observation related operations.
+ */
+
+class M2MReportHandler: public M2MTimerObserver
+{
+private:
+    // Prevents the use of assignment operator by accident.
+    M2MReportHandler& operator=( const M2MReportHandler& /*other*/ );
+
+public:
+
+    M2MReportHandler(M2MReportObserver &observer);
+
+public:
+
+    /**
+     * Enum defining which write attributes are set.
+    */
+    enum {
+        Cancel = 1,
+        Pmin = 2,
+        Pmax = 4,
+        Lt = 8,
+        Gt = 16,
+        St = 32
+    };
+
+    /**
+     * Destructor
+     */
+    virtual ~M2MReportHandler();
+
+    /**
+     * @brief Sets that object is under observation.
+     * @param Value for the observation.
+     * @param handler, Handler object for sending
+     * observation callbacks.
+     */
+    virtual void set_under_observation(bool observed);
+
+    /**
+     * @brief Sets the value of the given resource.
+     * @param value, Value of the observed resource.
+     */
+    virtual void set_value(float value);
+
+    /**
+     * @brief Sets notification trigger.
+     */
+    void set_notification_trigger();
+
+    /**
+     * @brief Parses the received query for notification
+     * attribute.
+     * @param query Query to be parsed for attributes.
+     * @param type Type of the Base Object.
+     * @param resource_type Type of the Resource.
+     * @return true if required attributes are present else false.
+     */
+    virtual bool parse_notification_attribute(char *&query,
+                                              M2MBase::BaseType type,
+                                              M2MResourceInstance::ResourceType resource_type = M2MResourceInstance::OPAQUE);
+
+    /**
+    * @brief Set back to default values.
+    */
+    void set_default_values();
+
+    /**
+     * @brief Return write attribute flags.
+     */
+    uint8_t attribute_flags();
+
+protected : // from M2MTimerObserver
+
+    virtual void timer_expired(M2MTimerObserver::Type type =
+                               M2MTimerObserver::Notdefined);
+
+private:
+
+
+
+    bool set_notification_attribute(char* option,
+            M2MBase::BaseType type,
+            M2MResourceInstance::ResourceType resource_type);
+
+    /**
+     * @brief Schedule a report, if the pmin is exceeded
+     * then report immediately else store the state to be
+     * reported once the time fires.
+     */
+    void schedule_report();
+
+    /**
+    * @brief Reports a sample that satisfies the reporting criteria.
+    */
+    void report();
+
+    /**
+    * @brief Manage timers for pmin and pmax.
+    */
+    void handle_timers();
+
+    /**
+    * @brief Check whether notification params can be accepted.
+    */
+    bool check_attribute_validity();
+
+    /**
+    * @brief Stop pmin & pmax timers.
+    */
+    void stop_timers();
+
+    /**
+     * @brief Check if current value match threshold values.
+     * @return True if notify can be send otherwise false.
+     */
+    bool check_threshold_values();
+
+    /**
+     * @brief Check whether current value matches with GT & LT.
+     * @return True if current value match with GT or LT values.
+     */
+    bool check_gt_lt_params();
+
+private:
+
+    M2MReportObserver           &_observer;
+    float                       _pmax;
+    float                       _pmin;
+    float                       _gt;
+    float                       _lt;
+    float                       _st;
+    bool                        _pmin_exceeded;
+    bool                        _pmax_exceeded;
+    M2MTimer                    *_pmin_timer;
+    M2MTimer                    *_pmax_timer;        
+    float                       _high_step;
+    float                       _low_step;
+    float                       _current_value;
+    float                       _last_value;    
+    uint8_t                     _attribute_state;
+    bool                        _notify;
+
+friend class Test_M2MReportHandler;
+
+};
+
+#endif // M2MREPORTHANDLER_H