mbed client lightswitch demo
Dependencies: mbed Socket lwip-eth lwip-sys lwip
Fork of mbed-client-classic-example-lwip by
mbed-client/mbed-client/m2mresourceinstance.h
- Committer:
- mbedAustin
- Date:
- 2016-06-09
- Revision:
- 11:cada08fc8a70
File content as of revision 11:cada08fc8a70:
/*
* 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;
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 Constructor for creating resource.
* @param resource_name, Name of the resource.
* @param resource_type, Resource Type.
* @param type, Resource Data Type of the object.
*/
M2MResourceInstance(const String &resource_name,
const String &resource_type,
M2MResourceInstance::ResourceType type,
M2MObjectInstanceCallback &object_instance_callback);
/**
* @brief Constructor for creating a resource.
* @param resource_name, Name of the resource.
* @param resource_type, Resource Type.
* @param type, Resource Data Type of the object.
* @param value, Value pointer of the object.
* @param value_length, Length of the value pointer.
*/
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);
// 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 object type.
* @return BaseType.
*/
virtual M2MBase::BaseType base_type() const;
/**
* @brief Returns 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, Function pointer that needs to be executed.
*/
virtual void set_execute_function(execute_callback callback);
/**
* @brief Sets the value of the given resource.
* @param value, Pointer to the value to be set on the resource.
* @param value_length , 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, Arguments that will be passed to be executed.
*/
void execute(void *arguments);
/**
* @brief Provides the value of the given resource.
* @param value[OUT], Pointer to the resource value.
* @param value_length[OUT], Length of the value pointer.
*/
virtual void get_value(uint8_t *&value, uint32_t &value_length);
/**
* @brief Returns value pointer of the object.
* @return Value pointer of the object.
*/
uint8_t* value() const;
/**
* @brief Returns length of the value pointer.
* @return Length of the value pointer.
*/
uint32_t value_length() const;
/**
* @brief Handles GET request for the registered objects.
* @param nsdl, NSDL handler for the CoAP library.
* @param received_coap_header, CoAP message received from the server.
* @param observation_handler, Handler object for sending
* observation callbacks.
* @return sn_coap_hdr_s, 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 PUT request for the registered objects.
* @param nsdl, NSDL handler for the CoAP library.
* @param received_coap_header, CoAP message received from the server.
* @param observation_handler, Handler object for sending
* observation callbacks.
* @return sn_coap_hdr_s, 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 = NULL);
protected:
/**
* @brief Set observer for sending notification update.
* @param resource, 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
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
Austin Blackstone
