Friendly LWM2M client
Instance.h
Go to the documentation of this file.
1 /*
2  *Instance.h
3  *
4  * Created on: 6 Jul 2023
5  * Author: valentin
6  */
7 
8 #ifndef WPP_INSTANCE_H_
9 #define WPP_INSTANCE_H_
10 
11 #include <vector>
12 
13 #include "liblwm2m.h"
14 #include "Resource.h"
15 #include "ItemOp.h"
16 #include "WppTypes.h"
17 #include "InstSubject.h"
18 #include "ResourceContainer.h"
19 
20 namespace wpp {
21 
22 class WppRegistry;
23 class WppClient;
24 
40 class Instance: public InstSubject, public ResourceContainer {
41 public:
42  Instance(lwm2m_context_t &context, const OBJ_LINK_T &id): _context(context), _id(id) {}
43  virtual ~Instance() {}
44 
45  Instance(const Instance&) = delete;
46  Instance(Instance&&) = delete;
47  Instance& operator=(const Instance&) = delete;
48  Instance& operator=(Instance&&) = delete;
49 
50  /* ------------- User helpful methods ------------- */
51  OBJ_LINK_T getLink() const { return _id; }
52  OBJ_ID getObjectID() const { return (OBJ_ID)_id.objId; }
53  ID_T getInstanceID() const { return _id.objInstId; }
54 
58  lwm2m_context_t& getContext();
59 
64 
69 
70  /* ------------- Server operation methods ------------- */
78  uint8_t readAsServer(lwm2m_server_t *server, int *numDataP, lwm2m_data_t **dataArray);
79  uint8_t writeAsServer(lwm2m_server_t *server, int numData, lwm2m_data_t *dataArray, lwm2m_write_type_t writeType);
80  uint8_t executeAsServer(lwm2m_server_t *server, ID_T resId, uint8_t *buffer, int length);
81  uint8_t discoverAsServer(lwm2m_server_t *server, int * numDataP, lwm2m_data_t **dataArray);
82 
83 protected: /* Interface that can be used by derived class */
87  void notifyResChanged(ID_T resId, ID_T resInstId = ID_T_MAX_VAL);
88 
93  std::vector<Resource *> getInstantiatedResList();
94  std::vector<Resource *> getInstantiatedResList(const ItemOp& filter);
95 
100  std::vector<Resource *> getResList();
101 
106  void resourceOperationNotifier(ItemOp::TYPE type, ID_T resId, ID_T resInstId) override;
107 
108 
109 protected: /* Interface that must be implemented by derived class */
120  virtual void serverOperationNotifier(Instance *securityInst, ItemOp::TYPE type, const ResLink &resLink) = 0;
121 
127  virtual void userOperationNotifier(ItemOp::TYPE type, const ResLink &resLink) = 0;
128 
129 private: /* Interface used by Object or Instance class */
130  Instance *getSecurityInst(lwm2m_server_t *server);
131 
132  /* ------------- Compatibility with core data structure ------------- */
137  bool resourceToLwm2mData(Resource &res, ID_T instanceId, lwm2m_data_t &data);
138  bool lwm2mDataToResource(const lwm2m_data_t &data, Resource &res, ID_T instanceId);
139 
140  /* ------------- Helpful methods for server callbacks ------------- */
141  Resource* getValidatedResForWrite(const lwm2m_data_t &data, lwm2m_write_type_t writeType, uint8_t &errCode);
142  uint8_t resourceWrite(lwm2m_server_t *server, Resource &res, const lwm2m_data_t &data, lwm2m_write_type_t writeType);
143  Resource* getValidatedResForRead(const lwm2m_data_t &data, uint8_t &errCode);
144  uint8_t resourceRead(lwm2m_server_t *server, lwm2m_data_t &data, Resource &res);
145  Resource* getValidatedResForExecute(ID_T resId, uint8_t &errCode);
146  uint8_t createEmptyLwm2mDataArray(std::vector<Resource*> resources, lwm2m_data_t **dataArray, int *numData);
147  bool isAllMandatoryResourcesPresent(int numData, lwm2m_data_t *data);
148  uint8_t replaceInstance(lwm2m_server_t *server, int numData, lwm2m_data_t *dataArray);
149  uint8_t replaceResource(lwm2m_server_t *server, int numData, lwm2m_data_t *dataArray, lwm2m_write_type_t writeType);
150 
151 private:
152  lwm2m_context_t &_context;
153  OBJ_LINK_T _id;
154 };
155 
156 } /* namespace wpp */
157 
158 #endif /* WPP_INSTANCE_H_ */
#define ID_T_MAX_VAL
Definition: WppTypes.h:16
The InstSubject class represents a subject that allows subscribers to be notified about various event...
Definition: InstSubject.h:21
Instance is interface class that implements manipulation with derived class resources....
Definition: Instance.h:40
void resourceOperationNotifier(ItemOp::TYPE type, ID_T resId, ID_T resInstId) override
Handle information about resource operation (WRITE, DELETE). Called by ResourceContainer after resour...
Definition: Instance.cpp:46
Instance & operator=(Instance &&)=delete
uint8_t readAsServer(lwm2m_server_t *server, int *numDataP, lwm2m_data_t **dataArray)
This methods is called by the core when the server wants to read, write, discover,...
Definition: Instance.cpp:423
virtual ~Instance()
Definition: Instance.h:43
OBJ_ID getObjectID() const
Definition: Instance.h:52
Instance(Instance &&)=delete
virtual void serverOperationNotifier(Instance *securityInst, ItemOp::TYPE type, const ResLink &resLink)=0
This method must be implemented by the derived class, and handle information about resource operation...
uint8_t discoverAsServer(lwm2m_server_t *server, int *numDataP, lwm2m_data_t **dataArray)
Definition: Instance.cpp:513
OBJ_LINK_T getLink() const
Definition: Instance.h:51
virtual void userOperationNotifier(ItemOp::TYPE type, const ResLink &resLink)=0
This method must be implemented by the derived class, and handle information about resource operation...
std::vector< Resource * > getInstantiatedResList()
This method return list with resources that has been instantiated. If resources does not exist then r...
Definition: Instance.cpp:24
Instance(const Instance &)=delete
WppRegistry & getRegistry()
Helpfull methods to get registry instances.
Definition: Instance.cpp:58
WppClient & getClient()
Helpfull methods to get client instances.
Definition: Instance.cpp:54
uint8_t executeAsServer(lwm2m_server_t *server, ID_T resId, uint8_t *buffer, int length)
Definition: Instance.cpp:491
Instance & operator=(const Instance &)=delete
lwm2m_context_t & getContext()
Return context that can be used by derived class.
Definition: Instance.cpp:50
void notifyResChanged(ID_T resId, ID_T resInstId=ID_T_MAX_VAL)
Notify server about resource value change.
Definition: Instance.cpp:17
ID_T getInstanceID() const
Definition: Instance.h:53
std::vector< Resource * > getResList()
This method return list with all resources that has been defined. If resources does not exist then re...
Definition: Instance.cpp:40
Instance(lwm2m_context_t &context, const OBJ_LINK_T &id)
Definition: Instance.h:42
uint8_t writeAsServer(lwm2m_server_t *server, int numData, lwm2m_data_t *dataArray, lwm2m_write_type_t writeType)
Definition: Instance.cpp:467
std::vector< Resource > & resources()
This method return list with all resources that has been defined.
The Resource class in the wpp namespace is a comprehensive and flexible class designed to handle diff...
Definition: Resource.h:49
Represents a client interface for Wpp library.
Definition: WppClient.h:37
The WppRegistry class represents a registry for managing LWM2M objects.
Definition: WppRegistry.h:53
The WppConnection class represents a connection interface for the Wpp library.
Definition: WppClient.cpp:14
uint16_t ID_T
Definition: WppTypes.h:15
OBJ_ID
Enumeration of object IDs in the Wpp library.
Definition: ObjectID.h:14
The ItemOp struct represents the operations that can be performed on a instance/resource.
Definition: ItemOp.h:24
TYPE
Enum representing the different types of operations.
Definition: ItemOp.h:29