X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=CAN-binder%2Flow-can-binding%2Fcan%2Fcan-signals.cpp;h=324cecc748daeaba7c73aaf133f736ae355312ad;hb=eafde4cec4fc026444501ed3a096a12e6eb8fc90;hp=7726bfc167cf0d6d70120fea2f563f144e9ea3c3;hpb=ead72ec306b1a6e8327381a5aa3b5f100057edfc;p=apps%2Fagl-service-can-low-level.git diff --git a/CAN-binder/low-can-binding/can/can-signals.cpp b/CAN-binder/low-can-binding/can/can-signals.cpp index 7726bfc1..324cecc7 100644 --- a/CAN-binder/low-can-binding/can/can-signals.cpp +++ b/CAN-binder/low-can-binding/can/can-signals.cpp @@ -19,7 +19,7 @@ #include "can-signals.hpp" -#include "../binding/configuration.hpp" +#include "../binding/application.hpp" #include "../utils/signals.hpp" #include "can-decoder.hpp" #include "can-message.hpp" @@ -29,8 +29,7 @@ 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, @@ -46,9 +45,8 @@ can_signal_t::can_signal_t(std::uint8_t message_set_id, 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 } @@ -66,17 +64,37 @@ can_signal_t::can_signal_t(std::uint8_t message_set_id, , 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_; } -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 +const std::string can_signal_t::get_generic_name() const { return generic_name_; } @@ -86,7 +104,7 @@ const std::string can_signal_t::get_name() const return prefix_ + "." + generic_name_; } -const std::string& can_signal_t::get_prefix() const +const std::string can_signal_t::get_prefix() const { return prefix_; } @@ -177,6 +195,11 @@ float can_signal_t::get_last_value() 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; @@ -192,7 +215,12 @@ void can_signal_t::set_last_value(float val) last_value_ = val; } -/// @brief Create a RX_SETUP receive job using the BCM socket. +void can_signal_t::set_timestamp(uint64_t timestamp) +{ + frequency_.tick(timestamp); +} + +/// @brief Create a RX_SETUP receive job used by the BCM socket. /// /// @return 0 if ok else -1 int can_signal_t::create_rx_filter() @@ -200,9 +228,9 @@ int can_signal_t::create_rx_filter() // Make sure that socket has been opened. if(! socket_) socket_.open( - get_message().get_bus_name()); + get_message()->get_bus_device_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; @@ -210,15 +238,13 @@ int can_signal_t::create_rx_filter() 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|RX_NO_AUTOTIMER; - bcm_msg.msg_head.ival2.tv_sec = long(freq); - bcm_msg.msg_head.ival2.tv_usec = (freq - (long)freq) * 1000000; + 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_, @@ -234,13 +260,3 @@ int can_signal_t::create_rx_filter() return 0; return -1; } - -void can_signal_t::read_socket() -{ - can_message_t msg; - can_bus_t& cbm = configuration_t::instance().get_can_bus_manager(); - socket_ >> msg; - std::lock_guard can_message_lock(cbm.get_can_message_mutex()); - { cbm.push_new_can_message(msg); } - cbm.get_new_can_message_cv().notify_one(); -} \ No newline at end of file