Skip to content

cizekmilan/dsfemon

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📡 dsfemon

A terminal-based DVB frontend monitor for Linux. It can be used as a more capable alternative to the basic femon tool from the dvb-apps package, especially on systems with many DVB frontends. dsfemon is designed for quick operational overview of tuner state, signal quality, tuning parameters, and service information in multistream backend environments, including IPTV backends.

📸 Screenshots

dsfemon main window

dsfemon demux detail

🎯 Overview

dsfemon is a fork and modernized continuation of the original Femon DVB frontend monitor developed by David Seidl in 2012.

It shows a compact live overview of DVB tuner state in a terminal UI and is intended for quickly checking frontend lock state, signal quality, DVB tuning parameters, and basic demux/service information from Linux DVB devices.

✨ Features

  • scans Linux DVB frontend devices under /dev/dvb
  • displays frontend type, name, and lock/status flags
  • shows signal and CNR/SNR values with terminal bars
  • reads modern DVBv5 properties when available
  • keeps legacy DVB ioctl fallbacks for signal and SNR bars
  • displays DVB delivery system, frequency, bandwidth, symbol rate, FEC, and modulation
  • reads PAT/PMT/NIT/SDT demux information and keeps multi-section NIT/SDT data stable
  • supports paging when many frontends are present
  • provides keyboard navigation with first/last item jumps
  • provides a configurable monitor refresh interval
  • shows a scrollable demux service detail screen with service type, audio/teletext/subtitle languages, provider, PCR PID, CA, and PMT stream information

⌨️ Controls

Key Action
Up / Down select frontend detail row or service row
Enter open demux detail
PgUp / PgDn switch page or scroll detail page
Home / End jump to first or last frontend/service
ESC return from detail view
Q quit

📦 Requirements

  • Linux with DVB device support
  • C++ compiler with C++11-era system headers
  • make
  • pkg-config
  • libncurses-dev / ncursesw
  • Linux DVB headers, usually provided by the system libc/kernel headers package

Debian/Ubuntu example:

sudo apt install build-essential pkg-config libncurses-dev

🔨 Building

make clean
make

The resulting binary is:

./dsfemon

Useful maintenance checks:

make format-check
make -B

Optional local install:

sudo make install

▶️ Running

Start the monitor with the default broad adapter scan:

./dsfemon

Additional commands and useful arguments:

# Show command-line help
./dsfemon --help

# Show version
./dsfemon --version

# Scan only selected adapters
./dsfemon --adapters 0,2

# Limit the number of frontends scanned per adapter
./dsfemon --subadapters 1

# Change the monitor refresh interval in milliseconds, allowed range 100-60000
./dsfemon --interval 1000

The refresh interval controls both the ncurses redraw cadence and the background frontend status collection cadence. Demux/SI data is still read continuously by the per-device demux reader threads.

🗂️ Project Structure

/
├── docs/
│   └── screenshots/
│       ├── dsfemon-main.gif             # main application screenshot
│       └── dsfemon-demux-detail.png     # demux detail screenshot
├── dsfemon.cpp                   # main ncurses loop, paging, and keyboard handling
├── command_line.*                # command-line options
├── device_discovery.*            # DVB device scanning and lifecycle
├── frontend_monitor.*            # DVBv5 property collection
├── frontend_status_cache.*       # background frontend status cache
├── frontend_status.*             # frontend status snapshot collection
├── frontend_view.*               # frontend/status rendering
├── demux_reader.cpp              # background PAT/PMT/NIT/SDT section reader
├── demux_detail_view.*           # fullscreen demux detail rendering and service navigation
├── demux_snapshot.cpp            # stable demux data copied for UI rendering
├── demux_view.*                  # demux/service summary rendering
├── si_parser.cpp                 # PSI/SI parser helpers
├── *_table.h                     # small PSI/SI table constants
├── ui_helpers.*                  # shared ncurses rendering helpers
├── ncurses_present.*             # terminal bar helpers
└── color.*                       # ncurses color pairs/macros

Status

  • ✅ modern build against ncursesw
  • ✅ default adapter scan starts at adapter 0
  • ✅ DVBv5 properties are read individually for better compatibility with older drivers
  • ✅ paging and keyboard navigation are implemented
  • Home / End jump to first/last frontend or service
  • ✅ demux detail shows a scrollable service table with service type, PMT/PCR PIDs, streams, audio/teletext/subtitle languages, CA, provider, and running status
  • ✅ demux detail keeps the last valid snapshot visible during transient SI/PMT refresh gaps
  • ✅ multi-section NIT/SDT caches keep network and service tables stable when broadcasts split them across sections

🙏 Acknowledgements

Special thanks to David Seidl, author of the original femon DVB frontend monitor from 2012.

This project is a modernized continuation of the original work, developed and published with the author's permission.

License

The original author granted permission to continue, modify and publicly distribute the project, provided that it remains aligned with open-source principles.

This continuation is distributed under the GNU GPL v3 license.

About

A terminal-based DVB frontend monitor for Linux, showing tuner status, signal quality, DVB parameters, and basic demux/service information in a compact ncurses interface.

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

  •  

Contributors