caffeine-sal 0.1.17
Header-only polymorphic middleware services layer for the Caffeine Framework
Loading...
Searching...
No Matches
cfn_sal_utl_serialization.h
Go to the documentation of this file.
1
8#ifndef CAFFEINE_SAL_UTL_SERIALIZATION_H
9#define CAFFEINE_SAL_UTL_SERIALIZATION_H
10
11#ifdef __cplusplus
12extern "C"
13{
14#endif
15
16/* Includes ---------------------------------------------------------*/
17#include <stddef.h>
18#include "cfn_sal.h"
19
20/* Defines ----------------------------------------------------------*/
21
22#define CFN_SAL_UTL_TYPE_SERIALIZATION CFN_SAL_TYPE('S', 'E', 'R')
23
27#define CFN_SAL_UTL_SERIALIZATION_SCHEMA_START(name) \
28 static const cfn_sal_utl_serialization_schema_field_t name##_fields[] = {
29#define CFN_SAL_UTL_SERIALIZATION_SCHEMA_FIELD(f_name, f_type, struct_type, member) \
30 { \
31 .name = (f_name), .type = (f_type), .offset = (uint16_t) offsetof((struct_type), (member)), \
32 .size = (uint16_t) sizeof(((struct_type *) 0)->(member)) \
33 }
34#define CFN_SAL_UTL_SERIALIZATION_SCHEMA_END(name) \
35 } \
36 ; \
37 static const cfn_sal_utl_serialization_schema_t name = { .fields = name##_fields, \
38 .count = CFN_HAL_ARRAY_SIZE(name##_fields) };
39
40/* Types Enums ------------------------------------------------------*/
41
55
56/* Types Structs ----------------------------------------------------*/
57
68
77
78typedef struct cfn_sal_utl_serialization_s cfn_sal_utl_serialization_t;
80
82 uint32_t event,
83 uint32_t error,
84 void *user_arg);
85
90{
91 cfn_hal_api_base_t base;
92
96 cfn_hal_error_code_t (*encode)(cfn_sal_utl_serialization_t *driver,
98 const void *data_ptr,
99 uint8_t *out_buf,
100 size_t out_size,
101 size_t *bytes_written);
102
106 cfn_hal_error_code_t (*decode)(cfn_sal_utl_serialization_t *driver,
108 const uint8_t *in_buf,
109 size_t in_size,
110 void *data_ptr,
111 size_t *bytes_read);
112
116 cfn_hal_error_code_t (*encode_stream)(cfn_sal_utl_serialization_t *driver,
118 const void *data_ptr,
119 void *out_stream);
120
124 cfn_hal_error_code_t (*decode_stream)(cfn_sal_utl_serialization_t *driver,
126 void *in_stream,
127 void *data_ptr);
128};
129
131
132typedef struct
133{
134 void *custom;
136
137CFN_SAL_CREATE_DRIVER_TYPE(sal_utl_serialization,
142
143/* Functions inline ------------------------------------------------- */
144
146 uint32_t peripheral_id,
147 void *dependency,
149 const cfn_sal_phy_t *phy,
152 void *user_arg)
153{
154 CFN_HAL_POPULATE_DRIVER(
155 driver, CFN_SAL_UTL_TYPE_SERIALIZATION, peripheral_id, NULL, dependency, api, phy, config, callback, user_arg);
156}
157
160 const cfn_sal_phy_t *phy,
161 void *dependency,
163 void *user_arg);
164
166
167CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_serialization_init(cfn_sal_utl_serialization_t *driver)
168{
169 if (!driver)
170 {
171 return CFN_HAL_ERROR_BAD_PARAM;
172 }
173 driver->base.vmt = (const struct cfn_hal_api_base_s *) driver->api;
174 return cfn_hal_base_init(&driver->base, CFN_SAL_UTL_TYPE_SERIALIZATION);
175}
176
177CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_serialization_encode(cfn_sal_utl_serialization_t *driver,
179 const void *data_ptr,
180 uint8_t *out_buf,
181 size_t out_size,
182 size_t *bytes_written)
183{
184 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
185 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(
186 CFN_SAL_UTL_TYPE_SERIALIZATION, encode, driver, error, schema, data_ptr, out_buf, out_size, bytes_written);
187 return error;
188}
189
190CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_serialization_decode(cfn_sal_utl_serialization_t *driver,
192 const uint8_t *in_buf,
193 size_t in_size,
194 void *data_ptr,
195 size_t *bytes_read)
196{
197 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
198 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(
199 CFN_SAL_UTL_TYPE_SERIALIZATION, decode, driver, error, schema, in_buf, in_size, data_ptr, bytes_read);
200 return error;
201}
202
206CFN_HAL_INLINE cfn_hal_error_code_t
209 const void *data_ptr,
210 void *out_stream)
211{
212 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
213 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(
214 CFN_SAL_UTL_TYPE_SERIALIZATION, encode_stream, driver, error, schema, data_ptr, out_stream);
215 return error;
216}
217
221CFN_HAL_INLINE cfn_hal_error_code_t
224 void *in_stream,
225 void *data_ptr)
226{
227 cfn_hal_error_code_t error = CFN_HAL_ERROR_OK;
228 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(
229 CFN_SAL_UTL_TYPE_SERIALIZATION, decode_stream, driver, error, schema, in_stream, data_ptr);
230 return error;
231}
232
233#ifdef __cplusplus
234}
235#endif
236
237#endif /* CAFFEINE_SAL_UTL_SERIALIZATION_H */
Core definitions and macros for Caffeine SAL.
#define CFN_SAL_CREATE_DRIVER_TYPE(prefix, config_type, api_type, phy_type, cb_type)
Definition cfn_sal.h:38
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_serialization_decode_stream(cfn_sal_utl_serialization_t *driver, const cfn_sal_utl_serialization_schema_t *schema, void *in_stream, void *data_ptr)
Decodes a stream into a data structure based on a schema.
Definition cfn_sal_utl_serialization.h:222
void(* cfn_sal_utl_serialization_callback_t)(cfn_sal_utl_serialization_t *driver, uint32_t event, uint32_t error, void *user_arg)
Definition cfn_sal_utl_serialization.h:81
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_serialization_encode_stream(cfn_sal_utl_serialization_t *driver, const cfn_sal_utl_serialization_schema_t *schema, const void *data_ptr, void *out_stream)
Encodes a data structure into a stream based on a schema.
Definition cfn_sal_utl_serialization.h:207
CFN_HAL_INLINE void cfn_sal_utl_serialization_populate(cfn_sal_utl_serialization_t *driver, uint32_t peripheral_id, void *dependency, const cfn_sal_utl_serialization_api_t *api, const cfn_sal_phy_t *phy, const cfn_sal_utl_serialization_config_t *config, cfn_sal_utl_serialization_callback_t callback, void *user_arg)
Definition cfn_sal_utl_serialization.h:145
CFN_HAL_VMT_CHECK(struct cfn_sal_utl_serialization_api_s)
struct cfn_sal_utl_serialization_s cfn_sal_utl_serialization_t
Definition cfn_sal_utl_serialization.h:78
#define CFN_SAL_UTL_TYPE_SERIALIZATION
Definition cfn_sal_utl_serialization.h:22
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_serialization_init(cfn_sal_utl_serialization_t *driver)
Definition cfn_sal_utl_serialization.h:167
cfn_hal_error_code_t cfn_sal_utl_serialization_construct(cfn_sal_utl_serialization_t *driver, const cfn_sal_utl_serialization_config_t *config, const cfn_sal_phy_t *phy, void *dependency, cfn_sal_utl_serialization_callback_t callback, void *user_arg)
cfn_hal_error_code_t cfn_sal_utl_serialization_destruct(cfn_sal_utl_serialization_t *driver)
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_serialization_decode(cfn_sal_utl_serialization_t *driver, const cfn_sal_utl_serialization_schema_t *schema, const uint8_t *in_buf, size_t in_size, void *data_ptr, size_t *bytes_read)
Definition cfn_sal_utl_serialization.h:190
cfn_sal_utl_serialization_schema_field_type_t
Supported data types for schema fields.
Definition cfn_sal_utl_serialization.h:46
@ CFN_SAL_UTL_SERIALIZATION_SCHEMA_FIELD_TYPE_FLOAT
Definition cfn_sal_utl_serialization.h:49
@ CFN_SAL_UTL_SERIALIZATION_SCHEMA_FIELD_TYPE_BYTES
Definition cfn_sal_utl_serialization.h:52
@ CFN_SAL_UTL_SERIALIZATION_SCHEMA_FIELD_TYPE_BOOL
Definition cfn_sal_utl_serialization.h:50
@ CFN_SAL_UTL_SERIALIZATION_SCHEMA_FIELD_TYPE_INT32
Definition cfn_sal_utl_serialization.h:47
@ CFN_SAL_UTL_SERIALIZATION_SCHEMA_FIELD_TYPE_UINT32
Definition cfn_sal_utl_serialization.h:48
@ CFN_SAL_UTL_SERIALIZATION_SCHEMA_FIELD_TYPE_STRING
Definition cfn_sal_utl_serialization.h:51
@ CFN_SAL_UTL_SERIALIZATION_SCHEMA_FIELD_TYPE_MAX
Definition cfn_sal_utl_serialization.h:53
CFN_HAL_INLINE cfn_hal_error_code_t cfn_sal_utl_serialization_encode(cfn_sal_utl_serialization_t *driver, const cfn_sal_utl_serialization_schema_t *schema, const void *data_ptr, uint8_t *out_buf, size_t out_size, size_t *bytes_written)
Definition cfn_sal_utl_serialization.h:177
Generic physical mapping for services.
Definition cfn_sal_types.h:26
Virtual Method Table for Serialization Services.
Definition cfn_sal_utl_serialization.h:90
cfn_hal_error_code_t(* decode_stream)(cfn_sal_utl_serialization_t *driver, const cfn_sal_utl_serialization_schema_t *schema, void *in_stream, void *data_ptr)
Decodes a stream into a data structure based on a schema.
Definition cfn_sal_utl_serialization.h:124
cfn_hal_api_base_t base
Definition cfn_sal_utl_serialization.h:91
cfn_hal_error_code_t(* decode)(cfn_sal_utl_serialization_t *driver, const cfn_sal_utl_serialization_schema_t *schema, const uint8_t *in_buf, size_t in_size, void *data_ptr, size_t *bytes_read)
Decodes a buffer into a data structure based on a schema.
Definition cfn_sal_utl_serialization.h:106
cfn_hal_error_code_t(* encode_stream)(cfn_sal_utl_serialization_t *driver, const cfn_sal_utl_serialization_schema_t *schema, const void *data_ptr, void *out_stream)
Encodes a data structure into a stream based on a schema.
Definition cfn_sal_utl_serialization.h:116
cfn_hal_error_code_t(* encode)(cfn_sal_utl_serialization_t *driver, const cfn_sal_utl_serialization_schema_t *schema, const void *data_ptr, uint8_t *out_buf, size_t out_size, size_t *bytes_written)
Encodes a data structure into a buffer based on a schema.
Definition cfn_sal_utl_serialization.h:96
Definition cfn_sal_utl_serialization.h:133
void * custom
Definition cfn_sal_utl_serialization.h:134
Metadata for a single field in a data structure.
Definition cfn_sal_utl_serialization.h:62
uint16_t size
Definition cfn_sal_utl_serialization.h:66
uint16_t offset
Definition cfn_sal_utl_serialization.h:65
cfn_sal_utl_serialization_schema_field_type_t type
Definition cfn_sal_utl_serialization.h:64
const char * name
Definition cfn_sal_utl_serialization.h:63
Complete schema descriptor for a data structure.
Definition cfn_sal_utl_serialization.h:73
const cfn_sal_utl_serialization_schema_field_t * fields
Definition cfn_sal_utl_serialization.h:74
size_t count
Definition cfn_sal_utl_serialization.h:75