This document describes the test procedures for verifying CubeCellMeshCore firmware functionality. Tests are performed via serial console at 115200 baud.
- CubeCell HTCC-AB01 with firmware flashed
- Serial terminal (PlatformIO monitor, PuTTY, or similar)
- Connection:
pio device monitor -b 115200
Command: help
Expected: List of available commands
Pass: Command list is displayed
Command: status
Expected: Firmware version, node name, hash, radio parameters, time sync status
Pass: All fields displayed with valid values
Command: stats
Expected: RX/TX/FWD/ERR counters, ADV counters, queue status
Pass: Counters displayed (may be 0 if no traffic)
Command: identity
Expected: Public key (64 hex chars), node name, node hash
Pass: Valid hex public key displayed
Command: name
Expected: Current node name displayed
Command: name TestNode
Expected: Name changed confirmation
Pass: Name updated and persists after reboot
Command: newid
Expected: New keypair generated, new public key displayed
Pass: Public key changes from previous value
WARNING: This resets the node identity!
Command: advert
Expected: ADVERT packet transmitted, TX counter increments
Pass: "ADVERT sent" message, advTxCount increases
Command: nodes
Expected: List of seen nodes (may be empty if no other nodes nearby)
Pass: Command executes without error
Command: contacts
Expected: List of known contacts from received ADVERTs
Pass: Command executes, shows contacts if any received
Command: neighbours
Expected: List of direct neighbours with RSSI/SNR
Pass: Shows neighbour list (may be empty)
Command: ping
Expected: FLOOD test packet sent, TX counter increments
Pass: "[P] #N" and "[P] TX ok" messages displayed
Command: ping A3
Expected: Directed ping sent to node A3, waits for PONG
Pass: "[P] -> A3 #N" and "[P] TX ok" displayed
If node A3 is reachable: "[P] PONG A3 <name> rssi=<val> snr=<val>dB p=<hops>"
Note: Requires a second node with hash A3 to verify PONG response
Command: trace A3
Expected: Directed trace sent to node A3, waits for trace response
Pass: "[P] ~> A3 #N" and "[P] TX ok" displayed
If node A3 is reachable: "[P] TRACE A3 <name> <rssi> <hops> rssi=<val> snr=<val>dB p=<hops>"
Note: Trace response includes hop count and RSSI at destination node
Command: telemetry
Expected: Battery voltage (mV), temperature (C), uptime
Pass: Valid readings displayed
Example: "Batt: 4200mV Temp: 25C Uptime: 120s"
Command: sleep
Expected: Current deep sleep status displayed
Command: sleep on
Expected: Deep sleep enabled
Command: sleep off
Expected: Deep sleep disabled
Pass: Settings change and persist after save
Command: rxboost
Expected: Current RX boost status
Command: rxboost on
Expected: RX boost enabled (better sensitivity, more power)
Command: rxboost off
Expected: RX boost disabled
Pass: Settings change and persist after save
Command: save
Expected: "Saved to EEPROM" message
Pass: Settings persist after reboot
Command: reset
Expected: All settings reset to factory defaults
Pass: Config reset, passwords reset to admin/guest
Command: location
Expected: Current lat/lon or "not set"
Command: location 45.464161 9.191383
Expected: Location updated confirmation
Pass: Location saved and included in ADVERT
Command: location clear
Expected: Location cleared
Pass: ADVERT no longer includes location
Command: time
Expected: Current timestamp and sync status
Pass: Shows timestamp (0 if not synced)
Command: time 1705936800
Expected: Time set to specified Unix timestamp
Pass: Time updated, isSynchronized() returns true
Command: nodetype chat
Expected: Node type changed to CHAT (0x81)
Pass: ADVERT flags show chat type
Command: nodetype repeater
Expected: Node type changed to REPEATER (0x01)
Pass: ADVERT flags show repeater type
Command: alert
Expected: Alert enabled/disabled status, destination if set
Command: alert on
Expected: Alerts enabled (requires destination to be set)
Command: alert off
Expected: Alerts disabled
Command: alert dest <32-byte-pubkey-hex>
Expected: Alert destination set
Command: alert test
Expected: Test alert sent to configured destination
Pass: Alert message transmitted
Command: password
Expected: Current admin and guest passwords displayed
Command: password admin newadminpass
Command: password guest newguestpass
Expected: Passwords updated
Pass: New passwords work for remote CLI auth
Command: reboot
Expected: Device reboots, reconnects to serial
Pass: Device restarts, shows boot messages
Connect to serial and send these commands in sequence:
# Basic functionality test sequence
echo "help" > /dev/ttyUSB0
sleep 1
echo "status" > /dev/ttyUSB0
sleep 1
echo "stats" > /dev/ttyUSB0
sleep 1
echo "identity" > /dev/ttyUSB0
sleep 1
echo "telemetry" > /dev/ttyUSB0
sleep 1
echo "nodes" > /dev/ttyUSB0
sleep 1
echo "contacts" > /dev/ttyUSB0
sleep 1
echo "advert" > /dev/ttyUSB0
sleep 2
echo "stats" > /dev/ttyUSB0| Action | Expected LED |
|---|---|
| Boot | Brief flash |
| RX packet | Green flash |
| TX packet | Violet (purple) flash |
| Error | Red solid |
- Install MeshCore app (Android/iOS)
- Configure app for same frequency/region as node
- Start app scanning
- Send
advertcommand on node - Pass: Node appears in app with correct name and type
| Test | Command | Expected | Actual | Pass/Fail |
|---|---|---|---|---|
| 1.1 | help | Command list | ||
| 1.2 | status | System info | ||
| 1.3 | stats | Counters | ||
| 2.1 | identity | Public key | ||
| 3.1 | advert | TX sent | ||
| 4.1 | telemetry | Batt/Temp | ||
| 5.3 | save | EEPROM saved | ||
| 11.1 | reboot | Restart |
- Time sync requires receiving ADVERT from another synced node
- Alert/Report features require valid destination public key
- Some commands only available in non-LITE_MODE builds
- Deep sleep may interfere with serial reception
No serial output: Check baud rate (115200), verify SILENT mode not enabled
Commands not recognized: Ensure complete command sent with newline
ADVERT not visible in app: Verify frequency/region match, check syncword (0x12)
Radio errors: Check antenna connection, verify radio initialization in boot log