feat(fm): add universal FM RAW decoder output

This commit is contained in:
2026-07-16 18:58:28 +03:00
parent 3acd569da5
commit cd816c54d6
16 changed files with 656 additions and 148 deletions
+8 -5
View File
@@ -8,11 +8,13 @@ unit ChannelStore;
interface
uses
SysUtils, Classes, Math, fpJSON, jsonparser, jsonscanner, PlatformUtils;
SysUtils, Classes, Math, fpJSON, jsonparser, jsonscanner, PlatformUtils,
RadioModes;
const
CHANNELS_FILE = 'channels.json';
CHANNEL_MODE_MAX = 11; // LSB..DMR
CHANNEL_MODE_MIN = RadioModes.MODE_MIN;
CHANNEL_MODE_MAX = RadioModes.MODE_MAX;
type
TChannel = record
@@ -20,7 +22,7 @@ type
Name: string;
RXFreq: Double; // Hz
TXFreq: Double; // Hz
Mode: Integer; // 0=LSB ... 10=WFM 11=DMR
Mode: Integer; // RadioModes.MODE_* persisted index
RptDir: Integer; // 0=none 1=minus 2=plus
RptOffsetHz: Double; // Hz
CTCSSOn: Boolean;
@@ -59,7 +61,7 @@ begin
Ch.Name := 'New Channel';
Ch.RXFreq := 145500000.0;
Ch.TXFreq := 145500000.0;
Ch.Mode := 5; // FM
Ch.Mode := MODE_FM;
Ch.RptDir := 0;
Ch.RptOffsetHz := 600000.0;
Ch.CTCSSOn := False;
@@ -207,7 +209,8 @@ begin
Ch.Name := JS(O, 'name', 'Channel');
Ch.RXFreq := JD(O, 'rx_freq', 145500000.0);
Ch.TXFreq := JD(O, 'tx_freq', 145500000.0);
Ch.Mode := EnsureRange(JI(O, 'mode', 5), 0, CHANNEL_MODE_MAX);
Ch.Mode := EnsureRange(JI(O, 'mode', MODE_FM),
CHANNEL_MODE_MIN, CHANNEL_MODE_MAX);
Ch.RptDir := EnsureRange(JI(O, 'rpt_dir', 0), 0, 2);
Ch.RptOffsetHz:= JD(O, 'rpt_offset', 600000.0);
Ch.CTCSSOn := JB(O, 'ctcss_on', False);