{return -1;}
rets++;
- AFB_DEBUG("signal: %s subscribed", sig->get_name().c_str());
+ AFB_DEBUG("%s Signal: %s %ssubscribed", sig->get_message()->is_fd() ? "FD": "", sig->get_name().c_str(), subscribe ? "":"un");
}
return rets;
}
/*
- * Copyright (C) 2015, 2016 "IoT.bzh"
+ * Copyright (C) 2015, 2018 "IoT.bzh"
* Author "Romain Forlot" <romain.forlot@iot.bzh>
*
* Licensed under the Apache License, Version 2.0 (the "License");
openxc_DynamicField decoded_message;
openxc_VehicleMessage vehicle_message;
- // First we have to found which can_signal_t it is
- std::shared_ptr<low_can_subscription_t> sig = s[subscription_id];
-
if( s.find(subscription_id) != s.end() && afb_event_is_valid(s[subscription_id]->get_event()))
{
bool send = true;
+ // First we have to found which can_signal_t it is
+ std::shared_ptr<low_can_subscription_t> sig = s[subscription_id];
+
decoded_message = decoder_t::translate_signal(*sig->get_can_signal(), can_message, &send);
openxc_SimpleMessage s_message = build_SimpleMessage(sig->get_name(), decoded_message);
vehicle_message = build_VehicleMessage(s_message, can_message.get_timestamp());
void diagnostic_manager_t::cancel_request(active_diagnostic_request_t* entry)
{
entry->get_socket().close();
+ if(entry->get_handle())
+ delete(entry->get_handle());
delete entry;
entry = nullptr;
}
const openxc_VehicleMessage build_VehicleMessage(active_diagnostic_request_t* request, const DiagnosticResponse& response, float parsed_value)
{
openxc_VehicleMessage message;
+ ::memset(&message, 0, sizeof(message));
application_t& app = application_t::instance();
message.has_type = true;
const openxc_VehicleMessage build_VehicleMessage(const openxc_SimpleMessage& message, uint64_t timestamp)
{
openxc_VehicleMessage v;
+ ::memset(&v, 0, sizeof(v));
v.has_type = true,
v.type = openxc_VehicleMessage_Type::openxc_VehicleMessage_Type_SIMPLE;
const openxc_VehicleMessage build_VehicleMessage(const openxc_SimpleMessage& message)
{
openxc_VehicleMessage v;
+ ::memset(&v, 0, sizeof(v));
v.has_type = true,
v.type = openxc_VehicleMessage_Type::openxc_VehicleMessage_Type_SIMPLE;
{
openxc_VehicleMessage v;
- ::memset(&v, 0, sizeof(openxc_VehicleMessage));
+ ::memset(&v, 0, sizeof(v));
return v;
}
{
struct utils::bcm_msg msg;
- ::memset(&msg, 0, sizeof(msg));
const struct sockaddr_can& addr = s.get_tx_address();
socklen_t addrlen = sizeof(addr);
struct ifreq ifr;
ssize_t nbytes = ::recvfrom(s.socket(), &msg, sizeof(msg), 0, (struct sockaddr*)&addr, &addrlen);
+ if(nbytes < 0)
+ {
+ AFB_ERROR("Can't read the next message from socket '%d'. '%s'", s.socket(), strerror(errno));
+ return s;
+ }
ifr.ifr_ifindex = addr.can_ifindex;
- ioctl(s.socket(), SIOCGIFNAME, &ifr);
+ if(ioctl(s.socket(), SIOCGIFNAME, &ifr) < 0)
+ {
+ AFB_ERROR("Can't read the interface name. '%s'", strerror(errno));
+ return s;
+ }
long unsigned int frame_size = nbytes-sizeof(struct bcm_msg_head);
AFB_DEBUG("Data available: %li bytes read. BCM head, opcode: %i, can_id: %i, nframes: %i", frame_size, msg.msg_head.opcode, msg.msg_head.can_id, msg.msg_head.nframes);