Ways to Contribute
Report Bugs
Found an issue? Report it on GitHub with detailed information about the problem.
Submit Code
Fix bugs, add features, or improve performance by submitting pull requests.
Improve Documentation
Help others by improving documentation, adding examples, or writing tutorials.
Test & Verify
Test minimodem on different platforms and with various protocols.
Getting Started
Setting Up Development Environment
Project Structure
Code Architecture
Main Components
Main Components
minimodem.c
- Command-line parsing
- Main transmit/receive loops
- Protocol selection and configuration
- FSK modulation/demodulation algorithms
- FFT-based frequency detection
- Signal analysis and confidence calculation
- Audio backend abstraction layer
- Supports ALSA, PulseAudio, sndio, and file I/O
Audio Backends
Audio Backends
Each audio system has its own implementation:
- simpleaudio-alsa.c - ALSA support (Linux)
- simpleaudio-pulse.c - PulseAudio support
- simpleaudio-sndio.c - sndio support (BSD)
- simpleaudio-sndfile.c - File-based audio (all platforms)
- simpleaudio-benchmark.c - Performance testing
simpleaudio layer provides a unified interface.Data Framing
Data Framing
Protocol-specific framing implementations:
- databits_ascii.c - ASCII 8-N-1 framing
- databits_baudot.c - Baudot 5-N-1.5 framing
- databits_binary.c - Raw binary output
- databits_callerid.c - Caller-ID (MDMF/SDMF)
- databits_uic.c - UIC train protocol
Coding Guidelines
Code Style
- C Code
- Comments
- Error Handling
- Use 4-space indentation (spaces, not tabs)
- Opening braces on same line for functions
- K&R style for control structures
- Comment complex algorithms
- Keep lines under 80 characters where practical
Build Configuration
Minimodem uses autotools for build configuration: Adding new features:- Add detection to
configure.ac - Use conditional compilation:
- Update
Makefile.amif adding new files
--with-alsa/--without-alsa--with-pulseaudio/--without-pulseaudio--with-sndio/--without-sndio--with-sndfile/--without-sndfile--disable-benchmarks
Testing
Running Tests
Test Types
Self Tests (01-09)
Self Tests (01-09)
Basic round-trip tests at various baud rates:
- 1200 bps (Bell202)
- 300 bps (Bell103)
- RTTY (Baudot)
- Very low (0.5 bps) and very high (12000 bps) rates
- Float vs. integer samples
- LUT (lookup table) variations
Verification Tests (10-17)
Verification Tests (10-17)
Tests for perfect decoding with exact parameters:
- Confidence = infinity expected
- Rate perfect decoding
- Consistent TX output
- Various sample formats
Robustness Tests (21-41)
Robustness Tests (21-41)
Tests with challenging conditions:
- Rate slop (TX/RX baud rate mismatch)
- Amplitude variations
- Noise injection
- Pure frequencies vs. real-world signals
Protocol Tests (60-81)
Protocol Tests (60-81)
Specific protocol implementations:
- Multibyte characters
- Caller-ID (MDMF and SDMF)
- SAME protocol
- ASCII-7 mode
- TDD/TTY
Adding New Tests
Create a new test file intests/:
Contributing Code
Submitting Pull Requests
Make your changes
- Write clean, documented code
- Follow coding style guidelines
- Add tests if applicable
- Update documentation if needed
Pull Request Checklist
Bug Reports
Filing Issues
When reporting a bug, include:System Information
System Information
- Operating system and version
- Minimodem version:
minimodem --version - Audio backend being used (ALSA/PulseAudio/sndio)
- Hardware details (if relevant)
Reproduction Steps
Reproduction Steps
- Exact command(s) used
- Input data or file (if applicable)
- Expected behavior
- Actual behavior
Diagnostic Information
Diagnostic Information
- Complete error messages
- Output from
make check - Sample audio file (if problem is protocol-specific)
- Configuration options used:
./configure --help
Example Bug Report
Development Tips
Debug Builds
Verbose Output
Enable debug output in code:Or use
--verbose flag (if implemented).Audio Analysis
Use Audacity or similar tools to visualize generated audio files:
Valgrind
Check for memory leaks:
Documentation
Man Page
The man page source issrc/minimodem.1.in. It uses:
- Autoconf substitutions (e.g.,
@PACKAGE_VERSION@) - Standard man page formatting (groff)
- Update
minimodem.1.in - Run
./configureto regenerate - Test:
man -l src/minimodem.1
Code Comments
Important areas to document:- Public API functions
- Complex algorithms (especially FSK detection)
- Non-obvious design decisions
- Performance considerations
- Protocol specifications
Community
GitHub
Source code, issues, and pull requests
Mailing List
Contact: [email protected]
IRC/Forums
Check GitHub for community links
Credits
Minimodem is maintained by Kamal Mostafa ([email protected]). Major contributors:- Marcos Vives Del Sol - UIC-751-3 mode
- Nick Moriarty -
--tx-carrierfeature - Colin Ian King - Bug fixes and testing
- José Miguel Sánchez García - sndio backend
THANKS file for a complete list of contributors.
License
Minimodem is licensed under the GNU General Public License v3.0 or later (GPLv3+). By contributing, you agree that your contributions will be licensed under the same license.All contributions must be compatible with GPLv3+. Ensure you have the right to contribute any code or documentation you submit.
Questions?
If you have questions about contributing:- Check existing GitHub issues and pull requests
- Review this guide and the project documentation
- Ask on GitHub Discussions (if available)
- Contact the maintainer