Skip to content

Feature Flags

Complete reference for compile-time feature flags defined in nanovna.h.

//#define __MS5351__ // Original MS5351 synthesizer
#define __ZEETK__ // ZeeTK NE602A mixer (default)
FlagEffect
__ZEETK__ZeeTK NE602A mixer support, lower minimum frequency (600 Hz), threshold 300 MHz
__MS5351__Original MS5351/SA612A, minimum 1600 Hz, threshold 290 MHz

// F303 (NanoVNA-H4)
#define LCD_DRIVER_ST7796S
#define LCD_480x320
// F072 (NanoVNA-H) - auto-detect
#define LCD_DRIVER_ILI9341
#define LCD_DRIVER_ST7789
#define LCD_320x240
FlagDescriptionDefault
__USE_DISPLAY_DMA__DMA mode for LCD writesEnabled
__LCD_BRIGHTNESS__Brightness control menuF303 only
__FLIP_DISPLAY__Allow 180-degree rotationEnabled
_USE_SHADOW_TEXT_Shadow on plot textEnabled
__VNA_FAST_LINES__Faster line drawingDisabled

FlagDescriptionDefault
__DFU_SOFTWARE_MODE__Enter DFU from menu/commandEnabled
__USE_RTC__Real-time clock supportEnabled
__USE_BACKUP__RTC backup registersEnabled
__USE_SD_CARD__SD card file operationsEnabled
__USB_UID__Unique USB serial stringEnabled
__USE_SERIAL_CONSOLE__Serial port consoleEnabled
__USE_GRID_VALUES__Show Y-axis valuesEnabled
__REMOTE_DESKTOP__Remote control supportEnabled
__USE_SMOOTH__Data smoothing optionEnabled
__DIGIT_SEPARATOR__Configurable decimal separatorEnabled

FlagDescriptionDefault
__VNA_USE_MATH_TABLES__Precomputed sin/cos tablesEnabled
__USE_VNA_MATH__Fast math approximationsEnabled
USE_FFT_WINDOW_BUFFERCache FFT window functionDisabled
__USE_DSP__Cortex-M4 DSP instructionsF303 only

When __VNA_USE_MATH_TABLES__ is enabled:

  • 512-entry sin/cos table
  • Maximum error: 4e-7
  • Also used for FFT calculations
  • Saves significant flash space

#define __VNA_MEASURE_MODULE__ // Master enable

When enabled, additional flags become available:

FlagDescription
__USE_LC_MATCHING__L/C matching calculator
__S21_MEASURE__S21 component measurements
__S11_CABLE_MEASURE__Cable length/loss (S11)
__S11_RESONANCE_MEASURE__Resonance finder (S11)
enum {
MEASURE_NONE = 0,
MEASURE_LC_MATH, // LC matching network
MEASURE_SHUNT_LC, // Shunt LC component
MEASURE_SERIES_LC, // Series LC component
MEASURE_SERIES_XTAL, // Crystal parameters
MEASURE_FILTER, // Filter characterization
MEASURE_S11_CABLE, // Cable length/loss
MEASURE_S11_RESONANCE, // Resonance frequency
MEASURE_END
};

When __USE_SD_CARD__ is enabled:

FlagDescriptionDefault
__SD_CARD_LOAD__Load config.ini on bootEnabled
__SD_CARD_DUMP_TIFF__TIFF screenshot formatEnabled
__SD_CARD_DUMP_FIRMWARE__Dump firmware to SDEnabled
__SD_FILE_BROWSER__File browser UIEnabled

FlagDescription
__CAPTURE_RLE8__RLE8 compressed capture format

FlagDescriptionDefault
__VNA_Z_RENORMALIZATION__Port-Z renormalizationDisabled
USE_VARIABLE_OFFSETRuntime IF frequency tableEnabled
USE_VARIABLE_OFFSET_MENUIF selection menuEnabled

These flags enable additional shell commands for debugging.

FlagCommandDescription
ENABLE_THREADS_COMMANDthreadsThread information
ENABLE_STAT_COMMANDstatSystem statistics
ENABLE_GAIN_COMMANDgainCodec gain control
ENABLE_TEST_COMMANDtestHardware tests
ENABLE_I2C_COMMANDi2cI2C bus access
ENABLE_LCD_COMMANDlcdLCD controller access
ENABLE_SI5351_REG_WRITEsiSi5351 register access
ENABLE_BAND_COMMANDbandManual band override
ENABLE_SAMPLE_COMMANDsampleRaw sample values
ENABLED_DUMP_COMMANDdumpRaw ADC dump

// Minimum frequency (depends on mixer)
#ifdef __ZEETK__
#define FREQUENCY_MIN 600 // 600 Hz
#else
#define FREQUENCY_MIN 1600 // 1600 Hz
#endif
// Maximum frequency
#define FREQUENCY_MAX 2000000000U // 2 GHz
// Harmonic threshold
#ifdef __ZEETK__
#define FREQUENCY_THRESHOLD 300000110U // 300 MHz
#else
#define FREQUENCY_THRESHOLD 290000110U // 290 MHz
#endif
// F303 target
#define SWEEP_POINTS_MAX 401
#define SWEEP_POINTS_MIN 21
// F072 target
#define SWEEP_POINTS_MAX 101
#define SWEEP_POINTS_MIN 21
#define AUDIO_ADC_FREQ_K 192 // ADC rate in kHz
#define AUDIO_SAMPLES_COUNT 48 // Samples per measurement
#define FREQUENCY_IF_K 12 // IF frequency in kHz

Defined automatically for STM32F072:

#define ARM_MATH_CM0
// No FPU
// No __USE_DSP__

To enable a disabled feature:

  1. Open nanovna.h
  2. Uncomment or add the desired #define
  3. Rebuild firmware

Example:

// Enable Z renormalization
#define __VNA_Z_RENORMALIZATION__
// Enable fast line drawing
#define __VNA_FAST_LINES__

__USE_SD_CARD__
├── __USE_RTC__ (required for timestamps)
├── __SD_CARD_LOAD__
├── __SD_CARD_DUMP_TIFF__
├── __SD_CARD_DUMP_FIRMWARE__
└── __SD_FILE_BROWSER__
__VNA_MEASURE_MODULE__
├── __USE_LC_MATCHING__
├── __S21_MEASURE__
├── __S11_CABLE_MEASURE__
└── __S11_RESONANCE_MEASURE__
USE_VARIABLE_OFFSET
└── USE_VARIABLE_OFFSET_MENU
__LCD_BRIGHTNESS__
└── __VNA_ENABLE_DAC__ (H4 uses DAC for brightness)

Set via Makefile UDEFS:

# F303 build
UDEFS = -DARM_MATH_CM4 -DVERSION=\"$(VERSION)\" -DNANOVNA_F303
# F072 build
UDEFS = -DARM_MATH_CM0 -DVERSION=\"$(VERSION)\"
# RTC source selection
UDEFS+= -DVNA_AUTO_SELECT_RTC_SOURCE
# Or force LSE:
# UDEFS+= -DVNA_USE_LSE