mirror of
https://github.com/meshtastic/firmware.git
synced 2026-09-24 15:25:42 -04:00
* logging: strip redundant punctuation, level prefixes, and 'successfully' from log strings The logger already appends a newline and prints the level tag, so trailing '.', '!', '...', literal \n, and 'Error:'/'Warning:' prefixes inside format strings are wasted flash bytes. Same for 'successfully' (the affirmative form already implies it). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LBiZc9sfPrH1MZ2L3Fxgt1 * logging: tighten verbose log strings in modules, radio, platform, and system code Rewrite wordy log messages to terser equivalents - drop filler words (articles, 'attempting', 'due to', 'please'), use 'Can't X'/'X failed' phrasing, and abbreviate where the codebase already does (config, init, msg, BT). Format specifiers and argument lists are unchanged; distinctive greppable tokens are preserved. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LBiZc9sfPrH1MZ2L3Fxgt1 * logging: tighten verbose log strings in telemetry sensors and GPS Same terseness pass: drop filler, 'Can't X'/'X failed' phrasing, common abbreviations (temp, msg). Specifiers, arguments, and sensor-name prefixes unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LBiZc9sfPrH1MZ2L3Fxgt1 * logging: tighten verbose log strings in mesh core Same terseness pass over NodeDB, Router, MeshService, PhoneAPI, RadioInterface, NextHopRouter, and PacketHistory: 'X failed'/'Can't X' phrasing, imperative verbs, dropped filler. Specifiers and arguments unchanged; duplicate literals kept identical to preserve linker string dedup. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LBiZc9sfPrH1MZ2L3Fxgt1 * logging: 'Unable to/Could not/Cannot' -> "Can't" in log strings Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LBiZc9sfPrH1MZ2L3Fxgt1 * logging: clang-format rewrap after string shortening Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LBiZc9sfPrH1MZ2L3Fxgt1 * logging: restore boot-logo trailing newline and progress-dot strings The terseness pass over-trimmed: the Meshtastic ASCII boot logo kept its blank line via a trailing \n, and three bare "." progress ticks were reduced to empty strings. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LBiZc9sfPrH1MZ2L3Fxgt1 * Update src/mesh/wifi/WiFiAPClient.cpp Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * logging: address review feedback on the terseness audit - Node/packet IDs use the repo's 0x%08x convention in NextHopRouter, NodeDB, AdminModule and CannedMessageModule. The sibling log in each if/else pair is converted too, so a pair isn't split across two formats. next_hop stays 0x%x - it's the last-byte relay hint, not a NodeNum. - RTC: the read-path and set-path "not found" warnings were byte-identical, so the linker deduped them and the log couldn't say which one fired. Split into "RTC read:" / "RTC set:". (The four sites live in mutually exclusive #ifdef branches, so the RTC family was never ambiguous.) - SCD4X getAmbientPressure()/setAmbientPressure() logged "altitude", and SCD30 getASC() logged "Can't send command" for a read. Both now name the operation they actually perform. - LOG_ERROR already carries the level: ". Error: %u" -> ", rc=%u" (matching the existing rc=%d house style) and "Error executing X()" -> "X() failed". - Typos and wording: "OTA partiton. (Reason" -> "OTA partition (reason", "CST3530 not response ~" -> "CST3530 no response", "Packet received with to: of 0" -> "to=0", HostMetrics "Error decoding" -> "Can't decode", and the dangling ": " on the NextHopRouter retransmission line. Printf specifier sequences are byte-identical on all 37 touched lines apart from the 6 deliberate %x/%u -> %08x node-ID widenings, all on uint32_t args. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
141 lines
4.5 KiB
C++
141 lines
4.5 KiB
C++
#ifdef USE_PACKET_API
|
|
|
|
// First, in its own block so the include sorter keeps it there: configuration.h supplies the
|
|
// variant defines mesh-pb-constants.h needs (portduino resolves MAX_NUM_NODES at runtime).
|
|
#include "configuration.h"
|
|
|
|
#include "MeshService.h"
|
|
#include "PowerFSM.h"
|
|
#include "RadioInterface.h"
|
|
#include "api/PacketAPI.h"
|
|
#include "modules/NodeInfoModule.h"
|
|
|
|
#ifdef MESHTASTIC_PHONEAPI_ACCESS_CONTROL
|
|
// receivePacket() dispatches ToRadio straight to MeshService, bypassing handleToRadioPacket and so
|
|
// the lockdown admin gate. Fail the build rather than silently ship an admin-auth bypass.
|
|
#error "USE_PACKET_API is incompatible with MESHTASTIC_PHONEAPI_ACCESS_CONTROL (PacketAPI bypasses the lockdown admin gate)"
|
|
#endif
|
|
|
|
PacketAPI *packetAPI = nullptr;
|
|
|
|
PacketAPI *PacketAPI::create(PacketServer *_server)
|
|
{
|
|
if (!packetAPI) {
|
|
packetAPI = new PacketAPI(_server);
|
|
}
|
|
return packetAPI;
|
|
}
|
|
|
|
PacketAPI::PacketAPI(PacketServer *_server)
|
|
: concurrency::OSThread("PacketAPI"), isConnected(false), programmingMode(false), server(_server)
|
|
{
|
|
api_type = TYPE_PACKET;
|
|
}
|
|
|
|
int32_t PacketAPI::runOnce()
|
|
{
|
|
bool success = false;
|
|
#ifndef ARCH_PORTDUINO
|
|
if (config.bluetooth.enabled) {
|
|
if (!programmingMode) {
|
|
// in programmingMode we don't send any packets to the client except this one notify
|
|
programmingMode = true;
|
|
success = notifyProgrammingMode();
|
|
}
|
|
} else
|
|
#endif
|
|
{
|
|
success = sendPacket();
|
|
}
|
|
success |= receivePacket();
|
|
return success ? 10 : 50;
|
|
}
|
|
|
|
bool PacketAPI::receivePacket(void)
|
|
{
|
|
bool data_received = false;
|
|
while (server->hasData()) {
|
|
isConnected = true;
|
|
data_received = true;
|
|
|
|
powerFSM.trigger(EVENT_INPUT);
|
|
lastContactMsec = millis();
|
|
|
|
meshtastic_ToRadio *mr;
|
|
auto p = server->receivePacket()->move();
|
|
int id = p->getPacketId();
|
|
LOG_DEBUG("Received packet id=%u", id);
|
|
mr = (meshtastic_ToRadio *)&static_cast<DataPacket<meshtastic_ToRadio> *>(p.get())->getData();
|
|
|
|
switch (mr->which_payload_variant) {
|
|
case meshtastic_ToRadio_packet_tag: {
|
|
meshtastic_MeshPacket *mp = &mr->packet;
|
|
mp->transport_mechanism = meshtastic_MeshPacket_TransportMechanism_TRANSPORT_API;
|
|
printPacket("PACKET FROM QUEUE", mp);
|
|
service->handleToRadio(*mp);
|
|
break;
|
|
}
|
|
case meshtastic_ToRadio_want_config_id_tag: {
|
|
uint32_t config_nonce = mr->want_config_id;
|
|
LOG_INFO("Screen wants config, nonce=%u", config_nonce);
|
|
handleStartConfig();
|
|
break;
|
|
}
|
|
case meshtastic_ToRadio_heartbeat_tag:
|
|
if (mr->heartbeat.nonce == 1) {
|
|
if (nodeInfoModule) {
|
|
LOG_INFO("Broadcasting nodeinfo ping");
|
|
nodeInfoModule->sendOurNodeInfo(NODENUM_BROADCAST, true, 0, true);
|
|
}
|
|
} else {
|
|
LOG_DEBUG("Got client heartbeat");
|
|
}
|
|
break;
|
|
default:
|
|
LOG_ERROR("Unhandled meshtastic_ToRadio variant: %d", mr->which_payload_variant);
|
|
break;
|
|
}
|
|
}
|
|
return data_received;
|
|
}
|
|
|
|
bool PacketAPI::sendPacket(void)
|
|
{
|
|
if (server->available()) {
|
|
// fill dummy buffer; we don't use it, we directly send the fromRadio structure
|
|
uint32_t len = getFromRadio(txBuf);
|
|
if (len != 0) {
|
|
static uint32_t id = 0;
|
|
fromRadioScratch.id = ++id;
|
|
bool result = server->sendPacket(DataPacket<meshtastic_FromRadio>(id, fromRadioScratch));
|
|
if (!result) {
|
|
LOG_ERROR("send queue full");
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool PacketAPI::notifyProgrammingMode(void)
|
|
{
|
|
// tell the client we are in programming mode by sending only the bluetooth config state
|
|
LOG_INFO("force client into programmingMode");
|
|
memset(&fromRadioScratch, 0, sizeof(fromRadioScratch));
|
|
fromRadioScratch.id = nodeDB->getNodeNum();
|
|
fromRadioScratch.which_payload_variant = meshtastic_FromRadio_config_tag;
|
|
fromRadioScratch.config.which_payload_variant = meshtastic_Config_bluetooth_tag;
|
|
fromRadioScratch.config.payload_variant.bluetooth = config.bluetooth;
|
|
return server->sendPacket(DataPacket<meshtastic_FromRadio>(0, fromRadioScratch));
|
|
}
|
|
|
|
/**
|
|
* return true if we got (once!) contact from our client and the server send queue is not full
|
|
*/
|
|
bool PacketAPI::checkIsConnected()
|
|
{
|
|
isConnected |= server->hasData();
|
|
return isConnected && server->available();
|
|
}
|
|
|
|
#endif |