aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/4-Usage.md7
-rw-r--r--low-can-binding/binding/low-can-hat.hpp10
-rw-r--r--low-can-binding/can/signals.cpp2
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;