if(sf.signals.front()->get_last_value_with_timestamp().first > 0 &&
std::difftime(std::time(nullptr), last_timestamp_in_s) < ENGINE_VALUE_TIMEOUT)
- {
engine_on = true;
- }
else
- {
AFB_NOTICE("is_engine_on: engine.speed CAN signal found, but engine seems off");
- }
}
else
{
* subsciptions.
*/
if(! request)
- {
return 0;
- }
// Event doesn't exist , so let's create it
if ((ret = can_subscription->subscribe(request)) < 0)
do_subscribe_unsubscribe(request, false);
}
-/*
-static int send_frame(struct canfd_frame& cfd, const std::string& bus_name, socket_type type)
-{
- if(bus_name.empty())
- {
- return -1;
- }
-
- std::map<std::string, std::shared_ptr<low_can_subscription_t> >& cd = application_t::instance().get_can_devices();
-
- if( cd.count(bus_name) == 0)
- {
- cd[bus_name] = std::make_shared<low_can_subscription_t>(low_can_subscription_t());
- }
-
-
- if(type == socket_type::BCM)
- {
- return low_can_subscription_t::tx_send(*cd[bus_name], cfd, bus_name);
- }
- else if(type == socket_type::J1939)
- {
- return low_can_subscription_t::j1939_send(*cd[bus_name], cfd, bus_name);
- }
- else{
- return -1;
- }
-}
-*/
static int send_message(message_t *message, const std::string& bus_name, uint32_t flags, event_filter_t &event_filter, std::shared_ptr<signal_t> signal)
{
if(bus_name.empty())
int low_can_subscription_t::subscribe(afb_req_t request)
{
if(! afb_event_is_valid(event_))
- {
if(set_event() < 0)
- {
return -1;
- }
- }
+
return afb_req_subscribe(request, event_);
}
const std::shared_ptr<diagnostic_message_t> low_can_subscription_t::get_diagnostic_message(uint32_t pid) const
{
for(const auto& diag: diagnostic_message_)
- {
if(diag->get_pid() == pid)
- {
return diag;
- }
- }
+
return nullptr;
}
const std::shared_ptr<diagnostic_message_t> low_can_subscription_t::get_diagnostic_message(const std::string& name) const
{
for(const auto& diag: diagnostic_message_)
- {
if(diag->get_name() == name)
- {
return diag;
- }
- }
+
return nullptr;
}
pgn_t pgn = J1939_NO_PGN;
std::shared_ptr<utils::socketcan_j1939_addressclaiming_t> socket = std::make_shared<utils::socketcan_j1939_addressclaiming_t>();
if(!bus_name.empty())
- {
ret = socket->open(bus_name, pgn);
- }
subscription.socket_ = socket;
subscription.index_ = (int)subscription.socket_->socket();
}
int low_can_subscription_t::create_rx_filter(std::shared_ptr<signal_t> sig)
{
if(!sig->get_message()->is_isotp() && !sig->get_message()->is_j1939())
- {
return low_can_subscription_t::create_rx_filter_can(*this, sig);
- }
#ifdef USE_FEATURE_ISOTP
else if(sig->get_message()->is_isotp())
- {
return low_can_subscription_t::create_rx_filter_isotp(*this, sig);
- }
#endif
#ifdef USE_FEATURE_J1939
else if(sig->get_message()->is_j1939())
- {
return low_can_subscription_t::create_rx_filter_j1939(*this, sig);
- }
#endif
- else
- {
- AFB_ERROR("Signal can't be j1939 and isotp");
- return -1;
- }
+ AFB_ERROR("Signal can't be j1939 and isotp");
+ return -1;
}
case sign_t::TWOS_COMPLEMENT:
//complement only until end_bit
data_signal[0] = ((data_signal[0] ^ mask) & mask);
- if(data_signal.size() > 1) {
- for(int i=1; i < data_signal.size(); i++) {
+ if(data_signal.size() > 1)
+ for(int i=1; i < data_signal.size(); i++)
data_signal[i] = data_signal[i] ^ 0xFF;
- }
- }
if(signal.get_sign() == sign_t::TWOS_COMPLEMENT)
data_signal[data_signal.size() - 1] = static_cast<uint8_t>(data_signal[data_signal.size() - 1] + 1);
break;
std::string ret_s = "";
openxc_DynamicField openxc_bytes = decode_bytes(signal,message,send);
if(!openxc_bytes.has_bytes_value)
- {
AFB_ERROR("Error no bytes value to translate to ascii");
- }
ret_s = converter_t::to_ascii(openxc_bytes.bytes_value,openxc_bytes.length_array);
openxc_DynamicField ret = build_DynamicField(ret_s);
return ret;
// Don't send if they is no changes
if ((signal.get_last_value() == value && !signal.get_send_same()) || !*send )
- {
*send = false;
- }
signal.set_last_value(value);
return decoded_value;
openxc_DynamicField decoded_value = build_DynamicField(value);
// Don't send if they is no changes
- if ((signal.get_last_value() == value && !signal.get_send_same()) || !*send )
- {
- *send = false;
- }
+ *send = (signal.get_last_value() == value && !signal.get_send_same()) || !*send ? false : true;
signal.set_last_value(value);
return decoded_value;
// Don't send if they is no changes
if ((signal.get_last_value() == value && !signal.get_send_same()) || !*send )
- {
*send = false;
- }
signal.set_last_value(value);
return decoded_value;
// Don't send if they is no changes
if ((signal.get_last_value() == value && !signal.get_send_same()) || !*send )
- {
*send = false;
- }
signal.set_last_value(value);
else if(field.has_bytes_value)
{
std::string s = converter_t::to_hex(field.bytes_value, field.length_array);
-
json_object_object_add(value, "value", json_object_new_string(s.c_str()));
}
}