bool can_bus_t::apply_filter(const openxc_VehicleMessage& vehicle_message, std::shared_ptr<low_can_subscription_t> can_subscription)
{
+ bool send = false;
if(is_valid(vehicle_message))
{
- return true;
+ float min = std::isnan(can_subscription->get_min()) ? -INFINITY : can_subscription->get_min();
+ float max = std::isnan(can_subscription->get_max()) ? INFINITY : can_subscription->get_max();
+ double value = get_numerical_from_DynamicField(vehicle_message);
+ send = (value < min && value > max) ? false : true;
}
- return false;
+ return send;
}
/// @brief Will make the decoding operation on a classic CAN message. It will not
int subscription_id = can_message.get_sub_id();
openxc_DynamicField decoded_message;
openxc_VehicleMessage vehicle_message;
- application_t& conf = application_t::instance();
utils::signals_manager_t& sm = utils::signals_manager_t::instance();
{
if( s.find(subscription_id) != s.end() && afb_event_is_valid(s[subscription_id]->get_event()))
{
bool send = true;
- decoded_message = decoder_t::translateSignal(*sig->get_can_signal(), can_message, conf.get_all_can_signals(), &send);
+ decoded_message = decoder_t::translateSignal(*sig->get_can_signal(), can_message, application_t::instance().get_all_can_signals(), &send);
openxc_SimpleMessage s_message = build_SimpleMessage(sig->get_name(), decoded_message);
vehicle_message = build_VehicleMessage(s_message, can_message.get_timestamp());
jo = json_object_new_object();
jsonify_simple(s_message, jo);
if(afb_event_push(s[v_message.first]->get_event(), jo) == 0)
- on_no_clients(std::string(s_message.name));
+ {
+ if(v_message.second.has_diagnostic_response)
+ {on_no_clients(s[v_message.first], v_message.second.diagnostic_response.pid);}
+ on_no_clients(s[v_message.first]);
+ }
}
}
}