FRDM K64F Metronome

Committer:
ram54288
Date:
Sun May 14 18:37:05 2017 +0000
Revision:
0:dbad57390bd1
Initial commit

Who changed what in which revision?

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