mbed client lightswitch demo

Dependencies:   mbed Socket lwip-eth lwip-sys lwip

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

Committer:
mbedAustin
Date:
Thu Jun 09 17:08:36 2016 +0000
Revision:
11:cada08fc8a70
Commit for public Consumption

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbedAustin 11:cada08fc8a70 1 /*
mbedAustin 11:cada08fc8a70 2 * Copyright (c) 2015 ARM Limited. All rights reserved.
mbedAustin 11:cada08fc8a70 3 * SPDX-License-Identifier: Apache-2.0
mbedAustin 11:cada08fc8a70 4 * Licensed under the Apache License, Version 2.0 (the License); you may
mbedAustin 11:cada08fc8a70 5 * not use this file except in compliance with the License.
mbedAustin 11:cada08fc8a70 6 * You may obtain a copy of the License at
mbedAustin 11:cada08fc8a70 7 *
mbedAustin 11:cada08fc8a70 8 * http://www.apache.org/licenses/LICENSE-2.0
mbedAustin 11:cada08fc8a70 9 *
mbedAustin 11:cada08fc8a70 10 * Unless required by applicable law or agreed to in writing, software
mbedAustin 11:cada08fc8a70 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
mbedAustin 11:cada08fc8a70 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbedAustin 11:cada08fc8a70 13 * See the License for the specific language governing permissions and
mbedAustin 11:cada08fc8a70 14 * limitations under the License.
mbedAustin 11:cada08fc8a70 15 */
mbedAustin 11:cada08fc8a70 16 #ifndef M2M_RESOURCE_INSTANCE_H
mbedAustin 11:cada08fc8a70 17 #define M2M_RESOURCE_INSTANCE_H
mbedAustin 11:cada08fc8a70 18
mbedAustin 11:cada08fc8a70 19 #include "mbed-client/m2mbase.h"
mbedAustin 11:cada08fc8a70 20 #include "mbed-client/functionpointer.h"
mbedAustin 11:cada08fc8a70 21
mbedAustin 11:cada08fc8a70 22 class M2MObjectInstanceCallback {
mbedAustin 11:cada08fc8a70 23 public:
mbedAustin 11:cada08fc8a70 24 virtual void notification_update(M2MBase::Observation observation_level) = 0;
mbedAustin 11:cada08fc8a70 25 };
mbedAustin 11:cada08fc8a70 26
mbedAustin 11:cada08fc8a70 27 /**
mbedAustin 11:cada08fc8a70 28 * @brief M2MResourceInstance.
mbedAustin 11:cada08fc8a70 29 * This class is the base class for mbed Client Resources. All defined
mbedAustin 11:cada08fc8a70 30 * LWM2M resource models can be created based on it.
mbedAustin 11:cada08fc8a70 31 */
mbedAustin 11:cada08fc8a70 32 typedef FP1<void,void*> execute_callback;
mbedAustin 11:cada08fc8a70 33 class M2MResourceCallback;
mbedAustin 11:cada08fc8a70 34
mbedAustin 11:cada08fc8a70 35 class M2MResourceInstance : public M2MBase {
mbedAustin 11:cada08fc8a70 36
mbedAustin 11:cada08fc8a70 37 friend class M2MObjectInstance;
mbedAustin 11:cada08fc8a70 38 friend class M2MResource;
mbedAustin 11:cada08fc8a70 39
mbedAustin 11:cada08fc8a70 40 public:
mbedAustin 11:cada08fc8a70 41
mbedAustin 11:cada08fc8a70 42 /**
mbedAustin 11:cada08fc8a70 43 * Enum defining a resource type that can be
mbedAustin 11:cada08fc8a70 44 * supported by a given resource.
mbedAustin 11:cada08fc8a70 45 */
mbedAustin 11:cada08fc8a70 46 typedef enum {
mbedAustin 11:cada08fc8a70 47 STRING,
mbedAustin 11:cada08fc8a70 48 INTEGER,
mbedAustin 11:cada08fc8a70 49 FLOAT,
mbedAustin 11:cada08fc8a70 50 BOOLEAN,
mbedAustin 11:cada08fc8a70 51 OPAQUE,
mbedAustin 11:cada08fc8a70 52 TIME,
mbedAustin 11:cada08fc8a70 53 OBJLINK
mbedAustin 11:cada08fc8a70 54 }ResourceType;
mbedAustin 11:cada08fc8a70 55
mbedAustin 11:cada08fc8a70 56
mbedAustin 11:cada08fc8a70 57 private: // Constructor and destructor are private
mbedAustin 11:cada08fc8a70 58 // which means that these objects can be created or
mbedAustin 11:cada08fc8a70 59 // deleted only through a function provided by the M2MObjectInstance.
mbedAustin 11:cada08fc8a70 60 /**
mbedAustin 11:cada08fc8a70 61 * @brief Constructor for creating resource.
mbedAustin 11:cada08fc8a70 62 * @param resource_name, Name of the resource.
mbedAustin 11:cada08fc8a70 63 * @param resource_type, Resource Type.
mbedAustin 11:cada08fc8a70 64 * @param type, Resource Data Type of the object.
mbedAustin 11:cada08fc8a70 65 */
mbedAustin 11:cada08fc8a70 66 M2MResourceInstance(const String &resource_name,
mbedAustin 11:cada08fc8a70 67 const String &resource_type,
mbedAustin 11:cada08fc8a70 68 M2MResourceInstance::ResourceType type,
mbedAustin 11:cada08fc8a70 69 M2MObjectInstanceCallback &object_instance_callback);
mbedAustin 11:cada08fc8a70 70
mbedAustin 11:cada08fc8a70 71 /**
mbedAustin 11:cada08fc8a70 72 * @brief Constructor for creating a resource.
mbedAustin 11:cada08fc8a70 73 * @param resource_name, Name of the resource.
mbedAustin 11:cada08fc8a70 74 * @param resource_type, Resource Type.
mbedAustin 11:cada08fc8a70 75 * @param type, Resource Data Type of the object.
mbedAustin 11:cada08fc8a70 76 * @param value, Value pointer of the object.
mbedAustin 11:cada08fc8a70 77 * @param value_length, Length of the value pointer.
mbedAustin 11:cada08fc8a70 78 */
mbedAustin 11:cada08fc8a70 79 M2MResourceInstance(const String &resource_name,
mbedAustin 11:cada08fc8a70 80 const String &resource_type,
mbedAustin 11:cada08fc8a70 81 M2MResourceInstance::ResourceType type,
mbedAustin 11:cada08fc8a70 82 const uint8_t *value,
mbedAustin 11:cada08fc8a70 83 const uint8_t value_length,
mbedAustin 11:cada08fc8a70 84 M2MObjectInstanceCallback &object_instance_callback);
mbedAustin 11:cada08fc8a70 85
mbedAustin 11:cada08fc8a70 86 // Prevents the use of default constructor.
mbedAustin 11:cada08fc8a70 87 M2MResourceInstance();
mbedAustin 11:cada08fc8a70 88
mbedAustin 11:cada08fc8a70 89 // Prevents the use of assignment operator.
mbedAustin 11:cada08fc8a70 90 M2MResourceInstance& operator=( const M2MResourceInstance& /*other*/ );
mbedAustin 11:cada08fc8a70 91
mbedAustin 11:cada08fc8a70 92 // Prevents the use of copy constructor
mbedAustin 11:cada08fc8a70 93 M2MResourceInstance( const M2MResourceInstance& /*other*/ );
mbedAustin 11:cada08fc8a70 94
mbedAustin 11:cada08fc8a70 95 /**
mbedAustin 11:cada08fc8a70 96 * Destructor
mbedAustin 11:cada08fc8a70 97 */
mbedAustin 11:cada08fc8a70 98 virtual ~M2MResourceInstance();
mbedAustin 11:cada08fc8a70 99
mbedAustin 11:cada08fc8a70 100 public:
mbedAustin 11:cada08fc8a70 101
mbedAustin 11:cada08fc8a70 102 /**
mbedAustin 11:cada08fc8a70 103 * @brief Returns object type.
mbedAustin 11:cada08fc8a70 104 * @return BaseType.
mbedAustin 11:cada08fc8a70 105 */
mbedAustin 11:cada08fc8a70 106 virtual M2MBase::BaseType base_type() const;
mbedAustin 11:cada08fc8a70 107
mbedAustin 11:cada08fc8a70 108 /**
mbedAustin 11:cada08fc8a70 109 * @brief Returns resource data type.
mbedAustin 11:cada08fc8a70 110 * @return ResourceType.
mbedAustin 11:cada08fc8a70 111 */
mbedAustin 11:cada08fc8a70 112 virtual M2MResourceInstance::ResourceType resource_instance_type() const;
mbedAustin 11:cada08fc8a70 113
mbedAustin 11:cada08fc8a70 114 /**
mbedAustin 11:cada08fc8a70 115 * @brief Parses the received query for a notification
mbedAustin 11:cada08fc8a70 116 * attribute.
mbedAustin 11:cada08fc8a70 117 * @return True if required attributes are present, else false.
mbedAustin 11:cada08fc8a70 118 */
mbedAustin 11:cada08fc8a70 119 virtual bool handle_observation_attribute(char *&query);
mbedAustin 11:cada08fc8a70 120
mbedAustin 11:cada08fc8a70 121 /**
mbedAustin 11:cada08fc8a70 122 * @brief Sets the function that should be executed when this
mbedAustin 11:cada08fc8a70 123 * resource receives a POST command.
mbedAustin 11:cada08fc8a70 124 * @param callback, Function pointer that needs to be executed.
mbedAustin 11:cada08fc8a70 125 */
mbedAustin 11:cada08fc8a70 126 virtual void set_execute_function(execute_callback callback);
mbedAustin 11:cada08fc8a70 127
mbedAustin 11:cada08fc8a70 128 /**
mbedAustin 11:cada08fc8a70 129 * @brief Sets the value of the given resource.
mbedAustin 11:cada08fc8a70 130 * @param value, Pointer to the value to be set on the resource.
mbedAustin 11:cada08fc8a70 131 * @param value_length , Length of the value pointer.
mbedAustin 11:cada08fc8a70 132 * @return True if successfully set, else false.
mbedAustin 11:cada08fc8a70 133 */
mbedAustin 11:cada08fc8a70 134 virtual bool set_value(const uint8_t *value, const uint32_t value_length);
mbedAustin 11:cada08fc8a70 135
mbedAustin 11:cada08fc8a70 136 /**
mbedAustin 11:cada08fc8a70 137 * @brief Clears the value of the given resource.
mbedAustin 11:cada08fc8a70 138 */
mbedAustin 11:cada08fc8a70 139 virtual void clear_value();
mbedAustin 11:cada08fc8a70 140
mbedAustin 11:cada08fc8a70 141 /**
mbedAustin 11:cada08fc8a70 142 * @brief Executes the function that is set in "set_execute_function".
mbedAustin 11:cada08fc8a70 143 * @param arguments, Arguments that will be passed to be executed.
mbedAustin 11:cada08fc8a70 144 */
mbedAustin 11:cada08fc8a70 145 void execute(void *arguments);
mbedAustin 11:cada08fc8a70 146
mbedAustin 11:cada08fc8a70 147 /**
mbedAustin 11:cada08fc8a70 148 * @brief Provides the value of the given resource.
mbedAustin 11:cada08fc8a70 149 * @param value[OUT], Pointer to the resource value.
mbedAustin 11:cada08fc8a70 150 * @param value_length[OUT], Length of the value pointer.
mbedAustin 11:cada08fc8a70 151 */
mbedAustin 11:cada08fc8a70 152 virtual void get_value(uint8_t *&value, uint32_t &value_length);
mbedAustin 11:cada08fc8a70 153
mbedAustin 11:cada08fc8a70 154 /**
mbedAustin 11:cada08fc8a70 155 * @brief Returns value pointer of the object.
mbedAustin 11:cada08fc8a70 156 * @return Value pointer of the object.
mbedAustin 11:cada08fc8a70 157 */
mbedAustin 11:cada08fc8a70 158 uint8_t* value() const;
mbedAustin 11:cada08fc8a70 159
mbedAustin 11:cada08fc8a70 160 /**
mbedAustin 11:cada08fc8a70 161 * @brief Returns length of the value pointer.
mbedAustin 11:cada08fc8a70 162 * @return Length of the value pointer.
mbedAustin 11:cada08fc8a70 163 */
mbedAustin 11:cada08fc8a70 164 uint32_t value_length() const;
mbedAustin 11:cada08fc8a70 165
mbedAustin 11:cada08fc8a70 166 /**
mbedAustin 11:cada08fc8a70 167 * @brief Handles GET request for the registered objects.
mbedAustin 11:cada08fc8a70 168 * @param nsdl, NSDL handler for the CoAP library.
mbedAustin 11:cada08fc8a70 169 * @param received_coap_header, CoAP message received from the server.
mbedAustin 11:cada08fc8a70 170 * @param observation_handler, Handler object for sending
mbedAustin 11:cada08fc8a70 171 * observation callbacks.
mbedAustin 11:cada08fc8a70 172 * @return sn_coap_hdr_s, Message that needs to be sent to the server.
mbedAustin 11:cada08fc8a70 173 */
mbedAustin 11:cada08fc8a70 174 virtual sn_coap_hdr_s* handle_get_request(nsdl_s *nsdl,
mbedAustin 11:cada08fc8a70 175 sn_coap_hdr_s *received_coap_header,
mbedAustin 11:cada08fc8a70 176 M2MObservationHandler *observation_handler = NULL);
mbedAustin 11:cada08fc8a70 177 /**
mbedAustin 11:cada08fc8a70 178 * @brief Handles PUT request for the registered objects.
mbedAustin 11:cada08fc8a70 179 * @param nsdl, NSDL handler for the CoAP library.
mbedAustin 11:cada08fc8a70 180 * @param received_coap_header, CoAP message received from the server.
mbedAustin 11:cada08fc8a70 181 * @param observation_handler, Handler object for sending
mbedAustin 11:cada08fc8a70 182 * observation callbacks.
mbedAustin 11:cada08fc8a70 183 * @return sn_coap_hdr_s, Message that needs to be sent to the server.
mbedAustin 11:cada08fc8a70 184 */
mbedAustin 11:cada08fc8a70 185 virtual sn_coap_hdr_s* handle_put_request(nsdl_s *nsdl,
mbedAustin 11:cada08fc8a70 186 sn_coap_hdr_s *received_coap_header,
mbedAustin 11:cada08fc8a70 187 M2MObservationHandler *observation_handler = NULL);
mbedAustin 11:cada08fc8a70 188
mbedAustin 11:cada08fc8a70 189 protected:
mbedAustin 11:cada08fc8a70 190
mbedAustin 11:cada08fc8a70 191 /**
mbedAustin 11:cada08fc8a70 192 * @brief Set observer for sending notification update.
mbedAustin 11:cada08fc8a70 193 * @param resource, callback handle.
mbedAustin 11:cada08fc8a70 194 */
mbedAustin 11:cada08fc8a70 195 void set_resource_observer(M2MResourceCallback *resource);
mbedAustin 11:cada08fc8a70 196
mbedAustin 11:cada08fc8a70 197 private:
mbedAustin 11:cada08fc8a70 198
mbedAustin 11:cada08fc8a70 199 void report();
mbedAustin 11:cada08fc8a70 200
mbedAustin 11:cada08fc8a70 201 bool is_value_changed(const uint8_t* value, const uint32_t value_len);
mbedAustin 11:cada08fc8a70 202
mbedAustin 11:cada08fc8a70 203 private:
mbedAustin 11:cada08fc8a70 204
mbedAustin 11:cada08fc8a70 205 M2MObjectInstanceCallback &_object_instance_callback;
mbedAustin 11:cada08fc8a70 206 execute_callback _execute_callback;
mbedAustin 11:cada08fc8a70 207 uint8_t *_value;
mbedAustin 11:cada08fc8a70 208 uint32_t _value_length;
mbedAustin 11:cada08fc8a70 209 ResourceType _resource_type;
mbedAustin 11:cada08fc8a70 210 M2MResourceCallback *_resource_callback; // Not owned
mbedAustin 11:cada08fc8a70 211
mbedAustin 11:cada08fc8a70 212 friend class Test_M2MResourceInstance;
mbedAustin 11:cada08fc8a70 213 friend class Test_M2MResource;
mbedAustin 11:cada08fc8a70 214 friend class Test_M2MObjectInstance;
mbedAustin 11:cada08fc8a70 215 friend class Test_M2MObject;
mbedAustin 11:cada08fc8a70 216 friend class Test_M2MDevice;
mbedAustin 11:cada08fc8a70 217 friend class Test_M2MSecurity;
mbedAustin 11:cada08fc8a70 218 friend class Test_M2MServer;
mbedAustin 11:cada08fc8a70 219 friend class Test_M2MNsdlInterface;
mbedAustin 11:cada08fc8a70 220 friend class Test_M2MFirmware;
mbedAustin 11:cada08fc8a70 221 friend class Test_M2MTLVSerializer;
mbedAustin 11:cada08fc8a70 222 friend class Test_M2MTLVDeserializer;
mbedAustin 11:cada08fc8a70 223 };
mbedAustin 11:cada08fc8a70 224
mbedAustin 11:cada08fc8a70 225 #endif // M2M_RESOURCE_INSTANCE_H