Donald Meyers / Mbed OS evan
Committer:
djmeyers
Date:
Sat Mar 18 22:37:16 2017 +0000
Revision:
0:06ee5f8a484a
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
djmeyers 0:06ee5f8a484a 1 /*
djmeyers 0:06ee5f8a484a 2 * Copyright (c) 2015 ARM Limited. All rights reserved.
djmeyers 0:06ee5f8a484a 3 * SPDX-License-Identifier: Apache-2.0
djmeyers 0:06ee5f8a484a 4 * Licensed under the Apache License, Version 2.0 (the License); you may
djmeyers 0:06ee5f8a484a 5 * not use this file except in compliance with the License.
djmeyers 0:06ee5f8a484a 6 * You may obtain a copy of the License at
djmeyers 0:06ee5f8a484a 7 *
djmeyers 0:06ee5f8a484a 8 * http://www.apache.org/licenses/LICENSE-2.0
djmeyers 0:06ee5f8a484a 9 *
djmeyers 0:06ee5f8a484a 10 * Unless required by applicable law or agreed to in writing, software
djmeyers 0:06ee5f8a484a 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
djmeyers 0:06ee5f8a484a 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
djmeyers 0:06ee5f8a484a 13 * See the License for the specific language governing permissions and
djmeyers 0:06ee5f8a484a 14 * limitations under the License.
djmeyers 0:06ee5f8a484a 15 */
djmeyers 0:06ee5f8a484a 16 #ifndef M2MREPORTHANDLER_H
djmeyers 0:06ee5f8a484a 17 #define M2MREPORTHANDLER_H
djmeyers 0:06ee5f8a484a 18
djmeyers 0:06ee5f8a484a 19 // Support for std args
djmeyers 0:06ee5f8a484a 20 #include <stdint.h>
djmeyers 0:06ee5f8a484a 21 #include "mbed-client/m2mconfig.h"
djmeyers 0:06ee5f8a484a 22 #include "mbed-client/m2mbase.h"
djmeyers 0:06ee5f8a484a 23 #include "mbed-client/m2mtimerobserver.h"
djmeyers 0:06ee5f8a484a 24 #include "mbed-client/m2mresourceinstance.h"
djmeyers 0:06ee5f8a484a 25 #include "mbed-client/m2mvector.h"
djmeyers 0:06ee5f8a484a 26 #include "mbed-client/m2mtimer.h"
djmeyers 0:06ee5f8a484a 27
djmeyers 0:06ee5f8a484a 28 //FORWARD DECLARATION
djmeyers 0:06ee5f8a484a 29 class M2MReportObserver;
djmeyers 0:06ee5f8a484a 30 class M2MTimer;
djmeyers 0:06ee5f8a484a 31 class M2MResourceInstance;
djmeyers 0:06ee5f8a484a 32
djmeyers 0:06ee5f8a484a 33 /**
djmeyers 0:06ee5f8a484a 34 * @brief M2MReportHandler.
djmeyers 0:06ee5f8a484a 35 * This class is handles all the observation related operations.
djmeyers 0:06ee5f8a484a 36 */
djmeyers 0:06ee5f8a484a 37 class M2MReportHandler: public M2MTimerObserver
djmeyers 0:06ee5f8a484a 38 {
djmeyers 0:06ee5f8a484a 39 private:
djmeyers 0:06ee5f8a484a 40 // Prevents the use of assignment operator by accident.
djmeyers 0:06ee5f8a484a 41 M2MReportHandler& operator=( const M2MReportHandler& /*other*/ );
djmeyers 0:06ee5f8a484a 42
djmeyers 0:06ee5f8a484a 43 public:
djmeyers 0:06ee5f8a484a 44
djmeyers 0:06ee5f8a484a 45 M2MReportHandler(M2MReportObserver &observer);
djmeyers 0:06ee5f8a484a 46
djmeyers 0:06ee5f8a484a 47 public:
djmeyers 0:06ee5f8a484a 48
djmeyers 0:06ee5f8a484a 49 /**
djmeyers 0:06ee5f8a484a 50 * Enum defining which write attributes are set.
djmeyers 0:06ee5f8a484a 51 */
djmeyers 0:06ee5f8a484a 52 enum {
djmeyers 0:06ee5f8a484a 53 Cancel = 1,
djmeyers 0:06ee5f8a484a 54 Pmin = 2,
djmeyers 0:06ee5f8a484a 55 Pmax = 4,
djmeyers 0:06ee5f8a484a 56 Lt = 8,
djmeyers 0:06ee5f8a484a 57 Gt = 16,
djmeyers 0:06ee5f8a484a 58 St = 32
djmeyers 0:06ee5f8a484a 59 };
djmeyers 0:06ee5f8a484a 60
djmeyers 0:06ee5f8a484a 61 /**
djmeyers 0:06ee5f8a484a 62 * Destructor
djmeyers 0:06ee5f8a484a 63 */
djmeyers 0:06ee5f8a484a 64 virtual ~M2MReportHandler();
djmeyers 0:06ee5f8a484a 65
djmeyers 0:06ee5f8a484a 66 /**
djmeyers 0:06ee5f8a484a 67 * @brief Sets that object is under observation.
djmeyers 0:06ee5f8a484a 68 * @param Value for the observation.
djmeyers 0:06ee5f8a484a 69 * @param handler, Handler object for sending
djmeyers 0:06ee5f8a484a 70 * observation callbacks.
djmeyers 0:06ee5f8a484a 71 */
djmeyers 0:06ee5f8a484a 72 void set_under_observation(bool observed);
djmeyers 0:06ee5f8a484a 73
djmeyers 0:06ee5f8a484a 74 /**
djmeyers 0:06ee5f8a484a 75 * @brief Sets the value of the given resource.
djmeyers 0:06ee5f8a484a 76 * @param value, Value of the observed resource.
djmeyers 0:06ee5f8a484a 77 */
djmeyers 0:06ee5f8a484a 78 void set_value(float value);
djmeyers 0:06ee5f8a484a 79
djmeyers 0:06ee5f8a484a 80 /**
djmeyers 0:06ee5f8a484a 81 * @brief Sets notification trigger.
djmeyers 0:06ee5f8a484a 82 * @param obj_instance_id, Object instance id that has changed
djmeyers 0:06ee5f8a484a 83 */
djmeyers 0:06ee5f8a484a 84 void set_notification_trigger(uint16_t obj_instance_id = 0);
djmeyers 0:06ee5f8a484a 85
djmeyers 0:06ee5f8a484a 86 /**
djmeyers 0:06ee5f8a484a 87 * @brief Parses the received query for notification
djmeyers 0:06ee5f8a484a 88 * attribute.
djmeyers 0:06ee5f8a484a 89 * @param query Query to be parsed for attributes.
djmeyers 0:06ee5f8a484a 90 * @param type Type of the Base Object.
djmeyers 0:06ee5f8a484a 91 * @param resource_type Type of the Resource.
djmeyers 0:06ee5f8a484a 92 * @return true if required attributes are present else false.
djmeyers 0:06ee5f8a484a 93 */
djmeyers 0:06ee5f8a484a 94 bool parse_notification_attribute(const char *query,
djmeyers 0:06ee5f8a484a 95 M2MBase::BaseType type,
djmeyers 0:06ee5f8a484a 96 M2MResourceInstance::ResourceType resource_type = M2MResourceInstance::OPAQUE);
djmeyers 0:06ee5f8a484a 97
djmeyers 0:06ee5f8a484a 98 /**
djmeyers 0:06ee5f8a484a 99 * @brief Set back to default values.
djmeyers 0:06ee5f8a484a 100 */
djmeyers 0:06ee5f8a484a 101 void set_default_values();
djmeyers 0:06ee5f8a484a 102
djmeyers 0:06ee5f8a484a 103 /**
djmeyers 0:06ee5f8a484a 104 * @brief Return write attribute flags.
djmeyers 0:06ee5f8a484a 105 */
djmeyers 0:06ee5f8a484a 106 uint8_t attribute_flags();
djmeyers 0:06ee5f8a484a 107
djmeyers 0:06ee5f8a484a 108 protected : // from M2MTimerObserver
djmeyers 0:06ee5f8a484a 109
djmeyers 0:06ee5f8a484a 110 virtual void timer_expired(M2MTimerObserver::Type type =
djmeyers 0:06ee5f8a484a 111 M2MTimerObserver::Notdefined);
djmeyers 0:06ee5f8a484a 112
djmeyers 0:06ee5f8a484a 113 private:
djmeyers 0:06ee5f8a484a 114
djmeyers 0:06ee5f8a484a 115
djmeyers 0:06ee5f8a484a 116
djmeyers 0:06ee5f8a484a 117 bool set_notification_attribute(const char* option,
djmeyers 0:06ee5f8a484a 118 M2MBase::BaseType type,
djmeyers 0:06ee5f8a484a 119 M2MResourceInstance::ResourceType resource_type);
djmeyers 0:06ee5f8a484a 120
djmeyers 0:06ee5f8a484a 121 /**
djmeyers 0:06ee5f8a484a 122 * @brief Schedule a report, if the pmin is exceeded
djmeyers 0:06ee5f8a484a 123 * then report immediately else store the state to be
djmeyers 0:06ee5f8a484a 124 * reported once the time fires.
djmeyers 0:06ee5f8a484a 125 */
djmeyers 0:06ee5f8a484a 126 void schedule_report();
djmeyers 0:06ee5f8a484a 127
djmeyers 0:06ee5f8a484a 128 /**
djmeyers 0:06ee5f8a484a 129 * @brief Reports a sample that satisfies the reporting criteria.
djmeyers 0:06ee5f8a484a 130 */
djmeyers 0:06ee5f8a484a 131 void report();
djmeyers 0:06ee5f8a484a 132
djmeyers 0:06ee5f8a484a 133 /**
djmeyers 0:06ee5f8a484a 134 * @brief Manage timers for pmin and pmax.
djmeyers 0:06ee5f8a484a 135 */
djmeyers 0:06ee5f8a484a 136 void handle_timers();
djmeyers 0:06ee5f8a484a 137
djmeyers 0:06ee5f8a484a 138 /**
djmeyers 0:06ee5f8a484a 139 * @brief Check whether notification params can be accepted.
djmeyers 0:06ee5f8a484a 140 */
djmeyers 0:06ee5f8a484a 141 bool check_attribute_validity();
djmeyers 0:06ee5f8a484a 142
djmeyers 0:06ee5f8a484a 143 /**
djmeyers 0:06ee5f8a484a 144 * @brief Stop pmin & pmax timers.
djmeyers 0:06ee5f8a484a 145 */
djmeyers 0:06ee5f8a484a 146 void stop_timers();
djmeyers 0:06ee5f8a484a 147
djmeyers 0:06ee5f8a484a 148 /**
djmeyers 0:06ee5f8a484a 149 * @brief Check if current value match threshold values.
djmeyers 0:06ee5f8a484a 150 * @return True if notify can be send otherwise false.
djmeyers 0:06ee5f8a484a 151 */
djmeyers 0:06ee5f8a484a 152 bool check_threshold_values();
djmeyers 0:06ee5f8a484a 153
djmeyers 0:06ee5f8a484a 154 /**
djmeyers 0:06ee5f8a484a 155 * @brief Check whether current value matches with GT & LT.
djmeyers 0:06ee5f8a484a 156 * @return True if current value match with GT or LT values.
djmeyers 0:06ee5f8a484a 157 */
djmeyers 0:06ee5f8a484a 158 bool check_gt_lt_params();
djmeyers 0:06ee5f8a484a 159
djmeyers 0:06ee5f8a484a 160 private:
djmeyers 0:06ee5f8a484a 161 M2MReportObserver &_observer;
djmeyers 0:06ee5f8a484a 162 uint8_t _attribute_state;
djmeyers 0:06ee5f8a484a 163 bool _notify;
djmeyers 0:06ee5f8a484a 164 bool _pmin_exceeded;
djmeyers 0:06ee5f8a484a 165 bool _pmax_exceeded;
djmeyers 0:06ee5f8a484a 166 M2MTimer _pmin_timer;
djmeyers 0:06ee5f8a484a 167 M2MTimer _pmax_timer;
djmeyers 0:06ee5f8a484a 168 int32_t _pmax;
djmeyers 0:06ee5f8a484a 169 int32_t _pmin;
djmeyers 0:06ee5f8a484a 170 float _current_value;
djmeyers 0:06ee5f8a484a 171 float _gt;
djmeyers 0:06ee5f8a484a 172 float _lt;
djmeyers 0:06ee5f8a484a 173 float _st;
djmeyers 0:06ee5f8a484a 174 float _high_step;
djmeyers 0:06ee5f8a484a 175 float _low_step;
djmeyers 0:06ee5f8a484a 176 float _last_value;
djmeyers 0:06ee5f8a484a 177 m2m::Vector<uint16_t> _changed_instance_ids;
djmeyers 0:06ee5f8a484a 178
djmeyers 0:06ee5f8a484a 179 friend class Test_M2MReportHandler;
djmeyers 0:06ee5f8a484a 180
djmeyers 0:06ee5f8a484a 181 };
djmeyers 0:06ee5f8a484a 182
djmeyers 0:06ee5f8a484a 183 #endif // M2MREPORTHANDLER_H