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 m2mobject.h Source File

m2mobject.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_OBJECT_H
00017 #define M2M_OBJECT_H
00018 
00019 #include "mbed-client/m2mvector.h"
00020 #include "mbed-client/m2mbase.h"
00021 #include "mbed-client/m2mobjectinstance.h"
00022 
00023 //FORWARD DECLARATION
00024 typedef Vector<M2MObjectInstance *> M2MObjectInstanceList;
00025 
00026 /**
00027  *  \brief M2MObject.
00028  *  This class is the base class for the mbed Client Objects. All defined
00029  *  LWM2M object models can be created based on it. This class also holds all object
00030  *  instances associated with the given object.
00031  */
00032 
00033 class M2MObject : public M2MBase,
00034                   public M2MObjectCallback
00035 {
00036 
00037 friend class M2MInterfaceFactory;
00038 
00039 protected :
00040 
00041     /**
00042      * \brief Constructor
00043      * \param name The name of the object.
00044      */
00045     M2MObject(const String &object_name);
00046 
00047     // Prevents the use of default constructor.
00048     M2MObject();
00049 
00050     // Prevents the use of assignment operator.
00051     M2MObject& operator=( const M2MObject& /*other*/ );
00052 
00053     // Prevents the use of copy constructor.
00054     M2MObject( const M2MObject& /*other*/ );
00055 
00056 public:
00057 
00058     /**
00059      * \brief Destructor
00060      */
00061     virtual ~M2MObject();
00062 
00063     /**
00064      * \brief Creates a new object instance for a given mbed Client Interface object. With this,
00065      * the client can respond to server's GET methods with the provided value.
00066      * \return M2MObjectInstance. An object instance for managing other client operations.
00067      */
00068     M2MObjectInstance* create_object_instance(uint16_t instance_id = 0);
00069 
00070     /**
00071      * \brief Removes the object instance resource with the given instance id.
00072      * \param instance_id The instance ID of the object instance to be removed, default is 0.
00073      * \return True if removed, else false.
00074      */
00075     virtual bool remove_object_instance(uint16_t instance_id = 0);
00076 
00077     /**
00078      * \brief Returns the object instance with the the given instance ID.
00079      * \param instance_id The instance ID of the requested object instance ID, default is 0.
00080      * \return Object instance reference if found, else NULL.
00081      */
00082     virtual M2MObjectInstance* object_instance(uint16_t instance_id = 0) const;
00083 
00084     /**
00085      * \brief Returns a list of object instances.
00086      * \return A list of object instances.
00087      */
00088     virtual const M2MObjectInstanceList& instances() const;
00089 
00090     /**
00091      * \brief Returns the total number of object instances-
00092      * \return The total number of the object instances.
00093      */
00094     virtual uint16_t instance_count() const;
00095 
00096     /**
00097      * \brief Returns the object type.
00098      * \return BaseType.
00099      */
00100     virtual M2MBase::BaseType base_type() const;
00101 
00102     /**
00103      * \brief Adds the observation level for the object.
00104      * \param observation_level The level of observation.
00105      */
00106     virtual void add_observation_level(M2MBase::Observation observation_level);
00107 
00108     /**
00109      * \brief Removes the observation level from the object.
00110      * \param observation_level The level of observation.
00111      */
00112     virtual void remove_observation_level(M2MBase::Observation observation_level);
00113 
00114     /**
00115      * \brief Handles GET request for the registered objects.
00116      * \param nsdl The NSDL handler for the CoAP library.
00117      * \param received_coap_header The CoAP message received from the server.
00118      * \param observation_handler The handler object for sending
00119      * observation callbacks.
00120      * \return sn_coap_hdr_s  The message that needs to be sent to server.
00121      */
00122     virtual sn_coap_hdr_s* handle_get_request(nsdl_s *nsdl,
00123                                               sn_coap_hdr_s *received_coap_header,
00124                                               M2MObservationHandler *observation_handler = NULL);
00125 
00126     /**
00127      * \brief Handles PUT request for the registered objects.
00128      * \param nsdl The NSDL handler for the CoAP library.
00129      * \param received_coap_header The received CoAP message from the server.
00130      * \param observation_handler The handler object for sending
00131      * observation callbacks.
00132      * \param execute_value_updated True will execute the "value_updated" callback.
00133      * \return sn_coap_hdr_s The message that needs to be sent to server.
00134      */
00135     virtual sn_coap_hdr_s* handle_put_request(nsdl_s *nsdl,
00136                                               sn_coap_hdr_s *received_coap_header,
00137                                               M2MObservationHandler *observation_handler,
00138                                               bool &execute_value_updated);
00139 
00140     /**
00141      * \brief Handles GET request for the registered objects.
00142      * \param nsdl The NSDL handler for the CoAP library.
00143      * \param received_coap_header The received CoAP message from the server.
00144      * \param observation_handler The handler object for sending
00145      * observation callbacks.
00146      * \param execute_value_updated True will execute the "value_updated" callback.
00147      * \return sn_coap_hdr_s The message that needs to be sent to server.
00148      */
00149     virtual sn_coap_hdr_s* handle_post_request(nsdl_s *nsdl,
00150                                                sn_coap_hdr_s *received_coap_header,
00151                                                M2MObservationHandler *observation_handler,
00152                                                bool &execute_value_updated);
00153 
00154 protected :
00155 
00156      virtual void notification_update(uint16_t obj_instance_id);
00157 
00158 private:
00159 
00160     M2MObjectInstanceList     _instance_list; // owned    
00161     uint16_t                  _max_instance_count;
00162 
00163 friend class Test_M2MObject;
00164 friend class Test_M2MInterfaceImpl;
00165 friend class Test_M2MNsdlInterface;
00166 friend class Test_M2MTLVSerializer;
00167 friend class Test_M2MTLVDeserializer;
00168 
00169 };
00170 
00171 #endif // M2M_OBJECT_H