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-client by
mbed-client/m2mresourceinstance.h
- Committer:
- Yogesh Pande
- Date:
- 2016-04-02
- Revision:
- 4:ae5178938864
- Parent:
- 1:79b6cc67d8b4
File content as of revision 4:ae5178938864:
/* * Copyright (c) 2015 ARM Limited. All rights reserved. * SPDX-License-Identifier: Apache-2.0 * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an AS IS BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef M2M_RESOURCE_INSTANCE_H #define M2M_RESOURCE_INSTANCE_H #include "mbed-client/m2mbase.h" #include "mbed-client/functionpointer.h" class M2MObjectInstanceCallback { public: virtual void notification_update(M2MBase::Observation observation_level) = 0; }; /** * \brief M2MResourceInstance. * This class is the base class for mbed Client Resources. All defined * LWM2M resource models can be created based on it. */ typedef FP1<void,void*> execute_callback; typedef void(*execute_callback_2) (void *arguments); class M2MResourceCallback; class M2MResourceInstance : public M2MBase { friend class M2MObjectInstance; friend class M2MResource; public: /** * Enum defining a resource type that can be * supported by a given resource. */ typedef enum { STRING, INTEGER, FLOAT, BOOLEAN, OPAQUE, TIME, OBJLINK }ResourceType; private: // Constructor and destructor are private // which means that these objects can be created or // deleted only through a function provided by the M2MObjectInstance. /** * \brief A constructor for creating a resource. * \param resource_name The name of the resource. * \param resource_type The type of the resource. * \param type, The resource data type of the object. * \param object_instance_id Object instance id where resource exists. * \param object_name Object name where resource exists. */ M2MResourceInstance(const String &resource_name, const String &resource_type, M2MResourceInstance::ResourceType type, M2MObjectInstanceCallback &object_instance_callback, const uint16_t object_instance_id = 0, const String &object_name = ""); /** * \brief A Constructor for creating a resource. * \param resource_name The name of the resource. * \param resource_type The type of the resource. * \param type The resource data type of the object. * \param value The value pointer of the object. * \param value_length The length of the value pointer. * \param value_length The length of the value pointer. * \param object_instance_id Object instance id where resource exists. * \param object_name Object name where resource exists. */ M2MResourceInstance(const String &resource_name, const String &resource_type, M2MResourceInstance::ResourceType type, const uint8_t *value, const uint8_t value_length, M2MObjectInstanceCallback &object_instance_callback, const uint16_t object_instance_id = 0, const String &object_name = ""); // Prevents the use of default constructor. M2MResourceInstance(); // Prevents the use of assignment operator. M2MResourceInstance& operator=( const M2MResourceInstance& /*other*/ ); // Prevents the use of copy constructor M2MResourceInstance( const M2MResourceInstance& /*other*/ ); /** * Destructor */ virtual ~M2MResourceInstance(); public: /** * \brief Returns the object type. * \return BaseType. */ virtual M2MBase::BaseType base_type() const; /** * \brief Returns the resource data type. * \return ResourceType. */ virtual M2MResourceInstance::ResourceType resource_instance_type() const; /** * \brief Parses the received query for a notification * attribute. * \return True if required attributes are present, else false. */ virtual bool handle_observation_attribute(char *&query); /** * \brief Sets the function that should be executed when this * resource receives a POST command. * \param callback The function pointer that needs to be executed. */ virtual void set_execute_function(execute_callback callback); /** * \brief Sets the function that should be executed when this * resource receives a POST command. * \param callback The function pointer that needs to be executed. */ virtual void set_execute_function(execute_callback_2 callback); /** * \brief Sets the value of the given resource. * \param value, A pointer to the value to be set on the resource. * \param value_length The length of the value pointer. * \return True if successfully set, else false. */ virtual bool set_value(const uint8_t *value, const uint32_t value_length); /** * \brief Clears the value of the given resource. */ virtual void clear_value(); /** * \brief Executes the function that is set in "set_execute_function". * \param arguments The arguments that will be passed to be executed. */ void execute(void *arguments); /** * \brief Provides the value of the given resource. * \param value[OUT] A pointer to the resource value. * \param value_length[OUT] The length of the value pointer. */ virtual void get_value(uint8_t *&value, uint32_t &value_length); /** * \brief Returns the value pointer of the object. * \return The value pointer of the object. */ uint8_t* value() const; /** * \brief Returns the length of the value pointer. * \return The length of the value pointer. */ uint32_t value_length() const; /** * \brief Handles the GET request for the registered objects. * \param nsdl The NSDL handler for the CoAP library. * \param received_coap_header The CoAP message received from the server. * \param observation_handler The handler object for sending * observation callbacks. * \return sn_coap_hdr_s The message that needs to be sent to the server. */ virtual sn_coap_hdr_s* handle_get_request(nsdl_s *nsdl, sn_coap_hdr_s *received_coap_header, M2MObservationHandler *observation_handler = NULL); /** * \brief Handles the PUT request for the registered objects. * \param nsdl The NSDL handler for the CoAP library. * \param received_coap_header The CoAP message received from the server. * \param observation_handler The handler object for sending * observation callbacks. * \param execute_value_updated True will execute the "value_updated" callback. * \return sn_coap_hdr_s The message that needs to be sent to the server. */ virtual sn_coap_hdr_s* handle_put_request(nsdl_s *nsdl, sn_coap_hdr_s *received_coap_header, M2MObservationHandler *observation_handler, bool &execute_value_updated); /** * \brief Returns the object instance id where resource exists. * \return Object instance id. */ uint16_t object_instance_id() const; /** * \brief Returns the object name where resource exists. * \return Object name. */ const String& object_name() const; protected: /** * \brief Set observer for sending the notification update. * \param resource The callback handle. */ void set_resource_observer(M2MResourceCallback *resource); private: void report(); bool is_value_changed(const uint8_t* value, const uint32_t value_len); private: M2MObjectInstanceCallback &_object_instance_callback; execute_callback _execute_callback; uint8_t *_value; uint32_t _value_length; ResourceType _resource_type; M2MResourceCallback *_resource_callback; // Not owned uint16_t _object_instance_id; String _object_name; FP1<void, void*> *_function_pointer; friend class Test_M2MResourceInstance; friend class Test_M2MResource; friend class Test_M2MObjectInstance; friend class Test_M2MObject; friend class Test_M2MDevice; friend class Test_M2MSecurity; friend class Test_M2MServer; friend class Test_M2MNsdlInterface; friend class Test_M2MFirmware; friend class Test_M2MTLVSerializer; friend class Test_M2MTLVDeserializer; }; #endif // M2M_RESOURCE_INSTANCE_H