driver_rtlsdr 0.3.3
driver_rtlsdr: ^0.3.3 copied to clipboard
Full RTL-SDR (RTL2832U) stack for Flutter/Android in one package: native USB/FFI driver (tuning, IQ streaming, WFM/NFM/AM/SSB demodulation, stereo, RDS, spectrum, recording, gain), a testable ChangeNo [...]
0.3.3 #
- CI: release workflow now also builds
rtlsdr_mobile's release APK and publishes it as a standalone GitHub release asset (previously only theexample/app's APK was built, bundled inside the release zip). - CI: each release now also publishes a fixed-name
rtlsdr_mobile-latest.apkand alatest.jsonmanifest (version, download URLs, sha256), so.../releases/latest/download/rtlsdr_mobile-latest.apkand.../releases/latest/download/latest.jsonalways resolve to the newest build regardless of version — usable as stable links from an external site.
0.3.2 #
- Fixed
SpectrumScope/SpectrumTunerdrag-to-tune: it used to retune to the finger's absolute position on every drag update, which made a slow, deliberate sweep across the band impossible — the smallest hand tremor and the whole visible span jumped. Dragging now pans by the incremental delta instead (drag right "pulls" lower frequencies toward the center, like panning a horizontal list), restoring the feel of the original pre-merge app widget this regressed from. Tap-to-tune (retune exactly under a single tap) is unchanged. - Added
FrequencyReadout.minStepHz: sets the Hz value of the rightmost digit shown (default 1, unchanged). Pair with a lowerdigitCount(e.g.digitCount: 7, minStepHz: 1000) to drop the ones/tens/hundreds-of-Hz digits RTL-SDR tuning never needs — they always read "0" in practice — leaving fewer, bigger digit cells that are easier to tap. - Added
rtlsdr_mobile/to this repo: a complete reference app (USB permission flow, tuning, WFM stereo/RDS, band scan, presets, recording with a foreground service, spectrum scope + waterfall) built on this package, with its own branding (adaptive launcher icon + native splash screen) — screenshots in the main README. Previously an external sibling project; now bundled here alongside the existing minimalexample/.
0.3.1 #
- No code changes. Adds
.zenodo.json(release archiving metadata) and re-tags to trigger Zenodo's GitHub integration, now enabled for this repo, so this and future releases are archived on Zenodo with a DOI.
0.3.0 #
- Merged the
core_rtlsdrandwidget_rtlsdrpackages into this one.driver_rtlsdrnow ships the full stack in a single dependency:- Layer 1 (unchanged): native USB/FFI driver —
NativeBindings,UsbChannel/UsbState,DownloadsChannel,DemodMode. - Layer 2 (from
core_rtlsdr): a testable radio engine —RtlSdrDriver/NativeRtlSdrDriver, and theChangeNotifiercontrollersRadioController,SpectrumController,RdsController,RecordingController,ScanController,PresetsController, plus preset storage (PresetsRepository,SharedPreferencesPresetsRepository). Test doubles (FakeRtlSdrDriver,FakeDownloadsChannel,InMemoryPresetsRepository) are exported frompackage:driver_rtlsdr/testing.dart. - Layer 3 (from
widget_rtlsdr): a gqrx-inspired widget library —SpectrumScope,WaterfallView,SpectrumTuner,FrequencyReadout,SignalMeter,PowerReadout, per-controller panels (GainPanel,SquelchPanel,StereoRdsPanel,RecordingPanel,ScanPanel,PresetsPanel,StatsPanel,UsbStatusBanner), theming (RtlSdrTheme/RtlSdrThemeData) and full screens (RtlSdrImmersiveScreen,RtlSdrSettingsScreen,RtlSdrSettingSectionScreen). - Added dependencies:
path_provider,shared_preferences(dev:path_provider_platform_interface). - All 136 tests from the three packages now run together here; no
breaking changes to existing
driver_rtlsdrexports. core_rtlsdrandwidget_rtlsdrare no longer needed as separate dependencies — consumers of those packages should depend ondriver_rtlsdralone going forward.
- Layer 1 (unchanged): native USB/FFI driver —
0.2.1 #
- CI fix:
dart formatonlib/src/downloads_channel.dart(0.2.0 shipped with one un-formatted line, failing theanalyze + unit (host)CI job'sdart format --set-exit-if-changedcheck — the release itself, which doesn't run that check, was unaffected).
0.2.0 #
- Added fd-based recording:
shim_start_recording_fd/shim_start_iq_recording_fd(native,rtlsdr_shim.c/.h) andwav_writer_open_fd/iq_writer_open_fd(fdopeninstead offopen,android/src/main/cpp/dsp/), plusNativeBindings.shimStartRecordingFd/shimStartIqRecordingFd— for writing to destinations with no plain filesystem path, like Android's scoped-storage-gated public Downloads folder. - Added
DownloadsChannel:openDownloadsFd/finishDownloadsFd(KotlinMediaStore.Downloadsinsert +ContentResolver.openFileDescriptor, API 29+ only — there's noMediaStore.Downloadscollection on older versions, callers should fall back to their own path-based default) andshareFile(Android's native share sheet — acontent://URI shares directly, a plain path is resolved to one first via a new bundledFileProvider, since rawfile://URIs have been blocked in share intents since API 24). - New
<provider>(${applicationId}.driver_rtlsdr.fileprovider) +res/xml/driver_rtlsdr_file_paths.xmlinAndroidManifest.xml, scoped to the app-specific external storageRecordingsdirectory this driver's path-based recording already writes into. No new permission needed for either the MediaStore or FileProvider paths.
0.1.2 #
- CI: fixed pub.flutter-io.cn auto-publish, which had silently failed for every
release so far (0.0.2, 0.1.0, 0.1.1) — the workflow was missing the
dart-lang/setup-dart@v1step that actually configures OIDC credentials, soflutter pub publishhad nothing to authenticate with and fell back to an interactive login flow that just hangs in CI.
0.1.1 #
- Example app: mode selector now covers all 5
DemodModevalues (added USB/LSB), plus PCM and raw I/Q recording controls with live bytes-written stats — exercises the whole new API surface manually, not just whatintegration_testtouches. - Validated SSB (USB/LSB) demodulation and raw I/Q recording end-to-end on
a real RTL2838U dongle (moto g35 5G, Android 15, over Wi-Fi ADB): both
sidebands ran without error at plausible RF/audio levels (confirmed via
the native
dsp_thread_mainlog line, not just the UI), and both a.cu8capture (byte mean ≈127.5, matching the expected offset-binary ADC center) and a.wavrecording (correct mono/32kHz header, valid RIFF size fixup) were pulled off the device and inspected. First time either recording path or SSB has run against real hardware rather than just the emulator/synthetic tests.
0.1.0 #
- Added a component-by-component reference doc (
docs/index.html) for the native C/C++ core and its Dart bindings. - Added SSB demodulation (
DemodMode.usb/.lsb), phasing method — Hilbert transform on Q with a matched delay on I, so the unwanted sideband is actually rejected (android/src/main/cpp/dsp/demod_ssb.c). Squelch now applies to USB/LSB too (only WFM doesn't squelch). Verified against a synthetic single-tone signal intool/native_tests/test_demod_ssb.c(host-only, no hardware/emulator needed — see that file for how to run it), since there's no existing native DSP test harness in this repo. - Added raw I/Q recording (
shimStartIqRecording/shimStopIqRecording), independent of the existing demodulated-PCM recording — dumps the interleaved 8-bit unsigned I/Q exactly as the dongle sends it, tapped before decimation/demodulation (android/src/main/cpp/dsp/iq_writer.c), in the same.cu8formatrtl_sdr/GNU Radio/gqrx use for raw captures. NewShimStats.iqRecordingBytesWrittenfield (shim_stats_tgrew from 40 to 48 bytes — see the updated FFI layout test).
0.0.2 #
- Translated the entire codebase (comments, docs, log/error messages) from Portuguese to English in preparation for open-sourcing the project.
- Added CI (
flutter analyze/flutter testfor the plugin and example app, plus a full native Android build) and a tag-triggered release workflow that publishes a zipped, versioned build and auto-publishes to pub.flutter-io.cn. - Added
CONTRIBUTING.mdand expanded Dart unit test coverage (UsbState/UsbDeviceInfo,NativeLibrary).
0.0.1 #
- Initial extraction of the native driver (USB, tuning, streaming,
WFM/NFM/AM demodulation with stereo and RDS, spectrum, recording,
gain/squelch) from the
rtl-sdr mobileapp as a reusable Flutter Android plugin. - Native core (C, GPLv2) identical to the source app — see
../rtl-sdr mobile/docs/how-it-was-built.mdfor how it was designed and validated against real hardware. - Public Dart API:
UsbState/UsbChannel(USB permission/attach),NativeBindings(direct FFI tortlsdr_shim.h),DemodMode,ShimStats,ShimRdsInfo. example/with a minimal working app (permission → tuning → streaming → live statistics).