Add gitlab issue/merge request templates
[apps/agl-service-can-low-level.git] / low-can-binding / can / message / message.cpp
1 /*
2  * Copyright (C) 2015, 2016 "IoT.bzh"
3  * Author "Romain Forlot" <romain.forlot@iot.bzh>
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *       http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18 #include "./message.hpp"
19
20 #include <cstring>
21
22 #include "../../binding/low-can-hat.hpp"
23
24 /**
25  * @brief Construct a new message t::message t object
26  *
27  */
28 message_t::message_t()
29         : maxdlen_{0},
30          length_{0},
31          flags_{INVALID_FLAG},
32          timestamp_{0},
33          sub_id_{-1}
34 {}
35
36 /**
37  * @brief Construct a new message t::message t object
38  *
39  * @param maxdlen The maxdlen of a message
40  * @param length The length of the message
41  * @param format The format of the message
42  * @param data The data vector of the message
43  * @param timestamp The timestamp of the message
44  */
45 message_t::message_t(uint32_t maxdlen,
46         uint32_t length,
47         uint32_t flags,
48         std::vector<uint8_t>& data,
49         uint64_t timestamp)
50         : maxdlen_{maxdlen},
51         length_{length},
52         flags_{flags},
53         data_{data},
54         timestamp_{timestamp},
55         sub_id_{-1}
56 {}
57
58 /**
59  * @brief Return the sub_id of the message
60  *
61  * @return int The sub_id of the message
62  */
63 int message_t::get_sub_id() const
64 {
65         return sub_id_;
66 }
67
68 ///
69 /// @brief Retrieve data_ member value.
70 ///
71 /// @return pointer to the first element
72 ///  of class member data_
73 ///
74 const uint8_t* message_t::get_data() const
75 {
76         return data_.data();
77 }
78
79 ///
80 /// @brief Retrieve data_ member whole vector
81 ///
82 /// @return the vector as is
83 ///
84 const std::vector<uint8_t> message_t::get_data_vector() const
85 {
86         return data_;
87 }
88
89 ///
90 /// @brief Retrieve length_ member value.
91 ///
92 /// @return length_ class member
93 ///
94 uint32_t message_t::get_length() const
95 {
96         return length_;
97 }
98
99 /**
100  * @brief Set data vector of the message
101  *
102  * @param data A vector of data
103  */
104 void message_t::set_data(std::vector<uint8_t> data)
105 {
106         data_ = data;
107 }
108
109 /**
110  * @brief Set sub_id of the message
111  *
112  * @param sub_id The sub_id to set
113  */
114 void message_t::set_sub_id(int sub_id)
115 {
116         sub_id_ = sub_id;
117 }
118
119 /**
120  * @brief Return the timestamp of the message
121  *
122  * @return uint64_t The timestamp
123  */
124 uint64_t message_t::get_timestamp() const
125 {
126         return timestamp_;
127 }
128
129 uint32_t message_t::get_flags()
130 {
131         return flags_;
132 }
133
134 void message_t::set_flags(uint32_t flags)
135 {
136         flags_ = flags_ | flags;
137 }
138
139 void message_t::erase_flags()
140 {
141         flags_ = 0;
142 }
143
144 uint32_t message_t::get_maxdlen()
145 {
146         return maxdlen_;
147 }
148
149 void message_t::set_maxdlen(uint32_t maxdlen)
150 {
151         maxdlen_ = maxdlen;
152 }
153
154 void message_t::set_length(uint32_t length)
155 {
156         length_ = length;
157 }
158
159 void message_t::frame_swap()
160 {
161         int i;
162         uint8_t *temp = (uint8_t*)alloca(length_);
163
164         for(i = 0; i < length_; i++)
165                 temp[i] = data_[length_ - i - 1];
166
167         memcpy(data_.data(), temp, length_);
168 }