Dawn Framework 1.0
Universal data acquisition framework for embedded systems
object_binding.hxx
1// dawn/src/proto/wakaama/object_binding.hxx
2//
3// SPDX-License-Identifier: Apache-2.0
4//
5
6#pragma once
7
8#include "internal.hxx"
9
10#include <vector>
11
12#include "dawn/io/ddata.hxx"
13
14namespace dawn
15{
16namespace wakaama_internal
17{
23{
24public:
27 struct Resource
28 {
29 uint16_t instanceId;
30 uint16_t resourceId;
31 uint16_t access;
33 CIOCommon *io;
34 io_ddata_t *data;
35 };
36
37#ifdef CONFIG_DAWN_IO_NOTIFY
40 struct NotifyContext
41 {
42 CProtoWakaama *proto;
43 CIOCommon *io;
44 uint16_t objectId;
45 uint16_t instanceId;
46 uint16_t resourceId;
47 };
48#endif
49
52 struct Instance
53 {
54 Instance *next;
55 uint16_t id;
56 size_t resourceCount;
57 };
58
62
66
69 int configureStatus() const
70 {
71 return configStatus;
72 }
73
76 int init();
77
80 int deinit();
81
84 lwm2m_object_t *object()
85 {
86 return &lwm2m;
87 }
88
89private:
90 CProtoWakaama *proto;
91 int configStatus;
92 lwm2m_object_t lwm2m;
93 std::vector<Instance *> instances;
94 std::vector<Resource> resources;
95#ifdef CONFIG_DAWN_IO_NOTIFY
96 std::vector<NotifyContext *> notifyContexts;
97#endif
98
101 int configureDesc(const SObjectCfg::SObjectCfgItem *item);
102
105 int allocObject(const SProtoWakaamaIOBind &bind);
106
109 Resource *findResource(uint16_t instanceId, uint16_t resourceId);
110
113 Instance *findOrCreateInstance(uint16_t instanceId);
114
117 int readResource(Resource &res, lwm2m_data_t &data);
118
121 int writeResource(Resource &res, const lwm2m_data_t &data);
122
125 int executeResource(Resource &res, const uint8_t *buffer, int length);
126#ifdef CONFIG_DAWN_IO_NOTIFY
129 void setupNotifications();
130
133 void destroyNotifications();
134
137 static int notifierCb(void *priv, io_ddata_t *data);
138#endif
139
142 static uint8_t readCb(lwm2m_context_t *ctx,
143 uint16_t instanceId,
144 int *numData,
145 lwm2m_data_t **dataArray,
146 lwm2m_object_t *object);
147
150 static uint8_t discoverCb(lwm2m_context_t *ctx,
151 uint16_t instanceId,
152 int *numData,
153 lwm2m_data_t **dataArray,
154 lwm2m_object_t *object);
155
158 static uint8_t writeCb(lwm2m_context_t *ctx,
159 uint16_t instanceId,
160 int numData,
161 lwm2m_data_t *dataArray,
162 lwm2m_object_t *object,
163 lwm2m_write_type_t writeType);
164
167 static uint8_t executeCb(lwm2m_context_t *ctx,
168 uint16_t instanceId,
169 uint16_t resourceId,
170 uint8_t *buffer,
171 int length,
172 lwm2m_object_t *object);
173};
174
175} // namespace wakaama_internal
176} // namespace dawn
Base class for all I/O objects.
Definition common.hxx:27
Wakaama LwM2M client protocol implementation.
Definition wakaama.hxx:52
Runtime binding between one LwM2M object and Dawn IO resources.
~ObjectBinding()
Destroy binding state and release allocated Wakaama resources.
Definition object.cxx:117
lwm2m_object_t * object()
Return the Wakaama object exposed by this binding.
int configureStatus() const
Return descriptor parsing status captured by the constructor.
int deinit()
Release runtime allocations owned by the binding.
Definition object.cxx:261
int init()
Resolve Dawn IOs and build the Wakaama object instance list.
Definition object.cxx:205
Out-of-tree user-extension hooks for Dawn.
Definition bindable.hxx:13
Single configuration item within object.
uint32_t ObjectId
ObjectID type - single 32-bit value.
Definition objectid.hxx:44
Descriptor binding for one LwM2M resource.
Definition wakaama.hxx:34
Heap-allocated dynamic I/O data buffer.
Definition ddata.hxx:21
Wakaama instance node used in the object instance list.
Descriptor-backed mapping for one object instance resource.