I think MODEM73 has the potential to become an excellent HF data transport for modern cross platform applications, particularly mobile applications.
The existing KISS-over-TCP interface and JSON control API are already a great foundation for applications to communicate with MODEM73.
The feature I would like to propose is separating the core modem/DSP functionality from the Linux specific audio, PTT, and hardware integration so that MODEM73 can be built as a reusable native library on:
- Linux
- Windows
- Android
- iOS
The goal would not necessarily be to make the existing MODEM73 UI run on mobile. Instead, the goal would be to make the underlying modem available to native applications.
Why this would be useful
There is a growing interest in using smartphones and tablets as the user interface for HF digital communications.
A modern application could provide a Signal/WhatsApp-style messaging experience while MODEM73 handles the actual RF transport.
Proposed Architecture
Ideally the modem could be divided into three relatively independent layers:
- Portable MODEM73 Core
This would contain the platform independent DSP/modem functionality:
- OFDM
- ROBUST
- MFSK
- framing
- modulation/demodulation
- FEC
- packet processing
- modem state
- statistics
This should have no dependency on Linux audio devices, /dev/tty*, ncurses
- Platform Audio Interface
A small abstraction such as:
class AudioInterface {
public:
virtual bool start() = 0;
virtual void stop() = 0;
virtual void writeSamples(const float* samples, size_t count) = 0;
virtual size_t readSamples(float* samples, size_t maxCount) = 0;
};
Platform implementations could then use:
- ALSA/PulseAudio on Linux
- CoreAudio/AVAudioEngine on iOS
- Android AudioRecord/AudioTrack
- WASM/WebAudio
- other desktop audio APIs
- Application/API Layer
Keep the existing KISS and JSON APIs, but ideally make them available directly to an embedding application without requiring a TCP socket when MODEM73 is running inside the same process.
while the existing TCP/KISS architecture remains available for traditional applications.
Android
Android support would be particularly valuable.
The MODEM73 core could potentially be compiled using the Android NDK and exposed through JNI/Kotlin bindings.
This would allow an Android application to communicate directly with the modem while using:
- USB audio interfaces
- USB-connected radios where Android permits it
- Bluetooth/BLE interfaces
- Wi-Fi/network-connected radios
- external audio interfaces
The application could then provide its own UI rather than requiring a Linux computer.
iOS
iOS support would be even more interesting because iOS has stricter hardware access restrictions.
A platform-independent modem core would allow an iOS application to handle the DSP locally while communicating with external radio hardware through supported interfaces such as:
- BLE
- Wi-Fi
- network connected radio interfaces
- compatible external audio hardware
The iOS implementation would not necessarily need to duplicate the Linux PTT/hardware code. It would simply provide an appropriate platform abstraction.
Mobile Audio Processing
One particularly interesting possibility would be to allow the modem core to operate directly on audio sample buffers rather than requiring it to own the audio device.
For example:
Application Audio Input
|
v
MODEM73::process_rx(samples)
|
v
decoded frames
and:
application
|
MODEM73::encode(frame)
|
audio samples
|
radio
This would make MODEM73 much easier to embed into Android, iOS,, and other environments.
Thank you for the work on MODEM73 I think this project has the potential to become a very important building block for modern HF data applications.
I think MODEM73 has the potential to become an excellent HF data transport for modern cross platform applications, particularly mobile applications.
The existing KISS-over-TCP interface and JSON control API are already a great foundation for applications to communicate with MODEM73.
The feature I would like to propose is separating the core modem/DSP functionality from the Linux specific audio, PTT, and hardware integration so that MODEM73 can be built as a reusable native library on:
The goal would not necessarily be to make the existing MODEM73 UI run on mobile. Instead, the goal would be to make the underlying modem available to native applications.
Why this would be useful
There is a growing interest in using smartphones and tablets as the user interface for HF digital communications.
A modern application could provide a Signal/WhatsApp-style messaging experience while MODEM73 handles the actual RF transport.
Proposed Architecture
Ideally the modem could be divided into three relatively independent layers:
This would contain the platform independent DSP/modem functionality:
This should have no dependency on Linux audio devices, /dev/tty*, ncurses
A small abstraction such as:
class AudioInterface {
public:
virtual bool start() = 0;
virtual void stop() = 0;
virtual void writeSamples(const float* samples, size_t count) = 0;
virtual size_t readSamples(float* samples, size_t maxCount) = 0;
};
Platform implementations could then use:
Keep the existing KISS and JSON APIs, but ideally make them available directly to an embedding application without requiring a TCP socket when MODEM73 is running inside the same process.
while the existing TCP/KISS architecture remains available for traditional applications.
Android
Android support would be particularly valuable.
The MODEM73 core could potentially be compiled using the Android NDK and exposed through JNI/Kotlin bindings.
This would allow an Android application to communicate directly with the modem while using:
The application could then provide its own UI rather than requiring a Linux computer.
iOS
iOS support would be even more interesting because iOS has stricter hardware access restrictions.
A platform-independent modem core would allow an iOS application to handle the DSP locally while communicating with external radio hardware through supported interfaces such as:
The iOS implementation would not necessarily need to duplicate the Linux PTT/hardware code. It would simply provide an appropriate platform abstraction.
Mobile Audio Processing
One particularly interesting possibility would be to allow the modem core to operate directly on audio sample buffers rather than requiring it to own the audio device.
For example:
Application Audio Input
|
v
MODEM73::process_rx(samples)
|
v
decoded frames
and:
application
|
MODEM73::encode(frame)
|
audio samples
|
radio
This would make MODEM73 much easier to embed into Android, iOS,, and other environments.
Thank you for the work on MODEM73 I think this project has the potential to become a very important building block for modern HF data applications.