Ported messages from gear racing controller
[apps/native/gear-racing-car.git] / src / messages / message_ack.c
1 /*
2  * Copyright (c) 2018 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Flora License, Version 1.1 (the License);
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://floralicense.org/license/
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an AS IS BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #include "messages/message_ack.h"
18 #include "messages/macros.h"
19
20 static int _message_ack_serialze_vcall(message_t *msg, writer_t *writer)
21 {
22         message_ack_t *ack_msg = container_of(msg, message_ack_t, base);
23         return message_ack_serialize(ack_msg, writer);
24 }
25
26 static int _message_ack_deserialize_vcall(message_t *msg, reader_t *reader)
27 {
28         message_ack_t *ack_msg = container_of(msg, message_ack_t, base);
29         return message_ack_deserialize(ack_msg, reader);
30 }
31
32 static void _message_ack_destroy_vcall(message_t *msg)
33 {
34         message_ack_t *ack_msg = container_of(msg, message_ack_t, base);
35         message_ack_destroy(ack_msg);
36 }
37
38 void message_ack_init(message_ack_t *message)
39 {
40         message_base_init(&message->base);
41
42         message_set_type(&message->base, MESSAGE_ACK);
43
44         message->base.vtable.serialize = _message_ack_serialze_vcall;
45         message->base.vtable.deserialize = _message_ack_deserialize_vcall;
46         message->base.vtable.destroy = _message_ack_destroy_vcall;
47
48         message->ack_serial = -1; // ack_serial not set
49 }
50
51 void message_ack_init_from_request(message_ack_t *message, message_t *request)
52 {
53         message_ack_init(message);
54
55         message->ack_serial = message_get_serial(request);
56 }
57
58 void message_ack_destroy(message_ack_t *message)
59 {
60         message_base_destroy(&message->base);
61 }
62
63 int64_t message_ack_get_ack_serial(message_ack_t *message)
64 {
65         return message->ack_serial;
66 }
67
68 int message_ack_deserialize(message_ack_t *message, reader_t *reader)
69 {
70         int err = 0;
71
72         err |= message_base_deserialize(&message->base, reader);
73         err |= reader_read_int64(reader, &message->ack_serial);
74
75         return err;
76 }
77
78 int message_ack_serialize(message_ack_t *message, writer_t *writer)
79 {
80         int err = 0;
81
82         err |= message_base_serialize(&message->base, writer);
83         err |= writer_write_int64(writer, message->ack_serial);
84
85         return err;
86 }