diff options
Diffstat (limited to 'lib/pbdrv/pb-serial.c')
-rw-r--r-- | lib/pbdrv/pb-serial.c | 109 |
1 files changed, 31 insertions, 78 deletions
diff --git a/lib/pbdrv/pb-serial.c b/lib/pbdrv/pb-serial.c index 7eb738b..e9806e0 100644 --- a/lib/pbdrv/pb-serial.c +++ b/lib/pbdrv/pb-serial.c @@ -4,23 +4,29 @@ #include "pb-types.h" void pb_ser_w(mpack_writer_t * writer, const pb_msg_t * msg) { - pb_ser_w_msg_header(writer, msg); + mpack_write_u8(writer, msg->type); + mpack_write_u8(writer, msg->action); + // TODO: if pb is compiled under the pb-mod target, place + // PB_MOD_ADDR in this field + mpack_write_u16(writer, msg->sender); + if (msg->msg == NULL) return; switch (msg->type) { - case PB_CMD_REQ_READ: return pb_ser_w_cmd_req_read(writer, msg); - case PB_CMD_RES_READ: return pb_ser_w_cmd_res_read(writer, msg); - case PB_CMD_REQ_MAGIC: return pb_ser_w_cmd_req_magic(writer, msg); - case PB_CMD_RES_MAGIC: return pb_ser_w_cmd_res_magic(writer, msg); + case PB_CMD_PROP: return pb_ser_w_cmd_prop(writer, msg); + // case PB_CMD_STATE: return pb_ser_w_cmd_state(writer, msg); + case PB_CMD_MAGIC: return pb_ser_w_cmd_magic(writer, msg); default: break; } } void pb_ser_r(mpack_reader_t * reader, pb_msg_t * msg) { - pb_ser_r_msg_header(reader, msg); + msg->type = mpack_expect_u8(reader); + msg->action = mpack_expect_u8(reader); + msg->sender = mpack_expect_u16(reader); + switch (msg->type) { - case PB_CMD_REQ_READ: return pb_ser_r_cmd_req_read(reader, msg); - case PB_CMD_RES_READ: return pb_ser_r_cmd_res_read(reader, msg); - case PB_CMD_REQ_MAGIC: return pb_ser_r_cmd_req_magic(reader, msg); - case PB_CMD_RES_MAGIC: return pb_ser_r_cmd_res_magic(reader, msg); + case PB_CMD_PROP: return pb_ser_r_cmd_prop(reader, msg); + // case PB_CMD_STATE: return pb_ser_r_cmd_state(reader, msg); + case PB_CMD_MAGIC: return pb_ser_r_cmd_magic(reader, msg); default: break; } } @@ -28,59 +34,30 @@ void pb_ser_free(pb_msg_t * msg) { if (msg == NULL) return; switch (msg->type) { - case PB_CMD_REQ_READ: return pb_ser_free_cmd_req_read(msg); - case PB_CMD_RES_READ: return pb_ser_free_cmd_res_read(msg); - case PB_CMD_REQ_MAGIC: return pb_ser_free_cmd_req_magic(msg); - case PB_CMD_RES_MAGIC: return pb_ser_free_cmd_res_magic(msg); + case PB_CMD_PROP: return pb_ser_free_cmd_prop(msg); + // case PB_CMD_STATE: return pb_ser_free_cmd_state(msg); + case PB_CMD_MAGIC: return pb_ser_free_cmd_magic(msg); default: break; } - pb_ser_free_msg_header(msg); } -void pb_ser_w_msg_header(mpack_writer_t * writer, const pb_msg_t * msg) { - mpack_write_u8(writer, msg->type); - // TODO: if pb is compiled under the pb-mod target, place - // PB_MOD_ADDR in this field - mpack_write_u16(writer, msg->sender); -} -void pb_ser_r_msg_header(mpack_reader_t * reader, pb_msg_t * msg) { - msg->type = mpack_expect_u8(reader); - msg->sender = mpack_expect_u16(reader); -} -void pb_ser_free_msg_header(pb_msg_t * msg) { } - -void pb_ser_w_cmd_req_read(mpack_writer_t * writer, const pb_msg_t * _msg) { - pb_cmd_req_read_t * msg = _msg->msg; - mpack_write_u8(writer, msg->propid); -} -void pb_ser_r_cmd_req_read(mpack_reader_t * reader, pb_msg_t * _msg) { - pb_cmd_req_read_t * msg = _msg->msg = malloc(sizeof(pb_cmd_req_read_t)); - msg->propid = mpack_expect_u8(reader); -} -void pb_ser_free_cmd_req_read(pb_msg_t * _msg) { - if (_msg->msg != NULL) { - free(_msg->msg); - _msg->msg = NULL; - } -} - -void pb_ser_w_cmd_res_read(mpack_writer_t * writer, const pb_msg_t * _msg) { - pb_cmd_res_read_t * msg = _msg->msg; +void pb_ser_w_cmd_prop(mpack_writer_t * writer, const pb_msg_t * _msg) { + pb_cmd_prop_t * msg = _msg->msg; mpack_write_u8(writer, msg->propid); mpack_write_bin(writer, (char *) msg->value, msg->_value_size); } -void pb_ser_r_cmd_res_read(mpack_reader_t * reader, pb_msg_t * _msg) { - pb_cmd_res_read_t * msg = _msg->msg = malloc(sizeof(pb_cmd_res_read_t)); +void pb_ser_r_cmd_prop(mpack_reader_t * reader, pb_msg_t * _msg) { + pb_cmd_prop_t * msg = _msg->msg = malloc(sizeof(pb_cmd_prop_t)); msg->propid = mpack_expect_u8(reader); msg->_value_size = mpack_expect_bin(reader); msg->value = (uint8_t *) mpack_read_bytes_alloc(reader, msg->_value_size); mpack_done_bin(reader); } -void pb_ser_free_cmd_res_read(pb_msg_t * _msg) { +void pb_ser_free_cmd_prop(pb_msg_t * _msg) { if (_msg->msg != NULL) { - pb_cmd_res_read_t * msg = _msg->msg; + pb_cmd_prop_t * msg = _msg->msg; if (msg->value != NULL) { MPACK_FREE(msg->value); msg->value = NULL; @@ -90,45 +67,21 @@ void pb_ser_free_cmd_res_read(pb_msg_t * _msg) { } } -void pb_ser_w_cmd_req_magic(mpack_writer_t * writer, const pb_msg_t * _msg) { - pb_cmd_req_magic_t * msg = _msg->msg; - - mpack_write_bin(writer, (char *) msg->magic, msg->_magic_size); -} -void pb_ser_r_cmd_req_magic(mpack_reader_t * reader, pb_msg_t * _msg) { - pb_cmd_req_magic_t * msg = _msg->msg = malloc(sizeof(pb_cmd_req_magic_t)); - - msg->_magic_size = mpack_expect_bin(reader); - msg->magic = mpack_read_bytes_alloc(reader, msg->_magic_size); - mpack_done_bin(reader); -} -void pb_ser_free_cmd_req_magic(pb_msg_t * _msg) { - if (_msg->msg != NULL) { - pb_cmd_req_magic_t * msg = _msg->msg; - if (msg->magic != NULL) { - MPACK_FREE(msg->magic); - msg->magic = NULL; - } - free(_msg->msg); - _msg->msg = NULL; - } -} - -void pb_ser_w_cmd_res_magic(mpack_writer_t * writer, const pb_msg_t * _msg) { - pb_cmd_res_magic_t * msg = _msg->msg; +void pb_ser_w_cmd_magic(mpack_writer_t * writer, const pb_msg_t * _msg) { + pb_cmd_magic_t * msg = _msg->msg; mpack_write_bin(writer, (char *) msg->magic, msg->_magic_size); } -void pb_ser_r_cmd_res_magic(mpack_reader_t * reader, pb_msg_t * _msg) { - pb_cmd_res_magic_t * msg = _msg->msg = malloc(sizeof(pb_cmd_res_magic_t)); +void pb_ser_r_cmd_magic(mpack_reader_t * reader, pb_msg_t * _msg) { + pb_cmd_magic_t * msg = _msg->msg = malloc(sizeof(pb_cmd_magic_t)); msg->_magic_size = mpack_expect_bin(reader); msg->magic = mpack_read_bytes_alloc(reader, msg->_magic_size); mpack_done_bin(reader); } -void pb_ser_free_cmd_res_magic(pb_msg_t * _msg) { +void pb_ser_free_cmd_magic(pb_msg_t * _msg) { if (_msg->msg != NULL) { - pb_cmd_res_magic_t * msg = _msg->msg; + pb_cmd_magic_t * msg = _msg->msg; if (msg->magic != NULL) { MPACK_FREE(msg->magic); msg->magic = NULL; |