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_H
mbedAustin 11:cada08fc8a70 17 #define M2M_RESOURCE_H
mbedAustin 11:cada08fc8a70 18
mbedAustin 11:cada08fc8a70 19 #include "mbed-client/m2mvector.h"
mbedAustin 11:cada08fc8a70 20 #include "mbed-client/m2mresourceinstance.h"
mbedAustin 11:cada08fc8a70 21
mbedAustin 11:cada08fc8a70 22 //FORWARD DECLARATION
mbedAustin 11:cada08fc8a70 23 class M2MObjectInstance;
mbedAustin 11:cada08fc8a70 24 typedef Vector<M2MResourceInstance *> M2MResourceInstanceList;
mbedAustin 11:cada08fc8a70 25
mbedAustin 11:cada08fc8a70 26 class M2MResourceCallback {
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 M2MResource.
mbedAustin 11:cada08fc8a70 33 * This class is the base class for mbed Client Resources. All defined
mbedAustin 11:cada08fc8a70 34 * LWM2M object models can be created using it. This class will also hold all resources
mbedAustin 11:cada08fc8a70 35 * instances associated with the given object.
mbedAustin 11:cada08fc8a70 36 */
mbedAustin 11:cada08fc8a70 37
mbedAustin 11:cada08fc8a70 38 class M2MResource : public M2MResourceInstance, M2MResourceCallback {
mbedAustin 11:cada08fc8a70 39
mbedAustin 11:cada08fc8a70 40 friend class M2MObjectInstance;
mbedAustin 11:cada08fc8a70 41
mbedAustin 11:cada08fc8a70 42 private: // Constructor and destructor are private
mbedAustin 11:cada08fc8a70 43 // which means that these objects can be created or
mbedAustin 11:cada08fc8a70 44 // deleted only through a function provided by the M2MObjectInstance.
mbedAustin 11:cada08fc8a70 45
mbedAustin 11:cada08fc8a70 46 /**
mbedAustin 11:cada08fc8a70 47 * @brief Constructor
mbedAustin 11:cada08fc8a70 48 * @param resource_name, Resource name of the object.
mbedAustin 11:cada08fc8a70 49 * @param resource_type, Resource type of the object.
mbedAustin 11:cada08fc8a70 50 * @param type, Resource Data Type of the object.
mbedAustin 11:cada08fc8a70 51 * @param value, Value pointer of the object.
mbedAustin 11:cada08fc8a70 52 * @param value_length, Length of the value pointer
mbedAustin 11:cada08fc8a70 53 * @param multiple_instance, True if resource supports instances.
mbedAustin 11:cada08fc8a70 54 */
mbedAustin 11:cada08fc8a70 55 M2MResource(M2MObjectInstanceCallback &object_instance_callback,
mbedAustin 11:cada08fc8a70 56 const String &resource_name,
mbedAustin 11:cada08fc8a70 57 const String &resource_type,
mbedAustin 11:cada08fc8a70 58 M2MResourceInstance::ResourceType type,
mbedAustin 11:cada08fc8a70 59 const uint8_t *value,
mbedAustin 11:cada08fc8a70 60 const uint8_t value_length,
mbedAustin 11:cada08fc8a70 61 bool multiple_instance = false);
mbedAustin 11:cada08fc8a70 62
mbedAustin 11:cada08fc8a70 63 /**
mbedAustin 11:cada08fc8a70 64 * @brief Constructor
mbedAustin 11:cada08fc8a70 65 * @param name, Name of the object
mbedAustin 11:cada08fc8a70 66 */
mbedAustin 11:cada08fc8a70 67 M2MResource(M2MObjectInstanceCallback &object_instance_callback,
mbedAustin 11:cada08fc8a70 68 const String &resource_name,
mbedAustin 11:cada08fc8a70 69 const String &resource_type,
mbedAustin 11:cada08fc8a70 70 M2MResourceInstance::ResourceType type,
mbedAustin 11:cada08fc8a70 71 bool observable,
mbedAustin 11:cada08fc8a70 72 bool multiple_instance = false);
mbedAustin 11:cada08fc8a70 73
mbedAustin 11:cada08fc8a70 74 // Prevents the use of default constructor.
mbedAustin 11:cada08fc8a70 75 M2MResource();
mbedAustin 11:cada08fc8a70 76
mbedAustin 11:cada08fc8a70 77 // Prevents the use of assignment operator.
mbedAustin 11:cada08fc8a70 78 M2MResource& operator=( const M2MResource& /*other*/ );
mbedAustin 11:cada08fc8a70 79
mbedAustin 11:cada08fc8a70 80 // Prevents the use of copy constructor
mbedAustin 11:cada08fc8a70 81 M2MResource( const M2MResource& /*other*/ );
mbedAustin 11:cada08fc8a70 82
mbedAustin 11:cada08fc8a70 83 /**
mbedAustin 11:cada08fc8a70 84 * Destructor
mbedAustin 11:cada08fc8a70 85 */
mbedAustin 11:cada08fc8a70 86 virtual ~M2MResource();
mbedAustin 11:cada08fc8a70 87
mbedAustin 11:cada08fc8a70 88 public:
mbedAustin 11:cada08fc8a70 89
mbedAustin 11:cada08fc8a70 90 /**
mbedAustin 11:cada08fc8a70 91 * @brief Adds resource instances to the M2MResource.
mbedAustin 11:cada08fc8a70 92 * @param resource_instance, Resource Instance to be added.
mbedAustin 11:cada08fc8a70 93 */
mbedAustin 11:cada08fc8a70 94 void add_resource_instance(M2MResourceInstance *resource_instance);
mbedAustin 11:cada08fc8a70 95
mbedAustin 11:cada08fc8a70 96 /**
mbedAustin 11:cada08fc8a70 97 * @brief Returns whether the resource has multiple
mbedAustin 11:cada08fc8a70 98 * resource instances or not.
mbedAustin 11:cada08fc8a70 99 * @return True if resource base has multiple instances,
mbedAustin 11:cada08fc8a70 100 * else false.
mbedAustin 11:cada08fc8a70 101 */
mbedAustin 11:cada08fc8a70 102 bool supports_multiple_instances() const;
mbedAustin 11:cada08fc8a70 103
mbedAustin 11:cada08fc8a70 104 /**
mbedAustin 11:cada08fc8a70 105 * @brief Removes the resource with the given name.
mbedAustin 11:cada08fc8a70 106 * @param name, Name of the resource to be removed.
mbedAustin 11:cada08fc8a70 107 * @param instance_id, Instance ID of resource to be removed, default is 0.
mbedAustin 11:cada08fc8a70 108 * @return True if removed, else false.
mbedAustin 11:cada08fc8a70 109 */
mbedAustin 11:cada08fc8a70 110 virtual bool remove_resource_instance(uint16_t instance_id = 0);
mbedAustin 11:cada08fc8a70 111
mbedAustin 11:cada08fc8a70 112 /**
mbedAustin 11:cada08fc8a70 113 * @brief Returns resource instance with the given name.
mbedAustin 11:cada08fc8a70 114 * @param instance_id, Instance ID of the requested resource, default is 0
mbedAustin 11:cada08fc8a70 115 * @return M2MResourceInstance object if found, else NULL.
mbedAustin 11:cada08fc8a70 116 */
mbedAustin 11:cada08fc8a70 117 virtual M2MResourceInstance* resource_instance(uint16_t instance_id = 0) const;
mbedAustin 11:cada08fc8a70 118
mbedAustin 11:cada08fc8a70 119 /**
mbedAustin 11:cada08fc8a70 120 * @brief Returns a list of resources.
mbedAustin 11:cada08fc8a70 121 * @return List of resources with the object.
mbedAustin 11:cada08fc8a70 122 */
mbedAustin 11:cada08fc8a70 123 virtual const M2MResourceInstanceList& resource_instances() const;
mbedAustin 11:cada08fc8a70 124
mbedAustin 11:cada08fc8a70 125 /**
mbedAustin 11:cada08fc8a70 126 * @brief Returns the total number of resources with the object.
mbedAustin 11:cada08fc8a70 127 * @return Total number of resources.
mbedAustin 11:cada08fc8a70 128 */
mbedAustin 11:cada08fc8a70 129 virtual uint16_t resource_instance_count() const;
mbedAustin 11:cada08fc8a70 130
mbedAustin 11:cada08fc8a70 131 /**
mbedAustin 11:cada08fc8a70 132 * @brief Parses the received query for a notification
mbedAustin 11:cada08fc8a70 133 * attribute.
mbedAustin 11:cada08fc8a70 134 * @return True if required attributes are present, else false.
mbedAustin 11:cada08fc8a70 135 */
mbedAustin 11:cada08fc8a70 136 virtual bool handle_observation_attribute(char *&query);
mbedAustin 11:cada08fc8a70 137
mbedAustin 11:cada08fc8a70 138 /**
mbedAustin 11:cada08fc8a70 139 * @brief Adds the observation level for the object.
mbedAustin 11:cada08fc8a70 140 * @param observation_level, Level of observation.
mbedAustin 11:cada08fc8a70 141 */
mbedAustin 11:cada08fc8a70 142 virtual void add_observation_level(M2MBase::Observation observation_level);
mbedAustin 11:cada08fc8a70 143
mbedAustin 11:cada08fc8a70 144 /**
mbedAustin 11:cada08fc8a70 145 * @brief Removes the observation level from the object.
mbedAustin 11:cada08fc8a70 146 * @param observation_level, Level of observation.
mbedAustin 11:cada08fc8a70 147 */
mbedAustin 11:cada08fc8a70 148 virtual void remove_observation_level(M2MBase::Observation observation_level);
mbedAustin 11:cada08fc8a70 149
mbedAustin 11:cada08fc8a70 150 /**
mbedAustin 11:cada08fc8a70 151 * @brief Handles GET request for the registered objects.
mbedAustin 11:cada08fc8a70 152 * @param nsdl, NSDL handler for the CoAP library.
mbedAustin 11:cada08fc8a70 153 * @param received_coap_header, CoAP message received from the server.
mbedAustin 11:cada08fc8a70 154 * @param observation_handler, Handler object for sending
mbedAustin 11:cada08fc8a70 155 * observation callbacks.
mbedAustin 11:cada08fc8a70 156 * @return sn_coap_hdr_s, Message that needs to be sent to the server.
mbedAustin 11:cada08fc8a70 157 */
mbedAustin 11:cada08fc8a70 158 virtual sn_coap_hdr_s* handle_get_request(nsdl_s *nsdl,
mbedAustin 11:cada08fc8a70 159 sn_coap_hdr_s *received_coap_header,
mbedAustin 11:cada08fc8a70 160 M2MObservationHandler *observation_handler = NULL);
mbedAustin 11:cada08fc8a70 161 /**
mbedAustin 11:cada08fc8a70 162 * @brief Handles PUT request for the registered objects.
mbedAustin 11:cada08fc8a70 163 * @param nsdl, NSDL handler for the CoAP library.
mbedAustin 11:cada08fc8a70 164 * @param received_coap_header, CoAP message received from the server.
mbedAustin 11:cada08fc8a70 165 * @param observation_handler, Handler object for sending
mbedAustin 11:cada08fc8a70 166 * observation callbacks.
mbedAustin 11:cada08fc8a70 167 * @return sn_coap_hdr_s, Message that needs to be sent to the server.
mbedAustin 11:cada08fc8a70 168 */
mbedAustin 11:cada08fc8a70 169 virtual sn_coap_hdr_s* handle_put_request(nsdl_s *nsdl,
mbedAustin 11:cada08fc8a70 170 sn_coap_hdr_s *received_coap_header,
mbedAustin 11:cada08fc8a70 171 M2MObservationHandler *observation_handler = NULL);
mbedAustin 11:cada08fc8a70 172 /**
mbedAustin 11:cada08fc8a70 173 * @brief Handles POST request for the registered objects.
mbedAustin 11:cada08fc8a70 174 * @param nsdl, NSDL handler for the CoAP library.
mbedAustin 11:cada08fc8a70 175 * @param received_coap_header, CoAP message received from the server.
mbedAustin 11:cada08fc8a70 176 * @param observation_handler, Handler object for sending
mbedAustin 11:cada08fc8a70 177 * observation callbacks.
mbedAustin 11:cada08fc8a70 178 * @return sn_coap_hdr_s, Message that needs to be sent to the server.
mbedAustin 11:cada08fc8a70 179 */
mbedAustin 11:cada08fc8a70 180 virtual sn_coap_hdr_s* handle_post_request(nsdl_s *nsdl,
mbedAustin 11:cada08fc8a70 181 sn_coap_hdr_s *received_coap_header,
mbedAustin 11:cada08fc8a70 182 M2MObservationHandler *observation_handler = NULL);
mbedAustin 11:cada08fc8a70 183
mbedAustin 11:cada08fc8a70 184 protected:
mbedAustin 11:cada08fc8a70 185 virtual void notification_update();
mbedAustin 11:cada08fc8a70 186
mbedAustin 11:cada08fc8a70 187 private:
mbedAustin 11:cada08fc8a70 188
mbedAustin 11:cada08fc8a70 189 M2MResourceInstanceList _resource_instance_list; // owned
mbedAustin 11:cada08fc8a70 190 bool _has_multiple_instances;
mbedAustin 11:cada08fc8a70 191
mbedAustin 11:cada08fc8a70 192 friend class Test_M2MResource;
mbedAustin 11:cada08fc8a70 193 friend class Test_M2MObjectInstance;
mbedAustin 11:cada08fc8a70 194 friend class Test_M2MObject;
mbedAustin 11:cada08fc8a70 195 friend class Test_M2MDevice;
mbedAustin 11:cada08fc8a70 196 friend class Test_M2MSecurity;
mbedAustin 11:cada08fc8a70 197 friend class Test_M2MServer;
mbedAustin 11:cada08fc8a70 198 friend class Test_M2MNsdlInterface;
mbedAustin 11:cada08fc8a70 199 friend class Test_M2MFirmware;
mbedAustin 11:cada08fc8a70 200 friend class Test_M2MTLVSerializer;
mbedAustin 11:cada08fc8a70 201 friend class Test_M2MTLVDeserializer;
mbedAustin 11:cada08fc8a70 202
mbedAustin 11:cada08fc8a70 203 };
mbedAustin 11:cada08fc8a70 204
mbedAustin 11:cada08fc8a70 205 #endif // M2M_RESOURCE_H