From c25e0c4e0ba99a5e2e94a1ca7313f999bf794fbd Mon Sep 17 00:00:00 2001 From: Kevin Hester Date: Thu, 27 Jun 2024 09:35:11 -0700 Subject: [PATCH] Add PowerStress agent support to PowerMon --- meshtastic/portnums.proto | 5 ++++ meshtastic/powermon.proto | 52 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/meshtastic/portnums.proto b/meshtastic/portnums.proto index 5808eb7..a8517c7 100644 --- a/meshtastic/portnums.proto +++ b/meshtastic/portnums.proto @@ -196,6 +196,11 @@ enum PortNum { */ MAP_REPORT_APP = 73; + /* + * PowerStress based monitoring support (for automated power consumption testing) + */ + POWERSTRESS_APP = 74; + /* * Private applications should use portnums >= 256. * To simplify initial development and testing you can use "PRIVATE_APP" diff --git a/meshtastic/powermon.proto b/meshtastic/powermon.proto index 7e23bc4..5f65b51 100644 --- a/meshtastic/powermon.proto +++ b/meshtastic/powermon.proto @@ -49,4 +49,56 @@ message PowerMon { */ GPS_Active = 0x800; } +} + + +/* + * PowerStress testing support via the C++ PowerStress module + */ +message PowerStressMessage { + /* + * What operation would we like the UUT to perform. + note: senders should probably set want_response in their request packets, so that they can know when the state + machine has started processing their request + */ + enum Opcode { + /* + * Unset/unused + */ + UNSET = 0; + + PRINT_INFO = 1; // Print board version slog and send an ack that we are alive and ready to process commands + FORCE_QUIET = 2; // Try to turn off all automatic processing of packets, screen, sleeping, etc (to make it easier to measure in isolation) + END_QUIET = 3; // Stop powerstress processing - probably by just rebooting the board + + SCREEN_ON = 16; // Turn the screen on + SCREEN_OFF = 17; // Turn the screen off + + CPU_IDLE = 32; // Let the CPU run but we assume mostly idling for num_seconds + CPU_DEEPSLEEP = 33; // Force deep sleep for FIXME seconds + CPU_FULLON = 34; // Spin the CPU as fast as possible for num_seconds + + LED_ON = 48; // Turn the LED on for num_seconds (and leave it on - for baseline power measurement purposes) + LED_OFF = 49; // Force the LED off for num_seconds + + LORA_OFF = 64; // Completely turn off the LORA radio for num_seconds + LORA_TX = 65; // Send Lora packets for num_seconds + LORA_RX = 66; // Receive Lora packets for num_seconds (node will be mostly just listening, unless an external agent is helping stress this by sending packets on the current channel) + + BT_OFF = 80; // Turn off the BT radio for num_seconds + BT_ON = 81; // Turn on the BT radio for num_seconds + + WIFI_OFF = 96; // Turn off the WIFI radio for num_seconds + WIFI_ON = 97; // Turn on the WIFI radio for num_seconds + + GPS_OFF = 112; // Turn off the GPS radio for num_seconds + GPS_ON = 113; // Turn on the GPS radio for num_seconds + } + + /* + * What type of HardwareMessage is this? + */ + Opcode cmd = 1; + + float num_seconds = 2; } \ No newline at end of file