* limitations under the License.
*/
-Decoder::Decoder
-{
- decoded_value = { .has_type = false,
- .has_numeric_value = false,
- .has_boolean_value = false,
- .has_string_value = false };
-}
+#pragma once
-float Decoder::parseSignalBitfield(CanSignal* signal, const CanMessage* message)
+#include "can-decoder.hpp"
+
+float decoder_t::parseSignalBitfield(const CanSignal& signal, const CanMessage& message)
{
return bitfield_parse_float(message->data, CAN_MESSAGE_SIZE,
signal->bitPosition, signal->bitSize, signal->factor,
signal->offset);
}
-openxc_DynamicField Decoder::noopDecoder(CanSignal* signal,
- CanSignal* signals, int signalCount, float value, bool* send)
+openxc_DynamicField decoder_t::noopDecoder(const CanSignal& signal,
+ const CanSignal& signals, float value, bool* send)
{
decoded_value = { .has_type = true,
.type = openxc_DynamicField_Type_NUM,
return decoded_value;
}
-openxc_DynamicField Decoder::booleanDecoder(CanSignal* signal,
- CanSignal* signals, int signalCount, float value, bool* send)
+openxc_DynamicField decoder_t::booleanDecoder(const CanSignal& signal,
+ const CanSignal& signals, float value, bool* send)
{
decoded_value = { .has_type = true,
.type = openxc_DynamicField_Type_BOOL,
return decoded_value;
}
-openxc_DynamicField Decoder::ignoreDecoder(CanSignal* signal,
- CanSignal* signals, int signalCount, float value, bool* send)
+openxc_DynamicField decoder_t::ignoreDecoder(const CanSignal& signal,
+ const CanSignal& signals, float value, bool* send)
{
- *send = false;
+ if(send)
+ *send = false;
+
openxc_DynamicField decoded_value = {0};
return decoded_value;
}
-openxc_DynamicField Decoder::stateDecoder(CanSignal* signal,
- CanSignal* signals, int signalCount, float value, bool* send)
+openxc_DynamicField decoder_t::stateDecoder(const CanSignal& signal,
+ const CanSignal& signals, float value, bool* send)
{
openxc_DynamicField decoded_value = {0};
decoded_value.has_type = true;
const CanSignalState* signalState = lookupSignalState(value, signal);
if(signalState != NULL) {
- strcpy(decoded_value.string_value, signalState->name);
+ ::strcpy(decoded_value.string_value, signalState->name);
} else {
*send = false;
}
return decoded_value;
}
-openxc_DynamicField Decoder::decodeSignal(CanSignal* signal,
- float value, CanSignal* signals, int signalCount, bool* send)
+openxc_DynamicField decoder_t::decodeSignal(const CanSignal& signal,
+ float value, const std::vector<CanSignal>& signals, bool* send)
{
SignalDecoder decoder = signal->decoder == NULL ?
- noopDecoder : signal->decoder;
+ noopDecoder : signal->decoder;
openxc_DynamicField decoded_value = decoder(signal, signals,
- signalCount, value, send);
+ value, send);
return decoded_value;
}
-openxc_DynamicField Decoder::decodeSignal(CanSignal* signal,
- const CanMessage* message, CanSignal* signals, int signalCount,
- bool* send) {
+openxc_DynamicField decoder_t::decodeSignal(const CanSignal& signal,
+ const can_message_t& message, const std::vector<CanSignal>& signals, bool* send)
+{
float value = parseSignalBitfield(signal, message);
- return decodeSignal(signal, value, signals, signalCount, send);
+ return decodeSignal(signal, value, signals, send);
}
\ No newline at end of file