diff options
author | Loek Le Blansch <loek@pipeframe.xyz> | 2024-06-13 17:46:26 +0200 |
---|---|---|
committer | Loek Le Blansch <loek@pipeframe.xyz> | 2024-06-13 17:46:26 +0200 |
commit | 557b995f9641f7cb7a0566eefac7e576debec61a (patch) | |
tree | 1b2b0966f6b1671e5accfe0d980ee1f370d21b58 /lib/pbdrv/pb-write.c | |
parent | da57aaed1295d72d8d840c69c0e08c0bcab46aee (diff) |
really WIP driver (de)serialization
Diffstat (limited to 'lib/pbdrv/pb-write.c')
-rw-r--r-- | lib/pbdrv/pb-write.c | 182 |
1 files changed, 86 insertions, 96 deletions
diff --git a/lib/pbdrv/pb-write.c b/lib/pbdrv/pb-write.c index 1a3f24e..445dd0b 100644 --- a/lib/pbdrv/pb-write.c +++ b/lib/pbdrv/pb-write.c @@ -1,107 +1,97 @@ #include <mpack.h> #include "pb-write.h" +#include "pb-serial.h" -typedef struct { +pbdrv_buf_t pbdrv_write_msg(const pb_msg_t * msg) { + pbdrv_buf_t buf = { 0 }; mpack_writer_t writer; - pbdrv_buf_t buf; -} pbdrv_writer_t; -static void pbdrv_write_init(pbdrv_writer_t * writer) { - mpack_writer_init_growable(&writer->writer, &writer->buf.data, &writer->buf.size); -} - -static pbdrv_buf_t pbdrv_write_finish(pbdrv_writer_t * writer) { - if (mpack_writer_destroy(&writer->writer) != mpack_ok) { - writer->buf.data = NULL; - writer->buf.size = 0; - } - return writer->buf; -} - -static void pbdrv_write_msg_header(pbdrv_writer_t * writer, pb_msg_header_t header) { - mpack_write_u8(&writer->writer, header.type); - // TODO: if pbdrv is compiled under the pbdrv-mod target, place - // PBDRV_MOD_ADDR in this field - mpack_write_u16(&writer->writer, header.sender); -} - -pbdrv_buf_t pbdrv_write_cmd_req_read(pb_cmd_req_read_t data) { - data.header.type = PB_CMD_REQ_READ; - pbdrv_writer_t writer; - pbdrv_write_init(&writer); + mpack_writer_init_growable(&writer, &buf.data, &buf.size); - pbdrv_write_msg_header(&writer, data.header); - mpack_write_u8(&writer.writer, data.propid); + pbdrv_serialize(&writer, msg); - return pbdrv_write_finish(&writer); + mpack_writer_destroy(&writer); + return buf; } -pbdrv_buf_t pbdrv_write_cmd_res_read(pb_cmd_res_read_t data) { - data.header.type = PB_CMD_RES_READ; - pbdrv_writer_t writer; - pbdrv_write_init(&writer); - - pbdrv_write_msg_header(&writer, data.header); - mpack_write_u8(&writer.writer, data.propid); - mpack_write_bin(&writer.writer, (char *) data.value, data._value_size); - - return pbdrv_write_finish(&writer); -} - -pbdrv_buf_t pbdrv_write_cmd_req_write(pb_cmd_req_write_t data) { - data.header.type = PB_CMD_REQ_WRITE; - pbdrv_writer_t writer; - pbdrv_write_init(&writer); - - pbdrv_write_msg_header(&writer, data.header); - mpack_write_u8(&writer.writer, data.propid); - mpack_write_bin(&writer.writer, (char *) data.value, data._value_size); - - return pbdrv_write_finish(&writer); -} - -pbdrv_buf_t pbdrv_write_cmd_req_state(pb_cmd_req_state_t data) { - data.header.type = PB_CMD_REQ_STATE; - pbdrv_writer_t writer; - pbdrv_write_init(&writer); - - pbdrv_write_msg_header(&writer, data.header); - mpack_write_u8(&writer.writer, data.state); - - return pbdrv_write_finish(&writer); -} - -pbdrv_buf_t pbdrv_write_cmd_res_state(pb_cmd_res_state_t data) { - data.header.type = PB_CMD_RES_STATE; - pbdrv_writer_t writer; - pbdrv_write_init(&writer); - - pbdrv_write_msg_header(&writer, data.header); - mpack_write_u8(&writer.writer, data.state); - - return pbdrv_write_finish(&writer); -} - -pbdrv_buf_t pbdrv_write_cmd_req_set_state(pb_cmd_req_set_state_t data) { - data.header.type = PB_CMD_REQ_SET_STATE; - pbdrv_writer_t writer; - pbdrv_write_init(&writer); - - pbdrv_write_msg_header(&writer, data.header); - mpack_write_u8(&writer.writer, data.state); - - return pbdrv_write_finish(&writer); -} - -pbdrv_buf_t pbdrv_write_cmd_magic(pb_cmd_magic_t data) { - data.header.type = PB_CMD_MAGIC; - pbdrv_writer_t writer; - pbdrv_write_init(&writer); - - pbdrv_write_msg_header(&writer, data.header); - mpack_write_bin(&writer.writer, data.magic, data._magic_size); - - return pbdrv_write_finish(&writer); -} +// +// pbdrv_buf_t pbdrv_write_cmd_req_read(pb_cmd_req_read_t data) { +// data.header.type = PB_CMD_REQ_READ; +// pbdrv_writer_t writer; +// pbdrv_write_init(&writer); +// +// pbdrv_write_msg_header(&writer, data.header); +// mpack_write_u8(&writer.writer, data.propid); +// +// return pbdrv_write_finish(&writer); +// } +// +// pbdrv_buf_t pbdrv_write_cmd_res_read(pb_cmd_res_read_t data) { +// data.header.type = PB_CMD_RES_READ; +// pbdrv_writer_t writer; +// pbdrv_write_init(&writer); +// +// pbdrv_write_msg_header(&writer, data.header); +// mpack_write_u8(&writer.writer, data.propid); +// mpack_write_bin(&writer.writer, (char *) data.value, data._value_size); +// +// return pbdrv_write_finish(&writer); +// } +// +// pbdrv_buf_t pbdrv_write_cmd_req_write(pb_cmd_req_write_t data) { +// data.header.type = PB_CMD_REQ_WRITE; +// pbdrv_writer_t writer; +// pbdrv_write_init(&writer); +// +// pbdrv_write_msg_header(&writer, data.header); +// mpack_write_u8(&writer.writer, data.propid); +// mpack_write_bin(&writer.writer, (char *) data.value, data._value_size); +// +// return pbdrv_write_finish(&writer); +// } +// +// pbdrv_buf_t pbdrv_write_cmd_req_state(pb_cmd_req_state_t data) { +// data.header.type = PB_CMD_REQ_STATE; +// pbdrv_writer_t writer; +// pbdrv_write_init(&writer); +// +// pbdrv_write_msg_header(&writer, data.header); +// mpack_write_u8(&writer.writer, data.state); +// +// return pbdrv_write_finish(&writer); +// } +// +// pbdrv_buf_t pbdrv_write_cmd_res_state(pb_cmd_res_state_t data) { +// data.header.type = PB_CMD_RES_STATE; +// pbdrv_writer_t writer; +// pbdrv_write_init(&writer); +// +// pbdrv_write_msg_header(&writer, data.header); +// mpack_write_u8(&writer.writer, data.state); +// +// return pbdrv_write_finish(&writer); +// } +// +// pbdrv_buf_t pbdrv_write_cmd_req_set_state(pb_cmd_req_set_state_t data) { +// data.header.type = PB_CMD_REQ_SET_STATE; +// pbdrv_writer_t writer; +// pbdrv_write_init(&writer); +// +// pbdrv_write_msg_header(&writer, data.header); +// mpack_write_u8(&writer.writer, data.state); +// +// return pbdrv_write_finish(&writer); +// } +// +// pbdrv_buf_t pbdrv_write_cmd_magic(pb_cmd_magic_t data) { +// data.header.type = PB_CMD_MAGIC; +// pbdrv_writer_t writer; +// pbdrv_write_init(&writer); +// +// pbdrv_write_msg_header(&writer, data.header); +// mpack_write_bin(&writer.writer, data.magic, data._magic_size); +// +// return pbdrv_write_finish(&writer); +// } |