2 * Copyright (C) 2015, 2016 "IoT.bzh"
3 * Author "Romain Forlot" <romain.forlot@iot.bzh>
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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
20 #include "signals.hpp"
22 #include "../binding/application.hpp"
23 #include "../utils/signals.hpp"
24 #include "can-decoder.hpp"
25 #include "message/can-message.hpp"
26 #include "can-bus.hpp"
27 #include "../diagnostic/diagnostic-message.hpp"
28 #include "canutil/write.h"
30 std::string signal_t::prefix_ = "messages";
33 std::string generic_name,
40 frequency_clock_t frequency,
42 bool force_send_changed,
43 std::map<uint8_t, std::string> states,
45 signal_decoder decoder,
46 signal_encoder encoder,
48 std::pair<bool,int> multiplex,
53 generic_name_{ generic_name }
54 , bit_position_{ bit_position }
55 , bit_size_{ bit_size }
58 , min_value_{min_value}
59 , max_value_{max_value}
60 , frequency_{frequency}
61 , send_same_{send_same}
62 , force_send_changed_{force_send_changed}
69 , multiplex_{multiplex}
70 , is_big_endian_{is_big_endian}
71 , is_signed_{is_signed}
76 std::string generic_name,
83 frequency_clock_t frequency,
85 bool force_send_changed,
86 std::map<uint8_t, std::string> states,
88 signal_decoder decoder,
89 signal_encoder encoder,
91 : generic_name_{ generic_name }
92 , bit_position_{ bit_position }
93 , bit_size_{ bit_size }
96 , min_value_{min_value}
97 , max_value_{max_value}
98 , frequency_{frequency}
99 , send_same_{send_same}
100 , force_send_changed_{force_send_changed}
102 , writable_{writable}
105 , received_{received}
108 std::shared_ptr<message_definition_t> signal_t::get_message() const
113 const std::string signal_t::get_generic_name() const
115 return generic_name_;
118 const std::string signal_t::get_name() const
120 return prefix_ + "." + generic_name_;
123 uint8_t signal_t::get_bit_position() const
125 return bit_position_;
128 uint8_t signal_t::get_bit_size() const
133 float signal_t::get_factor() const
138 float signal_t::get_offset() const
143 frequency_clock_t& signal_t::get_frequency()
148 bool signal_t::get_send_same() const
153 const std::string signal_t::get_states(uint8_t value)
155 if ( states_.count(value) > 0 )
156 return states_[value];
157 return std::string();
160 uint64_t signal_t::get_states(const std::string& value) const
163 for( const auto& state: states_)
165 if(state.second == value)
167 ret = (uint64_t)state.first;
174 bool signal_t::get_writable() const
179 signal_decoder& signal_t::get_decoder()
184 signal_encoder& signal_t::get_encoder()
189 bool signal_t::get_received() const
194 float signal_t::get_last_value() const
199 std::pair<float, uint64_t> signal_t::get_last_value_with_timestamp() const
201 return std::make_pair(last_value_, frequency_.get_last_tick());
204 void signal_t::set_parent(std::shared_ptr<message_definition_t> parent)
209 void signal_t::set_received(bool r)
214 void signal_t::set_last_value(float val)
219 void signal_t::set_timestamp(uint64_t timestamp)
221 frequency_.tick(timestamp);
224 std::pair<bool,int> signal_t::get_multiplex() const
229 bool signal_t::get_is_big_endian() const
231 return is_big_endian_;
234 bool signal_t::get_is_signed() const
239 const std::string signal_t::get_unit() const