brmesh/components/brmesh/whitening.cpp
Jonas Rabenstein d10ec6546d cleanup
2025-12-23 10:10:00 +01:00

41 lines
1.1 KiB
C++

#include "whitening.h"
#include "esphome/core/log.h"
#include "esphome/core/helpers.h"
namespace {
constexpr auto TAG = "brmesh.whitening";
} //
namespace esphome {
namespace brmesh {
Whitening::State
Whitening::use(bool encode, const LUT &lut, State state, std::span<uint8_t> bytes)
{
const bool log = (bytes.size() > 1 || bytes[0] != 0x00);
if (log)
ESP_LOGV(TAG, "%s: input: %s", encode ? "encode" : "decode",
format_hex_pretty(&bytes[0], bytes.size()).c_str());
else
ESP_LOGVV(TAG, "%s: input: %s", encode ? "encode" : "decode",
format_hex_pretty(&bytes[0], bytes.size()).c_str());
for (auto &byte:bytes) {
auto &next = lut[state];
byte = next.lut[byte];
state = next.state;
}
if (log)
ESP_LOGV(TAG, "%s: output: %s", encode ? "encode" : "decode",
format_hex_pretty(&bytes[0], bytes.size()).c_str());
else
ESP_LOGVV(TAG, "%s: output: %s", encode ? "encode" : "decode",
format_hex_pretty(&bytes[0], bytes.size()).c_str());
return state;
}
} // brmesh
} // esphome