From: Romain Forlot Date: Mon, 1 Jul 2019 16:55:23 +0000 (+0200) Subject: signals.cpp: Make an insensitive string comparison X-Git-Tag: halibut/8.0.2 X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=commitdiff_plain;ds=inline;h=refs%2Ftags%2Fhalibut%2F8.0.2;hp=105d083165b263851edfcd3ffb7f64acb888d14b;p=apps%2Fagl-service-can-low-level.git signals.cpp: Make an insensitive string comparison When sending a CAN signal make an case-insensitive comparison as it isn't necessary to be strict on that, so case insensitive if fine. Update the documentation accordingly. Bug-AGL: SPEC-2582 Change-Id: I998b64cdd9a381da3da582aeba42ab726fff1259 Signed-off-by: Romain Forlot --- diff --git a/docs/4-Usage.md b/docs/4-Usage.md index 61ca0689..cdd8d586 100644 --- a/docs/4-Usage.md +++ b/docs/4-Usage.md @@ -216,7 +216,8 @@ low-can subscribe { "event": "doors.driver.open" } ON-REPLY 1:low-can/subscribe: {"jtype":"afb-reply","request":{"status":"success","uuid":"a18fd375-b6fa-4c0e-a1d4-9d3955975ae8"}} ``` -Subscription and unsubscription can take wildcard in their _event_ value. +Subscription and unsubscription can take wildcard in their _event_ value and are +**case-insensitive**. To receive all doors events : @@ -317,9 +318,9 @@ ON-REPLY 2:low-can/list: {"response":["messages.hvac.fan.speed","messages.hvac.t ## Write on CAN buses -A new capability as been introcuded to be able to write on handled CAN buses. Two modes could be used for that which is either specifying the CAN bus and a -*RAW* CAN message either by specifying a defined signal and its value. +*RAW* CAN message either by specifying a defined signal, **case-insensitively**, +and its value. Examples: diff --git a/low-can-binding/binding/low-can-hat.hpp b/low-can-binding/binding/low-can-hat.hpp index e21b9cd0..1662ce04 100644 --- a/low-can-binding/binding/low-can-hat.hpp +++ b/low-can-binding/binding/low-can-hat.hpp @@ -23,6 +23,7 @@ #include #include #include +#include #include @@ -31,3 +32,12 @@ class low_can_subscription_t; void on_no_clients(std::shared_ptr can_subscription, std::map >& s); void on_no_clients(std::shared_ptr can_subscription, uint32_t pid, std::map >& s); int read_message(sd_event_source *s, int fd, uint32_t revents, void *userdata); + +inline bool caseInsCharCompareN(char a, char b) { + return(toupper(a) == toupper(b)); +} + +inline bool caseInsCompare(const std::string& s1, const std::string& s2) { + return((s1.size() == s2.size()) && + equal(s1.begin(), s1.end(), s2.begin(), caseInsCharCompareN)); +} diff --git a/low-can-binding/can/signals.cpp b/low-can-binding/can/signals.cpp index b47001bd..3d263431 100644 --- a/low-can-binding/can/signals.cpp +++ b/low-can-binding/can/signals.cpp @@ -161,7 +161,7 @@ uint64_t signal_t::get_states(const std::string& value) const uint64_t ret = -1; for( const auto& state: states_) { - if(state.second == value) + if(caseInsCompare(state.second, value)) { ret = (uint64_t)state.first; break;