X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fcan_decode_message.cpp;h=a28fa180e6beb28431d6f4fe4dff918e76c43cdb;hb=c8a9ae83b95b3105717c58e390ba216567937772;hp=ba822026ee877bd8692aabf92f99354010101e43;hpb=c2a2b12c1ec1a4e17a3c95ceb8f010ce961a909e;p=apps%2Fagl-service-can-low-level.git diff --git a/src/can_decode_message.cpp b/src/can_decode_message.cpp index ba822026..a28fa180 100644 --- a/src/can_decode_message.cpp +++ b/src/can_decode_message.cpp @@ -19,22 +19,51 @@ #include #include #include +#include #include -#include "can-utils.h" +#include "can-utils.hpp" +#include "can-decoder.hpp" #include "openxc.pb.h" +#include "openxc-utils.hpp" -void can_decode_message(CanBus_c *can_bus) +void can_decode_message(can_bus_t &can_bus) { - CanMessage_c can_message; + can_message_t can_message; + std:vector signals; + std:vector ::iterator signals_i; + openxc_VehicleMessage vehicle_message; + openxc_DynamicField search_key, ret; + bool send = true; + + decoder_t decoder(); while(true) { - if(! can_bus->can_message_q.empty()) + if(can_message = can_bus.next_can_message()) { - can_message = can_bus->can_message_q.front(); - can_bus->can_message_q.pop(); + /* First we have to found which CanSignal is */ + search_key = build_DynamicField(openxc_DynamicField_Type::openxc_DynamicField_Type_NUM, (double)can_message.get_id()) + + signals = find_can_signals(search_key); + + /* Decoding the message ! Don't kill the messenger ! */ + for(const auto& sig : signals) + { + subscribed_signals_i = subscribed_signals.find(sig.genericName); + + if(subscribed_signals_i != subscribed_signals.end() && + afb_event_is_valid(subscribed_signals_i->second)) + { + ret = decoder.decodeSignal(sig, can_message, getSignals(), &send); + + s_message = build_SimpleMessage(sig.genericName, ret); + + vehicle_message = build_VehicleMessage_with_SimpleMessage(openxc_DynamicField_Type::openxc_DynamicField_Type_NUM, s_message); + vehicle_message_q.push(vehicle_message); + } + } } } -} \ No newline at end of file +}