20 lines
700 B
C++
20 lines
700 B
C++
// SPDX-License-Identifier: MIT
|
|
#ifndef SIGNAL_LAYOUT_H
|
|
#define SIGNAL_LAYOUT_H
|
|
|
|
#include <cstdint>
|
|
|
|
/** Linear coordinate in the signal's bit order, widened before arithmetic. */
|
|
inline std::uint64_t SignalStartCoordinate(std::uint32_t startBit, bool littleEndian) {
|
|
return littleEndian ? std::uint64_t(startBit)
|
|
: std::uint64_t(startBit / 8U) * 8U + 7U - startBit % 8U;
|
|
}
|
|
|
|
inline bool IsValidSignalLayout(std::uint32_t startBit, std::uint32_t length,
|
|
bool littleEndian, std::uint8_t dlc) {
|
|
return length >= 1U && length <= 64U &&
|
|
SignalStartCoordinate(startBit, littleEndian) + length <= std::uint64_t(dlc) * 8U;
|
|
}
|
|
|
|
#endif
|