diff options
author | Romain Forlot <romain.forlot@iot.bzh> | 2019-07-01 18:55:23 +0200 |
---|---|---|
committer | Romain Forlot <romain.forlot@iot.bzh> | 2019-07-03 09:37:05 +0200 |
commit | 3977705505069b4210b29e8188cdd35813c65886 (patch) | |
tree | 91664b21e4cb83e91b2288ff7e2e720171a80362 | |
parent | 105d083165b263851edfcd3ffb7f64acb888d14b (diff) |
signals.cpp: Make an insensitive string comparisonhalibut_8.0.2halibut_8.0.1halibut_8.0.0halibut_7.99.3halibut/8.0.2halibut/8.0.1halibut/8.0.0halibut/7.99.38.0.28.0.18.0.07.99.3
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 <romain.forlot@iot.bzh>
-rw-r--r-- | docs/4-Usage.md | 7 | ||||
-rw-r--r-- | low-can-binding/binding/low-can-hat.hpp | 10 | ||||
-rw-r--r-- | low-can-binding/can/signals.cpp | 2 |
3 files changed, 15 insertions, 4 deletions
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 <string> #include <memory> #include <systemd/sd-event.h> +#include <cctype> #include <afb/afb-binding> @@ -31,3 +32,12 @@ class low_can_subscription_t; void on_no_clients(std::shared_ptr<low_can_subscription_t> can_subscription, std::map<int, std::shared_ptr<low_can_subscription_t> >& s); void on_no_clients(std::shared_ptr<low_can_subscription_t> can_subscription, uint32_t pid, std::map<int, std::shared_ptr<low_can_subscription_t> >& 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; |