Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of mbed-cloud-workshop-connect-HTS221 by
simple-mbed-cloud-client/mbed-cloud-client/mbed-client/mbed-client/m2mobject.h@4:e518dde96e59, 2018-10-25 (annotated)
- Committer:
- JimCarver
- Date:
- Thu Oct 25 14:00:12 2018 +0000
- Revision:
- 4:e518dde96e59
- Parent:
- 0:6b753f761943
Simulated dispenser
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| JimCarver | 0:6b753f761943 | 1 | /* |
| JimCarver | 0:6b753f761943 | 2 | * Copyright (c) 2015 ARM Limited. All rights reserved. |
| JimCarver | 0:6b753f761943 | 3 | * SPDX-License-Identifier: Apache-2.0 |
| JimCarver | 0:6b753f761943 | 4 | * Licensed under the Apache License, Version 2.0 (the License); you may |
| JimCarver | 0:6b753f761943 | 5 | * not use this file except in compliance with the License. |
| JimCarver | 0:6b753f761943 | 6 | * You may obtain a copy of the License at |
| JimCarver | 0:6b753f761943 | 7 | * |
| JimCarver | 0:6b753f761943 | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| JimCarver | 0:6b753f761943 | 9 | * |
| JimCarver | 0:6b753f761943 | 10 | * Unless required by applicable law or agreed to in writing, software |
| JimCarver | 0:6b753f761943 | 11 | * distributed under the License is distributed on an AS IS BASIS, WITHOUT |
| JimCarver | 0:6b753f761943 | 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| JimCarver | 0:6b753f761943 | 13 | * See the License for the specific language governing permissions and |
| JimCarver | 0:6b753f761943 | 14 | * limitations under the License. |
| JimCarver | 0:6b753f761943 | 15 | */ |
| JimCarver | 0:6b753f761943 | 16 | #ifndef M2M_OBJECT_H |
| JimCarver | 0:6b753f761943 | 17 | #define M2M_OBJECT_H |
| JimCarver | 0:6b753f761943 | 18 | |
| JimCarver | 0:6b753f761943 | 19 | #include "mbed-client/m2mvector.h" |
| JimCarver | 0:6b753f761943 | 20 | #include "mbed-client/m2mbase.h" |
| JimCarver | 0:6b753f761943 | 21 | #include "mbed-client/m2mobjectinstance.h" |
| JimCarver | 0:6b753f761943 | 22 | |
| JimCarver | 0:6b753f761943 | 23 | //FORWARD DECLARATION |
| JimCarver | 0:6b753f761943 | 24 | typedef Vector<M2MObjectInstance *> M2MObjectInstanceList; |
| JimCarver | 0:6b753f761943 | 25 | |
| JimCarver | 0:6b753f761943 | 26 | class M2MEndpoint; |
| JimCarver | 0:6b753f761943 | 27 | |
| JimCarver | 0:6b753f761943 | 28 | /*! \file m2mobject.h |
| JimCarver | 0:6b753f761943 | 29 | * \brief M2MObject. |
| JimCarver | 0:6b753f761943 | 30 | * This class is the base class for the mbed Client Objects. All defined |
| JimCarver | 0:6b753f761943 | 31 | * LWM2M object models can be created based on it. This class also holds all object |
| JimCarver | 0:6b753f761943 | 32 | * instances associated with the given object. |
| JimCarver | 0:6b753f761943 | 33 | */ |
| JimCarver | 0:6b753f761943 | 34 | |
| JimCarver | 0:6b753f761943 | 35 | class M2MObject : public M2MBase |
| JimCarver | 0:6b753f761943 | 36 | { |
| JimCarver | 0:6b753f761943 | 37 | |
| JimCarver | 0:6b753f761943 | 38 | friend class M2MInterfaceFactory; |
| JimCarver | 0:6b753f761943 | 39 | friend class M2MEndpoint; |
| JimCarver | 0:6b753f761943 | 40 | friend class TestFactory; |
| JimCarver | 0:6b753f761943 | 41 | |
| JimCarver | 0:6b753f761943 | 42 | protected : |
| JimCarver | 0:6b753f761943 | 43 | |
| JimCarver | 0:6b753f761943 | 44 | /** |
| JimCarver | 0:6b753f761943 | 45 | * \brief Constructor |
| JimCarver | 0:6b753f761943 | 46 | * \param name The name of the object. |
| JimCarver | 0:6b753f761943 | 47 | * \param path Path of the object like 3/0/1 |
| JimCarver | 0:6b753f761943 | 48 | * \param external_blockwise_store If true CoAP blocks are passed to application through callbacks |
| JimCarver | 0:6b753f761943 | 49 | * otherwise handled in mbed-client-c. |
| JimCarver | 0:6b753f761943 | 50 | */ |
| JimCarver | 0:6b753f761943 | 51 | M2MObject(const String &object_name, |
| JimCarver | 0:6b753f761943 | 52 | char *path, |
| JimCarver | 0:6b753f761943 | 53 | bool external_blockwise_store = false); |
| JimCarver | 0:6b753f761943 | 54 | |
| JimCarver | 0:6b753f761943 | 55 | // Prevents the use of default constructor. |
| JimCarver | 0:6b753f761943 | 56 | M2MObject(); |
| JimCarver | 0:6b753f761943 | 57 | |
| JimCarver | 0:6b753f761943 | 58 | // Prevents the use of assignment operator. |
| JimCarver | 0:6b753f761943 | 59 | M2MObject& operator=( const M2MObject& /*other*/ ); |
| JimCarver | 0:6b753f761943 | 60 | |
| JimCarver | 0:6b753f761943 | 61 | // Prevents the use of copy constructor. |
| JimCarver | 0:6b753f761943 | 62 | M2MObject( const M2MObject& /*other*/ ); |
| JimCarver | 0:6b753f761943 | 63 | |
| JimCarver | 0:6b753f761943 | 64 | /** |
| JimCarver | 0:6b753f761943 | 65 | * \brief Constructor |
| JimCarver | 0:6b753f761943 | 66 | * \param name The name of the object. |
| JimCarver | 0:6b753f761943 | 67 | */ |
| JimCarver | 0:6b753f761943 | 68 | M2MObject(const M2MBase::lwm2m_parameters_s* static_res); |
| JimCarver | 0:6b753f761943 | 69 | |
| JimCarver | 0:6b753f761943 | 70 | public: |
| JimCarver | 0:6b753f761943 | 71 | |
| JimCarver | 0:6b753f761943 | 72 | /** |
| JimCarver | 0:6b753f761943 | 73 | * \brief Destructor |
| JimCarver | 0:6b753f761943 | 74 | */ |
| JimCarver | 0:6b753f761943 | 75 | virtual ~M2MObject(); |
| JimCarver | 0:6b753f761943 | 76 | |
| JimCarver | 0:6b753f761943 | 77 | /** |
| JimCarver | 0:6b753f761943 | 78 | * \brief Creates a new object instance for a given mbed Client Interface object. With this, |
| JimCarver | 0:6b753f761943 | 79 | * the client can respond to server's GET methods with the provided value. |
| JimCarver | 0:6b753f761943 | 80 | * \return M2MObjectInstance. An object instance for managing other client operations. |
| JimCarver | 0:6b753f761943 | 81 | */ |
| JimCarver | 0:6b753f761943 | 82 | M2MObjectInstance* create_object_instance(uint16_t instance_id = 0); |
| JimCarver | 0:6b753f761943 | 83 | |
| JimCarver | 0:6b753f761943 | 84 | /** |
| JimCarver | 0:6b753f761943 | 85 | * TODO!! |
| JimCarver | 0:6b753f761943 | 86 | */ |
| JimCarver | 0:6b753f761943 | 87 | M2MObjectInstance* create_object_instance(const lwm2m_parameters_s* s); |
| JimCarver | 0:6b753f761943 | 88 | |
| JimCarver | 0:6b753f761943 | 89 | /** |
| JimCarver | 0:6b753f761943 | 90 | * \brief Removes the object instance resource with the given instance id. |
| JimCarver | 0:6b753f761943 | 91 | * \param instance_id The instance ID of the object instance to be removed, default is 0. |
| JimCarver | 0:6b753f761943 | 92 | * \return True if removed, else false. |
| JimCarver | 0:6b753f761943 | 93 | */ |
| JimCarver | 0:6b753f761943 | 94 | bool remove_object_instance(uint16_t instance_id = 0); |
| JimCarver | 0:6b753f761943 | 95 | |
| JimCarver | 0:6b753f761943 | 96 | /** |
| JimCarver | 0:6b753f761943 | 97 | * \brief Returns the object instance with the the given instance ID. |
| JimCarver | 0:6b753f761943 | 98 | * \param instance_id The instance ID of the requested object instance ID, default is 0. |
| JimCarver | 0:6b753f761943 | 99 | * \return Object instance reference if found, else NULL. |
| JimCarver | 0:6b753f761943 | 100 | */ |
| JimCarver | 0:6b753f761943 | 101 | M2MObjectInstance* object_instance(uint16_t instance_id = 0) const; |
| JimCarver | 0:6b753f761943 | 102 | |
| JimCarver | 0:6b753f761943 | 103 | /** |
| JimCarver | 0:6b753f761943 | 104 | * \brief Returns a list of object instances. |
| JimCarver | 0:6b753f761943 | 105 | * \return A list of object instances. |
| JimCarver | 0:6b753f761943 | 106 | */ |
| JimCarver | 0:6b753f761943 | 107 | const M2MObjectInstanceList& instances() const; |
| JimCarver | 0:6b753f761943 | 108 | |
| JimCarver | 0:6b753f761943 | 109 | /** |
| JimCarver | 0:6b753f761943 | 110 | * \brief Returns the total number of object instances- |
| JimCarver | 0:6b753f761943 | 111 | * \return The total number of the object instances. |
| JimCarver | 0:6b753f761943 | 112 | */ |
| JimCarver | 0:6b753f761943 | 113 | uint16_t instance_count() const; |
| JimCarver | 0:6b753f761943 | 114 | |
| JimCarver | 0:6b753f761943 | 115 | /** |
| JimCarver | 0:6b753f761943 | 116 | * \brief Returns the Observation Handler object. |
| JimCarver | 0:6b753f761943 | 117 | * \return M2MObservationHandler object. |
| JimCarver | 0:6b753f761943 | 118 | */ |
| JimCarver | 0:6b753f761943 | 119 | virtual M2MObservationHandler* observation_handler() const; |
| JimCarver | 0:6b753f761943 | 120 | |
| JimCarver | 0:6b753f761943 | 121 | /** |
| JimCarver | 0:6b753f761943 | 122 | * \brief Sets the observation handler |
| JimCarver | 0:6b753f761943 | 123 | * \param handler Observation handler |
| JimCarver | 0:6b753f761943 | 124 | */ |
| JimCarver | 0:6b753f761943 | 125 | virtual void set_observation_handler(M2MObservationHandler *handler); |
| JimCarver | 0:6b753f761943 | 126 | |
| JimCarver | 0:6b753f761943 | 127 | /** |
| JimCarver | 0:6b753f761943 | 128 | * \brief Adds the observation level for the object. |
| JimCarver | 0:6b753f761943 | 129 | * \param observation_level The level of observation. |
| JimCarver | 0:6b753f761943 | 130 | */ |
| JimCarver | 0:6b753f761943 | 131 | virtual void add_observation_level(M2MBase::Observation observation_level); |
| JimCarver | 0:6b753f761943 | 132 | |
| JimCarver | 0:6b753f761943 | 133 | /** |
| JimCarver | 0:6b753f761943 | 134 | * \brief Removes the observation level from the object. |
| JimCarver | 0:6b753f761943 | 135 | * \param observation_level The level of observation. |
| JimCarver | 0:6b753f761943 | 136 | */ |
| JimCarver | 0:6b753f761943 | 137 | virtual void remove_observation_level(M2MBase::Observation observation_level); |
| JimCarver | 0:6b753f761943 | 138 | |
| JimCarver | 0:6b753f761943 | 139 | /** |
| JimCarver | 0:6b753f761943 | 140 | * \brief Handles GET request for the registered objects. |
| JimCarver | 0:6b753f761943 | 141 | * \param nsdl The NSDL handler for the CoAP library. |
| JimCarver | 0:6b753f761943 | 142 | * \param received_coap_header The CoAP message received from the server. |
| JimCarver | 0:6b753f761943 | 143 | * \param observation_handler The handler object for sending |
| JimCarver | 0:6b753f761943 | 144 | * observation callbacks. |
| JimCarver | 0:6b753f761943 | 145 | * \return sn_coap_hdr_s The message that needs to be sent to server. |
| JimCarver | 0:6b753f761943 | 146 | */ |
| JimCarver | 0:6b753f761943 | 147 | virtual sn_coap_hdr_s* handle_get_request(nsdl_s *nsdl, |
| JimCarver | 0:6b753f761943 | 148 | sn_coap_hdr_s *received_coap_header, |
| JimCarver | 0:6b753f761943 | 149 | M2MObservationHandler *observation_handler = NULL); |
| JimCarver | 0:6b753f761943 | 150 | |
| JimCarver | 0:6b753f761943 | 151 | /** |
| JimCarver | 0:6b753f761943 | 152 | * \brief Handles PUT request for the registered objects. |
| JimCarver | 0:6b753f761943 | 153 | * \param nsdl The NSDL handler for the CoAP library. |
| JimCarver | 0:6b753f761943 | 154 | * \param received_coap_header The received CoAP message from the server. |
| JimCarver | 0:6b753f761943 | 155 | * \param observation_handler The handler object for sending |
| JimCarver | 0:6b753f761943 | 156 | * observation callbacks. |
| JimCarver | 0:6b753f761943 | 157 | * \param execute_value_updated True will execute the "value_updated" callback. |
| JimCarver | 0:6b753f761943 | 158 | * \return sn_coap_hdr_s The message that needs to be sent to server. |
| JimCarver | 0:6b753f761943 | 159 | */ |
| JimCarver | 0:6b753f761943 | 160 | virtual sn_coap_hdr_s* handle_put_request(nsdl_s *nsdl, |
| JimCarver | 0:6b753f761943 | 161 | sn_coap_hdr_s *received_coap_header, |
| JimCarver | 0:6b753f761943 | 162 | M2MObservationHandler *observation_handler, |
| JimCarver | 0:6b753f761943 | 163 | bool &execute_value_updated); |
| JimCarver | 0:6b753f761943 | 164 | |
| JimCarver | 0:6b753f761943 | 165 | /** |
| JimCarver | 0:6b753f761943 | 166 | * \brief Handles GET request for the registered objects. |
| JimCarver | 0:6b753f761943 | 167 | * \param nsdl The NSDL handler for the CoAP library. |
| JimCarver | 0:6b753f761943 | 168 | * \param received_coap_header The received CoAP message from the server. |
| JimCarver | 0:6b753f761943 | 169 | * \param observation_handler The handler object for sending |
| JimCarver | 0:6b753f761943 | 170 | * observation callbacks. |
| JimCarver | 0:6b753f761943 | 171 | * \param execute_value_updated True will execute the "value_updated" callback. |
| JimCarver | 0:6b753f761943 | 172 | * \return sn_coap_hdr_s The message that needs to be sent to server. |
| JimCarver | 0:6b753f761943 | 173 | */ |
| JimCarver | 0:6b753f761943 | 174 | virtual sn_coap_hdr_s* handle_post_request(nsdl_s *nsdl, |
| JimCarver | 0:6b753f761943 | 175 | sn_coap_hdr_s *received_coap_header, |
| JimCarver | 0:6b753f761943 | 176 | M2MObservationHandler *observation_handler, |
| JimCarver | 0:6b753f761943 | 177 | bool &execute_value_updated, |
| JimCarver | 0:6b753f761943 | 178 | sn_nsdl_addr_s *address = NULL); |
| JimCarver | 0:6b753f761943 | 179 | |
| JimCarver | 0:6b753f761943 | 180 | void notification_update(uint16_t obj_instance_id); |
| JimCarver | 0:6b753f761943 | 181 | |
| JimCarver | 0:6b753f761943 | 182 | #ifdef MBED_CLOUD_CLIENT_EDGE_EXTENSION |
| JimCarver | 0:6b753f761943 | 183 | void set_endpoint(M2MEndpoint *endpoint); |
| JimCarver | 0:6b753f761943 | 184 | |
| JimCarver | 0:6b753f761943 | 185 | M2MEndpoint* get_endpoint() const; |
| JimCarver | 0:6b753f761943 | 186 | #endif |
| JimCarver | 0:6b753f761943 | 187 | |
| JimCarver | 0:6b753f761943 | 188 | protected : |
| JimCarver | 0:6b753f761943 | 189 | /** |
| JimCarver | 0:6b753f761943 | 190 | * \brief Returns the owner object. Can return NULL if the object has no parent. |
| JimCarver | 0:6b753f761943 | 191 | */ |
| JimCarver | 0:6b753f761943 | 192 | virtual M2MBase *get_parent() const; |
| JimCarver | 0:6b753f761943 | 193 | |
| JimCarver | 0:6b753f761943 | 194 | private: |
| JimCarver | 0:6b753f761943 | 195 | |
| JimCarver | 0:6b753f761943 | 196 | M2MObjectInstanceList _instance_list; // owned |
| JimCarver | 0:6b753f761943 | 197 | |
| JimCarver | 0:6b753f761943 | 198 | M2MObservationHandler *_observation_handler; // Not owned |
| JimCarver | 0:6b753f761943 | 199 | |
| JimCarver | 0:6b753f761943 | 200 | #ifdef MBED_CLOUD_CLIENT_EDGE_EXTENSION |
| JimCarver | 0:6b753f761943 | 201 | M2MEndpoint *_endpoint; // Parent endpoint |
| JimCarver | 0:6b753f761943 | 202 | #endif |
| JimCarver | 0:6b753f761943 | 203 | |
| JimCarver | 0:6b753f761943 | 204 | friend class Test_M2MObject; |
| JimCarver | 0:6b753f761943 | 205 | friend class Test_M2MEndpoint; |
| JimCarver | 0:6b753f761943 | 206 | friend class Test_M2MInterfaceImpl; |
| JimCarver | 0:6b753f761943 | 207 | friend class Test_M2MNsdlInterface; |
| JimCarver | 0:6b753f761943 | 208 | friend class Test_M2MTLVSerializer; |
| JimCarver | 0:6b753f761943 | 209 | friend class Test_M2MTLVDeserializer; |
| JimCarver | 0:6b753f761943 | 210 | friend class Test_M2MDevice; |
| JimCarver | 0:6b753f761943 | 211 | friend class Test_M2MFirmware; |
| JimCarver | 0:6b753f761943 | 212 | friend class Test_M2MBase; |
| JimCarver | 0:6b753f761943 | 213 | friend class Test_M2MObjectInstance; |
| JimCarver | 0:6b753f761943 | 214 | friend class Test_M2MResource; |
| JimCarver | 0:6b753f761943 | 215 | friend class Test_M2MSecurity; |
| JimCarver | 0:6b753f761943 | 216 | friend class Test_M2MServer; |
| JimCarver | 0:6b753f761943 | 217 | friend class Test_M2MResourceInstance; |
| JimCarver | 0:6b753f761943 | 218 | }; |
| JimCarver | 0:6b753f761943 | 219 | |
| JimCarver | 0:6b753f761943 | 220 | #endif // M2M_OBJECT_H |
