Dawn Framework 1.0
Universal data acquisition framework for embedded systems
internal.hxx
1// dawn/src/proto/wakaama/internal.hxx
2//
3// SPDX-License-Identifier: Apache-2.0
4//
5
6#pragma once
7
8#include "dawn/proto/wakaama/wakaama.hxx"
9
10extern "C"
11{
12#include <liblwm2m.h>
13}
14
15#include <cstddef>
16#include <cstdint>
17
18namespace dawn
19{
20namespace wakaama_internal
21{
24constexpr size_t WAKAAMA_SECURITY_URI_CAP = CProtoWakaama::RX_BUFFER_SIZE;
25
28constexpr size_t WAKAAMA_SECURITY_CREDENTIAL_CAP = CProtoWakaama::RX_BUFFER_SIZE;
29
32constexpr uint32_t WAKAAMA_SERVER_EXT_MAGIC = 0x574b4131; // WKA1
33
36constexpr uint32_t WAKAAMA_SERVER_FLAG_COAPS = (1 << 0);
37
40constexpr uint32_t WAKAAMA_SERVER_FLAG_BOOTSTRAP = (1 << 16);
41
44constexpr unsigned int WAKAAMA_SERVER_FLAG_SECURITY_SHIFT = 8;
45
48constexpr unsigned int WAKAAMA_SERVER_FLAG_SECURITY_MASK = 0xff;
49
53{
55 uint16_t id;
56 const char *uri;
57 const uint8_t *publicIdentity;
58 size_t publicIdentityLen;
59 const uint8_t *secretKey;
60 size_t secretKeyLen;
61 uint16_t shortServerId;
62 uint32_t holdoff;
63 uint32_t bootstrapTimeout;
64 uint8_t securityMode;
65 bool bootstrap;
66 bool allocated;
67 char uriBuffer[WAKAAMA_SECURITY_URI_CAP];
68 uint8_t publicIdentityBuffer[WAKAAMA_SECURITY_CREDENTIAL_CAP];
69 uint8_t secretKeyBuffer[WAKAAMA_SECURITY_CREDENTIAL_CAP];
70};
71
75{
77 uint16_t id;
78 uint16_t shortServerId;
79 uint32_t lifetime;
80 uint32_t defaultMinPeriod;
81 uint32_t defaultMaxPeriod;
82 uint32_t disableTimeout;
83 uint32_t initialRegistrationDelay;
84 uint32_t communicationRetryTimer;
85 uint32_t communicationSequenceDelayTimer;
86 uint16_t registrationOrder;
87 uint8_t communicationRetryCount;
88 uint8_t communicationSequenceRetryCount;
89 bool storing;
90 bool registrationFailureBlock;
91 bool bootstrapOnRegistrationFailure;
92 bool muteSend;
93 bool allocated;
94 char binding[4];
95 char preferredTransport[4];
96};
97
101{
102 device_instance_s *next;
103 uint16_t id;
104};
105
109{
110 security_instance_s *security;
111 server_instance_s *server;
112 size_t securityCapacity;
113 size_t serverCapacity;
114};
115
118security_instance_s *allocateSecurityInstance(InstancePools *pools);
119
122void releaseSecurityInstance(security_instance_s *inst);
123
126server_instance_s *allocateServerInstance(InstancePools *pools);
127
130void releaseServerInstance(server_instance_s *inst);
131
134bool assignSecurityString(security_instance_s &inst, const uint8_t *src, size_t len);
135
138bool assignSecurityBuffer(const uint8_t *src,
139 size_t len,
140 uint8_t *buffer,
141 size_t capacity,
142 const uint8_t **dst,
143 size_t *dstLen);
144
147uint8_t securityRead(lwm2m_context_t *ctx,
148 uint16_t instanceId,
149 int *numData,
150 lwm2m_data_t **dataArray,
151 lwm2m_object_t *object);
152
155uint8_t securityDiscover(lwm2m_context_t *ctx,
156 uint16_t instanceId,
157 int *numData,
158 lwm2m_data_t **dataArray,
159 lwm2m_object_t *object);
160#ifdef CONFIG_WAKAAMA_BOOTSTRAP
163uint8_t securityWrite(lwm2m_context_t *ctx,
164 uint16_t instanceId,
165 int numData,
166 lwm2m_data_t *dataArray,
167 lwm2m_object_t *object,
168 lwm2m_write_type_t writeType);
169
172uint8_t securityCreate(lwm2m_context_t *ctx,
173 uint16_t instanceId,
174 int numData,
175 lwm2m_data_t *dataArray,
176 lwm2m_object_t *object);
177
180uint8_t securityDelete(lwm2m_context_t *ctx, uint16_t instanceId, lwm2m_object_t *object);
181#endif
182
185uint8_t serverRead(lwm2m_context_t *ctx,
186 uint16_t instanceId,
187 int *numData,
188 lwm2m_data_t **dataArray,
189 lwm2m_object_t *object);
190
193uint8_t serverDiscover(lwm2m_context_t *ctx,
194 uint16_t instanceId,
195 int *numData,
196 lwm2m_data_t **dataArray,
197 lwm2m_object_t *object);
198
201uint8_t serverExecute(lwm2m_context_t *ctx,
202 uint16_t instanceId,
203 uint16_t resourceId,
204 uint8_t *buffer,
205 int length,
206 lwm2m_object_t *object);
207
210uint8_t serverWrite(lwm2m_context_t *ctx,
211 uint16_t instanceId,
212 int numData,
213 lwm2m_data_t *dataArray,
214 lwm2m_object_t *object,
215 lwm2m_write_type_t writeType);
216#ifdef CONFIG_WAKAAMA_BOOTSTRAP
219uint8_t serverCreate(lwm2m_context_t *ctx,
220 uint16_t instanceId,
221 int numData,
222 lwm2m_data_t *dataArray,
223 lwm2m_object_t *object);
224
227uint8_t serverDelete(lwm2m_context_t *ctx, uint16_t instanceId, lwm2m_object_t *object);
228#endif
229
232uint8_t deviceRead(lwm2m_context_t *ctx,
233 uint16_t instanceId,
234 int *numData,
235 lwm2m_data_t **dataArray,
236 lwm2m_object_t *object);
237
240uint8_t deviceDiscover(lwm2m_context_t *ctx,
241 uint16_t instanceId,
242 int *numData,
243 lwm2m_data_t **dataArray,
244 lwm2m_object_t *object);
245
250void deviceResolveBatteryBindings(CProtoWakaama *proto);
251
252} // namespace wakaama_internal
253} // namespace dawn
Wakaama LwM2M client protocol implementation.
Definition wakaama.hxx:52
Out-of-tree user-extension hooks for Dawn.
Definition bindable.hxx:13
Fixed pools backing bootstrap-mutable Security and Server objects.
Definition internal.hxx:109
Runtime representation of the single LwM2M Device instance.
Definition internal.hxx:101
Runtime representation of one LwM2M Security object instance.
Definition internal.hxx:53
Runtime representation of one LwM2M Server object instance.
Definition internal.hxx:75