mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
feat(fm): add universal FM RAW decoder output
This commit is contained in:
+14
-14
@@ -24,19 +24,14 @@ unit CATEngine;
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, Math, SyncObjs;
|
||||
Classes, SysUtils, Math, SyncObjs, RadioModes;
|
||||
|
||||
const
|
||||
CAT_ERROR = '?;';
|
||||
CAT_EXEC_ERROR = 'E;';
|
||||
CAT_ID_NUM = '019'; // TS-2000 compatible
|
||||
|
||||
// Mode mapping ewsdr → CAT (зеркало MODE_* из WDSPEngine)
|
||||
MODE_LSB = 0; MODE_USB = 1; MODE_DSB = 2;
|
||||
MODE_CWL = 3; MODE_CWU = 4; MODE_FM = 5;
|
||||
MODE_AM = 6; MODE_SAM = 7;
|
||||
MODE_DIGU = 8; MODE_DIGL = 9; MODE_WFM = 10; MODE_DMR = 11;
|
||||
CAT_MODE_COUNT = 12;
|
||||
CAT_MODE_COUNT = RadioModes.MODE_COUNT;
|
||||
|
||||
// FM repeater offset directions — зеркало FMRepeater.RPT_* (значения должны
|
||||
// совпадать: контроллер хранит FFMRptDir в этих же кодах).
|
||||
@@ -392,6 +387,7 @@ begin
|
||||
MODE_FM: Result := 4;
|
||||
MODE_WFM: Result := 4; // treated as FM
|
||||
MODE_DMR: Result := 4; // DMR RF transport is narrow FM
|
||||
MODE_FMRAW: Result := 4; // raw discriminator is still FM transport
|
||||
MODE_AM: Result := 5;
|
||||
MODE_SAM: Result := 5; // treated as AM
|
||||
MODE_DIGU: Result := 6; // Kenwood FSK
|
||||
@@ -1793,20 +1789,24 @@ end;
|
||||
|
||||
function TCATEngine.ZZML: string;
|
||||
// ZZML: mode list (returns all mode names)
|
||||
begin Result := 'LSB USB DSB CWL CWU FM AM SAM DIGUDIGLWFM DMR '; end;
|
||||
begin Result := 'LSB USB DSB CWL CWU FM AM SAM DIGUDIGLWFM DMR FMRAW'; end;
|
||||
|
||||
function TCATEngine.ZZMN(const s: string): string;
|
||||
// ZZMN: mode name — returns mode name for given mode number.
|
||||
// Индекс режима теперь двузначный (0..10), но односимвольный запрос
|
||||
// Индекс режима двузначный (MODE_MIN..MODE_MAX), но односимвольный запрос
|
||||
// продолжаем принимать — старые клиенты шлют одну цифру.
|
||||
var k: Integer;
|
||||
names: array[0..CAT_MODE_COUNT-1] of string;
|
||||
begin
|
||||
names[0]:='LSB'; names[1]:='USB'; names[2]:='DSB'; names[3]:='CWL';
|
||||
names[4]:='CWU'; names[5]:='FM'; names[6]:='AM'; names[7]:='SAM';
|
||||
names[8]:='DIGU'; names[9]:='DIGL'; names[10]:='WFM'; names[11]:='DMR';
|
||||
names[MODE_LSB]:='LSB'; names[MODE_USB]:='USB';
|
||||
names[MODE_DSB]:='DSB'; names[MODE_CWL]:='CWL';
|
||||
names[MODE_CWU]:='CWU'; names[MODE_FM]:='FM';
|
||||
names[MODE_AM]:='AM'; names[MODE_SAM]:='SAM';
|
||||
names[MODE_DIGU]:='DIGU'; names[MODE_DIGL]:='DIGL';
|
||||
names[MODE_WFM]:='WFM'; names[MODE_DMR]:='DMR';
|
||||
names[MODE_FMRAW]:='FM RAW';
|
||||
if (Length(s) = 1) or (Length(s) = 2) then begin
|
||||
k := EnsureRange(StrToIntDef(s,0),0,CAT_MODE_COUNT-1);
|
||||
k := EnsureRange(StrToIntDef(s, MODE_MIN), MODE_MIN, MODE_MAX);
|
||||
Result := names[k];
|
||||
end else Result := CAT_ERROR;
|
||||
end;
|
||||
@@ -1819,7 +1819,7 @@ begin
|
||||
end;
|
||||
|
||||
function TCATEngine.ZZMV: string;
|
||||
// ZZMV: mode value — returns current mode index (ewsdr 0-7)
|
||||
// ZZMV: mode value — returns current ewsdr mode index (MODE_MIN..MODE_MAX)
|
||||
begin Result := Pad(SafeGetMode, 2); end;
|
||||
|
||||
function TCATEngine.ZZMY: string;
|
||||
|
||||
Reference in New Issue
Block a user