std::string can_signal_t::prefix_ = "messages";
-can_signal_t::can_signal_t(std::uint8_t message_set_id,
- std::uint8_t message_id,
+can_signal_t::can_signal_t(
std::string generic_name,
uint8_t bit_position,
uint8_t bit_size,
SignalDecoder decoder,
SignalEncoder encoder,
bool received)
- : message_set_id_{ message_set_id }
- , message_id_{ message_id }
- , generic_name_{ generic_name }
+ : parent_{nullptr},
+ generic_name_{ generic_name }
, bit_position_{ bit_position }
, bit_size_{ bit_size }
, factor_{ factor }
, last_value_{.0f}
{}
+/*can_signal_t::can_signal_t(const can_signal_t& b)
+ : parent_{b.parent_},
+ generic_name_{ b.generic_name_}
+ , bit_position_{ b.bit_position_}
+ , bit_size_{ b.bit_size_}
+ , factor_{ b.factor_ }
+ , offset_{ b.offset_}
+ , min_value_{b.min_value_}
+ , max_value_{b.max_value_}
+ , frequency_{b.frequency_}
+ , send_same_{b.send_same_}
+ , force_send_changed_{b.force_send_changed_}
+ , states_{b.states_}
+ , writable_{b.writable_}
+ , decoder_{b.decoder_}
+ , encoder_{b.encoder_}
+ , received_{b.received_}
+ , last_value_{b.last_value_}
+{}*/
+
utils::socketcan_bcm_t can_signal_t::get_socket() const
{
return socket_;
}
-const can_message_definition_t& can_signal_t::get_message() const
+can_message_definition_t* can_signal_t::get_message() const
{
- return configuration_t::instance().get_can_message_definition(message_set_id_, message_id_);
+ return parent_;
}
const std::string& can_signal_t::get_generic_name() const
return last_value_;
}
+void can_signal_t::set_parent(can_message_definition_t* parent)
+{
+ parent_ = parent;
+}
+
void can_signal_t::set_prefix(std::string val)
{
prefix_ = val;
// Make sure that socket has been opened.
if(! socket_)
socket_.open(
- get_message().get_bus_name());
+ get_message()->get_bus_name());
- uint32_t can_id = get_message().get_id();
+ uint32_t can_id = get_message()->get_id();
struct utils::simple_bcm_msg bcm_msg;
struct can_frame cfd;
memset(&cfd, 0, sizeof(cfd));
memset(&bcm_msg.msg_head, 0, sizeof(bcm_msg.msg_head));
float val = (float)(1 << bit_size_)-1;
- float freq = frequency_.frequency_to_period();
- if(freq <= 0)
- freq = 0.000001f;
+ struct timeval freq = frequency_.get_timeval_from_period();
bcm_msg.msg_head.opcode = RX_SETUP;
bcm_msg.msg_head.can_id = can_id;
- bcm_msg.msg_head.flags = SETTIMER;
- bcm_msg.msg_head.ival2.tv_sec = long(freq);
- bcm_msg.msg_head.ival2.tv_usec = (freq - (long)freq) * 1000000;
+ bcm_msg.msg_head.flags = SETTIMER|RX_NO_AUTOTIMER;
+ bcm_msg.msg_head.ival2.tv_sec = freq.tv_sec ;
+ bcm_msg.msg_head.ival2.tv_usec = freq.tv_usec;
bcm_msg.msg_head.nframes = 1;
bitfield_encode_float(val,
bit_position_,
return -1;
}
-can_message_format_t can_signal_t::read_socket()
+void can_signal_t::read_socket()
{
can_message_t msg;
can_bus_t& cbm = configuration_t::instance().get_can_bus_manager();
std::lock_guard<std::mutex> can_message_lock(cbm.get_can_message_mutex());
{ cbm.push_new_can_message(msg); }
cbm.get_new_can_message_cv().notify_one();
-
- return msg.get_format();
}
\ No newline at end of file