X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fcan-signals.cpp;h=ee682f9f944f595376d8371dfcdac4f39808079c;hb=836feaecd602e86ea6d954ae018a2d7bbc04aa7a;hp=13ff30b1e8e957e7cadcbc33c2dbe5ef4da42e66;hpb=c2a2b12c1ec1a4e17a3c95ceb8f010ce961a909e;p=apps%2Fagl-service-can-low-level.git diff --git a/src/can-signals.cpp b/src/can-signals.cpp index 13ff30b1..ee682f9f 100644 --- a/src/can-signals.cpp +++ b/src/can-signals.cpp @@ -15,26 +15,64 @@ * limitations under the License. */ -#include -#include "can-signals.h" +#include "can-signals.hpp" -bool match(const std::string &first, const std::string &second) -{ +/** + * @brief Dumb SIGNALS array. It is composed by CanMessageSet + * SIGNALS[MESSAGE_SET_ID][CanSignal] + */ +std::vector> SIGNALS { + {}// message set: example +}; +const std::vector getSignals() +{ + return SIGNALS[MESSAGE_SET_ID]; } -CanSignal* getSignals(std::string name) +size_t getSignalCount() { - int n_signals, i; - CanSignal ret_signals[]; + return SIGNALS[MESSAGE_SET_ID].size(); +} - n_signals = size(SIGNALS); +std::vector find_can_signals(const struct afb_binding_interface* interface, openxc_DynamicField& key) +{ + std::vector signals; - for(i=0; i<=n_signals; i++) + switch(key.type) { - if(SIGNALS[i].generic_name == name) - return &SIGNALS[i]; - i++; + case openxc_DynamicField_Type::openxc_DynamicField_Type_STRING: + for(const CanSignal& s : getSignals()) + { + if(fnmatch(key.string_value, s.genericName, FNM_CASEFOLD) == 0) + signals.push_back(s); + } + break; + case openxc_DynamicField_Type::openxc_DynamicField_Type_NUM: + for(const CanSignal& s : getSignals()) + { + CanMessageDefinition *msg_def = s.message; + if(msg_def->id == key.numeric_value) + signals.push_back(s); + } + break; + default: + 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 0; + return signals; } + +inline uint32_t get_CanSignal_id(const CanSignal& sig) +{ + return sig.message->id; +} + +const std::map get_subscribed_signals() +{ + return subscribed_signals; +} \ No newline at end of file