mirror of
https://github.com/meshtastic/firmware.git
synced 2026-11-06 06:14:45 -05: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>
135 lines
5.0 KiB
C++
135 lines
5.0 KiB
C++
#include "PowerStressModule.h"
|
|
#include "MeshService.h"
|
|
#include "NodeDB.h"
|
|
#include "PowerMon.h"
|
|
#include "Router.h"
|
|
#include "configuration.h"
|
|
#include "gps/RTC.h"
|
|
#include "main.h"
|
|
#include "sleep.h"
|
|
#include "target_specific.h"
|
|
#include <Throttle.h>
|
|
|
|
extern void printInfo();
|
|
|
|
PowerStressModule::PowerStressModule()
|
|
: ProtobufModule("powerstress", meshtastic_PortNum_POWERSTRESS_APP, &meshtastic_PowerStressMessage_msg),
|
|
concurrency::OSThread("PowerStress")
|
|
{
|
|
}
|
|
|
|
bool PowerStressModule::handleReceivedProtobuf(const meshtastic_MeshPacket &req, meshtastic_PowerStressMessage *pptr)
|
|
{
|
|
// We only respond to messages if powermon debugging is already on
|
|
if (config.power.powermon_enables) {
|
|
auto p = *pptr;
|
|
LOG_INFO("Received PowerStress cmd=%d", p.cmd);
|
|
|
|
// Some commands we can handle immediately, anything else gets deferred to be handled by our thread
|
|
switch (p.cmd) {
|
|
case meshtastic_PowerStressMessage_Opcode_UNSET:
|
|
LOG_ERROR("PowerStress operation unset");
|
|
break;
|
|
|
|
case meshtastic_PowerStressMessage_Opcode_PRINT_INFO:
|
|
printInfo();
|
|
|
|
// Now that we know we are actually doing power stress testing, go ahead and turn on all enables (so the log is fully
|
|
// detailed)
|
|
powerMon->force_enabled = true;
|
|
break;
|
|
|
|
default:
|
|
if (currentMessage.cmd != meshtastic_PowerStressMessage_Opcode_UNSET)
|
|
LOG_ERROR("PowerStress operation %d already in progress! Can't start new command", currentMessage.cmd);
|
|
else
|
|
currentMessage = p; // copy for use by thread (the message provided to us will be getting freed)
|
|
break;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
int32_t PowerStressModule::runOnce()
|
|
{
|
|
if (!config.power.powermon_enables) {
|
|
// Powermon not enabled - stop using CPU/stop this thread
|
|
return disable();
|
|
}
|
|
|
|
int32_t sleep_msec = 10; // when not active check for new messages every 10ms
|
|
|
|
auto &p = currentMessage;
|
|
|
|
if (isRunningCommand) {
|
|
// Done with the previous command - our sleep must have finished
|
|
p.cmd = meshtastic_PowerStressMessage_Opcode_UNSET;
|
|
p.num_seconds = 0;
|
|
isRunningCommand = false;
|
|
LOG_INFO("S:PS:%u", p.cmd);
|
|
} else {
|
|
if (p.cmd != meshtastic_PowerStressMessage_Opcode_UNSET) {
|
|
sleep_msec = (int32_t)(p.num_seconds * 1000);
|
|
isRunningCommand = !!sleep_msec; // if the command wants us to sleep, make sure to mark that we have something running
|
|
LOG_INFO(
|
|
"S:PS:%u",
|
|
p.cmd); // Emit a structured log saying we are starting a powerstress state (to make it easier to parse later)
|
|
|
|
switch (p.cmd) {
|
|
case meshtastic_PowerStressMessage_Opcode_LED_ON:
|
|
// FIXME - implement
|
|
// ledForceOn.set(true);
|
|
break;
|
|
case meshtastic_PowerStressMessage_Opcode_LED_OFF:
|
|
// FIXME - implement
|
|
// ledForceOn.set(false);
|
|
break;
|
|
case meshtastic_PowerStressMessage_Opcode_GPS_ON:
|
|
// FIXME - implement
|
|
break;
|
|
case meshtastic_PowerStressMessage_Opcode_GPS_OFF:
|
|
// FIXME - implement
|
|
break;
|
|
case meshtastic_PowerStressMessage_Opcode_LORA_OFF:
|
|
// FIXME - implement
|
|
break;
|
|
case meshtastic_PowerStressMessage_Opcode_LORA_RX:
|
|
// FIXME - implement
|
|
break;
|
|
case meshtastic_PowerStressMessage_Opcode_LORA_TX:
|
|
// FIXME - implement
|
|
break;
|
|
case meshtastic_PowerStressMessage_Opcode_SCREEN_OFF:
|
|
// FIXME - implement
|
|
break;
|
|
case meshtastic_PowerStressMessage_Opcode_SCREEN_ON:
|
|
// FIXME - implement
|
|
break;
|
|
case meshtastic_PowerStressMessage_Opcode_BT_OFF:
|
|
setBluetoothEnable(false);
|
|
break;
|
|
case meshtastic_PowerStressMessage_Opcode_BT_ON:
|
|
setBluetoothEnable(true);
|
|
break;
|
|
case meshtastic_PowerStressMessage_Opcode_CPU_DEEPSLEEP:
|
|
doDeepSleep(sleep_msec, true, true);
|
|
break;
|
|
case meshtastic_PowerStressMessage_Opcode_CPU_FULLON: {
|
|
uint32_t start_msec = millis();
|
|
while (Throttle::isWithinTimespanMs(start_msec, sleep_msec))
|
|
; // Don't let CPU idle at all
|
|
sleep_msec = 0; // we already slept
|
|
break;
|
|
}
|
|
case meshtastic_PowerStressMessage_Opcode_CPU_IDLE:
|
|
// FIXME - implement
|
|
break;
|
|
default:
|
|
LOG_ERROR("PowerStress operation %d not yet implemented", p.cmd);
|
|
sleep_msec = 0; // Don't do whatever sleep was requested...
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return sleep_msec;
|
|
} |