// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 #pragma once // Includes #include "SignalTypes.h" #include "TimeTypes.h" #include <cstdint> namespace Aws { namespace IoTFleetWise { namespace DataManagement { using namespace Aws::IoTFleetWise::Platform::Linux; union CANPhysicalValue { double doubleVal; uint64_t uint64Val; int64_t int64Val; }; struct CANPhysicalValueType { CANPhysicalValue signalValue; SignalType signalType; template <typename T> CANPhysicalValueType( T val, SignalType type ) : signalType( type ) { switch ( signalType ) { case SignalType::UINT64: signalValue.uint64Val = static_cast<uint64_t>( val ); break; case SignalType::INT64: signalValue.int64Val = static_cast<int64_t>( val ); break; default: signalValue.doubleVal = static_cast<double>( val ); } } SignalType getType() const { return signalType; } }; struct CANDecodedSignal { CANDecodedSignal( uint32_t signalID, int64_t rawValue, CANPhysicalValueType physicalValue, SignalType signalTypeIn ) : mSignalID( signalID ) , mRawValue( rawValue ) , mPhysicalValue( physicalValue ) , mSignalType( signalTypeIn ) { } uint32_t mSignalID; int64_t mRawValue; CANPhysicalValueType mPhysicalValue; SignalType mSignalType{ SignalType::DOUBLE }; }; /** * @brief Cloud does not send information about each CAN message, so we set every CAN message size to the maximum. */ static constexpr uint8_t MAX_CAN_FRAME_BYTE_SIZE = 64; } // namespace DataManagement } // namespace IoTFleetWise } // namespace Aws