1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-06-26 21:43:25 -04:00
Files
sdrangel/modemmeshcore/test/cli.cpp
T

61 lines
2.7 KiB
C++
Raw Normal View History

///////////////////////////////////////////////////////////////////////////////////
// Copyright (C) 2026 Tom Hensel <code@jitter.eu> //
// //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation as version 3 of the License, or //
// (at your option) any later version. //
// //
// modmeshcore_cli — print the wire packet for a given MESHCORE: command line. //
// //
// Usage: //
// modmeshcore_cli "MESHCORE: type=advert; seed=<hex64>; name=Test; ts=42" //
// //
// Prints the OTA-ready packet as hex on stdout, plus a one-line summary on //
// stderr. Used for golden-vector parity tests against the python //
// gr4-lora/scripts/src/lora/tools/meshcore_tx.py implementation. //
///////////////////////////////////////////////////////////////////////////////////
#include "meshcorepacket.h"
#include <QByteArray>
#include <QString>
#include <cstdio>
#include <cstdlib>
int main(int argc, char** argv)
{
if (argc != 2) {
std::fprintf(stderr,
"usage: %s \"MESHCORE: type=...; ...\"\n"
"examples:\n"
" %s \"MESHCORE: type=advert; seed=0102030405060708090a0b0c0d0e0f10"
"111213141516171819""1a1b1c1d1e1f20; name=Test; ts=1700000000\"\n"
" %s \"MESHCORE: type=grp_txt; channel=public; text=Hello group; "
"ts=1700000000\"\n",
argv[0], argv[0], argv[0]);
return 2;
}
const QString command = QString::fromUtf8(argv[1]);
if (!modemmeshcore::Packet::isCommand(command)) {
std::fprintf(stderr, "error: argument is not a MESHCORE: command\n");
return 2;
}
QByteArray frame;
QString summary, error;
if (!modemmeshcore::Packet::buildFrameFromCommand(command, frame, summary, error)) {
std::fprintf(stderr, "error: %s\n", error.toUtf8().constData());
return 1;
}
std::fprintf(stderr, "%s\n", summary.toUtf8().constData());
std::fprintf(stderr, "size: %d bytes\n", frame.size());
std::fwrite(frame.toHex().constData(), 1, frame.toHex().size(), stdout);
std::fputc('\n', stdout);
return 0;
}