summaryrefslogtreecommitdiffstats
path: root/src/can-decoder.hpp
diff options
context:
space:
mode:
authorRomain Forlot <romain.forlot@iot.bzh>2017-02-27 20:25:52 +0100
committerRomain Forlot <romain.forlot@iot.bzh>2017-02-27 20:25:52 +0100
commit06acf7a42da0ab605d9dac3c4c0c66f426a06d17 (patch)
treebf31e8870354bc88b1c217e29cfd69205e837dce /src/can-decoder.hpp
parentf06cda1411cc087ca551e6e9bffa9cb2dc79b4ca (diff)
Changed the decoding function
Change-Id: Ib27fb13d4fb7959509400a3c2eff2859d1ce9c2b Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
Diffstat (limited to 'src/can-decoder.hpp')
-rw-r--r--src/can-decoder.hpp29
1 files changed, 23 insertions, 6 deletions
diff --git a/src/can-decoder.hpp b/src/can-decoder.hpp
index 7f02d61..ac96730 100644
--- a/src/can-decoder.hpp
+++ b/src/can-decoder.hpp
@@ -53,7 +53,7 @@ class decoder_t
* the signal. If an equivalent isn't found, send is sent to false and the
* return value is undefined.
*/
- openxc_DynamicField stateDecoder(const CanSignal& signal, const CanSignal& signals,
+ static openxc_DynamicField stateDecoder(const CanSignal& signal, const CanSignal& signals,
float value, bool* send);
/* Public: Coerces a numerical value to a boolean.
@@ -72,7 +72,7 @@ class decoder_t
* is 0.0, otherwise true. The 'send' argument will not be modified as this
* decoder always succeeds.
*/
- openxc_DynamicField booleanDecoder(const CanSignal& signal, const CanSignal& signals,
+ static openxc_DynamicField booleanDecoder(const CanSignal& signal, const CanSignal& signals,
float value, bool* send);
/* Public: Update the metadata for a signal and the newly received value.
@@ -91,7 +91,7 @@ class decoder_t
*
* The return value is undefined.
*/
- openxc_DynamicField ignoreDecoder(const CanSignal& signal, const CanSignal& signals,
+ static openxc_DynamicField ignoreDecoder(const CanSignal& signal, const CanSignal& signals,
float value, bool* send);
/* Public: Wrap a raw CAN signal value in a DynamicField without modification.
@@ -110,9 +110,26 @@ class decoder_t
* its numeric value. The 'send' argument will not be modified as this decoder
* always succeeds.
*/
- openxc_DynamicField noopDecoder(const CanSignal& signal, const CanSignal& signals,
- float value, bool* send);
+ static openxc_DynamicField noopDecoder(const CanSignal& signal, const CanSignal& signals,
+ float value);
+
+ /* Public: Parse a signal from a CAN message, apply any required transforations
+ * to get a human readable value and public the result to the pipeline.
+ *
+ * If the CanSignal has a non-NULL 'decoder' field, the raw CAN signal value
+ * will be passed to the decoder before publishing.
+ *
+ * signal - The details of the signal to decode and forward.
+ * message - The received CAN message that should contain this signal.
+ * signals - an array of all active signals.
+ *
+ * The decoder returns an openxc_DynamicField, which may contain a number,
+ * string or boolean.
+ */
+ openxc_DynamicField translateSignal(CanSignal& signal, can_message_t& message,
+ const std::vector<CanSignal>& signals);
+
/* Public: Parse a signal from a CAN message and apply any required
* transforations to get a human readable value.
*
@@ -130,7 +147,7 @@ class decoder_t
* string or boolean. If 'send' is false, the return value is undefined.
*/
openxc_DynamicField decodeSignal(const CanSignal& signal, const can_message_t& message,
- const std::vector<CanSignal>& signals, bool* send);
+ const std::vector<CanSignal>& signals);
/* Public: Decode a transformed, human readable value from an raw CAN signal
* already parsed from a CAN message.