Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
m2mreporthandler.h
00001 /* 00002 * Copyright (c) 2015 ARM Limited. All rights reserved. 00003 * SPDX-License-Identifier: Apache-2.0 00004 * Licensed under the Apache License, Version 2.0 (the License); you may 00005 * not use this file except in compliance with the License. 00006 * You may obtain a copy of the License at 00007 * 00008 * http://www.apache.org/licenses/LICENSE-2.0 00009 * 00010 * Unless required by applicable law or agreed to in writing, software 00011 * distributed under the License is distributed on an AS IS BASIS, WITHOUT 00012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00013 * See the License for the specific language governing permissions and 00014 * limitations under the License. 00015 */ 00016 #ifndef M2MREPORTHANDLER_H 00017 #define M2MREPORTHANDLER_H 00018 00019 // Support for std args 00020 #include <stdint.h> 00021 #include "mbed-client/m2mconfig.h" 00022 #include "mbed-client/m2mbase.h" 00023 #include "mbed-client/m2mtimerobserver.h" 00024 #include "mbed-client/m2mresourceinstance.h" 00025 #include "mbed-client/m2mvector.h" 00026 00027 //FORWARD DECLARATION 00028 class M2MReportObserver; 00029 class M2MTimer; 00030 class M2MResourceInstance; 00031 00032 /** 00033 * @brief M2MReportHandler. 00034 * This class is handles all the observation related operations. 00035 */ 00036 class M2MReportHandler: public M2MTimerObserver 00037 { 00038 private: 00039 // Prevents the use of assignment operator by accident. 00040 M2MReportHandler& operator=( const M2MReportHandler& /*other*/ ); 00041 00042 public: 00043 00044 M2MReportHandler(M2MReportObserver &observer); 00045 00046 public: 00047 00048 /** 00049 * Enum defining which write attributes are set. 00050 */ 00051 enum { 00052 Cancel = 1, 00053 Pmin = 2, 00054 Pmax = 4, 00055 Lt = 8, 00056 Gt = 16, 00057 St = 32 00058 }; 00059 00060 /** 00061 * Destructor 00062 */ 00063 virtual ~M2MReportHandler(); 00064 00065 /** 00066 * @brief Sets that object is under observation. 00067 * @param Value for the observation. 00068 * @param handler, Handler object for sending 00069 * observation callbacks. 00070 */ 00071 virtual void set_under_observation(bool observed); 00072 00073 /** 00074 * @brief Sets the value of the given resource. 00075 * @param value, Value of the observed resource. 00076 */ 00077 virtual void set_value(float value); 00078 00079 /** 00080 * @brief Sets notification trigger. 00081 * @param obj_instance_id, Object instance id that has changed 00082 */ 00083 void set_notification_trigger(uint16_t obj_instance_id = 0); 00084 00085 /** 00086 * @brief Parses the received query for notification 00087 * attribute. 00088 * @param query Query to be parsed for attributes. 00089 * @param type Type of the Base Object. 00090 * @param resource_type Type of the Resource. 00091 * @return true if required attributes are present else false. 00092 */ 00093 virtual bool parse_notification_attribute(char *&query, 00094 M2MBase::BaseType type, 00095 M2MResourceInstance::ResourceType resource_type = M2MResourceInstance::OPAQUE); 00096 00097 /** 00098 * @brief Set back to default values. 00099 */ 00100 void set_default_values(); 00101 00102 /** 00103 * @brief Return write attribute flags. 00104 */ 00105 uint8_t attribute_flags(); 00106 00107 protected : // from M2MTimerObserver 00108 00109 virtual void timer_expired(M2MTimerObserver::Type type = 00110 M2MTimerObserver::Notdefined); 00111 00112 private: 00113 00114 00115 00116 bool set_notification_attribute(char* option, 00117 M2MBase::BaseType type, 00118 M2MResourceInstance::ResourceType resource_type); 00119 00120 /** 00121 * @brief Schedule a report, if the pmin is exceeded 00122 * then report immediately else store the state to be 00123 * reported once the time fires. 00124 */ 00125 void schedule_report(); 00126 00127 /** 00128 * @brief Reports a sample that satisfies the reporting criteria. 00129 */ 00130 void report(); 00131 00132 /** 00133 * @brief Manage timers for pmin and pmax. 00134 */ 00135 void handle_timers(); 00136 00137 /** 00138 * @brief Check whether notification params can be accepted. 00139 */ 00140 bool check_attribute_validity(); 00141 00142 /** 00143 * @brief Stop pmin & pmax timers. 00144 */ 00145 void stop_timers(); 00146 00147 /** 00148 * @brief Check if current value match threshold values. 00149 * @return True if notify can be send otherwise false. 00150 */ 00151 bool check_threshold_values(); 00152 00153 /** 00154 * @brief Check whether current value matches with GT & LT. 00155 * @return True if current value match with GT or LT values. 00156 */ 00157 bool check_gt_lt_params(); 00158 00159 private: 00160 M2MReportObserver &_observer; 00161 int _pmax; 00162 int _pmin; 00163 float _gt; 00164 float _lt; 00165 float _st; 00166 bool _pmin_exceeded; 00167 bool _pmax_exceeded; 00168 M2MTimer *_pmin_timer; 00169 M2MTimer *_pmax_timer; 00170 float _high_step; 00171 float _low_step; 00172 float _current_value; 00173 float _last_value; 00174 uint8_t _attribute_state; 00175 bool _notify; 00176 m2m::Vector<uint16_t> _changed_instance_ids; 00177 00178 friend class Test_M2MReportHandler; 00179 00180 }; 00181 00182 #endif // M2MREPORTHANDLER_H
Generated on Tue Jul 12 2022 13:05:11 by
1.7.2