rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
Public Member Functions | Static Private Member Functions | Private Attributes
MLG::Entries::Field Class Reference

#include <mlg_field.h>

Collaboration diagram for MLG::Entries::Field:
Collaboration graph
[legend]

Public Member Functions

template<typename TValue , int TMult, int TDiv>
LOG_FIELD_CONSTNESS_SPECIFIER_METHODS Field (const scaled_channel< TValue, TMult, TDiv > &toRead, const char *name, const char *units, int8_t digits, const char *category="none")
 
template<typename TValue , typename = typename std::enable_if<std::is_arithmetic_v<TValue>>::type>
LOG_FIELD_CONSTNESS_SPECIFIER_METHODS Field (TValue &toRead, const char *name, const char *units, int8_t digits, const char *category="none")
 
template<typename TValue >
LOG_FIELD_CONSTNESS_SPECIFIER_METHODS Field (TValue &toRead, const uint32_t bitsBlockOffset, const uint8_t bitNumber, const char *name, const char *units, const char *category="none")
 
constexpr size_t getSize () const
 
constexpr const void * getAddr () const
 
size_t writeHeader (Writer &outBuffer) const
 
size_t writeData (char *buffer, void *offset) const
 

Static Private Member Functions

static void memcpy_swapend (void *dest, const void *src, size_t const size, void *offset)
 
static void copyFloat (char *buffer, float value)
 

Private Attributes

const float m_multiplier
 
const void *const m_addr
 
const uint8_t m_type_id
 
const int8_t m_digits
 
const uint8_t m_size
 
const char *const m_name
 
const char *const m_units
 
const char *const m_category
 
const bool m_isBitField
 
const uint32_t m_bitsBlockOffset
 
const uint8_t m_bitNumber
 

Detailed Description

Definition at line 27 of file mlg_field.h.

Constructor & Destructor Documentation

◆ Field() [1/3]

template<typename TValue , int TMult, int TDiv>
LOG_FIELD_CONSTNESS_SPECIFIER_METHODS MLG::Entries::Field::Field ( const scaled_channel< TValue, TMult, TDiv > &  toRead,
const char name,
const char units,
int8_t  digits,
const char category = "none" 
)
inline

Definition at line 31 of file mlg_field.h.

33 : m_multiplier(float(TDiv) / TMult)
34 , m_addr(toRead.getFirstByteAddr())
35 , m_type_id(static_cast<std::underlying_type_t<Types::Field::Scalar>>(Types::Field::resolveBuiltInNumberType<TValue>()))
36 , m_digits(digits)
37 , m_size(Types::Field::sizeForType<Types::Field::resolveBuiltInNumberType<TValue>()>())
38 , m_name(name)
39 , m_units(units)
40 , m_category(category)
41 , m_isBitField(false)
43 , m_bitNumber(0)
44 {
45 }
const bool m_isBitField
Definition mlg_field.h:176
const void *const m_addr
Definition mlg_field.h:167
const uint8_t m_type_id
Definition mlg_field.h:168
const char *const m_category
Definition mlg_field.h:174
const char *const m_units
Definition mlg_field.h:173
const uint8_t m_size
Definition mlg_field.h:170
const uint32_t m_bitsBlockOffset
Definition mlg_field.h:177
const uint8_t m_bitNumber
Definition mlg_field.h:178
const char *const m_name
Definition mlg_field.h:172
const float m_multiplier
Definition mlg_field.h:166
const int8_t m_digits
Definition mlg_field.h:169
consteval size_t sizeForType()
Definition mlg_types.h:111

◆ Field() [2/3]

template<typename TValue , typename = typename std::enable_if<std::is_arithmetic_v<TValue>>::type>
LOG_FIELD_CONSTNESS_SPECIFIER_METHODS MLG::Entries::Field::Field ( TValue &  toRead,
const char name,
const char units,
int8_t  digits,
const char category = "none" 
)
inline

Definition at line 49 of file mlg_field.h.

51 : m_multiplier(1)
52 , m_addr(&toRead)
53 , m_type_id(static_cast<std::underlying_type_t<Types::Field::Scalar>>(Types::Field::resolveBuiltInNumberType<TValue>()))
54 , m_digits(digits)
55 , m_size(Types::Field::sizeForType<Types::Field::resolveBuiltInNumberType<TValue>()>())
56 , m_name(name)
57 , m_units(units)
58 , m_category(category)
59 , m_isBitField(false)
61 , m_bitNumber(0)
62 {
63 }

◆ Field() [3/3]

template<typename TValue >
LOG_FIELD_CONSTNESS_SPECIFIER_METHODS MLG::Entries::Field::Field ( TValue &  toRead,
const uint32_t  bitsBlockOffset,
const uint8_t  bitNumber,
const char name,
const char units,
const char category = "none" 
)
inline

Definition at line 67 of file mlg_field.h.

74 : m_multiplier(1)
75 , m_addr(&toRead)
76 , m_type_id(static_cast<std::underlying_type_t<Types::Field::Scalar>>(Types::Field::Scalar::U08))
77 , m_digits(0)
78 , m_size(1)
79 , m_name(name)
80 , m_units(units)
81 , m_category(category)
82 , m_isBitField(true)
83 , m_bitsBlockOffset(bitsBlockOffset)
84 , m_bitNumber(bitNumber)
85 {
86 }

Member Function Documentation

◆ copyFloat()

static void MLG::Entries::Field::copyFloat ( char buffer,
float  value 
)
inlinestaticprivate

Definition at line 162 of file mlg_field.h.

162 {
163 memcpy_swapend(buffer, &value, sizeof(float), nullptr);
164 }
static void memcpy_swapend(void *dest, const void *src, size_t const size, void *offset)
Definition mlg_field.h:153
static BigBufferHandle buffer

Referenced by writeHeader().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getAddr()

constexpr const void * MLG::Entries::Field::getAddr ( ) const
inlineconstexpr

Definition at line 89 of file mlg_field.h.

89{ return m_addr; }

Referenced by MLG::writeSdBlock().

Here is the caller graph for this function:

◆ getSize()

constexpr size_t MLG::Entries::Field::getSize ( ) const
inlineconstexpr

Definition at line 88 of file mlg_field.h.

88{ return m_size; }

Referenced by MLG::computeFieldsRecordLength().

Here is the caller graph for this function:

◆ memcpy_swapend()

static void MLG::Entries::Field::memcpy_swapend ( void *  dest,
const void *  src,
size_t const  size,
void *  offset 
)
inlinestaticprivate

Definition at line 153 of file mlg_field.h.

153 {
154 const char* src2 = reinterpret_cast<const char*>(src);
155 char* dest2 = reinterpret_cast<char*>(dest);
156 for (size_t i = 0; i < size; i++) {
157 // Endian swap - copy the end to the beginning
158 dest2[i] = src2[size - 1 - i + (uint64_t)offset];
159 }
160 }
composite packet size
uint16_t offset
Definition tunerstudio.h:0

Referenced by copyFloat(), and writeData().

Here is the caller graph for this function:

◆ writeData()

size_t MLG::Entries::Field::writeData ( char buffer,
void *  offset 
) const
inline

Definition at line 136 of file mlg_field.h.

136 {
137 if (m_isBitField) {
138 const char* const bitsBlockAddr = static_cast<const char*>(m_addr) + m_bitsBlockOffset;
139 const char* const byteWithBitAddr = bitsBlockAddr + m_bitNumber / 8;
140 unsigned char byteWithBit = 0;
141 memcpy_swapend(&byteWithBit, byteWithBitAddr, m_size, offset);
142 const uint8_t bitNumberInByte = m_bitNumber % 8;
143 buffer[0] = static_cast<char>(static_cast<bool>(byteWithBit & (1 << bitNumberInByte)));
144 } else {
146 }
147
148 return m_size;
149 }

Referenced by MLG::writeSdBlock().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ writeHeader()

size_t MLG::Entries::Field::writeHeader ( Writer outBuffer) const
inline

Definition at line 93 of file mlg_field.h.

93 {
95
96 // Offset 0, length 1 = type
97 buffer[0] = static_cast<char>(m_type_id);
98
99 // Offset 1, length 34 = name
100 strncpy(&buffer[1], m_name, 34);
101
102 // Offset 35, length 10 = units
103 strncpy(&buffer[35], m_units, 10);
104
105 // Offset 45, length 1 = Display style
106 // value 0 -> floating point number
107 buffer[45] = 0;
108
109 // Offset 46, length 4 = Scale
111
112 // Offset 50, length 4 = shift before scaling (always 0)
113 copyFloat(buffer + 50, 0);
114
115 // Offset 54, size 1 = digits to display (signed int)
116 buffer[54] = m_digits;
117
118 // Offset 55, (optional) category string
119 if (m_category) {
120 size_t categoryLength = strlen(m_category);
121 size_t lengthAfterCategory = 34 - categoryLength;
122 memcpy(&buffer[55], m_category, categoryLength);
123 memset(&buffer[55] + categoryLength, 0, lengthAfterCategory);
124 } else {
125 memset(&buffer[55], 0, 34);
126 }
127
128 // Total size = 89
130
132 }
static void copyFloat(char *buffer, float value)
Definition mlg_field.h:162
constexpr size_t DescriptorSize
Definition mlg_types.h:71
virtual size_t write(const char *buffer, size_t count)=0

Referenced by MLG::writeFileHeader().

Here is the call graph for this function:
Here is the caller graph for this function:

Field Documentation

◆ m_addr

const void* const MLG::Entries::Field::m_addr
private

Definition at line 167 of file mlg_field.h.

Referenced by getAddr(), and writeData().

◆ m_bitNumber

const uint8_t MLG::Entries::Field::m_bitNumber
private

Definition at line 178 of file mlg_field.h.

Referenced by writeData().

◆ m_bitsBlockOffset

const uint32_t MLG::Entries::Field::m_bitsBlockOffset
private

Definition at line 177 of file mlg_field.h.

Referenced by writeData().

◆ m_category

const char* const MLG::Entries::Field::m_category
private

Definition at line 174 of file mlg_field.h.

Referenced by writeHeader().

◆ m_digits

const int8_t MLG::Entries::Field::m_digits
private

Definition at line 169 of file mlg_field.h.

Referenced by writeHeader().

◆ m_isBitField

const bool MLG::Entries::Field::m_isBitField
private

Definition at line 176 of file mlg_field.h.

Referenced by writeData().

◆ m_multiplier

const float MLG::Entries::Field::m_multiplier
private

Definition at line 166 of file mlg_field.h.

Referenced by writeHeader().

◆ m_name

const char* const MLG::Entries::Field::m_name
private

Definition at line 172 of file mlg_field.h.

Referenced by writeHeader().

◆ m_size

const uint8_t MLG::Entries::Field::m_size
private

Definition at line 170 of file mlg_field.h.

Referenced by getSize(), and writeData().

◆ m_type_id

const uint8_t MLG::Entries::Field::m_type_id
private

Definition at line 168 of file mlg_field.h.

Referenced by writeHeader().

◆ m_units

const char* const MLG::Entries::Field::m_units
private

Definition at line 173 of file mlg_field.h.

Referenced by writeHeader().


The documentation for this class was generated from the following file: