core_rtlsdr 0.2.0
core_rtlsdr: ^0.2.0 copied to clipboard
Testable radio engine for RTL-SDR on Android/Flutter: tuning, streaming, demodulation, gain, squelch, stereo/RDS, spectrum, recording, band scan and presets as ChangeNotifier controllers on top of the [...]
0.2.0 #
- Bumped the
driver_rtlsdrdependency to^0.2.0for its new fd-based recording API (startRecordingFd/startIqRecordingFdonNativeBindings, plusDownloadsChannel). - Added
RecordingController.startRecordingToDownloads/startIqRecordingToDownloads: records into the real, shared Downloads folder via Android'sMediaStore(API 29+) instead of app-specific storage. Falls back to the existingdefaultRecordingPath/startRecording(path)flow automatically on any failure opening the MediaStore entry (in practice: Android below API 29, where theMediaStore.Downloadscollection doesn't exist and there's no plain path into the public Downloads folder to use instead) — the feature degrades gracefully rather than erroring out. - Added
RecordingController.shareRecording/shareIqRecording: shares the last completed recording via Android's native share sheet, regardless of which flow started it (Downloads/MediaStore shares bycontent://URI directly; a plain-path recording is resolved to a shareable URI via a bundledFileProviderfirst). RtlSdrDriverinterface +NativeRtlSdrDriver: addedstartRecordingFd/startIqRecordingFd.FakeRtlSdrDriver(testing.dart): added matching fakes (recordingFd/iqRecordingFdfields). NewFakeDownloadsChannel(testing.dart) makes all of the above fully unit-testable on a host, no Android device/emulator needed.
0.1.0 #
- Bumped the
driver_rtlsdrdependency from^0.0.2to^0.1.2to pick up SSB demodulation and raw I/Q recording (0.0.2's tight caret constraint couldn't resolve past0.0.xat all, so this package was stuck behind everydriver_rtlsdrrelease since). - Added raw I/Q recording (
.cu8, pre-demodulation), independent of the existing demodulated-PCM recording — both can run at once:RtlSdrDriver.startIqRecording/stopIqRecording/isIqRecording,RecordingController.startIqRecording/stopIqRecording(+isIqRecording/currentIqFilePath/lastIqRecordingPath/lastIqError),defaultIqRecordingPath/buildIqRecordingFileName, and a newRadioStats.iqRecordingBytesWritten(mirrored onRadioController) for live progress. - Example app: the demod mode selector now covers all 5
DemodModevalues (added USB/LSB), and the recording section now has independent PCM/I·Q controls with live bytes-written stats for both — exercising the whole new API surface manually, not just whatintegration_testtouches. - Added a tag-triggered
publish.ymlworkflow usingdart-lang/setup-dart's reusablepublish.yml(OIDC trusted publishing) — simpler and less brittle than a hand-rolledpub publishstep, and avoids a bug the previous approach had (missing thedart-lang/setup-dartstep that actually configures OIDC credentials, since fixed the same way indriver_rtlsdr). The hand-rolledpublish-pub-devjob inrelease.ymlis removed in favor of this dedicated workflow.
0.0.2 #
- Switched the
driver_rtlsdrdependency from a localpath:reference to the published^0.0.2on pub.flutter-io.cn — no more monorepo checkout required to build this package. Requires^0.0.2specifically:0.0.1's Android build only targetsarm64-v8a/armeabi-v7a, which made the on-device integration test fail on the CI's x86_64 emulator (the native library simply wasn't packaged for that ABI) —0.0.2adds the opt-in x86_64 build needed there. - Fixed the on-device integration test job in CI: the arm64-v8a emulator on
GitHub's shared macOS runners can't hardware-accelerate
(
HVF error: HV_UNSUPPORTED) — switched to a KVM-accelerated x86_64 emulator onubuntu-latest, matchingdriver_rtlsdr's own CI fix. - Release workflow: the example APK is now attached to GitHub Releases as
its own downloadable asset (previously only bundled inside the zip), and
added a
publish-pub-devjob (OIDC trusted publishing, with a timeout so a not-yet-configured trusted-publishing setup fails in minutes instead of hanging) so tagging a release also publishes to pub.flutter-io.cn. - README: expanded the single minimal snippet into an Android setup section
plus 10 numbered usage examples (USB, tuning, demod mode, gain, stereo/
RDS, spectrum, recording, scanning, presets, full
providercomposition) and 3 moreFakeRtlSdrDrivertesting examples. Added pub.flutter-io.cn/CI badges.
0.0.1 #
- Initial release: a testable radio engine on top of
driver_rtlsdr. RtlSdrDriverinterface +NativeRtlSdrDriver(real, Android-only adapter overdriver_rtlsdr'sNativeBindings) +FakeRtlSdrDriver(package:core_rtlsdr/testing.dart), so every controller is unit -testable on a host with no dongle, emulator or Android device.- Controllers:
RadioController(tuning/streaming/demod/gain/squelch/ stereo, ownsspectrumController/rdsController),SpectrumController,RdsController,RecordingController(+defaultRecordingPath),ScanController,PresetsController(+PresetsRepository,SharedPreferencesPresetsRepository,InMemoryPresetsRepository). Ported from thertl-sdr mobilereference app'slib/radio/controllers, decoupled from FFI/dart:ioand given full unit test coverage. - Re-exports
UsbState/UsbChannel/UsbDeviceInfo/UsbConnectionStatus/DemodModefromdriver_rtlsdr, so consumers only need to depend on this one package. example/: a complete Flutter app (USB permission → tuning → mode/gain/ squelch → stereo/RDS → spectrum → recording → band scan → presets) exercising every controller through a plain Material UI, plus anintegration_test/provingNativeRtlSdrDriverreacheslibnative_rtlsdr.soon-device.- CI (
flutter analyze/flutter testfor the package and example app, a debug APK build, and an on-device integration test matrix) and a tag-triggered release workflow.