 static constexpr uint8_t STATS_MSG_START_OFFSET = (RFM22_PREAMBLE_BYTES + RFM22_SYNC_MIN_BYTES);
 static constexpr uint8_t STATS_MSG_MAX_LEN = (64 - STATS_MSG_START_OFFSET);
 // Managed JSON stats.
-static OTV0P2BASE::SimpleStatsRotation<12> ss1; // Configured for maximum different stats.  // FIXME increased for voice & for setback lockout
+static OTV0P2BASE::SimpleStatsRotation<12> ss1; // Configured for maximum different stats.
 // Do bare stats transmission.
 // Output should be filtered for items appropriate
 // to current channel security and sensitivity level.

//========================================
// MAIN LOOP
//========================================

inline void stackCheck()
{
    // Force restart if SPAM/heap/stack likely corrupt.
    // Complain and keep complaining when getting near stack overflow.
    // TODO: make DEBUG-only when confident all configs OK.
    const int16_t minsp = OTV0P2BASE::MemoryChecks::getMinSPSpaceBelowStackToEnd();
    const uint8_t location = OTV0P2BASE::MemoryChecks::getLocation();
    OTV0P2BASE::serialPrintAndFlush(F("minsp: "));
    OTV0P2BASE::serialPrintAndFlush(minsp);
    OTV0P2BASE::serialPrintAndFlush(F(" loc:"));
    OTV0P2BASE::serialPrintAndFlush(location);
    OTV0P2BASE::serialPrintlnAndFlush();

    OTV0P2BASE::MemoryChecks::forceResetIfStackOverflow();

    OTV0P2BASE::MemoryChecks::resetMinSP();
}

void loop()
{
    stackCheck();

    OTV0P2BASE::serialPrintAndFlush('!'); // Indicate error with leading '!' // May fail.
    OTV0P2BASE::serialPrintlnAndFlush(s); // Print supplied detail text. // May fail.
    panic();
}

/**
 * @brief   Force restart if SPAM/heap/stack likely corrupt.
 *          Complain and keep complaining when getting near stack overflow.
 *          TODO: make DEBUG-only when confident all configs OK.
 *          Optionally reports max stack usage and location, per loop.
 */
inline void stackCheck()
{
    const int16_t minsp = OTV0P2BASE::MemoryChecks::getMinSPSpaceBelowStackToEnd();
#if 0 && defined(DEBUG)
    const uint8_t location = OTV0P2BASE::MemoryChecks::getLocation();
    OTV0P2BASE::serialPrintAndFlush(F("minsp: "));
    OTV0P2BASE::serialPrintAndFlush(minsp);
    OTV0P2BASE::serialPrintAndFlush(F(" loc:"));
    OTV0P2BASE::serialPrintAndFlush(location);
    OTV0P2BASE::serialPrintlnAndFlush();
    OTV0P2BASE::MemoryChecks::forceResetIfStackOverflow();
    OTV0P2BASE::MemoryChecks::resetMinSP();
#else
    if(128 < minsp) { OTV0P2BASE::serialPrintAndFlush(F("!SP")); }
    OTV0P2BASE::MemoryChecks::forceResetIfStackOverflow();
#endif
}

// Call this to do an I/O poll if needed; returns true if something useful definitely happened.
