CDC Badge OS
Firmware for the CDC Badge v1.0 hardware security key
Loading...
Searching...
No Matches
SerialCmd.cpp File Reference
#include "serial_cmd/SerialCmd.h"
#include "serial_cmd/Console.h"
#include "serial_cmd/ICommandRegistry.h"
#include "serial_cmd/SubCommand.h"
#include "cdc_core/feature_flags.h"
#include "cdc_core/Cp437.h"
#include "cdc_core/ModuleRegistry.h"
#include "cdc_core/UsbManager.h"
#include "cdc_core/PinManager.h"
#include "cdc_core/TropicSlotMap.h"
#include "cdc_core/TropicStorage.h"
#include "cdc_core/FactoryReset.h"
#include "cdc_core/CpuStats.h"
#include "cdc_hal/ISecureElement.h"
#include "cdc_hal/IWifiController.h"
#include "cdc_hal/IPowerManager.h"
#include "cdc_os_ui/AppUi.h"
#include "cdc_os_ui/WifiHandlers.h"
#include "cdc_log.h"
#include "cdc_views/RenderHelpers.h"
#include "cdc_views/T9InputView.h"
#include "cdc_ui/ViewStack.h"
#include "esp_timer.h"
#include "esp_attr.h"
#include "nvs_flash.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_memory_utils.h"
#include <cstring>
#include <cctype>
#include <cstdlib>
#include <sys/time.h>
#include <time.h>

Go to the source code of this file.

Classes

struct  cdc::serial::SlotParseResult
 Slot parsing helpers for secure-element commands. More...

Namespaces

namespace  cdc
namespace  cdc::serial

Enumerations

enum class  cdc::serial::EscState : uint8_t { cdc::serial::NONE , cdc::serial::ESC , cdc::serial::BRACKET }
 Escape-sequence parser state for ANSI key handling. More...

Functions

static void cdc::serial::historyAdd (const char *cmd)
 General-purpose helper functions.
static const char * cdc::serial::historyGet (size_t idx)
 Returns a history entry by reverse index (0 = newest).
static void cdc::serial::redrawLine (const char *newContent, size_t &bufferPos)
 Clears the current console line and redraws it with new content.
static SlotParseResult cdc::serial::parseSlotArg (const char *args, uint16_t maxSlot, const char *slotTypeName)
 Parses a slot number from a string argument.
static hal::ISecureElementcdc::serial::getSecureElementWithCheck ()
 Secure-element access helpers.
static void cdc::serial::printHexDump (const uint8_t *data, size_t len, size_t maxBytes)
 NVS utility helpers used by command handlers.
static const char * cdc::serial::getNvsTypeName (nvs_type_t type)
 Returns a human-readable name for an NVS type value.
static nvs_type_t cdc::serial::findNvsKeyType (const char *ns, const char *key)
 Finds the stored NVS type of a key by namespace iteration.
static void cdc::serial::printNvsValue (nvs_handle_t nvs, const char *key, nvs_type_t type)
 Prints an NVS value according to its stored type.
static bool cdc::serial::getCurrentTime (struct timeval &tv, struct tm &tm)
 Date/time parsing and validation helpers.
static bool cdc::serial::setSystemTime (struct tm *tm)
 Sets system time from a populated local tm structure.
static void cdc::serial::cmdHelp (const char *args)
 System command handlers.
static void cdc::serial::cmdPing (const char *args)
 Replies with a liveness check response.
static void cdc::serial::cmdStatus (const char *args)
 Prints runtime status information for the device.
static void cdc::serial::cmdCpu (const char *args)
static void cdc::serial::printHeapRegion (const char *label, uint32_t caps)
 Prints heap and PSRAM usage statistics.
static void cdc::serial::cmdMemInfo (const char *args)
static void cdc::serial::cmdMem (const char *args)
static void cdc::serial::cmdReboot (const char *args)
 Reboots the device after flushing serial output.
static void cdc::serial::cmdBootloader (const char *args)
 Reboots the device into USB download (bootloader) mode.
static void cdc::serial::cmdShipMode (const char *args)
 Enters ship mode (disconnects the battery via BATFET).
static void cdc::serial::cmdPaste (const char *args)
static void cdc::serial::cmdErrorLog (const char *args)
 Displays the error log or clears it when CLEAR is passed.
static void cdc::serial::cmdNvsClear (const char *args)
 NVS command handlers.
static void cdc::serial::cmdNvsList (const char *args)
 Lists NVS entries, optionally filtered by namespace.
static void cdc::serial::cmdNvsRead (const char *args)
 Reads and prints a single NVS key value.
static void cdc::serial::cmdNvsDel (const char *args)
 Deletes an NVS key or an entire namespace.
static void cdc::serial::cmdGetTime (const char *args)
 Date/time command handlers.
static void cdc::serial::cmdGetDate (const char *args)
 Prints the current local date.
static void cdc::serial::cmdSetTime (const char *args)
 Updates the system clock time component.
static void cdc::serial::cmdSetDate (const char *args)
 Updates the system clock date component.
static void cdc::serial::cmdSetName (const char *args)
 Display text command handlers.
static void cdc::serial::cmdSetInfo (const char *args)
 Sets the first info line through the text callback.
static void cdc::serial::cmdSetInfo2 (const char *args)
 Sets the second info line through the text callback.
static void cdc::serial::cmdPinReset (const char *args)
 Authentication command handlers for secure serial mode.
static void cdc::serial::cmdPinStatus (const char *args)
 Prints the current badge PIN status snapshot.
static void cdc::serial::cmdPinChange (const char *args)
 Changes the badge PIN after verifying the current one.
static void cdc::serial::cmdPinDuress (const char *args)
 Arms the duress / self-destruct PIN.
static void cdc::serial::cmdPinDuressClear (const char *args)
 Disarms the duress / self-destruct PIN.
static void cdc::serial::cmdTr01Status (const char *args)
 TROPIC01 secure-element maintenance and diagnostic handlers.
static void cdc::serial::cmdTr01Info (const char *args)
 Prints secure-element chip and firmware information.
static void cdc::serial::cmdTr01Session (const char *args)
 Starts a secure-element session, restarting it if already active.
static void cdc::serial::cmdTr01Slots (const char *args)
 Prints usage information for ECC and R-Memory slots.
static void cdc::serial::cmdTr01RmemRead (const char *args)
 Reads and dumps one secure-element R-Memory slot.
static void cdc::serial::cmdTr01EccDel (const char *args)
 Deletes one ECC key slot.
static void cdc::serial::cmdTr01RmemDel (const char *args)
 Erases one R-Memory slot.
static void cdc::serial::cmdTr01Resync (const char *args)
 Restarts the secure-element session to resynchronize state.
static void cdc::serial::cmdTr01CacheRebuild (const char *args)
 Rebuilds the Tropic slot cache and prints per-slot diagnostics.
static void cdc::serial::cmdTr01Cleanup (const char *args)
 Cleans up slot metadata inconsistencies and rebuilds cache state.
static void cdc::serial::cmdTr01Wipe (const char *args)
 Performs a destructive secure-element factory wipe after confirmation.
static const char * cdc::serial::wifiSecurityName (hal::WifiSecurity sec)
static const char * cdc::serial::wifiStateName (hal::WifiState st)
static const char * cdc::serial::wifiModeName (hal::WifiMode m)
static uint8_t cdc::serial::wifiDedupAndSort (hal::WifiScanResult *results, uint8_t count)
 Deduplicates scan results by SSID (keeping strongest RSSI) and sorts the survivors descending by RSSI in place.
static void cdc::serial::cmdWifiScan (const char *args)
 WIFI_SCAN - scan and print networks (deduplicated, sorted by RSSI).
static void cdc::serial::cmdWifiStatus (const char *args)
 WIFI_STATUS - show runtime state and saved configuration.
static void cdc::serial::cmdWifiOn (const char *args)
 WIFI_ON [sta|ap|sta_ap] - enable WiFi radio.
static void cdc::serial::cmdWifiOff (const char *args)
 WIFI_OFF - disconnect and disable WiFi radio.
static void cdc::serial::cmdWifiConnect (const char *args)
 WIFI_CONNECT <ssid> <password> - connect and persist credentials.
static void cdc::serial::cmdWifiTimeout (const char *args)
 WIFI_TIMEOUT [ms] - get or set the connect timeout.
static void cdc::serial::cmdWifiForget (const char *args)
 WIFI_FORGET - disable WiFi and erase the saved configuration.
static int cdc::serial::findModuleIndex (const char *name)
 Module management serial command handlers.
static void cdc::serial::cmdModuleList (const char *args)
 MODULE LIST - list registered modules with state and errors.
static void cdc::serial::cmdModuleEnable (const char *args)
 MODULE ENABLE <name> - enable a module by name (persistent).
static void cdc::serial::cmdModuleDisable (const char *args)
 MODULE DISABLE <name> - disable a module by name (persistent).
static void cdc::serial::cmdNvs (const char *args)
static void cdc::serial::cmdPin (const char *args)
static void cdc::serial::cmdTr01 (const char *args)
static void cdc::serial::cmdWifi (const char *args)
static void cdc::serial::cmdModule (const char *args)

Variables

static const char * TAG = "SERIAL"
static constexpr size_t cdc::serial::HISTORY_MAX = 10
 Internal constants used by serial command processing.
static constexpr size_t cdc::serial::HEX_DUMP_WIDTH = 16
static constexpr size_t cdc::serial::NVS_KEY_MAX_LEN = 15
static constexpr size_t cdc::serial::NVS_NAMESPACE_MAX_LEN = 15
static constexpr int cdc::serial::YEAR_MIN = 2020
static constexpr int cdc::serial::YEAR_MAX = 2100
static constexpr uint32_t cdc::serial::WIPE_PROGRESS_INTERVAL = 64
static char cdc::serial::s_cmdBuffer [SerialCmd::CMD_BUFFER_SIZE] = {}
 Global static state for line editing and command dispatch.
static size_t cdc::serial::s_cmdBufferPos = 0
static bool cdc::serial::s_initialized = false
static char cdc::serial::s_historyBuffer [HISTORY_MAX][SerialCmd::CMD_BUFFER_SIZE]
 Command history ring buffer allocated in PSRAM.
static size_t cdc::serial::s_historyCount = 0
static size_t cdc::serial::s_historyHead = 0
static size_t cdc::serial::s_historyPos = 0
static EscState cdc::serial::s_escState = EscState::NONE
static TextChangeCallback cdc::serial::s_textCallback = nullptr
 Optional callbacks injected by higher-level modules.
static TimeChangeCallback cdc::serial::s_timeCallback = nullptr
static bool cdc::serial::s_authenticated = false
 Session authentication flags and timeout baseline.
static uint64_t cdc::serial::s_authTimestamp = 0
static constexpr uint32_t cdc::serial::WIFI_SCAN_POLL_MS = 100
 WiFi serial command handlers.
static constexpr uint8_t cdc::serial::WIFI_MAX_SCAN_RESULTS = hal::IWifiController::MAX_SCAN_RESULTS
static const SubCommand cdc::serial::kNvsSubs []
 Sub-command tables and dispatchers for grouped commands.
static const SubCommand cdc::serial::kPinSubs []
static const SubCommand cdc::serial::kTr01Subs []
static const SubCommand cdc::serial::kWifiSubs []
static const SubCommand cdc::serial::kModuleSubs []

Variable Documentation

◆ TAG

const char* TAG = "SERIAL"
static

Serial Command Processor Implementation Handles input buffering, line editing, and command dispatch

Definition at line 40 of file SerialCmd.cpp.