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_OBJECT_INSTANCE_H
mbedAustin 11:cada08fc8a70 17 #define M2M_OBJECT_INSTANCE_H
mbedAustin 11:cada08fc8a70 18
mbedAustin 11:cada08fc8a70 19 #include "mbed-client/m2mvector.h"
mbedAustin 11:cada08fc8a70 20 #include "mbed-client/m2mresource.h"
mbedAustin 11:cada08fc8a70 21
mbedAustin 11:cada08fc8a70 22 //FORWARD DECLARATION
mbedAustin 11:cada08fc8a70 23 typedef Vector<M2MResource *> M2MResourceList;
mbedAustin 11:cada08fc8a70 24 typedef Vector<M2MResourceInstance *> M2MResourceInstanceList;
mbedAustin 11:cada08fc8a70 25
mbedAustin 11:cada08fc8a70 26 class M2MObjectCallback {
mbedAustin 11:cada08fc8a70 27 public:
mbedAustin 11:cada08fc8a70 28 virtual void notification_update() = 0;
mbedAustin 11:cada08fc8a70 29 };
mbedAustin 11:cada08fc8a70 30
mbedAustin 11:cada08fc8a70 31 /**
mbedAustin 11:cada08fc8a70 32 * @brief M2MObjectInstance.
mbedAustin 11:cada08fc8a70 33 * This class is the instance class for mbed Client Objects. All defined
mbedAustin 11:cada08fc8a70 34 * LWM2M object models can be created based on it. This class also holds all resource
mbedAustin 11:cada08fc8a70 35 * instances associated with the given object.
mbedAustin 11:cada08fc8a70 36 */
mbedAustin 11:cada08fc8a70 37
mbedAustin 11:cada08fc8a70 38 class M2MObjectInstance : public M2MBase,
mbedAustin 11:cada08fc8a70 39 public M2MObjectInstanceCallback
mbedAustin 11:cada08fc8a70 40 {
mbedAustin 11:cada08fc8a70 41
mbedAustin 11:cada08fc8a70 42 friend class M2MObject;
mbedAustin 11:cada08fc8a70 43
mbedAustin 11:cada08fc8a70 44 private: // Constructor and destructor are private which means
mbedAustin 11:cada08fc8a70 45 // that these objects can be created or
mbedAustin 11:cada08fc8a70 46 // deleted only through function provided by M2MObject.
mbedAustin 11:cada08fc8a70 47
mbedAustin 11:cada08fc8a70 48 /**
mbedAustin 11:cada08fc8a70 49 * @brief Constructor
mbedAustin 11:cada08fc8a70 50 * @param name, Name of the object
mbedAustin 11:cada08fc8a70 51 */
mbedAustin 11:cada08fc8a70 52 M2MObjectInstance(const String &object_name,
mbedAustin 11:cada08fc8a70 53 M2MObjectCallback &object_callback);
mbedAustin 11:cada08fc8a70 54
mbedAustin 11:cada08fc8a70 55
mbedAustin 11:cada08fc8a70 56 // Prevents the use of default constructor.
mbedAustin 11:cada08fc8a70 57 M2MObjectInstance();
mbedAustin 11:cada08fc8a70 58
mbedAustin 11:cada08fc8a70 59 // Prevents the use of assignment operator.
mbedAustin 11:cada08fc8a70 60 M2MObjectInstance& operator=( const M2MObjectInstance& /*other*/ );
mbedAustin 11:cada08fc8a70 61
mbedAustin 11:cada08fc8a70 62 // Prevents the use of copy constructor.
mbedAustin 11:cada08fc8a70 63 M2MObjectInstance( const M2MObjectInstance& /*other*/ );
mbedAustin 11:cada08fc8a70 64
mbedAustin 11:cada08fc8a70 65 /**
mbedAustin 11:cada08fc8a70 66 * Destructor
mbedAustin 11:cada08fc8a70 67 */
mbedAustin 11:cada08fc8a70 68 virtual ~M2MObjectInstance();
mbedAustin 11:cada08fc8a70 69
mbedAustin 11:cada08fc8a70 70 public:
mbedAustin 11:cada08fc8a70 71
mbedAustin 11:cada08fc8a70 72 /**
mbedAustin 11:cada08fc8a70 73 * @brief Creates a static resource for a given mbed Client Inteface object. With this, the
mbedAustin 11:cada08fc8a70 74 * client can respond to server's GET methods with the provided value.
mbedAustin 11:cada08fc8a70 75 * @param resource_name, Name of the resource.
mbedAustin 11:cada08fc8a70 76 * @param resource_type, Type of the resource.
mbedAustin 11:cada08fc8a70 77 * @param value, Pointer to the value of the resource.
mbedAustin 11:cada08fc8a70 78 * @param value_length, Length of the value in the pointer.
mbedAustin 11:cada08fc8a70 79 * @param multiple_instance, Resource can have
mbedAustin 11:cada08fc8a70 80 * multiple instances, default is false.
mbedAustin 11:cada08fc8a70 81 * @return M2MResource, Resource for managing other client operations.
mbedAustin 11:cada08fc8a70 82 */
mbedAustin 11:cada08fc8a70 83 M2MResource* create_static_resource(const String &resource_name,
mbedAustin 11:cada08fc8a70 84 const String &resource_type,
mbedAustin 11:cada08fc8a70 85 M2MResourceInstance::ResourceType type,
mbedAustin 11:cada08fc8a70 86 const uint8_t *value,
mbedAustin 11:cada08fc8a70 87 const uint8_t value_length,
mbedAustin 11:cada08fc8a70 88 bool multiple_instance = false);
mbedAustin 11:cada08fc8a70 89
mbedAustin 11:cada08fc8a70 90 /**
mbedAustin 11:cada08fc8a70 91 * @brief Creates a dynamic resource for a given mbed Client Inteface object. With this,
mbedAustin 11:cada08fc8a70 92 * the client can respond to different queries from the server (GET,PUT etc).
mbedAustin 11:cada08fc8a70 93 * This type of resource is also observable and carries callbacks.
mbedAustin 11:cada08fc8a70 94 * @param resource_name, Name of the resource.
mbedAustin 11:cada08fc8a70 95 * @param resource_type, Type of the resource.
mbedAustin 11:cada08fc8a70 96 * @param observable, Indication, whether the resource is observable or not.
mbedAustin 11:cada08fc8a70 97 * @param multiple_instance, Resource can have
mbedAustin 11:cada08fc8a70 98 * multiple instances, default is false.
mbedAustin 11:cada08fc8a70 99 * @return M2MResource, Resource for managing other client operations.
mbedAustin 11:cada08fc8a70 100 */
mbedAustin 11:cada08fc8a70 101 M2MResource* create_dynamic_resource(const String &resource_name,
mbedAustin 11:cada08fc8a70 102 const String &resource_type,
mbedAustin 11:cada08fc8a70 103 M2MResourceInstance::ResourceType type,
mbedAustin 11:cada08fc8a70 104 bool observable,
mbedAustin 11:cada08fc8a70 105 bool multiple_instance = false);
mbedAustin 11:cada08fc8a70 106
mbedAustin 11:cada08fc8a70 107
mbedAustin 11:cada08fc8a70 108 /**
mbedAustin 11:cada08fc8a70 109 * @brief Creates a static resource instance for a given mbed Client Inteface object. With this,
mbedAustin 11:cada08fc8a70 110 * the client can respond to server's GET methods with the provided value.
mbedAustin 11:cada08fc8a70 111 * @param resource_name, Name of the resource.
mbedAustin 11:cada08fc8a70 112 * @param resource_type, Type of the resource.
mbedAustin 11:cada08fc8a70 113 * @param value, Pointer to the value of the resource.
mbedAustin 11:cada08fc8a70 114 * @param value_length, Length of the value in pointer.
mbedAustin 11:cada08fc8a70 115 * @param instance_id, Instance Id of the resource.
mbedAustin 11:cada08fc8a70 116 * @return M2MResourceInstance, Resource Instance for managing other client operations.
mbedAustin 11:cada08fc8a70 117 */
mbedAustin 11:cada08fc8a70 118 M2MResourceInstance* create_static_resource_instance(const String &resource_name,
mbedAustin 11:cada08fc8a70 119 const String &resource_type,
mbedAustin 11:cada08fc8a70 120 M2MResourceInstance::ResourceType type,
mbedAustin 11:cada08fc8a70 121 const uint8_t *value,
mbedAustin 11:cada08fc8a70 122 const uint8_t value_length,
mbedAustin 11:cada08fc8a70 123 uint16_t instance_id);
mbedAustin 11:cada08fc8a70 124
mbedAustin 11:cada08fc8a70 125 /**
mbedAustin 11:cada08fc8a70 126 * @brief Creates a dynamic resource instance for a given mbed Client Inteface object. With this,
mbedAustin 11:cada08fc8a70 127 * the client can respond to different queries from the server (GET,PUT etc).
mbedAustin 11:cada08fc8a70 128 * This type of resource is also observable and carries callbacks.
mbedAustin 11:cada08fc8a70 129 * @param resource_name, Name of the resource.
mbedAustin 11:cada08fc8a70 130 * @param resource_type, Type of the resource.
mbedAustin 11:cada08fc8a70 131 * @param observable, Indicates, whether the resource is observable or not.
mbedAustin 11:cada08fc8a70 132 * @param instance_id, Instance Id of the resource.
mbedAustin 11:cada08fc8a70 133 * @return M2MResourceInstance, Resource Instance for managing other client operations.
mbedAustin 11:cada08fc8a70 134 */
mbedAustin 11:cada08fc8a70 135 M2MResourceInstance* create_dynamic_resource_instance(const String &resource_name,
mbedAustin 11:cada08fc8a70 136 const String &resource_type,
mbedAustin 11:cada08fc8a70 137 M2MResourceInstance::ResourceType type,
mbedAustin 11:cada08fc8a70 138 bool observable,
mbedAustin 11:cada08fc8a70 139 uint16_t instance_id);
mbedAustin 11:cada08fc8a70 140
mbedAustin 11:cada08fc8a70 141 /**
mbedAustin 11:cada08fc8a70 142 * @brief Removes the resource with the given name.
mbedAustin 11:cada08fc8a70 143 * @param name, Name of the resource to be removed.
mbedAustin 11:cada08fc8a70 144 * @return True if removed, else false.
mbedAustin 11:cada08fc8a70 145 */
mbedAustin 11:cada08fc8a70 146 virtual bool remove_resource(const String &name);
mbedAustin 11:cada08fc8a70 147
mbedAustin 11:cada08fc8a70 148 /**
mbedAustin 11:cada08fc8a70 149 * @brief Removes the resource instance with the given name.
mbedAustin 11:cada08fc8a70 150 * @param resource_name, Name of the resource instance to be removed.
mbedAustin 11:cada08fc8a70 151 * @param instance_id, Instance Id of the instance.
mbedAustin 11:cada08fc8a70 152 * @return True if removed, else false.
mbedAustin 11:cada08fc8a70 153 */
mbedAustin 11:cada08fc8a70 154 virtual bool remove_resource_instance(const String &resource_name,
mbedAustin 11:cada08fc8a70 155 uint16_t instance_id);
mbedAustin 11:cada08fc8a70 156
mbedAustin 11:cada08fc8a70 157 /**
mbedAustin 11:cada08fc8a70 158 * @brief Returns resource with the given name.
mbedAustin 11:cada08fc8a70 159 * @param name, Name of the requested resource.
mbedAustin 11:cada08fc8a70 160 * @return Resource reference if found, else NULL.
mbedAustin 11:cada08fc8a70 161 */
mbedAustin 11:cada08fc8a70 162 virtual M2MResource* resource(const String &name) const;
mbedAustin 11:cada08fc8a70 163
mbedAustin 11:cada08fc8a70 164 /**
mbedAustin 11:cada08fc8a70 165 * @brief Returns a list of M2MResourceBase objects.
mbedAustin 11:cada08fc8a70 166 * @return List of Resource base with the object instance.
mbedAustin 11:cada08fc8a70 167 */
mbedAustin 11:cada08fc8a70 168 virtual const M2MResourceList& resources() const;
mbedAustin 11:cada08fc8a70 169
mbedAustin 11:cada08fc8a70 170 /**
mbedAustin 11:cada08fc8a70 171 * @brief Returns the total number of resources with the object.
mbedAustin 11:cada08fc8a70 172 * @return Total number of the resources.
mbedAustin 11:cada08fc8a70 173 */
mbedAustin 11:cada08fc8a70 174 virtual uint16_t resource_count() const;
mbedAustin 11:cada08fc8a70 175
mbedAustin 11:cada08fc8a70 176 /**
mbedAustin 11:cada08fc8a70 177 * @brief Returns the total number of single resource instances.
mbedAustin 11:cada08fc8a70 178 * @param resource, Name of the resource.
mbedAustin 11:cada08fc8a70 179 * @return Total number of the resources.
mbedAustin 11:cada08fc8a70 180 */
mbedAustin 11:cada08fc8a70 181 virtual uint16_t resource_count(const String& resource) const;
mbedAustin 11:cada08fc8a70 182
mbedAustin 11:cada08fc8a70 183 /**
mbedAustin 11:cada08fc8a70 184 * @brief Returns object type.
mbedAustin 11:cada08fc8a70 185 * @return BaseType.
mbedAustin 11:cada08fc8a70 186 */
mbedAustin 11:cada08fc8a70 187 virtual M2MBase::BaseType base_type() const;
mbedAustin 11:cada08fc8a70 188
mbedAustin 11:cada08fc8a70 189 /**
mbedAustin 11:cada08fc8a70 190 * @brief Adds the observation level for the object.
mbedAustin 11:cada08fc8a70 191 * @param observation_level, Level of observation.
mbedAustin 11:cada08fc8a70 192 */
mbedAustin 11:cada08fc8a70 193 virtual void add_observation_level(M2MBase::Observation observation_level);
mbedAustin 11:cada08fc8a70 194
mbedAustin 11:cada08fc8a70 195 /**
mbedAustin 11:cada08fc8a70 196 * @brief Removes the observation level from the object.
mbedAustin 11:cada08fc8a70 197 * @param observation_level, Level of observation.
mbedAustin 11:cada08fc8a70 198 */
mbedAustin 11:cada08fc8a70 199 virtual void remove_observation_level(M2MBase::Observation observation_level);
mbedAustin 11:cada08fc8a70 200
mbedAustin 11:cada08fc8a70 201 /**
mbedAustin 11:cada08fc8a70 202 * @brief Handles GET request for the registered objects.
mbedAustin 11:cada08fc8a70 203 * @param nsdl, NSDL handler for the CoAP library.
mbedAustin 11:cada08fc8a70 204 * @param received_coap_header, CoAP message received from the server.
mbedAustin 11:cada08fc8a70 205 * @param observation_handler, Handler object for sending
mbedAustin 11:cada08fc8a70 206 * observation callbacks.
mbedAustin 11:cada08fc8a70 207 * @return sn_coap_hdr_s, Message that needs to be sent to the server.
mbedAustin 11:cada08fc8a70 208 */
mbedAustin 11:cada08fc8a70 209 virtual sn_coap_hdr_s* handle_get_request(nsdl_s *nsdl,
mbedAustin 11:cada08fc8a70 210 sn_coap_hdr_s *received_coap_header,
mbedAustin 11:cada08fc8a70 211 M2MObservationHandler *observation_handler = NULL);
mbedAustin 11:cada08fc8a70 212 /**
mbedAustin 11:cada08fc8a70 213 * @brief Handles PUT request for the registered objects.
mbedAustin 11:cada08fc8a70 214 * @param nsdl, NSDL handler for the CoAP library.
mbedAustin 11:cada08fc8a70 215 * @param received_coap_header, CoAP message received from the server.
mbedAustin 11:cada08fc8a70 216 * @param observation_handler, Handler object for sending
mbedAustin 11:cada08fc8a70 217 * observation callbacks.
mbedAustin 11:cada08fc8a70 218 * @return sn_coap_hdr_s, Message that needs to be sent to the server.
mbedAustin 11:cada08fc8a70 219 */
mbedAustin 11:cada08fc8a70 220 virtual sn_coap_hdr_s* handle_put_request(nsdl_s *nsdl,
mbedAustin 11:cada08fc8a70 221 sn_coap_hdr_s *received_coap_header,
mbedAustin 11:cada08fc8a70 222 M2MObservationHandler *observation_handler = NULL);
mbedAustin 11:cada08fc8a70 223
mbedAustin 11:cada08fc8a70 224 /**
mbedAustin 11:cada08fc8a70 225 * @brief Handles GET request for the registered objects.
mbedAustin 11:cada08fc8a70 226 * @param nsdl, NSDL handler for the CoAP library.
mbedAustin 11:cada08fc8a70 227 * @param received_coap_header, CoAP message received from the server.
mbedAustin 11:cada08fc8a70 228 * @param observation_handler, Handler object for sending
mbedAustin 11:cada08fc8a70 229 * observation callbacks.
mbedAustin 11:cada08fc8a70 230 * @return sn_coap_hdr_s, Message that needs to be sent to the server.
mbedAustin 11:cada08fc8a70 231 */
mbedAustin 11:cada08fc8a70 232 virtual sn_coap_hdr_s* handle_post_request(nsdl_s *nsdl,
mbedAustin 11:cada08fc8a70 233 sn_coap_hdr_s *received_coap_header,
mbedAustin 11:cada08fc8a70 234 M2MObservationHandler *observation_handler = NULL);
mbedAustin 11:cada08fc8a70 235
mbedAustin 11:cada08fc8a70 236
mbedAustin 11:cada08fc8a70 237 protected :
mbedAustin 11:cada08fc8a70 238
mbedAustin 11:cada08fc8a70 239 virtual void notification_update(M2MBase::Observation observation_level);
mbedAustin 11:cada08fc8a70 240
mbedAustin 11:cada08fc8a70 241 private:
mbedAustin 11:cada08fc8a70 242
mbedAustin 11:cada08fc8a70 243 M2MObjectCallback &_object_callback;
mbedAustin 11:cada08fc8a70 244 M2MResourceList _resource_list; // owned
mbedAustin 11:cada08fc8a70 245
mbedAustin 11:cada08fc8a70 246 friend class Test_M2MObjectInstance;
mbedAustin 11:cada08fc8a70 247 friend class Test_M2MObject;
mbedAustin 11:cada08fc8a70 248 friend class Test_M2MDevice;
mbedAustin 11:cada08fc8a70 249 friend class Test_M2MSecurity;
mbedAustin 11:cada08fc8a70 250 friend class Test_M2MServer;
mbedAustin 11:cada08fc8a70 251 friend class Test_M2MNsdlInterface;
mbedAustin 11:cada08fc8a70 252 friend class Test_M2MFirmware;
mbedAustin 11:cada08fc8a70 253 friend class Test_M2MTLVSerializer;
mbedAustin 11:cada08fc8a70 254 friend class Test_M2MTLVDeserializer;
mbedAustin 11:cada08fc8a70 255 };
mbedAustin 11:cada08fc8a70 256
mbedAustin 11:cada08fc8a70 257 #endif // M2M_OBJECT_INSTANCE_H