Skip to content

Source File Map

Complete reference for all source files in the NanoVNA-H firmware.

FileLinesPurpose
main.c~3100Entry point, sweep loop, shell commands, calibration
nanovna.h~1450Central header with all defines, structs, feature flags
common.c~200String parsing, utility functions

The main source file contains:

  • Shell command implementations (40+ commands)
  • Sweep thread and measurement loop
  • Calibration routines (SOLT, enhanced response)
  • Frequency and bandwidth management
  • USB CDC command processing

FileLinesPurpose
ui.c~2800Touch UI, menu system, keyboard input
plot.c~1400Trace rendering, grid, markers, cell-based redraw
lcd.c~800LCD driver, SPI communication, SD card interface

ui.c implements:

  • Hierarchical menu tree (menu_top, menu_display, menu_marker, etc.)
  • Touch event processing and calibration
  • On-screen keyboard for numeric/text input
  • Lever (rotary encoder) handling

plot.c implements:

  • Cell-based dirty-region rendering (64x32 pixel cells)
  • 30 trace type calculations and display
  • Smith chart and polar plot rendering
  • Marker display and search functions

FileLinesPurpose
dsp.c~300DSP processing, CM4 instructions (F303)
vna_math.c~400Math tables, FFT, trigonometric functions
vna_math.h~100Math function declarations
Audio Samples (I2S) → DFT/FFT → Gamma Calculation → Calibration → Display

dsp.c contains:

  • Sin/cos lookup tables for DFT
  • Sample accumulation and averaging
  • Cortex-M4 DSP instruction wrappers (F303 only)

vna_math.c contains:

  • 512-entry sin/cos table (when __VNA_USE_MATH_TABLES__ enabled)
  • FFT implementation for time domain
  • Fast math approximations (__USE_VNA_MATH__)

FileLinesPurpose
si5351.c~600Si5351/MS5351 frequency synthesizer driver
tlv320aic3204.c~300TLV320AIC3204 audio codec driver
hardware.c~400ADC, I2C, RTC, flash, GPIO abstraction
hardware.h~330Hardware interface declarations
FunctionPurpose
si5351_init()Initialize synthesizer, detect variant
si5351_set_frequency()Set output frequency with PLL calculation
si5351_set_power()Set output drive strength
si5351_reset_pll()Reset PLL for frequency changes
FunctionPurpose
tlv320aic3204_init()Initialize codec, configure I2S
tlv320aic3204_select()Switch between CH0/CH1 measurement
tlv320aic3204_set_gain()Set analog gain for signal level

FileLinesPurpose
data_storage.c~200Flash read/write for calibration and config
flash.c~150Low-level flash erase and program
FunctionPurpose
caldata_save()Save calibration to flash slot
caldata_recall()Load calibration from flash slot
config_save()Save device configuration
config_recall()Load device configuration
clear_all_config_prop_data()Factory reset

FileLinesPurpose
usbcfg.c~250USB CDC configuration and descriptors

Implements USB CDC (Communications Device Class) for virtual COM port.


FileSizeDescription
fonts/Font5x7.c2 KBSmall font for status text
fonts/Font6x10.c3 KBNormal font (F072 default)
fonts/Font7x11b.c4 KBBold font (F303 default)
fonts/Font11x14.c8 KBLarge font for headers
fonts/numfont16x22.c6 KBNumeric keypad glyphs

FilePurpose
FatFs/ff.cFAT filesystem implementation
FatFs/ffunicode.cUnicode support for filenames
FatFs/ff.hFatFS API declarations
FatFs/ffconf.hFatFS configuration
FatFs/diskio.hDisk I/O interface

FilePurpose
NANOVNA_STM32_F072/board.hGPIO pin definitions
NANOVNA_STM32_F072/board.cBoard initialization
NANOVNA_STM32_F072/board.mkBuild configuration
NANOVNA_STM32_F072/STM32F072xB.ldLinker script
NANOVNA_STM32_F072/halconf.hHAL configuration
NANOVNA_STM32_F072/mcuconf.hMCU peripheral configuration
NANOVNA_STM32_F072/chconf.hChibiOS configuration

The ChibiOS directory contains the real-time operating system. Key components used:

ComponentPurpose
os/rt/Real-time kernel
os/hal/Hardware abstraction layer
os/hal/ports/STM32/STM32-specific HAL
os/common/startup/Startup code
os/hal/lib/streams/Stream I/O (used for shell)

FilePurpose
MakefileMain build configuration
NanoVNA_DAP.cfgOpenOCD debug configuration

main.c
├── nanovna.h (central header)
│ ├── hardware.h
│ └── vna_math.h
├── ch.h (ChibiOS kernel)
└── hal.h (ChibiOS HAL)
ui.c
├── nanovna.h
└── menu definitions
plot.c
├── nanovna.h
└── trace_info_list[], marker_info_list[]
lcd.c
├── nanovna.h
└── FatFs/ff.h (if SD card enabled)

Approximate compiled sizes (F072 target, -O2 LTO):

ComponentSize
main.c~25 KB
ui.c~18 KB
plot.c~12 KB
lcd.c~8 KB
si5351.c~4 KB
vna_math.c~6 KB
Fonts~20 KB
ChibiOS~15 KB
Total~110 KB

The F072 has 128 KB flash, leaving ~18 KB for calibration and configuration storage.