src.dualinventive.com/fw/libdi_fw-tests/libdi/include/di/rpc/serialize.h

189 lines
7.7 KiB
C

/**
* @file include/di/rpc/serialize.h
* @brief rief
* @date Aug 25, 2015
* @author rheijden
* @copyright 2015 Dual Inventive Technology Centre B.V.
*
* descr
*/
#ifndef INCLUDE_DI_CAN_SERIALIZE_H_
#define INCLUDE_DI_CAN_SERIALIZE_H_
#include <stddef.h>
#include <stdint.h>
#include <mpack/mpack.h>
#include <di/rpc/structures.h>
#include <di/can.h>
#include <di/drv/hl854x.h>
#ifdef __cplusplus
extern "C" {
#endif
void di_rpc_serialize_msg_data(mpack_writer_t *writer, struct di_rpc_msg *msg, const uint8_t *data, size_t len);
static inline void di_rpc_serialize_msg(mpack_writer_t *writer, struct di_rpc_msg *msg)
{
di_rpc_serialize_msg_data(writer, msg, NULL, 0);
}
void di_rpc_serialize_msg_start(mpack_writer_t *writer, struct di_rpc_msg *msg);
void di_rpc_serialize_msg_finish(mpack_writer_t *writer);
/** When info->version == NULL, then the software version string is automatically generated
*/
void di_rpc_serialize_item_device_info(mpack_writer_t *writer, const struct di_rpc_device_info *info);
void di_rpc_serialize_item_device_data(mpack_writer_t *writer, const struct di_rpc_device_data *data);
void di_rpc_serialize_item_config_info(mpack_writer_t *writer, const struct di_rpc_config_info *info);
void di_rpc_serialize_item_log(mpack_writer_t *writer, const struct di_rpc_log *log);
void di_rpc_serialize_item_info(mpack_writer_t *writer, const struct di_rpc_info *info);
void di_rpc_serialize_item_data(mpack_writer_t *writer, const struct di_rpc_data *data);
void di_rpc_serialize_item_errno(mpack_writer_t *writer, const di_errno_t err);
void di_rpc_serialize_item_error(mpack_writer_t *writer, const struct di_rpc_error *error);
void di_rpc_serialize_result_gps(mpack_writer_t *writer, const struct di_rpc_sensor_data_gps *value);
void di_rpc_serialize_result_can(mpack_writer_t *writer, const struct di_can_ctx *can);
void di_rpc_serialize_result_device_info(mpack_writer_t *writer, const struct di_rpc_device_info *info);
void di_rpc_serialize_result_dncm_modem(mpack_writer_t *writer, const struct di_drv_hl854x_ctx *hl854x);
void di_rpc_serialize_result_dncm_status(mpack_writer_t *writer, const struct di_drv_hl854x_ctx_tcp *hl854x);
void di_rpc_serialize_result_info(mpack_writer_t *writer, const struct di_rpc_info *info);
void di_rpc_serialize_result_data(mpack_writer_t *writer, const struct di_rpc_data *data);
void di_rpc_serialize_result_info_array(mpack_writer_t *writer, const struct di_rpc_info *info, uint32_t count);
void di_rpc_serialize_result_data_array(mpack_writer_t *writer, const struct di_rpc_data *data, uint32_t count);
void di_rpc_serialize_result_config_info_array(mpack_writer_t *writer, const struct di_rpc_config_info *info,
const uint32_t count);
#define di_rpc_serialize_kv(writer, key, value) { \
mpack_write_cstr(writer, key); \
mpack_write(writer, value); \
}
#define di_rpc_serialize_kv_nil(writer, key) { \
mpack_write_cstr(writer, key); \
mpack_write_nil(writer); \
}
#ifndef __cplusplus
#define di_rpc_serialize_item(writer, structure) \
_Generic((structure), \
const struct di_rpc_info * : di_rpc_serialize_item_info, \
const struct di_rpc_data * : di_rpc_serialize_item_data, \
const struct di_rpc_device_info * : di_rpc_serialize_item_device_info, \
const struct di_rpc_device_data * : di_rpc_serialize_item_device_data, \
const struct di_rpc_config_info * : di_rpc_serialize_item_config_info, \
const struct di_rpc_log * : di_rpc_serialize_item_log, \
const struct di_rpc_error * : di_rpc_serialize_item_error \
)(writer, structure)
#define di_rpc_serialize_result(writer, result) \
_Generic((result), \
const struct di_rpc_info * : di_rpc_serialize_result_info, \
struct di_rpc_data * : di_rpc_serialize_result_data, \
const struct di_rpc_data * : di_rpc_serialize_result_data, \
const struct di_can_ctx * : di_rpc_serialize_result_can, \
struct di_rpc_device_info * : di_rpc_serialize_result_device_info, \
const struct di_rpc_device_info * : di_rpc_serialize_result_device_info, \
const struct di_drv_hl854x_ctx * : di_rpc_serialize_result_dncm_modem, \
struct di_drv_hl854x_ctx_tcp * : di_rpc_serialize_result_dncm_status, \
const struct di_drv_hl854x_ctx_tcp * : di_rpc_serialize_result_dncm_status, \
struct di_rpc_sensor_data_gps * : di_rpc_serialize_result_gps, \
const struct di_rpc_sensor_data_gps * : di_rpc_serialize_result_gps \
)(writer, result)
#define di_rpc_serialize_result_array(writer, result, count) \
_Generic((result), \
const struct di_rpc_data * : di_rpc_serialize_result_data_array, \
struct di_rpc_data * : di_rpc_serialize_result_data_array, \
const struct di_rpc_info * : di_rpc_serialize_result_info_array, \
struct di_rpc_info * : di_rpc_serialize_result_info_array, \
const struct di_rpc_config_info * : di_rpc_serialize_result_config_info_array, \
struct di_rpc_config_info * : di_rpc_serialize_result_config_info_array \
)(writer, result, count)
#else
} /* extern "C" */
static inline void di_rpc_serialize_item(mpack_writer_t *writer, const struct di_rpc_info *data)
{
di_rpc_serialize_item_info(writer, data);
}
static inline void di_rpc_serialize_item(mpack_writer_t *writer, const struct di_rpc_data *data)
{
di_rpc_serialize_item_data(writer, data);
}
static inline void di_rpc_serialize_item(mpack_writer_t *writer, const struct di_rpc_device_info *data)
{
di_rpc_serialize_item_device_info(writer, data);
}
static inline void di_rpc_serialize_item(mpack_writer_t *writer, const struct di_rpc_device_data *data)
{
di_rpc_serialize_item_device_data(writer, data);
}
static inline void di_rpc_serialize_item(mpack_writer_t *writer, const struct di_rpc_config_info *data)
{
di_rpc_serialize_item_config_info(writer, data);
}
static inline void di_rpc_serialize_item(mpack_writer_t *writer, const struct di_rpc_log *data)
{
di_rpc_serialize_item_log(writer, data);
}
static inline void di_rpc_serialize_item(mpack_writer_t *writer, const struct di_rpc_error *data)
{
di_rpc_serialize_item_error(writer, data);
}
static inline void di_rpc_serialize_result(mpack_writer_t *writer, const struct di_rpc_info *d)
{
di_rpc_serialize_result_info(writer, d);
}
static inline void di_rpc_serialize_result(mpack_writer_t *writer, const struct di_rpc_data *d)
{
di_rpc_serialize_result_data(writer, d);
}
static inline void di_rpc_serialize_result(mpack_writer_t *writer, const struct di_can_ctx *d)
{
di_rpc_serialize_result_can(writer, d);
}
static inline void di_rpc_serialize_result(mpack_writer_t *writer, const struct di_drv_hl854x_ctx *d)
{
di_rpc_serialize_result_dncm_modem(writer, d);
}
static inline void di_rpc_serialize_result(mpack_writer_t *writer, const struct di_drv_hl854x_ctx_tcp *d)
{
di_rpc_serialize_result_dncm_status(writer, d);
}
static inline void di_rpc_serialize_result(mpack_writer_t *writer, const struct di_rpc_sensor_data_gps *data)
{
di_rpc_serialize_result_gps(writer, data);
}
static inline void di_rpc_serialize_result_array(mpack_writer_t *w, const struct di_rpc_info *info, uint32_t count)
{
di_rpc_serialize_result_info_array(w, info, count);
}
static inline void di_rpc_serialize_result_array(mpack_writer_t *w, const struct di_rpc_data *data, uint32_t count)
{
di_rpc_serialize_result_data_array(w, data, count);
}
#endif
#endif /* INCLUDE_DI_CAN_SERIALIZE_H_ */