1
0
Fork 0

refactor check-summing to be pointers and referances

This commit is contained in:
Kevin Matz 2023-04-27 09:10:15 -04:00
parent d80e4c6559
commit 176ddf1df6
2 changed files with 34 additions and 28 deletions

View File

@ -233,8 +233,8 @@ void Message::writeDiscBranch(std::vector<uint8_t> &data) const
data.push_back(0xaa); //!< Preamble separator byte
uint16_t sum = 0;
for ( const uint8_t& v : data_)
sum = addSum_(sum, v);
for (const auto &v : data_)
addSum_(sum, v);
std::vector<uint8_t> d = data_;
writeType<uint16_t>(d, sum);
@ -288,22 +288,22 @@ uint16_t Message::checksum() const
{
uint16_t sum = 0;
sum = addSum_(sum, SC_RDM);
sum = addSum_(sum, SC_SUB_MESSAGE);
sum = addSum_(sum, 24 + length());
sum = addSum_(sum, source.manufacturer);
sum = addSum_(sum, source.device);
sum = addSum_(sum, destination.manufacturer);
sum = addSum_(sum, destination.device);
sum = addSum_(sum, transaction);
sum = addSum_(sum, portID);
sum = addSum_(sum, messageCount);
sum = addSum_(sum, subDevice);
sum = addSum_(sum, commandClass);
sum = addSum_(sum, parameterId);
sum = addSum_(sum, length());
for (uint8_t val : data_)
sum = addSum_(sum, val);
addSum_(sum, SC_RDM);
addSum_(sum, SC_SUB_MESSAGE);
addSum_(sum, 24 + length());
addSum_(sum, source.manufacturer);
addSum_(sum, source.device);
addSum_(sum, destination.manufacturer);
addSum_(sum, destination.device);
addSum_(sum, transaction);
addSum_(sum, portID);
addSum_(sum, messageCount);
addSum_(sum, subDevice);
addSum_(sum, commandClass);
addSum_(sum, parameterId);
addSum_(sum, length());
for (const auto &val : data_)
addSum_(sum, val);
return sum;
}

View File

@ -124,23 +124,29 @@ public: // templates
data.push_back(raw[i]);
}
private: // templates
/**
* @brief addSum_
* @param sum
* @param val
*/
template<typename T>
uint16_t addSum_(uint16_t sum, const T val) const
static void addSum_(uint16_t &sum, const T &val)
{
uint16_t carry;
auto raw = reinterpret_cast<const uint8_t*>(&val);
auto raw = reinterpret_cast<const uint8_t*>(val);
for (int i = sizeof(T); --i >= 0; )
{
auto num = raw[i];
while (num != 0)
{
uint8_t num = raw[i];
while (num != 0)
{
carry = sum & num;
sum = sum ^ num;
num = carry << 1;
}
carry = sum & num;
sum = sum ^ num;
num = carry << 1;
}
return sum;
}
}
}; // struct Message