Skip to content

Feature Request: Portable MODEM73 Core for Android/iOS and Native Applications #77

Description

@doodle12345

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:

  1. 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

  1. 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
  1. 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.

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions