#include "../obd2/obd2-signals.hpp"
#include "../low-can-binding.hpp"
+std::string can_signal_t::prefix_ = "messages.";
+
can_message_definition_t& can_signal_t::get_message()
{
return message_;
private:
can_message_definition_t message_; /*!< message_ - The message this signal is a part of. */
std::string generic_name_; /*!< generic_name_ - The name of the signal to be output.*/
- std::string prefix_ = "messages."; /*!< prefix_ - generic_name_ will be prefixed with it. It has to reflect the used protocol.
+ static std::string prefix_; /*!< prefix_ - generic_name_ will be prefixed with it. It has to reflect the used protocol.
* which make easier to sort message when the come in.*/
uint8_t bit_position_; /*!< bitPosition_ - The starting bit of the signal in its CAN message (assuming
* non-inverted bit numbering, i.e. the most significant bit of
"NM"
};
+std::string obd2_signal_t::prefix_ = "diagnostic_messages.";
+
obd2_signal_t::obd2_signal_t(uint8_t pid, const char* generic_name, const int min, const int max, enum UNIT unit, int frequency, bool supported)
: pid_{pid}, generic_name_{generic_name}, min_{min}, max_{max}, unit_{unit}, frequency_{frequency}, supported_{supported}
{
return prefix_ + "." + generic_name_;
}
-const std::string& obd2_signal_t::get_prefix() const
+const std::string& obd2_signal_t::get_prefix()
{
return prefix_;
}
return frequency_;
}
-void obd2_signal_t::set_prefix(std::string val)
+void obd2_signal_t::set_prefix(const std::string& val)
{
prefix_ = val;
}
*
* @return true if name began with obd2 else false.
*/
-bool obd2_signal_t::is_obd2_signal(const char *name)
+bool obd2_signal_t::is_obd2_signal(const std::string& name)
{
- if(fnmatch("obd2.*", name, FNM_CASEFOLD) == 0)
+ if(name.find_first_of(prefix_.c_str(), 0, prefix_.size()))
return true;
return false;
}
private:
uint8_t pid_; /*!< pid - The 1 byte PID.*/
std::string generic_name_; /*!< generic_name_ - A human readable name to use for this PID when published.*/
- std::string prefix_ = "diagnostic_messages."; /*!< prefix_ - generic_name_ will be prefixed with it. It has to reflect the used protocol.
+ static std::string prefix_; /*!< prefix_ - generic_name_ will be prefixed with it. It has to reflect the used protocol.
* which make easier to sort message when the come in.*/
int min_; /*!< min_ - Minimum value that can take this pid */
int max_; /*!< max_ - Maximum value that can take this pid */
uint32_t get_pid();
const std::string& get_generic_name() const;
const std::string get_name() const;
- const std::string& get_prefix() const;
+ static const std::string& get_prefix();
int get_frequency() const;
- void set_prefix(std::string val);
+ static void set_prefix(const std::string& val);
const DiagnosticRequest build_diagnostic_request();
bool is_obd2_response(can_message_t can_message);
bool is_obd2_request(DiagnosticRequest *request);
- bool is_obd2_signal(const char *name);
+ static bool is_obd2_signal(const std::string& name);
static float decode_obd2_response(const DiagnosticResponse* response, float parsedPayload);
};
\ No newline at end of file
//TODO: Implement way to dynamically call the right function no matter
// how much signals types we have.
- /// const std::string& can_prefix = configuration_t::instance().get_can_signals().front().get_prefix();
- const std::string& obd2_prefix = configuration_t::instance().get_obd2_signals().front().get_prefix();
for(const std::string& sig : signals)
{
int ret;
- if (sig.find_first_of(obd2_prefix.c_str(), 0, obd2_prefix.size()))
+ if (obd2_signal_t::is_obd2_signal(sig))
{
std::vector<obd2_signal_t*> found;
configuration_t::instance().find_obd2_signals(build_DynamicField(sig), found);