* limitations under the License.
*/
-#include <string>
-#include <vector>
+#include "can-signals.hpp"
+
#include <fnmatch.h>
-#include "can-signals.h"
-/* Can signal event map making access to afb_event
- * external to openxc existing structure.
+#include "low-can-binding.hpp"
+
+/**
+ * @brief Dumb SIGNALS array. It is composed by CanMessageSet
+ * SIGNALS[MESSAGE_SET_ID][CanSignal]
*/
-std::map <CanSignal, struct afb_event> subscribed_signals;
-std::map <CanSignal, struct afb_event>::iterator subscribed_signals_i;
+std::vector<std::vector<CanSignal>> SIGNALS {
+ {}// message set: example
+};
-/* Find one or many signals based on its name or id
-* passed through openxc_DynamicField.
-*/
-void find_can_signals(openxc_DynamicField *key, std:vector <CanSignal> *signals)
+const std::vector<CanSignal> getSignals()
{
- int n_signals, i;
+ return SIGNALS[MESSAGE_SET_ID];
+}
- n_signals = getSignalCount();
+size_t getSignalCount()
+{
+ return SIGNALS[MESSAGE_SET_ID].size();
+}
+
+std::vector<CanSignal> find_can_signals(openxc_DynamicField& key)
+{
+ std::vector<CanSignal> 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(binder_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()
+inline uint32_t get_CanSignal_id(const CanSignal& sig)
{
- return &SIGNALS;
+ return sig.message->id;
}
-int getSignalCount()
+const std::map<std::string, struct afb_event> get_subscribed_signals()
{
- return SIGNALS.size();
+ return subscribed_signals;
}
\ No newline at end of file