1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-06-01 13:47:01 -04:00

Meshtastic: some Sonar fixes

This commit is contained in:
f4exb
2026-03-27 21:17:46 +01:00
parent 66dfc3a0c8
commit efa232db88
12 changed files with 292 additions and 398 deletions
+118 -118
View File
@@ -120,13 +120,13 @@ struct RegionBand
bool wideLora;
};
static const uint8_t kDefaultChannelKey[16] = {
const std::array<uint8_t, 16> kDefaultChannelKey = {
0xD4, 0xF1, 0xBB, 0x3A, 0x20, 0x29, 0x07, 0x59,
0xF0, 0xBC, 0xFF, 0xAB, 0xCF, 0x4E, 0x69, 0x01
};
// Port numbers from meshtastic/portnums.proto (high value subset is accepted as numeric fallback).
static QMap<QString, uint32_t> makePortMap()
QMap<QString, uint32_t> makePortMap()
{
QMap<QString, uint32_t> m;
m.insert("UNKNOWN_APP", 0);
@@ -160,9 +160,9 @@ static QMap<QString, uint32_t> makePortMap()
return m;
}
static const QMap<QString, uint32_t> kPortMap = makePortMap();
const QMap<QString, uint32_t> kPortMap = makePortMap();
static const RegionBand kRegionBands[] = {
const std::array<RegionBand, 26> kRegionBands = {{
{"US", 902.0, 928.0, 0.0, false},
{"EU_433", 433.0, 434.0, 0.0, false},
{"EU_868", 869.4, 869.65, 0.0, false},
@@ -189,11 +189,11 @@ static const RegionBand kRegionBands[] = {
{"NP_865", 865.0, 868.0, 0.0, false},
{"BR_902", 902.0, 907.5, 0.0, false},
{"LORA_24", 2400.0, 2483.5, 0.0, true}
};
}};
static const int kRegionBandsCount = static_cast<int>(sizeof(kRegionBands) / sizeof(kRegionBands[0]));
const int kRegionBandsCount = static_cast<int>(kRegionBands.size());
static QString trimQuotes(const QString& s)
QString trimQuotes(const QString& s)
{
QString out = s.trimmed();
if ((out.startsWith('"') && out.endsWith('"')) || (out.startsWith('\'') && out.endsWith('\''))) {
@@ -202,7 +202,7 @@ static QString trimQuotes(const QString& s)
return out;
}
static bool parseBool(const QString& s, bool& out)
bool parseBool(const QString& s, bool& out)
{
const QString v = s.trimmed().toLower();
@@ -219,7 +219,7 @@ static bool parseBool(const QString& s, bool& out)
return false;
}
static bool parseUInt(const QString& s, uint64_t& out)
bool parseUInt(const QString& s, uint64_t& out)
{
QString v = s.trimmed();
v.remove('_');
@@ -236,7 +236,7 @@ static bool parseUInt(const QString& s, uint64_t& out)
return ok;
}
static bool parseDouble(const QString& s, double& out)
bool parseDouble(const QString& s, double& out)
{
QString v = s.trimmed();
v.remove('_');
@@ -245,7 +245,7 @@ static bool parseDouble(const QString& s, double& out)
return ok;
}
static QString normalizeToken(const QString& value)
QString normalizeToken(const QString& value)
{
QString v = value.trimmed().toUpper();
v.replace('-', '_');
@@ -253,7 +253,7 @@ static QString normalizeToken(const QString& value)
return v;
}
static QByteArray normalizeHex(const QString& s)
QByteArray normalizeHex(const QString& s)
{
QByteArray out;
const QByteArray in = s.toLatin1();
@@ -269,7 +269,7 @@ static QByteArray normalizeHex(const QString& s)
return out;
}
static bool parseHexBytes(const QString& s, QByteArray& out)
bool parseHexBytes(const QString& s, QByteArray& out)
{
QByteArray hex = normalizeHex(s);
@@ -281,7 +281,7 @@ static bool parseHexBytes(const QString& s, QByteArray& out)
return !out.isEmpty();
}
static QByteArray expandSimpleKey(unsigned int simple)
QByteArray expandSimpleKey(unsigned int simple)
{
if (simple == 0) {
return QByteArray();
@@ -291,17 +291,17 @@ static QByteArray expandSimpleKey(unsigned int simple)
return QByteArray();
}
QByteArray key(reinterpret_cast<const char*>(kDefaultChannelKey), sizeof(kDefaultChannelKey));
QByteArray key(reinterpret_cast<const char*>(kDefaultChannelKey.data()), static_cast<int>(kDefaultChannelKey.size()));
if (simple > 1) {
const int offset = static_cast<int>(simple - 1);
const auto offset = static_cast<int>(simple - 1);
key[15] = static_cast<char>(static_cast<uint8_t>(kDefaultChannelKey[15] + offset));
}
return key;
}
static bool parseKeySpec(const QString& rawSpec, QByteArray& key, QString& label)
bool parseKeySpec(const QString& rawSpec, QByteArray& key, QString& label)
{
QString spec = rawSpec.trimmed();
const QString lower = spec.toLower();
@@ -385,7 +385,7 @@ static bool parseKeySpec(const QString& rawSpec, QByteArray& key, QString& label
return false;
}
static uint32_t readU32LE(const char* p)
uint32_t readU32LE(const char* p)
{
return static_cast<uint32_t>(static_cast<uint8_t>(p[0]))
| (static_cast<uint32_t>(static_cast<uint8_t>(p[1])) << 8)
@@ -393,7 +393,7 @@ static uint32_t readU32LE(const char* p)
| (static_cast<uint32_t>(static_cast<uint8_t>(p[3])) << 24);
}
static void writeU32LE(char* p, uint32_t v)
void writeU32LE(char* p, uint32_t v)
{
p[0] = static_cast<char>(v & 0xFF);
p[1] = static_cast<char>((v >> 8) & 0xFF);
@@ -401,7 +401,7 @@ static void writeU32LE(char* p, uint32_t v)
p[3] = static_cast<char>((v >> 24) & 0xFF);
}
static bool parseHeader(const QByteArray& frame, Header& h)
bool parseHeader(const QByteArray& frame, Header& h)
{
if (frame.size() < kHeaderLength) {
return false;
@@ -418,7 +418,7 @@ static bool parseHeader(const QByteArray& frame, Header& h)
return true;
}
static QByteArray encodeHeader(const Header& h)
QByteArray encodeHeader(const Header& h)
{
QByteArray out(kHeaderLength, 0);
char* p = out.data();
@@ -432,14 +432,14 @@ static QByteArray encodeHeader(const Header& h)
return out;
}
static bool readVarint(const QByteArray& bytes, int& pos, uint64_t& value)
bool readVarint(const QByteArray& bytes, int& pos, uint64_t& value)
{
value = 0;
int shift = 0;
while (pos < bytes.size() && shift <= 63)
{
const uint8_t b = static_cast<uint8_t>(bytes[pos++]);
const auto b = static_cast<uint8_t>(bytes[pos++]);
value |= static_cast<uint64_t>(b & 0x7F) << shift;
if ((b & 0x80) == 0) {
@@ -452,7 +452,7 @@ static bool readVarint(const QByteArray& bytes, int& pos, uint64_t& value)
return false;
}
static bool readFixed32(const QByteArray& bytes, int& pos, uint32_t& value)
bool readFixed32(const QByteArray& bytes, int& pos, uint32_t& value)
{
if ((pos + 4) > bytes.size()) {
return false;
@@ -463,7 +463,7 @@ static bool readFixed32(const QByteArray& bytes, int& pos, uint32_t& value)
return true;
}
static bool readFixed64(const QByteArray& bytes, int& pos, uint64_t& value)
bool readFixed64(const QByteArray& bytes, int& pos, uint64_t& value)
{
if ((pos + 8) > bytes.size()) {
return false;
@@ -482,7 +482,7 @@ static bool readFixed64(const QByteArray& bytes, int& pos, uint64_t& value)
return true;
}
static bool skipField(const QByteArray& bytes, int& pos, uint32_t wireType)
bool skipField(const QByteArray& bytes, int& pos, uint32_t wireType)
{
switch (wireType)
{
@@ -518,7 +518,7 @@ static bool skipField(const QByteArray& bytes, int& pos, uint32_t wireType)
}
}
static bool parseData(const QByteArray& bytes, DataFields& d)
bool parseData(const QByteArray& bytes, DataFields& d)
{
int pos = 0;
@@ -530,8 +530,8 @@ static bool parseData(const QByteArray& bytes, DataFields& d)
return false;
}
const uint32_t field = static_cast<uint32_t>(rawTag >> 3);
const uint32_t wire = static_cast<uint32_t>(rawTag & 0x7);
const auto field = static_cast<uint32_t>(rawTag >> 3);
const auto wire = static_cast<uint32_t>(rawTag & 0x7);
switch (field)
{
@@ -683,11 +683,11 @@ static bool parseData(const QByteArray& bytes, DataFields& d)
return d.hasPortnum;
}
static void writeVarint(QByteArray& out, uint64_t value)
void writeVarint(QByteArray& out, uint64_t value)
{
while (true)
{
uint8_t b = static_cast<uint8_t>(value & 0x7F);
auto b = static_cast<uint8_t>(value & 0x7F);
value >>= 7;
if (value != 0) {
@@ -700,20 +700,20 @@ static void writeVarint(QByteArray& out, uint64_t value)
}
}
static void writeTag(QByteArray& out, uint32_t field, uint32_t wire)
void writeTag(QByteArray& out, uint32_t field, uint32_t wire)
{
const uint64_t tag = (static_cast<uint64_t>(field) << 3) | static_cast<uint64_t>(wire);
writeVarint(out, tag);
}
static void writeFixed32(QByteArray& out, uint32_t v)
void writeFixed32(QByteArray& out, uint32_t v)
{
char b[4];
writeU32LE(b, v);
out.append(b, 4);
}
static QByteArray encodeData(const DataFields& d)
QByteArray encodeData(const DataFields& d)
{
QByteArray out;
@@ -764,7 +764,7 @@ static QByteArray encodeData(const DataFields& d)
return out;
}
static uint8_t xorHash(const QByteArray& bytes)
uint8_t xorHash(const QByteArray& bytes)
{
uint8_t h = 0;
@@ -775,7 +775,7 @@ static uint8_t xorHash(const QByteArray& bytes)
return h;
}
static uint8_t generateChannelHash(const QString& channelName, const QByteArray& key)
uint8_t generateChannelHash(const QString& channelName, const QByteArray& key)
{
QByteArray name = channelName.toUtf8();
@@ -806,24 +806,24 @@ public:
void encryptBlock(const uint8_t in[16], uint8_t out[16]) const
{
uint8_t state[16];
memcpy(state, in, 16);
std::array<uint8_t, 16> state;
memcpy(state.data(), in, 16);
addRoundKey(state, 0);
addRoundKey(state.data(), 0);
for (int round = 1; round < m_nr; ++round)
{
subBytes(state);
shiftRows(state);
mixColumns(state);
addRoundKey(state, round);
subBytes(state.data());
shiftRows(state.data());
mixColumns(state.data());
addRoundKey(state.data(), round);
}
subBytes(state);
shiftRows(state);
addRoundKey(state, m_nr);
subBytes(state.data());
shiftRows(state.data());
addRoundKey(state.data(), m_nr);
memcpy(out, state, 16);
memcpy(out, state.data(), 16);
}
private:
@@ -857,7 +857,7 @@ private:
static uint8_t sub(uint8_t x)
{
static const uint8_t sbox[256] = {
static const std::array<uint8_t, 256> sbox = {
0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5,0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76,
0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0,0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0,
0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc,0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15,
@@ -950,7 +950,7 @@ private:
void keyExpansion(const uint8_t* key)
{
static const uint8_t rcon[11] = {0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x1B,0x36};
static const std::array<uint8_t, 11> rcon = {0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x1B,0x36};
const int words = 4 * (m_nr + 1);
std::vector<uint32_t> w(words, 0);
@@ -992,7 +992,7 @@ enum class CounterMode
LittleEndian
};
static void incrementCounter4(uint8_t counter[16], CounterMode mode)
void incrementCounter4(uint8_t counter[16], CounterMode mode)
{
if (mode == CounterMode::BigEndian)
{
@@ -1016,7 +1016,7 @@ static void incrementCounter4(uint8_t counter[16], CounterMode mode)
}
}
static void initNonce(uint8_t nonce[16], uint32_t fromNode, uint32_t packetId)
void initNonce(uint8_t nonce[16], uint32_t fromNode, uint32_t packetId)
{
memset(nonce, 0, 16);
@@ -1025,7 +1025,7 @@ static void initNonce(uint8_t nonce[16], uint32_t fromNode, uint32_t packetId)
memcpy(nonce + sizeof(packetId64), &fromNode, sizeof(fromNode));
}
static QByteArray aesCtrCrypt(const QByteArray& in, const QByteArray& key, uint32_t fromNode, uint32_t packetId, CounterMode mode)
QByteArray aesCtrCrypt(const QByteArray& in, const QByteArray& key, uint32_t fromNode, uint32_t packetId, CounterMode mode)
{
QByteArray out(in);
@@ -1039,14 +1039,14 @@ static QByteArray aesCtrCrypt(const QByteArray& in, const QByteArray& key, uint3
return QByteArray();
}
uint8_t counter[16];
initNonce(counter, fromNode, packetId);
std::array<uint8_t, 16> counter;
initNonce(counter.data(), fromNode, packetId);
int pos = 0;
while (pos < out.size())
{
uint8_t keystream[16];
aes.encryptBlock(counter, keystream);
std::array<uint8_t, 16> keystream;
aes.encryptBlock(counter.data(), keystream.data());
const int remain = std::min<int>(16, static_cast<int>(out.size() - pos));
for (int i = 0; i < remain; ++i) {
@@ -1054,18 +1054,18 @@ static QByteArray aesCtrCrypt(const QByteArray& in, const QByteArray& key, uint3
}
pos += remain;
incrementCounter4(counter, mode);
incrementCounter4(counter.data(), mode);
}
return out;
}
static QString formatNode(uint32_t node)
QString formatNode(uint32_t node)
{
return QString("0x%1").arg(node, 8, 16, QChar('0'));
}
static QString payloadToText(const QByteArray& payload)
QString payloadToText(const QByteArray& payload)
{
QString s = QString::fromUtf8(payload);
@@ -1076,7 +1076,7 @@ static QString payloadToText(const QByteArray& payload)
return s;
}
static QString portToName(uint32_t p)
QString portToName(uint32_t p)
{
for (auto it = kPortMap.constBegin(); it != kPortMap.constEnd(); ++it)
{
@@ -1088,7 +1088,7 @@ static QString portToName(uint32_t p)
return QString("PORT_%1").arg(p);
}
static bool addKeyEntry(
bool addKeyEntry(
std::vector<KeyEntry>& keys,
const QString& channelName,
const QString& keySpec,
@@ -1120,7 +1120,7 @@ static bool addKeyEntry(
return true;
}
static bool parseKeyListEntry(
bool parseKeyListEntry(
const QString& rawEntry,
QString& channelName,
QString& keySpec,
@@ -1174,7 +1174,7 @@ static bool parseKeyListEntry(
return true;
}
static bool parseKeySpecList(
bool parseKeySpecList(
const QString& rawList,
std::vector<KeyEntry>& keys,
QString* error = nullptr,
@@ -1232,7 +1232,7 @@ static bool parseKeySpecList(
return true;
}
static std::vector<KeyEntry> defaultKeysFromEnv()
std::vector<KeyEntry> defaultKeysFromEnv()
{
std::vector<KeyEntry> keys;
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
@@ -1260,7 +1260,7 @@ static std::vector<KeyEntry> defaultKeysFromEnv()
return keys;
}
static bool parsePortValue(const QString& raw, uint32_t& port)
bool parsePortValue(const QString& raw, uint32_t& port)
{
uint64_t numeric = 0;
if (parseUInt(raw, numeric)) {
@@ -1283,7 +1283,7 @@ static bool parsePortValue(const QString& raw, uint32_t& port)
return false;
}
static bool parsePresetName(const QString& presetValue, QString& presetName)
bool parsePresetName(const QString& presetValue, QString& presetName)
{
QString p = normalizeToken(presetValue);
p.remove('_');
@@ -1300,7 +1300,7 @@ static bool parsePresetName(const QString& presetValue, QString& presetName)
return false;
}
static bool presetToChannelName(const QString& presetName, QString& channelName)
bool presetToChannelName(const QString& presetName, QString& channelName)
{
if (presetName == "LONG_FAST") { channelName = "LongFast"; return true; }
if (presetName == "LONG_SLOW") { channelName = "LongSlow"; return true; }
@@ -1314,7 +1314,7 @@ static bool presetToChannelName(const QString& presetName, QString& channelName)
return false;
}
static bool presetToParams(const QString& presetName, bool wideLora, int& bandwidthHz, int& spreadFactor, int& parityBits)
bool presetToParams(const QString& presetName, bool wideLora, int& bandwidthHz, int& spreadFactor, int& parityBits)
{
int bwKHz = 0;
int sf = 0;
@@ -1339,7 +1339,7 @@ static bool presetToParams(const QString& presetName, bool wideLora, int& bandwi
return true;
}
static QString presetToDisplayName(const QString& presetName)
QString presetToDisplayName(const QString& presetName)
{
QString channelName;
if (presetToChannelName(presetName, channelName)) {
@@ -1348,7 +1348,7 @@ static QString presetToDisplayName(const QString& presetName)
return QString("LongFast");
}
static uint32_t meshHashDjb2(const QString& s)
uint32_t meshHashDjb2(const QString& s)
{
const QByteArray bytes = s.toUtf8();
uint32_t h = 5381u;
@@ -1358,7 +1358,7 @@ static uint32_t meshHashDjb2(const QString& s)
return h;
}
static const RegionBand* findRegionBand(const QString& regionValue)
const RegionBand* findRegionBand(const QString& regionValue)
{
QString r = normalizeToken(regionValue);
r.remove('_');
@@ -1391,7 +1391,7 @@ static const RegionBand* findRegionBand(const QString& regionValue)
return nullptr;
}
static bool parseCommand(const QString& command, CommandConfig& cfg, QString& error)
bool parseCommand(const QString& command, CommandConfig& cfg, QString& error)
{
if (!Packet::isCommand(command)) {
error = "command must start with MESH:";
@@ -1669,7 +1669,7 @@ static bool parseCommand(const QString& command, CommandConfig& cfg, QString& er
}
else if (key == "freq_hz" || key == "frequency_hz")
{
if (!parseUInt(value, u) || u < 1000000ull) {
if (!parseUInt(value, u) || u < 1000000ULL) {
error = "invalid frequency_hz";
return false;
}
@@ -1772,9 +1772,9 @@ static bool parseCommand(const QString& command, CommandConfig& cfg, QString& er
}
// Forward declaration: summarizePortPayload is defined after the per-port parsers below.
static QString summarizePortPayload(const DataFields& d);
QString summarizePortPayload(const DataFields& d);
static QString summarizeHeader(const Header& h)
QString summarizeHeader(const Header& h)
{
const int hopLimit = h.flags & kFlagHopLimitMask;
const int hopStart = (h.flags & kFlagHopStartMask) >> 5;
@@ -1794,7 +1794,7 @@ static QString summarizeHeader(const Header& h)
.arg(h.relayNode);
}
static QString summarizeData(const DataFields& d)
QString summarizeData(const DataFields& d)
{
const QString portName = portToName(d.portnum);
QString s = QString("port=%1(%2)").arg(portName).arg(d.portnum);
@@ -1832,7 +1832,7 @@ static QString summarizeData(const DataFields& d)
return s;
}
static void addDecodeField(DecodeResult& result, const QString& path, const QString& value)
void addDecodeField(DecodeResult& result, const QString& path, const QString& value)
{
DecodeResult::Field f;
f.path = path;
@@ -1840,17 +1840,17 @@ static void addDecodeField(DecodeResult& result, const QString& path, const QStr
result.fields.append(f);
}
static void addDecodeField(DecodeResult& result, const QString& path, uint32_t value)
void addDecodeField(DecodeResult& result, const QString& path, uint32_t value)
{
addDecodeField(result, path, QString::number(value));
}
static void addDecodeField(DecodeResult& result, const QString& path, bool value)
void addDecodeField(DecodeResult& result, const QString& path, bool value)
{
addDecodeField(result, path, QString(value ? "true" : "false"));
}
static void appendHeaderDecodeFields(const Header& h, DecodeResult& result)
void appendHeaderDecodeFields(const Header& h, DecodeResult& result)
{
const int hopLimit = h.flags & kFlagHopLimitMask;
const int hopStart = (h.flags & kFlagHopStartMask) >> 5;
@@ -1881,29 +1881,29 @@ static void appendHeaderDecodeFields(const Header& h, DecodeResult& result)
// --- Shared decode helpers ---
/** Zigzag-decode a protobuf sint32 value. */
static int32_t zigzagDecode32(uint64_t n)
int32_t zigzagDecode32(uint64_t n)
{
return static_cast<int32_t>((n >> 1) ^ static_cast<uint64_t>(-(static_cast<int64_t>(n & 1))));
}
/** Reinterpret the 4 bytes of a protobuf fixed32 field as an IEEE 754 float. */
static float fixed32ToFloat(uint32_t v)
float fixed32ToFloat(uint32_t v)
{
float f;
memcpy(&f, &v, 4);
return f;
}
static double fixed64ToDouble(uint64_t v)
double fixed64ToDouble(uint64_t v)
{
double d;
memcpy(&d, &v, 8);
return d;
}
static bool decodeCoordinateFromFixed32(uint32_t raw, double& coordinate)
bool decodeCoordinateFromFixed32(uint32_t raw, double& coordinate)
{
const int32_t fixedValue = static_cast<int32_t>(raw);
const auto fixedValue = static_cast<int32_t>(raw);
const double scaled = static_cast<double>(fixedValue) / 1e7;
if (std::isfinite(scaled) && std::fabs(scaled) <= 180.0)
@@ -1912,7 +1912,7 @@ static bool decodeCoordinateFromFixed32(uint32_t raw, double& coordinate)
return true;
}
const double floatValue = static_cast<double>(fixed32ToFloat(raw));
const auto floatValue = static_cast<double>(fixed32ToFloat(raw));
if (std::isfinite(floatValue) && std::fabs(floatValue) <= 180.0)
{
coordinate = floatValue;
@@ -1963,7 +1963,7 @@ struct PositionFields
uint32_t timestamp = 0; // Unix timestamp, preferred (uint32 field 32)
};
static bool parsePositionPayload(const QByteArray& bytes, PositionFields& p)
bool parsePositionPayload(const QByteArray& bytes, PositionFields& p)
{
int pos = 0;
@@ -1974,8 +1974,8 @@ static bool parsePositionPayload(const QByteArray& bytes, PositionFields& p)
return false;
}
const uint32_t field = static_cast<uint32_t>(rawTag >> 3);
const uint32_t wire = static_cast<uint32_t>(rawTag & 0x7);
const auto field = static_cast<uint32_t>(rawTag >> 3);
const auto wire = static_cast<uint32_t>(rawTag & 0x7);
switch (field)
{
@@ -2186,7 +2186,7 @@ static bool parsePositionPayload(const QByteArray& bytes, PositionFields& p)
return p.hasLatitude || p.hasLongitude || p.hasAltitude || p.hasTime || p.hasTimestamp;
}
static void appendPositionDecodeFields(const PositionFields& p, DecodeResult& result)
void appendPositionDecodeFields(const PositionFields& p, DecodeResult& result)
{
if (p.hasLatitude) {
addDecodeField(result, "position.latitude",
@@ -2249,7 +2249,7 @@ struct UserFields
bool isLicensed = false; // licensed amateur radio operator (bool field 7)
};
static bool parseUserPayload(const QByteArray& bytes, UserFields& u)
bool parseUserPayload(const QByteArray& bytes, UserFields& u)
{
int pos = 0;
@@ -2258,8 +2258,8 @@ static bool parseUserPayload(const QByteArray& bytes, UserFields& u)
uint64_t rawTag = 0;
if (!readVarint(bytes, pos, rawTag)) { return false; }
const uint32_t field = static_cast<uint32_t>(rawTag >> 3);
const uint32_t wire = static_cast<uint32_t>(rawTag & 0x7);
const auto field = static_cast<uint32_t>(rawTag >> 3);
const auto wire = static_cast<uint32_t>(rawTag & 0x7);
switch (field)
{
@@ -2365,7 +2365,7 @@ static bool parseUserPayload(const QByteArray& bytes, UserFields& u)
return u.hasId || u.hasLongName || u.hasShortName || u.hasMacaddr || u.hasHwModel || u.hasIsLicensed;
}
static void appendUserDecodeFields(const UserFields& u, DecodeResult& result)
void appendUserDecodeFields(const UserFields& u, DecodeResult& result)
{
if (u.hasId) { addDecodeField(result, "nodeinfo.id", u.id); }
if (u.hasLongName) { addDecodeField(result, "nodeinfo.long_name", u.longName); }
@@ -2429,7 +2429,7 @@ struct TelemetryFields
EnvironmentMetrics environmentMetrics;
};
static bool parseDeviceMetrics(const QByteArray& bytes, DeviceMetrics& dm)
bool parseDeviceMetrics(const QByteArray& bytes, DeviceMetrics& dm)
{
int pos = 0;
@@ -2438,8 +2438,8 @@ static bool parseDeviceMetrics(const QByteArray& bytes, DeviceMetrics& dm)
uint64_t rawTag = 0;
if (!readVarint(bytes, pos, rawTag)) { return false; }
const uint32_t field = static_cast<uint32_t>(rawTag >> 3);
const uint32_t wire = static_cast<uint32_t>(rawTag & 0x7);
const auto field = static_cast<uint32_t>(rawTag >> 3);
const auto wire = static_cast<uint32_t>(rawTag & 0x7);
switch (field)
{
@@ -2476,7 +2476,7 @@ static bool parseDeviceMetrics(const QByteArray& bytes, DeviceMetrics& dm)
{
uint64_t v = 0;
if (!readVarint(bytes, pos, v)) { return false; }
const double raw = static_cast<double>(v);
const auto raw = static_cast<double>(v);
dm.voltage = static_cast<float>((raw > 1000.0) ? (raw / 1000.0) : raw);
dm.hasVoltage = true;
}
@@ -2558,7 +2558,7 @@ static bool parseDeviceMetrics(const QByteArray& bytes, DeviceMetrics& dm)
return true;
}
static bool parseEnvironmentMetrics(const QByteArray& bytes, EnvironmentMetrics& em)
bool parseEnvironmentMetrics(const QByteArray& bytes, EnvironmentMetrics& em)
{
int pos = 0;
@@ -2567,8 +2567,8 @@ static bool parseEnvironmentMetrics(const QByteArray& bytes, EnvironmentMetrics&
uint64_t rawTag = 0;
if (!readVarint(bytes, pos, rawTag)) { return false; }
const uint32_t field = static_cast<uint32_t>(rawTag >> 3);
const uint32_t wire = static_cast<uint32_t>(rawTag & 0x7);
const auto field = static_cast<uint32_t>(rawTag >> 3);
const auto wire = static_cast<uint32_t>(rawTag & 0x7);
switch (field)
{
@@ -2660,7 +2660,7 @@ static bool parseEnvironmentMetrics(const QByteArray& bytes, EnvironmentMetrics&
return true;
}
static bool parseTelemetryPayload(const QByteArray& bytes, TelemetryFields& t)
bool parseTelemetryPayload(const QByteArray& bytes, TelemetryFields& t)
{
int pos = 0;
@@ -2669,8 +2669,8 @@ static bool parseTelemetryPayload(const QByteArray& bytes, TelemetryFields& t)
uint64_t rawTag = 0;
if (!readVarint(bytes, pos, rawTag)) { return false; }
const uint32_t field = static_cast<uint32_t>(rawTag >> 3);
const uint32_t wire = static_cast<uint32_t>(rawTag & 0x7);
const auto field = static_cast<uint32_t>(rawTag >> 3);
const auto wire = static_cast<uint32_t>(rawTag & 0x7);
switch (field)
{
@@ -2724,7 +2724,7 @@ static bool parseTelemetryPayload(const QByteArray& bytes, TelemetryFields& t)
return t.hasTime || t.hasDeviceMetrics || t.hasEnvironmentMetrics;
}
static void appendTelemetryDecodeFields(const TelemetryFields& t, DecodeResult& result)
void appendTelemetryDecodeFields(const TelemetryFields& t, DecodeResult& result)
{
if (t.hasTime)
{
@@ -2798,7 +2798,7 @@ struct RouteDiscoveryFields
};
/** Parse a packed repeated fixed32 block (content only, length already consumed). */
static void parsePackedFixed32(const QByteArray& bytes, QVector<uint32_t>& out)
void parsePackedFixed32(const QByteArray& bytes, QVector<uint32_t>& out)
{
int pos = 0;
while ((pos + 4) <= bytes.size())
@@ -2809,7 +2809,7 @@ static void parsePackedFixed32(const QByteArray& bytes, QVector<uint32_t>& out)
}
/** Parse a packed repeated sint32 block (content only, length already consumed). */
static void parsePackedVarintSint32(const QByteArray& bytes, QVector<int32_t>& out)
void parsePackedVarintSint32(const QByteArray& bytes, QVector<int32_t>& out)
{
int pos = 0;
while (pos < bytes.size())
@@ -2820,7 +2820,7 @@ static void parsePackedVarintSint32(const QByteArray& bytes, QVector<int32_t>& o
}
}
static bool parseRouteDiscoveryPayload(const QByteArray& bytes, RouteDiscoveryFields& r)
bool parseRouteDiscoveryPayload(const QByteArray& bytes, RouteDiscoveryFields& r)
{
int pos = 0;
@@ -2829,8 +2829,8 @@ static bool parseRouteDiscoveryPayload(const QByteArray& bytes, RouteDiscoveryFi
uint64_t rawTag = 0;
if (!readVarint(bytes, pos, rawTag)) { return false; }
const uint32_t field = static_cast<uint32_t>(rawTag >> 3);
const uint32_t wire = static_cast<uint32_t>(rawTag & 0x7);
const auto field = static_cast<uint32_t>(rawTag >> 3);
const auto wire = static_cast<uint32_t>(rawTag & 0x7);
switch (field)
{
@@ -2907,7 +2907,7 @@ static bool parseRouteDiscoveryPayload(const QByteArray& bytes, RouteDiscoveryFi
return !r.route.isEmpty() || !r.routeBack.isEmpty();
}
static void appendRouteDiscoveryDecodeFields(const RouteDiscoveryFields& r, DecodeResult& result)
void appendRouteDiscoveryDecodeFields(const RouteDiscoveryFields& r, DecodeResult& result)
{
addDecodeField(result, "traceroute.forward_hops", QString::number(r.route.size()));
@@ -2938,13 +2938,13 @@ static void appendRouteDiscoveryDecodeFields(const RouteDiscoveryFields& r, Deco
}
}
static QString summarizePortPayload(const DataFields& d)
QString summarizePortPayload(const DataFields& d)
{
if (d.payload.isEmpty()) {
return " payload=<empty>";
}
const auto appendPayloadHex = [&d]() -> QString {
const auto appendPayloadHex = [&d]() {
const int n = std::min<int>(32, static_cast<int>(d.payload.size()));
QString text = QString(" payload_hex=%1").arg(QString(d.payload.left(n).toHex()));
if (d.payload.size() > n) {
@@ -3095,7 +3095,7 @@ static QString summarizePortPayload(const DataFields& d)
// falls back to generic text / hex for everything else.
// =============================================================================
static void appendDataDecodeFields(const DataFields& d, DecodeResult& result)
void appendDataDecodeFields(const DataFields& d, DecodeResult& result)
{
addDecodeField(result, "data.port_name", portToName(d.portnum));
addDecodeField(result, "data.portnum", d.portnum);
@@ -3203,7 +3203,7 @@ static void appendDataDecodeFields(const DataFields& d, DecodeResult& result)
}
}
static bool deriveTxRadioSettingsFromConfig(const CommandConfig& cfg, TxRadioSettings& settings, QString& error)
bool deriveTxRadioSettingsFromConfig(const CommandConfig& cfg, TxRadioSettings& settings, QString& error)
{
settings = TxRadioSettings();
settings.hasCommand = true;
@@ -3251,14 +3251,14 @@ static bool deriveTxRadioSettingsFromConfig(const CommandConfig& cfg, TxRadioSet
{
const double freqMHz = cfg.overrideFrequencyMHz + (cfg.hasFrequencyOffsetMHz ? cfg.frequencyOffsetMHz : 0.0);
settings.hasCenterFrequency = true;
settings.centerFrequencyHz = static_cast<qint64>(std::llround(freqMHz * 1000000.0));
settings.centerFrequencyHz = std::llround(freqMHz * 1000000.0);
}
else if (region)
{
const double bwMHz = static_cast<double>(bandwidthHz) / 1000000.0;
const double slotWidthMHz = region->spacingMHz + bwMHz;
const double spanMHz = region->freqEndMHz - region->freqStartMHz;
const uint32_t numChannels = static_cast<uint32_t>(std::floor(spanMHz / slotWidthMHz));
const auto numChannels = static_cast<uint32_t>(std::floor(spanMHz / slotWidthMHz));
if (numChannels == 0) {
error = "region span too narrow for selected preset bandwidth";
@@ -3284,7 +3284,7 @@ static bool deriveTxRadioSettingsFromConfig(const CommandConfig& cfg, TxRadioSet
+ (cfg.hasFrequencyOffsetMHz ? cfg.frequencyOffsetMHz : 0.0);
settings.hasCenterFrequency = true;
settings.centerFrequencyHz = static_cast<qint64>(std::llround(centerMHz * 1000000.0));
settings.centerFrequencyHz = std::llround(centerMHz * 1000000.0);
}
settings.summary = QString("preset=%1 sf=%2 cr=4/%3 bw=%4kHz de=%5")