joey shelton / LED_Demo

Dependencies:   MAX44000 PWM_Tone_Library nexpaq_mdk

Fork of LED_Demo by Maxim nexpaq

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers m2mresource.h Source File

m2mresource.h

00001 /*
00002  * Copyright (c) 2015 ARM Limited. All rights reserved.
00003  * SPDX-License-Identifier: Apache-2.0
00004  * Licensed under the Apache License, Version 2.0 (the License); you may
00005  * not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  *
00008  * http://www.apache.org/licenses/LICENSE-2.0
00009  *
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an AS IS BASIS, WITHOUT
00012  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
00015  */
00016 #ifndef M2M_RESOURCE_H
00017 #define M2M_RESOURCE_H
00018 
00019 #include "mbed-client/m2mvector.h"
00020 #include "mbed-client/m2mresourceinstance.h"
00021 
00022 //FORWARD DECLARATION
00023 class M2MObjectInstance;
00024 typedef Vector<M2MResourceInstance *> M2MResourceInstanceList;
00025 
00026 class M2MResourceCallback {
00027 public:
00028     virtual void notification_update() = 0;
00029 };
00030 
00031 /**
00032  *  \brief M2MResource.
00033  *  This class is the base class for mbed Client Resources. All defined
00034  *  LWM2M object models can be created using it. This class will also hold all resources
00035  *  instances associated with the given object.
00036  */
00037 
00038 class M2MResource : public M2MResourceInstance, M2MResourceCallback {
00039 
00040     friend class M2MObjectInstance;
00041 
00042 public:
00043     class M2MExecuteParameter;
00044 
00045 private: // Constructor and destructor are private
00046          // which means that these objects can be created or
00047          // deleted only through a function provided by the M2MObjectInstance.
00048 
00049     /**
00050      * \brief Constructor
00051      * \param resource_name The resource name of the object.
00052      * \param resource_type The resource type of the object.
00053      * \param type The resource data type of the object.
00054      * \param value The value pointer of the object.
00055      * \param value_length The length of the value pointer.
00056      * \param object_instance_id Object instance id where resource exists.
00057      * \param object_name Object name where resource exists.
00058      * \param multiple_instance True if the resource supports instances.
00059      */
00060     M2MResource(M2MObjectInstanceCallback &object_instance_callback,
00061                 const String &resource_name,
00062                 const String &resource_type,
00063                 M2MResourceInstance::ResourceType type,
00064                 const uint8_t *value,
00065                 const uint8_t value_length,
00066                 const uint16_t object_instance_id = 0,
00067                 const String &object_name = "",
00068                 bool multiple_instance = false);
00069 
00070     /**
00071      * \brief Constructor
00072      * \param resource_name The resource name of the object.
00073      * \param resource_type The resource type of the object.
00074      * \param type The resource data type of the object.
00075      * \param observable Indicates whether the resource is observable or not.
00076      * \param object_instance_id Object instance id where resource exists.
00077      * \param object_name Object name where resource exists.
00078      * \param multiple_instance True if the resource supports instances.
00079      */
00080     M2MResource(M2MObjectInstanceCallback &object_instance_callback,
00081                 const String &resource_name,
00082                 const String &resource_type,
00083                 M2MResourceInstance::ResourceType type,
00084                 bool observable,
00085                 const uint16_t object_instance_id = 0,
00086                 const String &object_name = "",
00087                 bool multiple_instance = false);
00088 
00089     // Prevents the use of default constructor.
00090     M2MResource();
00091 
00092     // Prevents the use of assignment operator.
00093     M2MResource& operator=( const M2MResource& /*other*/ );
00094 
00095     // Prevents the use of copy constructor
00096     M2MResource( const M2MResource& /*other*/ );
00097 
00098     /**
00099      * Destructor
00100      */
00101     virtual ~M2MResource();
00102 
00103 public:
00104 
00105     /**
00106      * \brief Adds resource instances to the M2MResource.
00107      * \param resource_instance The resource instance to be added.
00108      */
00109     void add_resource_instance(M2MResourceInstance *resource_instance);
00110 
00111     /**
00112      * \brief Returns whether the resource has multiple
00113      * resource instances or not.
00114      * \return True if the resource base has multiple instances,
00115      * else false.
00116      */
00117     bool supports_multiple_instances() const;
00118 
00119     /**
00120      * \brief Sets whether the resource should send a delayed response for POST request.
00121      * \param delayed_response A boolean value to set the delayed response.
00122      */
00123     void set_delayed_response(bool delayed_response);
00124 
00125     /**
00126      * \brief A trigger to send the delayed response for the POST request.
00127      * The delayed_response flag must be set before receiving the POST request
00128      * and the value of the resource must be updated before calling this function.
00129      * \return True if response is sent, else false.
00130      */
00131     bool send_delayed_post_response();
00132 
00133     /**
00134      * \brief Provides the value of the given token.
00135      * \param value[OUT] A pointer to the token value.
00136      * \param value_length[OUT] The length of the token pointer.
00137      */
00138     void get_delayed_token(uint8_t *&token, uint8_t &token_length);
00139 
00140     /**
00141      * \brief Removes the resource with the given name.
00142      * \param name The name of the resource to be removed.
00143      * \param instance_id The instance ID of the resource to be removed, default is 0.
00144      * \return True if removed, else false.
00145      */
00146     virtual bool remove_resource_instance(uint16_t instance_id = 0);
00147 
00148     /**
00149      * \brief Returns the resource instance with the given name.
00150      * \param instance_id The instance ID of the requested resource, default is 0
00151      * \return M2MResourceInstance object if found, else NULL.
00152      */
00153     virtual M2MResourceInstance* resource_instance(uint16_t instance_id = 0) const;
00154 
00155     /**
00156      * \brief Returns a list of resources.
00157      * \return A list of resources.
00158      */
00159     virtual const M2MResourceInstanceList& resource_instances() const;
00160 
00161     /**
00162      * \brief Returns the total number of resources.
00163      * \return The total number of resources.
00164      */
00165     virtual uint16_t resource_instance_count() const;
00166 
00167     /**
00168      * \brief Returns the value set for delayed response.
00169      * \return The value for delayed response.
00170      */
00171     bool delayed_response() const;
00172 
00173     /**
00174      * \brief Parses the received query for a notification
00175      * attribute.
00176      * \return True if required attributes are present, else false.
00177      */
00178     virtual bool handle_observation_attribute(char *&query);
00179 
00180     /**
00181      * \brief Adds the observation level for the object.
00182      * \param observation_level The öevel of observation.
00183      */
00184     virtual void add_observation_level(M2MBase::Observation observation_level);
00185 
00186     /**
00187      * \brief Removes the observation level from the object.
00188      * \param observation_level The level of observation.
00189      */
00190     virtual void remove_observation_level(M2MBase::Observation observation_level);
00191 
00192     /**
00193      * \brief Handles the GET request for the registered objects.
00194      * \param nsdl The NSDL handler for the CoAP library.
00195      * \param received_coap_header The CoAP message received from the server.
00196      * \param observation_handler The handler object for sending
00197      * observation callbacks.
00198      * \return sn_coap_hdr_s The message that needs to be sent to the server.
00199      */
00200     virtual sn_coap_hdr_s* handle_get_request(nsdl_s *nsdl,
00201                                               sn_coap_hdr_s *received_coap_header,
00202                                               M2MObservationHandler *observation_handler = NULL);
00203     /**
00204      * \brief Handles the PUT request for the registered objects.
00205      * \param nsdl The NSDL handler for the CoAP library.
00206      * \param received_coap_header The CoAP message received from the server.
00207      * \param observation_handler The handler object for sending
00208      * observation callbacks.
00209      * \param execute_value_updated True will execute the "value_updated" callback.
00210      * \return sn_coap_hdr_s The message that needs to be sent to the server.
00211      */
00212     virtual sn_coap_hdr_s* handle_put_request(nsdl_s *nsdl,
00213                                               sn_coap_hdr_s *received_coap_header,
00214                                               M2MObservationHandler *observation_handler,
00215                                               bool &execute_value_updated);
00216     /**
00217      * \brief Handles the POST request for the registered objects.
00218      * \param nsdl The NSDL handler for the CoAP library.
00219      * \param received_coap_header The CoAP message received from the server.
00220      * \param observation_handler The handler object for sending
00221      * observation callbacks.
00222      * \param execute_value_updated True will execute the "value_updated" callback.
00223      * \return sn_coap_hdr_s The message that needs to be sent to the server.
00224      */
00225     virtual sn_coap_hdr_s* handle_post_request(nsdl_s *nsdl,
00226                                                sn_coap_hdr_s *received_coap_header,
00227                                                M2MObservationHandler *observation_handler,
00228                                                bool &execute_value_updated);
00229 
00230 protected:
00231     virtual void notification_update();
00232 
00233 private:
00234 
00235     M2MResourceInstanceList     _resource_instance_list; // owned
00236     uint8_t                     *_delayed_token;
00237     uint8_t                     _delayed_token_len;
00238     bool                        _has_multiple_instances;
00239     bool                        _delayed_response;
00240 
00241 friend class Test_M2MResource;
00242 friend class Test_M2MObjectInstance;
00243 friend class Test_M2MObject;
00244 friend class Test_M2MDevice;
00245 friend class Test_M2MSecurity;
00246 friend class Test_M2MServer;
00247 friend class Test_M2MNsdlInterface;
00248 friend class Test_M2MFirmware;
00249 friend class Test_M2MTLVSerializer;
00250 friend class Test_M2MTLVDeserializer;
00251 
00252 };
00253 
00254 /**
00255  *  \brief M2MResource::M2MExecuteParameter.
00256  *  This class handles the "Execute" operation arguments.
00257  */
00258 class M2MResource::M2MExecuteParameter {
00259 
00260 private:
00261 
00262     /**
00263      * \brief Constructor
00264      */
00265     M2MExecuteParameter();
00266 
00267     /**
00268      * Destructor
00269      */
00270    ~M2MExecuteParameter();
00271 
00272 public:
00273 
00274     /**
00275      * \brief Returns the value of the argument.
00276      * \return uint8_t * The argument value.
00277      */
00278     uint8_t *get_argument_value() const;
00279 
00280     /**
00281      * \brief Returns the length of the value argument.
00282      * \return uint8_t The argument value length.
00283      */
00284     uint16_t get_argument_value_length() const;
00285 
00286     /**
00287      * \brief Returns the object name where resource exists.
00288      * \return Object name.
00289     */
00290     const String& get_argument_object_name() const;
00291 
00292     /**
00293      * \brief Returns the resource name.
00294      * \return Resource name.
00295     */
00296     const String& get_argument_resource_name() const;
00297 
00298     /**
00299      * \brief Returns the object instance id where resource exists.
00300      * \return Object instance id.
00301     */
00302     uint16_t get_argument_object_instance_id() const;
00303 
00304 private:
00305 
00306     String      _object_name;
00307     String      _resource_name;
00308     uint8_t *   _value;
00309     uint16_t    _value_length;
00310     uint16_t    _object_instance_id;
00311 
00312 
00313 friend class Test_M2MResource;
00314 friend class M2MResource;
00315 };
00316 
00317 #endif // M2M_RESOURCE_H