X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fcan-signals.cpp;h=c6a8ae9e56025cb7f415d136bdbb5b02f82cb766;hb=c8a9ae83b95b3105717c58e390ba216567937772;hp=8e3a1e6993b3f54093ddb63352dbb11189bcb92e;hpb=54595b88520c3caea40fac61ed79f2dcb57b7062;p=apps%2Fagl-service-can-low-level.git diff --git a/src/can-signals.cpp b/src/can-signals.cpp index 8e3a1e69..c6a8ae9e 100644 --- a/src/can-signals.cpp +++ b/src/can-signals.cpp @@ -15,56 +15,65 @@ * limitations under the License. */ -#include -#include -#include -#include "can-signals.h" +#include "can-signals.hpp" -/* Can signal event map making access to afb_event - * external to openxc existing structure. - */ -std::map subscribed_signals; -std::map ::iterator subscribed_signals_i; +const std::vector getSignals() +{ + return SIGNALS[MESSAGE_SET_ID]; +} -/* Find one or many signals based on its name or id -* passed through openxc_DynamicField. -*/ -void find_signals(openxc_DynamicField *key, std:vector *signals) +size_t getSignalCount() { - int n_signals, i; + return SIGNALS[MESSAGE_SET_ID].size(); +} - n_signals = getSignalCount(); +std::vector find_can_signals(openxc_DynamicField& key) +{ + std::vector signals; - switch(key->type): + switch(key.type) { case openxc_DynamicField_Type::openxc_DynamicField_Type_STRING: - for(i=0; i<=n_signals; i++) + for(const CanSignal& s : getSignals()) { - if(fnmatch(key->string_value, SIGNALS[i]->genericName) == 0) - signals.insert(&SIGNALS[i]); + if(fnmatch(key.string_value, s.genericName, FNM_CASEFOLD) == 0) + signals.push_back(s); } break; case openxc_DynamicField_Type::openxc_DynamicField_Type_NUM: - for(i=0; i<=n_signals; i++) + for(const CanSignal& s : getSignals()) { - CanMessageDefinition *msg_def = SIGNALS[i]->message; - if(msg_def->id == key->numeric_value) - signals.insert(&SIGNALS[i]) + CanMessageDefinition *msg_def = s.message; + if(msg_def->id == key.numeric_value) + signals.push_back(s); } break; default: - ERROR(interface, "find_signals: wrong openxc_DynamicField specified. Use openxc_DynamicField_Type_NUM or openxc_DynamicField_Type_STRING type only."); - return NULL; + ERROR(interface, "find_can_signals: wrong openxc_DynamicField specified. Use openxc_DynamicField_Type_NUM or openxc_DynamicField_Type_STRING type only."); + CanSignal cs; + ::memset(&cs, 0, sizeof(CanSignal)); + signals.push_back(cs); + return signals; break; } + return signals; } -CanSignal* getSignals() -{ - return &SIGNALS; -} - -int getSignalCount() -{ - return SIGNALS.size(); -} \ No newline at end of file + struct CanMessageDefinition* message; + const char* genericName; + uint8_t bitPosition; + uint8_t bitSize; + float factor; + float offset; + float minValue; + float maxValue; + FrequencyClock frequencyClock; + bool sendSame; + bool forceSendChanged; + const CanSignalState* states; + uint8_t stateCount; + bool writable; + SignalDecoder decoder; + SignalEncoder encoder; + bool received; + float lastValue; \ No newline at end of file