{
  Copyright (C)
  2026 - Uladzimir Karpenka, EW8BAK

  This program is free software; you can redistribute it and/or
  modify it under the terms of the GNU General Public License
  as published by the Free Software Foundation; either version 2
  of the License, or (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
}

unit WDSP;

{
  Pascal/Lazarus binding for the WDSP (Wideband DSP) library.
  Автоматически переведено из заголовочного файла wdsp.h.

  Использование:
    1. Поместите wdsp.dll (Linux: libwdsp.so) рядом с исполняемым файлом.
    2. Подключите unit в секции uses: uses WDSP;
    3. Вызывайте функции напрямую, например: OpenChannel(0, 1024, ...);
}

{$IFDEF FPC}
  {$MODE Delphi}
{$ENDIF}

// Если wdsp.dll / libwdsp.so отсутствует — функции будут nil вместо краша.
// WDSPEngine.Open вернёт False и программа продолжит работу в демо-режиме.

{$IFDEF DARWIN}
  {$linklib wdsp}
{$ENDIF}

interface

uses
  SysUtils;

const
{$IFDEF WINDOWS}
  WDSP_LIB = 'wdsp.dll';
{$ENDIF}
{$IFDEF LINUX}
  WDSP_LIB = 'libwdsp.so';
{$ENDIF}
{$IFDEF DARWIN}
  WDSP_LIB = 'libwdsp.dylib';
{$ENDIF}

  // Analyzer detector modes
  DETECTOR_MODE_PEAK      = 0;
  DETECTOR_MODE_ROSENFELL = 1;
  DETECTOR_MODE_AVERAGE   = 2;
  DETECTOR_MODE_SAMPLE    = 3;
  DETECTOR_MODE_RMS       = 4;

  // Average hold/modes
  AVERAGE_PEAK_HOLD        = -1;
  AVERAGE_MODE_NONE        = 0;
  AVERAGE_MODE_RECURSIVE   = 1;
  AVERAGE_MODE_TIME_WINDOW  = 2;
  AVERAGE_MODE_LOG_RECURSIVE = 3;

type
  INREAL    = Single;
  OUTREAL   = Single;
  dINREAL   = Single;
  dOUTREAL  = Single;
  PDWORD    = ^DWORD;
  PINREAl   = ^INREAL;
  POUTREAl  = ^OUTREAL;
  PdINREAL  = ^dINREAL;
  PdOUTREAL = ^dOUTREAL;
  PDouble   = ^Double;
  PInteger  = ^Integer;
  PSingle   = ^Single;
  PPDouble  = ^PDouble;
  PPSingle  = ^PSingle;
  PPVoid    = ^Pointer;

  // Opaque pointers (void* in C)
  TEER     = Pointer;
  TANB     = Pointer;
  TNOB     = Pointer;
  TRESAMPLE = Pointer;
  TGAIN    = Pointer;
  TLPCRITICAL_SECTION = Pointer;

  // RXA Meter types
  TrxaMeterType = (
    RXA_S_PK,
    RXA_S_AV,
    RXA_ADC_PK,
    RXA_ADC_AV,
    RXA_AGC_GAIN,
    RXA_AGC_PK,
    RXA_AGC_AV,
    RXA_METERTYPE_LAST
  );

  // TXA Meter types
  TtxaMeterType = (
    TXA_MIC_PK,
    TXA_MIC_AV,
    TXA_EQ_PK,
    TXA_EQ_AV,
    TXA_LVLR_PK,
    TXA_LVLR_AV,
    TXA_LVLR_GAIN,
    TXA_CFC_PK,
    TXA_CFC_AV,
    TXA_CFC_GAIN,
    TXA_COMP_PK,
    TXA_COMP_AV,
    TXA_ALC_PK,
    TXA_ALC_AV,
    TXA_ALC_GAIN,
    TXA_OUT_PK,
    TXA_OUT_AV,
    TXA_METERTYPE_LAST
  );

  // Callback type for DEXP VOX push
  TPushVoxProc = procedure(id: Integer; active: Integer); cdecl;

// ---------------------------------------------------------------------------
// RXA.c
// ---------------------------------------------------------------------------
procedure SetRXAMode(channel: Integer; mode: Integer); cdecl; external WDSP_LIB;
procedure RXASetPassband(channel: Integer; f_low: Double; f_high: Double); cdecl; external WDSP_LIB;
procedure RXASetNC(channel: Integer; nc: Integer); cdecl; external WDSP_LIB;
procedure RXASetMP(channel: Integer; mp: Integer); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// TXA.c
// ---------------------------------------------------------------------------
procedure SetTXAMode(channel: Integer; mode: Integer); cdecl; external WDSP_LIB;
procedure SetTXABandpassFreqs(channel: Integer; f_low: Double; f_high: Double); cdecl; external WDSP_LIB;
procedure TXASetNC(channel: Integer; nc: Integer); cdecl; external WDSP_LIB;
procedure TXASetMP(channel: Integer; mp: Integer); cdecl; external WDSP_LIB;
procedure SetTXAFMAFFilter(channel: Integer; low: Double; high: Double); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// amd.c
// ---------------------------------------------------------------------------
procedure SetRXAAMDRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXAAMDSBMode(channel: Integer; sbmode: Integer); cdecl; external WDSP_LIB;
procedure SetRXAAMDFadeLevel(channel: Integer; levelfade: Integer); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// ammod.c
// ---------------------------------------------------------------------------
procedure SetTXAAMCarrierLevel(channel: Integer; c_level: Double); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// amsq.c
// ---------------------------------------------------------------------------
procedure SetRXAAMSQRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXAAMSQThreshold(channel: Integer; threshold: Double); cdecl; external WDSP_LIB;
procedure SetRXAAMSQMaxTail(channel: Integer; tail: Double); cdecl; external WDSP_LIB;
procedure SetTXAAMSQRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetTXAAMSQMutedGain(channel: Integer; dBlevel: Double); cdecl; external WDSP_LIB;
procedure SetTXAAMSQThreshold(channel: Integer; threshold: Double); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// analyzer.c
// ---------------------------------------------------------------------------
procedure SetupDetectMaxBin(run: Integer; disp: Integer; ss: Integer; LO: Integer;
  rate: Double; fLow: Double; fHigh: Double; tau: Double; frame_rate: Integer); cdecl; external WDSP_LIB;
function  GetDetectMaxBin(disp: Integer): Double; cdecl; external WDSP_LIB;
procedure XCreateAnalyzer(disp: Integer; success: PInteger; m_size: Integer;
  m_num_fft: Integer; m_stitch: Integer; app_data_path: PAnsiChar); cdecl; external WDSP_LIB;
procedure DestroyAnalyzer(disp: Integer); cdecl; external WDSP_LIB;
procedure GetPixels(disp: Integer; pixout: Integer; pix: PdOUTREAL; flag: PInteger); cdecl; external WDSP_LIB;
procedure SnapSpectrum(disp: Integer; ss: Integer; LO: Integer; snap_buff: PDouble); cdecl; external WDSP_LIB;
procedure SnapSpectrumTimeout(disp: Integer; ss: Integer; LO: Integer;
  snap_buff: PDouble; timeout: DWORD; flag: PInteger); cdecl; external WDSP_LIB;
// SetCalibration: cal is pointer to array of [n_points][dMAX_M+1] doubles
procedure SetCalibration(disp: Integer; set_num: Integer; n_points: Integer;
  cal: PDouble); cdecl; external WDSP_LIB;
procedure OpenBuffer(disp: Integer; ss: Integer; LO: Integer;
  Ipointer: PPVoid; Qpointer: PPVoid); cdecl; external WDSP_LIB;
procedure CloseBuffer(disp: Integer; ss: Integer; LO: Integer); cdecl; external WDSP_LIB;
procedure Spectrum(disp: Integer; ss: Integer; LO: Integer;
  pI: PdINREAL; pQ: PdINREAL); cdecl; external WDSP_LIB;
procedure Spectrum2(run: Integer; disp: Integer; ss: Integer; LO: Integer;
  pbuff: PdINREAL); cdecl; external WDSP_LIB;
procedure Spectrum0(run: Integer; disp: Integer; ss: Integer; LO: Integer;
  pbuff: PDouble); cdecl; external WDSP_LIB;
procedure SetDisplayDetectorMode(disp: Integer; pixout: Integer; mode: Integer); cdecl; external WDSP_LIB;
procedure SetDisplayAverageMode(disp: Integer; pixout: Integer; mode: Integer); cdecl; external WDSP_LIB;
procedure SetDisplayNumAverage(disp: Integer; pixout: Integer; num: Integer); cdecl; external WDSP_LIB;
procedure SetDisplayAvBackmult(disp: Integer; pixout: Integer; mult: Double); cdecl; external WDSP_LIB;
procedure SetDisplaySampleRate(disp: Integer; rate: Integer); cdecl; external WDSP_LIB;
procedure SetDisplayNormOneHz(disp: Integer; pixout: Integer; norm: Integer); cdecl; external WDSP_LIB;

// SetAnalyzer — главная функция настройки анализатора (см. WDSP Guide §SetAnalyzer)
// void SetAnalyzer(disp, n_pixout, n_fft, typ, flp, sz, bf_sz, win_type,
//                  pi, ovrlp, clp, fscLin, fscHin, n_pix, n_stch,
//                  calset, fmin, fmax, max_w)
procedure SetAnalyzer(disp: Integer; n_pixout: Integer; n_fft: Integer;
                      typ: Integer; flp: PInteger; sz: Integer; bf_sz: Integer;
                      win_type: Integer; pi: Double; ovrlp: Integer; clp: Integer;
                      fscLin: Double; fscHin: Double; n_pix: Integer;
                      n_stch: Integer; calset: Integer; fmin: Double;
                      fmax: Double; max_w: Integer); cdecl; external WDSP_LIB;

procedure ResetPixelBuffers(disp: Integer); cdecl; external WDSP_LIB;
function  GetDisplayENB(disp: Integer): Double; cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// anf.c
// ---------------------------------------------------------------------------
procedure SetRXAANFRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXAANFVals(channel: Integer; taps: Integer; delay: Integer;
  gain: Double; leakage: Double); cdecl; external WDSP_LIB;
procedure SetRXAANFTaps(channel: Integer; taps: Integer); cdecl; external WDSP_LIB;
procedure SetRXAANFDelay(channel: Integer; delay: Integer); cdecl; external WDSP_LIB;
procedure SetRXAANFGain(channel: Integer; gain: Double); cdecl; external WDSP_LIB;
procedure SetRXAANFLeakage(channel: Integer; leakage: Double); cdecl; external WDSP_LIB;
procedure SetRXAANFPosition(channel: Integer; position: Integer); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// anr.c
// ---------------------------------------------------------------------------
procedure SetRXAANRRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXAANRVals(channel: Integer; taps: Integer; delay: Integer;
  gain: Double; leakage: Double); cdecl; external WDSP_LIB;
procedure SetRXAANRTaps(channel: Integer; taps: Integer); cdecl; external WDSP_LIB;
procedure SetRXAANRDelay(channel: Integer; delay: Integer); cdecl; external WDSP_LIB;
procedure SetRXAANRGain(channel: Integer; gain: Double); cdecl; external WDSP_LIB;
procedure SetRXAANRLeakage(channel: Integer; leakage: Double); cdecl; external WDSP_LIB;
procedure SetRXAANRPosition(channel: Integer; position: Integer); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// apfshadow.c (SPCW / Synchronous Peak CW filter)
// ---------------------------------------------------------------------------
procedure SetRXASPCWSelection(channel: Integer; selection: Integer); cdecl; external WDSP_LIB;
procedure SetRXASPCWRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXASPCWFreq(channel: Integer; f_center: Double); cdecl; external WDSP_LIB;
procedure SetRXASPCWBandwidth(channel: Integer; bandwidth: Double); cdecl; external WDSP_LIB;
procedure SetRXASPCWGain(channel: Integer; gain: Double); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// bandpass.c
// ---------------------------------------------------------------------------
procedure SetRXABPSRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXABPSFreqs(channel: Integer; f_low: Double; f_high: Double); cdecl; external WDSP_LIB;
procedure SetRXABPSWindow(channel: Integer; wintype: Integer); cdecl; external WDSP_LIB;
procedure SetTXABPSRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetTXABPSFreqs(channel: Integer; f_low: Double; f_high: Double); cdecl; external WDSP_LIB;
procedure SetTXABPSWindow(channel: Integer; wintype: Integer); cdecl; external WDSP_LIB;
procedure SetRXABandpassRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXABandpassFreqs(channel: Integer; f_low: Double; f_high: Double); cdecl; external WDSP_LIB;
procedure SetRXABandpassWindow(channel: Integer; wintype: Integer); cdecl; external WDSP_LIB;
procedure SetRXABandpassNC(channel: Integer; nc: Integer); cdecl; external WDSP_LIB;
procedure SetRXABandpassMP(channel: Integer; mp: Integer); cdecl; external WDSP_LIB;
procedure SetTXABandpassRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetTXABandpassWindow(channel: Integer; wintype: Integer); cdecl; external WDSP_LIB;
procedure SetTXABandpassNC(channel: Integer; nc: Integer); cdecl; external WDSP_LIB;
procedure SetTXABandpassMP(channel: Integer; mp: Integer); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// calcc.c  (Predistortion / PA calibration)
// ---------------------------------------------------------------------------
procedure pscc(channel: Integer; size: Integer; tx: PDouble; rx: PDouble); cdecl; external WDSP_LIB;
procedure psccF(channel: Integer; size: Integer; Itxbuff: PSingle; Qtxbuff: PSingle;
  Irxbuff: PSingle; Qrxbuff: PSingle; mox: Integer; solidmox: Integer); cdecl; external WDSP_LIB;
procedure PSSaveCorr(channel: Integer; filename: PAnsiChar); cdecl; external WDSP_LIB;
procedure PSRestoreCorr(channel: Integer; filename: PAnsiChar); cdecl; external WDSP_LIB;
procedure SetPSRunCal(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetPSMox(channel: Integer; mox: Integer); cdecl; external WDSP_LIB;
procedure GetPSInfo(channel: Integer; info: PInteger); cdecl; external WDSP_LIB;
procedure SetPSReset(channel: Integer; reset: Integer); cdecl; external WDSP_LIB;
procedure SetPSMancal(channel: Integer; mancal: Integer); cdecl; external WDSP_LIB;
procedure SetPSAutomode(channel: Integer; automode: Integer); cdecl; external WDSP_LIB;
procedure SetPSTurnon(channel: Integer; turnon: Integer); cdecl; external WDSP_LIB;
procedure SetPSControl(channel: Integer; reset: Integer; mancal: Integer;
  automode: Integer; turnon: Integer); cdecl; external WDSP_LIB;
procedure SetPSLoopDelay(channel: Integer; delay: Double); cdecl; external WDSP_LIB;
procedure SetPSMoxDelay(channel: Integer; delay: Double); cdecl; external WDSP_LIB;
function  SetPSTXDelay(channel: Integer; delay: Double): Double; cdecl; external WDSP_LIB;
procedure SetPSHWPeak(channel: Integer; peak: Double); cdecl; external WDSP_LIB;
procedure GetPSHWPeak(channel: Integer; peak: PDouble); cdecl; external WDSP_LIB;
procedure GetPSMaxTX(channel: Integer; maxtx: PDouble); cdecl; external WDSP_LIB;
procedure SetPSPtol(channel: Integer; ptol: Double); cdecl; external WDSP_LIB;
procedure GetPSDisp(channel: Integer; x: PDouble; ym: PDouble; yc: PDouble;
  ys: PDouble; cm: PDouble; cc: PDouble; cs: PDouble); cdecl; external WDSP_LIB;
procedure SetPSFeedbackRate(channel: Integer; rate: Integer); cdecl; external WDSP_LIB;
procedure SetPSPinMode(channel: Integer; pin: Integer); cdecl; external WDSP_LIB;
procedure SetPSMapMode(channel: Integer; map: Integer); cdecl; external WDSP_LIB;
procedure SetPSStabilize(channel: Integer; stbl: Integer); cdecl; external WDSP_LIB;
procedure SetPSIntsAndSpi(channel: Integer; ints: Integer; spi: Integer); cdecl; external WDSP_LIB;
// eu2av: медианный (MAD) outlier-фильтр перед кубическим фитом calcc; 0 = выкл.
procedure SetPSOutlierSigma(channel: Integer; sigma: Double); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// cblock.c
// ---------------------------------------------------------------------------
procedure SetRXACBLRun(channel: Integer; setit: Integer); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// cfcomp.c
// ---------------------------------------------------------------------------
procedure SetTXACFCOMPRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetTXACFCOMPPosition(channel: Integer; pos: Integer); cdecl; external WDSP_LIB;
procedure SetTXACFCOMPprofile(channel: Integer; nfreqs: Integer;
  F: PDouble; G: PDouble; E: PDouble); cdecl; external WDSP_LIB;
procedure SetTXACFCOMPPrecomp(channel: Integer; precomp: Double); cdecl; external WDSP_LIB;
procedure SetTXACFCOMPPeqRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetTXACFCOMPPrePeq(channel: Integer; prepeq: Double); cdecl; external WDSP_LIB;
procedure GetTXACFCOMPDisplayCompression(channel: Integer;
  comp_values: PDouble; ready: PInteger); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// cfir.c
// ---------------------------------------------------------------------------
procedure SetTXACFIRRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetTXACFIRNC(channel: Integer; nc: Integer); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// channel.c
// ---------------------------------------------------------------------------
procedure OpenChannel(channel: Integer; in_size: Integer; dsp_size: Integer;
  input_samplerate: Integer; dsp_rate: Integer; output_samplerate: Integer;
  atype: Integer; state: Integer; tdelayup: Double; tslewup: Double;
  tdelaydown: Double; tslewdown: Double; bfo: Integer); cdecl; external WDSP_LIB;
procedure CloseChannel(channel: Integer); cdecl; external WDSP_LIB;
procedure SetType(channel: Integer; atype: Integer); cdecl; external WDSP_LIB;
procedure SetInputBuffsize(channel: Integer; in_size: Integer); cdecl; external WDSP_LIB;
procedure SetDSPBuffsize(channel: Integer; dsp_size: Integer); cdecl; external WDSP_LIB;
procedure SetInputSamplerate(channel: Integer; in_rate: Integer); cdecl; external WDSP_LIB;
procedure SetDSPSamplerate(channel: Integer; dsp_rate: Integer); cdecl; external WDSP_LIB;
procedure SetOutputSamplerate(channel: Integer; out_rate: Integer); cdecl; external WDSP_LIB;
procedure SetAllRates(channel: Integer; in_rate: Integer; dsp_rate: Integer;
  out_rate: Integer); cdecl; external WDSP_LIB;
function  SetChannelState(channel: Integer; state: Integer; dmode: Integer): Integer; cdecl; external WDSP_LIB;
procedure SetChannelTDelayUp(channel: Integer; time: Double); cdecl; external WDSP_LIB;
procedure SetChannelTSlewUp(channel: Integer; time: Double); cdecl; external WDSP_LIB;
procedure SetChannelTDelayDown(channel: Integer; time: Double); cdecl; external WDSP_LIB;
procedure SetChannelTSlewDown(channel: Integer; time: Double); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// compress.c
// ---------------------------------------------------------------------------
procedure SetTXACompressorRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetTXACompressorGain(channel: Integer; gain: Double); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// dexp.c  (Downward EXPander / VOX gate)
// ---------------------------------------------------------------------------
procedure create_dexp(id: Integer; run_dexp: Integer; size: Integer;
  ain: PDouble; aout: PDouble; rate: Integer; dettau: Double;
  tattack: Double; tdecay: Double; thold: Double; exp_ratio: Double;
  hyst_ratio: Double; attack_thresh: Double; nc: Integer; wtype: Integer;
  lowcut: Double; highcut: Double; run_filt: Integer; run_vox: Integer;
  run_audelay: Integer; audelay: Double; pushvox: TPushVoxProc;
  antivox_run: Integer; antivox_size: Integer; antivox_rate: Integer;
  antivox_gain: Double; antivox_tau: Double); cdecl; external WDSP_LIB;
procedure destroy_dexp(id: Integer); cdecl; external WDSP_LIB;
procedure flush_dexp(id: Integer); cdecl; external WDSP_LIB;
procedure xdexp(id: Integer); cdecl; external WDSP_LIB;
procedure SendCBPushDexpVox(id: Integer; pushvox: TPushVoxProc); cdecl; external WDSP_LIB;
procedure SetDEXPRun(id: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetDEXPSize(id: Integer; size: Integer); cdecl; external WDSP_LIB;
procedure SetDEXPIOBuffers(id: Integer; ain: PDouble; aout: PDouble); cdecl; external WDSP_LIB;
procedure SetDEXPRate(id: Integer; rate: Double); cdecl; external WDSP_LIB;
procedure SetDEXPDetectorTau(id: Integer; tau: Double); cdecl; external WDSP_LIB;
procedure SetDEXPAttackTime(id: Integer; time: Double); cdecl; external WDSP_LIB;
procedure SetDEXPReleaseTime(id: Integer; time: Double); cdecl; external WDSP_LIB;
procedure SetDEXPHoldTime(id: Integer; time: Double); cdecl; external WDSP_LIB;
procedure SetDEXPExpansionRatio(id: Integer; ratio: Double); cdecl; external WDSP_LIB;
procedure SetDEXPHysteresisRatio(id: Integer; ratio: Double); cdecl; external WDSP_LIB;
procedure SetDEXPAttackThreshold(id: Integer; thresh: Double); cdecl; external WDSP_LIB;
procedure SetDEXPFilterTaps(id: Integer; taps: Integer); cdecl; external WDSP_LIB;
procedure SetDEXPWindowType(id: Integer; atype: Integer); cdecl; external WDSP_LIB;
procedure SetDEXPLowCut(id: Integer; lowcut: Double); cdecl; external WDSP_LIB;
procedure SetDEXPHighCut(id: Integer; highcut: Double); cdecl; external WDSP_LIB;
procedure SetDEXPRunSideChannelFilter(id: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetDEXPRunVox(id: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetDEXPRunAudioDelay(id: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetDEXPAudioDelay(id: Integer; delay: Double); cdecl; external WDSP_LIB;
procedure GetDEXPPeakSignal(id: Integer; peak: PDouble); cdecl; external WDSP_LIB;
procedure SetAntiVOXRun(id: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetAntiVOXSize(id: Integer; size: Integer); cdecl; external WDSP_LIB;
procedure SetAntiVOXRate(id: Integer; rate: Double); cdecl; external WDSP_LIB;
procedure SetAntiVOXGain(id: Integer; gain: Double); cdecl; external WDSP_LIB;
procedure SetAntiVOXDetectorTau(id: Integer; tau: Double); cdecl; external WDSP_LIB;
procedure SendAntiVOXData(id: Integer; nsamples: Integer; data: PDouble); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// div.c  (Diversity combining)
// ---------------------------------------------------------------------------
procedure create_divEXT(id: Integer; run: Integer; nr: Integer; size: Integer); cdecl; external WDSP_LIB;
procedure destroy_divEXT(id: Integer); cdecl; external WDSP_LIB;
procedure flush_divEXT(id: Integer); cdecl; external WDSP_LIB;
procedure xdivEXT(id: Integer; nsamples: Integer; ain: PPDouble; aout: PDouble); cdecl; external WDSP_LIB;
procedure SetEXTDIVRun(id: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetEXTDIVBuffsize(id: Integer; size: Integer); cdecl; external WDSP_LIB;
procedure SetEXTDIVNr(id: Integer; nr: Integer); cdecl; external WDSP_LIB;
procedure SetEXTDIVOutput(id: Integer; output: Integer); cdecl; external WDSP_LIB;
procedure SetEXTDIVRotate(id: Integer; nr: Integer;
  Irotate: PDouble; Qrotate: PDouble); cdecl; external WDSP_LIB;
procedure xdivEXTF(id: Integer; size: Integer; input: PPSingle;
  Iout: PSingle; Qout: PSingle); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// doublepole.c
// ---------------------------------------------------------------------------
procedure SetRXADoublepoleRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXADoublepoleFreqs(channel: Integer; f_center: Double; bandwidth: Double); cdecl; external WDSP_LIB;
procedure SetRXADoublepoleGain(channel: Integer; gain: Double); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// eer.c  (Envelope Elimination and Restoration)
// ---------------------------------------------------------------------------
function  create_eer(run: Integer; size: Integer; ain: PDouble; aout: PDouble;
  outM: PDouble; rate: Integer; mgain: Double; pgain: Double;
  rundelays: Integer; mdelay: Double; pdelay: Double; amiq: Integer): TEER; cdecl; external WDSP_LIB;
procedure destroy_eer(a: TEER); cdecl; external WDSP_LIB;
procedure flush_eer(a: TEER); cdecl; external WDSP_LIB;
procedure xeer(a: TEER); cdecl; external WDSP_LIB;
procedure create_eerEXT(id: Integer; run: Integer; size: Integer; rate: Integer;
  mgain: Double; pgain: Double; rundelays: Integer; mdelay: Double;
  pdelay: Double; amiq: Integer); cdecl; external WDSP_LIB;
procedure destroy_eerEXT(id: Integer); cdecl; external WDSP_LIB;
procedure flush_eerEXT(id: Integer); cdecl; external WDSP_LIB;
procedure SetEERRun(id: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetEERAMIQ(id: Integer; amiq: Integer); cdecl; external WDSP_LIB;
procedure SetEERMgain(id: Integer; gain: Double); cdecl; external WDSP_LIB;
procedure SetEERPgain(id: Integer; gain: Double); cdecl; external WDSP_LIB;
procedure SetEERRunDelays(id: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetEERMdelay(id: Integer; delay: Double); cdecl; external WDSP_LIB;
procedure SetEERPdelay(id: Integer; delay: Double); cdecl; external WDSP_LIB;
procedure SetEERSize(id: Integer; size: Integer); cdecl; external WDSP_LIB;
procedure SetEERSamplerate(id: Integer; rate: Integer); cdecl; external WDSP_LIB;
procedure pSetEERRun(a: TEER; run: Integer); cdecl; external WDSP_LIB;
procedure pSetEERAMIQ(a: TEER; amiq: Integer); cdecl; external WDSP_LIB;
procedure pSetEERMgain(a: TEER; gain: Double); cdecl; external WDSP_LIB;
procedure pSetEERPgain(a: TEER; gain: Double); cdecl; external WDSP_LIB;
procedure pSetEERRunDelays(a: TEER; run: Integer); cdecl; external WDSP_LIB;
procedure pSetEERMdelay(a: TEER; delay: Double); cdecl; external WDSP_LIB;
procedure pSetEERPdelay(a: TEER; delay: Double); cdecl; external WDSP_LIB;
procedure pSetEERSize(a: TEER; size: Integer); cdecl; external WDSP_LIB;
procedure pSetEERSamplerate(a: TEER; rate: Integer); cdecl; external WDSP_LIB;
procedure xeerEXTF(id: Integer; inI: PSingle; inQ: PSingle; outI: PSingle;
  outQ: PSingle; outMI: PSingle; outMQ: PSingle; mox: Integer; size: Integer); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// emnr.c  (Enhanced Minimum Noise Reduction)
// ---------------------------------------------------------------------------
procedure SetRXAEMNRpost2Run(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXAEMNRpost2Factor(channel: Integer; factor: Double); cdecl; external WDSP_LIB;
procedure SetRXAEMNRpost2Nlevel(channel: Integer; nlevel: Double); cdecl; external WDSP_LIB;
procedure SetRXAEMNRpost2Taper(channel: Integer; taper: Integer); cdecl; external WDSP_LIB;
procedure SetRXAEMNRpost2Rate(channel: Integer; tc: Double); cdecl; external WDSP_LIB;
procedure SetRXAEMNRRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXAEMNRgainMethod(channel: Integer; method: Integer); cdecl; external WDSP_LIB;
procedure SetRXAEMNRnpeMethod(channel: Integer; method: Integer); cdecl; external WDSP_LIB;
procedure SetRXAEMNRaeRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXAEMNRPosition(channel: Integer; position: Integer); cdecl; external WDSP_LIB;
procedure SetRXAEMNRaeZetaThresh(channel: Integer; zetathresh: Double); cdecl; external WDSP_LIB;
procedure SetRXAEMNRaePsi(channel: Integer; psi: Double); cdecl; external WDSP_LIB;
procedure SetRXAEMNRtrainZetaThresh(channel: Integer; thresh: Double); cdecl; external WDSP_LIB;
procedure SetRXAEMNRtrainT2(channel: Integer; t2: Double); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// emph.c  (FM Pre/De-emphasis)
// ---------------------------------------------------------------------------
procedure SetTXAFMEmphPosition(channel: Integer; position: Integer); cdecl; external WDSP_LIB;
procedure SetTXAFMEmphMP(channel: Integer; mp: Integer); cdecl; external WDSP_LIB;
procedure SetTXAFMEmphNC(channel: Integer; nc: Integer); cdecl; external WDSP_LIB;
procedure SetTXAFMPreEmphFreqs(channel: Integer; low: Double; high: Double); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// eq.c  (Equalizer)
// ---------------------------------------------------------------------------
procedure SetRXAEQRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXAEQNC(channel: Integer; nc: Integer); cdecl; external WDSP_LIB;
procedure SetRXAEQMP(channel: Integer; mp: Integer); cdecl; external WDSP_LIB;
procedure SetRXAEQProfile(channel: Integer; nfreqs: Integer; F: PDouble; G: PDouble); cdecl; external WDSP_LIB;
procedure SetRXAEQCtfmode(channel: Integer; mode: Integer); cdecl; external WDSP_LIB;
procedure SetRXAEQWintype(channel: Integer; wintype: Integer); cdecl; external WDSP_LIB;
procedure SetRXAGrphEQ(channel: Integer; rxeq: PInteger); cdecl; external WDSP_LIB;
procedure SetRXAGrphEQ10(channel: Integer; rxeq: PInteger); cdecl; external WDSP_LIB;
procedure SetTXAEQRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetTXAEQNC(channel: Integer; nc: Integer); cdecl; external WDSP_LIB;
procedure SetTXAEQMP(channel: Integer; mp: Integer); cdecl; external WDSP_LIB;
procedure SetTXAEQProfile(channel: Integer; nfreqs: Integer; F: PDouble; G: PDouble); cdecl; external WDSP_LIB;
procedure SetTXAEQCtfmode(channel: Integer; mode: Integer); cdecl; external WDSP_LIB;
procedure SetTXAEQWintype(channel: Integer; wintype: Integer); cdecl; external WDSP_LIB;
procedure SetTXAEQMethod(channel: Integer; wintype: Integer); cdecl; external WDSP_LIB;
procedure SetTXAGrphEQ(channel: Integer; txeq: PInteger); cdecl; external WDSP_LIB;
procedure SetTXAGrphEQ10(channel: Integer; txeq: PInteger); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// fmd.c  (FM Demodulator)
// ---------------------------------------------------------------------------
procedure SetRXAFMDeviation(channel: Integer; deviation: Double); cdecl; external WDSP_LIB;
procedure SetRXACTCSSFreq(channel: Integer; freq: Double); cdecl; external WDSP_LIB;
procedure SetRXACTCSSRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXAFMNCde(channel: Integer; nc: Integer); cdecl; external WDSP_LIB;
procedure SetRXAFMMPde(channel: Integer; mp: Integer); cdecl; external WDSP_LIB;
procedure SetRXAFMNCaud(channel: Integer; nc: Integer); cdecl; external WDSP_LIB;
procedure SetRXAFMMPaud(channel: Integer; mp: Integer); cdecl; external WDSP_LIB;
procedure SetRXAFMLimRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXAFMLimGain(channel: Integer; gaindB: Double); cdecl; external WDSP_LIB;
procedure SetRXAFMAFFilter(channel: Integer; low: Double; high: Double); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// fmmod.c  (FM Modulator)
// ---------------------------------------------------------------------------
procedure SetTXAFMDeviation(channel: Integer; deviation: Double); cdecl; external WDSP_LIB;
procedure SetTXACTCSSFreq(channel: Integer; freq: Double); cdecl; external WDSP_LIB;
procedure SetTXACTCSSRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetTXAFMNC(channel: Integer; nc: Integer); cdecl; external WDSP_LIB;
procedure SetTXAFMMP(channel: Integer; mp: Integer); cdecl; external WDSP_LIB;
procedure SetTXAFMAFFreqs(channel: Integer; low: Double; high: Double); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// wfmd.c  (Wideband FM Demodulator)
// ---------------------------------------------------------------------------
procedure SetRXAWFMDeviation(channel: Integer; deviation: Double); cdecl; external WDSP_LIB;
procedure SetRXAWFMNCaud(channel: Integer; nc: Integer); cdecl; external WDSP_LIB;
procedure SetRXAWFMMPaud(channel: Integer; mp: Integer); cdecl; external WDSP_LIB;
procedure SetRXAWFMAFFilter(channel: Integer; low: Double; high: Double); cdecl; external WDSP_LIB;
procedure SetRXAWFMDeemphRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXAWFMDeemphTau(channel: Integer; tau: Double); cdecl; external WDSP_LIB;
procedure SetRXAWFMLimRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXAWFMLimGain(channel: Integer; gaindB: Double); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// wfmmod.c  (Wideband FM Modulator)
// ---------------------------------------------------------------------------
procedure SetTXAWFMDeviation(channel: Integer; deviation: Double); cdecl; external WDSP_LIB;
procedure SetTXAWFMNC(channel: Integer; nc: Integer); cdecl; external WDSP_LIB;
procedure SetTXAWFMMP(channel: Integer; mp: Integer); cdecl; external WDSP_LIB;
procedure SetTXAWFMAFFreqs(channel: Integer; low: Double; high: Double); cdecl; external WDSP_LIB;
procedure SetTXAWFMPreEmphRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetTXAWFMPreEmphTau(channel: Integer; tau: Double); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// fmsq.c  (FM Squelch)
// ---------------------------------------------------------------------------
procedure SetRXAFMSQRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXAFMSQThreshold(channel: Integer; threshold: Double); cdecl; external WDSP_LIB;
procedure SetRXAFMSQNC(channel: Integer; nc: Integer); cdecl; external WDSP_LIB;
procedure SetRXAFMSQMP(channel: Integer; mp: Integer); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// gain.c
// ---------------------------------------------------------------------------
function  create_gain(run: Integer; prun: PInteger; size: Integer;
  ain: PDouble; aout: PDouble; Igain: Double; Qgain: Double): TGAIN; cdecl; external WDSP_LIB;
procedure destroy_gain(a: TGAIN); cdecl; external WDSP_LIB;
procedure flush_gain(a: TGAIN); cdecl; external WDSP_LIB;
procedure xgain(a: TGAIN); cdecl; external WDSP_LIB;
procedure pSetTXOutputLevel(a: TGAIN; level: Double); cdecl; external WDSP_LIB;
procedure pSetTXOutputLevelRun(a: TGAIN; run: Integer); cdecl; external WDSP_LIB;
procedure pSetTXOutputLevelSize(a: TGAIN; size: Integer); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// gaussian.c
// ---------------------------------------------------------------------------
procedure SetRXAGaussianRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXAGaussianFreqs(channel: Integer; f_center: Double; bandwidth: Double); cdecl; external WDSP_LIB;
procedure SetRXAGaussianGain(channel: Integer; gain: Double); cdecl; external WDSP_LIB;
procedure SetRXAGaussianNC(channel: Integer; nc: Integer); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// gen.c  (Signal generators)
// ---------------------------------------------------------------------------
procedure SetRXAPreGenRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXAPreGenMode(channel: Integer; mode: Integer); cdecl; external WDSP_LIB;
procedure SetRXAPreGenToneMag(channel: Integer; mag: Double); cdecl; external WDSP_LIB;
procedure SetRXAPreGenToneFreq(channel: Integer; freq: Double); cdecl; external WDSP_LIB;
procedure SetRXAPreGenNoiseMag(channel: Integer; mag: Double); cdecl; external WDSP_LIB;
procedure SetRXAPreGenSweepMag(channel: Integer; mag: Double); cdecl; external WDSP_LIB;
procedure SetRXAPreGenSweepFreq(channel: Integer; freq1: Double; freq2: Double); cdecl; external WDSP_LIB;
procedure SetRXAPreGenSweepRate(channel: Integer; rate: Double); cdecl; external WDSP_LIB;
procedure SetTXAPreGenRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetTXAPreGenMode(channel: Integer; mode: Integer); cdecl; external WDSP_LIB;
procedure SetTXAPreGenToneMag(channel: Integer; mag: Double); cdecl; external WDSP_LIB;
procedure SetTXAPreGenToneFreq(channel: Integer; freq: Double); cdecl; external WDSP_LIB;
procedure SetTXAPreGenNoiseMag(channel: Integer; mag: Double); cdecl; external WDSP_LIB;
procedure SetTXAPreGenSweepMag(channel: Integer; mag: Double); cdecl; external WDSP_LIB;
procedure SetTXAPreGenSweepFreq(channel: Integer; freq1: Double; freq2: Double); cdecl; external WDSP_LIB;
procedure SetTXAPreGenSweepRate(channel: Integer; rate: Double); cdecl; external WDSP_LIB;
procedure SetTXAPreGenSawtoothMag(channel: Integer; mag: Double); cdecl; external WDSP_LIB;
procedure SetTXAPreGenSawtoothFreq(channel: Integer; freq: Double); cdecl; external WDSP_LIB;
procedure SetTXAPreGenTriangleMag(channel: Integer; mag: Double); cdecl; external WDSP_LIB;
procedure SetTXAPreGenTriangleFreq(channel: Integer; freq: Double); cdecl; external WDSP_LIB;
procedure SetTXAPreGenPulseMag(channel: Integer; mag: Double); cdecl; external WDSP_LIB;
procedure SetTXAPreGenPulseFreq(channel: Integer; freq: Double); cdecl; external WDSP_LIB;
procedure SetTXAPreGenPulseDutyCycle(channel: Integer; dc: Double); cdecl; external WDSP_LIB;
procedure SetTXAPreGenPulseToneFreq(channel: Integer; freq: Double); cdecl; external WDSP_LIB;
procedure SetTXAPreGenPulseTransition(channel: Integer; transtime: Double); cdecl; external WDSP_LIB;
procedure SetTXAPostGenRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetTXAPostGenMode(channel: Integer; mode: Integer); cdecl; external WDSP_LIB;
procedure SetTXAPostGenToneMag(channel: Integer; mag: Double); cdecl; external WDSP_LIB;
procedure SetTXAPostGenToneFreq(channel: Integer; freq: Double); cdecl; external WDSP_LIB;
procedure SetTXAPostGenTTMag(channel: Integer; mag1: Double; mag2: Double); cdecl; external WDSP_LIB;
procedure SetTXAPostGenTTFreq(channel: Integer; freq1: Double; freq2: Double); cdecl; external WDSP_LIB;
procedure SetTXAPostGenSweepMag(channel: Integer; mag: Double); cdecl; external WDSP_LIB;
procedure SetTXAPostGenSweepFreq(channel: Integer; freq1: Double; freq2: Double); cdecl; external WDSP_LIB;
procedure SetTXAPostGenSweepRate(channel: Integer; rate: Double); cdecl; external WDSP_LIB;
procedure SetTXAPostGenPulseMag(channel: Integer; mag: Double); cdecl; external WDSP_LIB;
procedure SetTXAPostGenPulseFreq(channel: Integer; freq: Double); cdecl; external WDSP_LIB;
procedure SetTXAPostGenPulseDutyCycle(channel: Integer; dc: Double); cdecl; external WDSP_LIB;
procedure SetTXAPostGenPulseToneFreq(channel: Integer; freq: Double); cdecl; external WDSP_LIB;
procedure SetTXAPostGenPulseTransition(channel: Integer; transtime: Double); cdecl; external WDSP_LIB;
procedure SetTXAPostGenPulseIQout(channel: Integer; IQout: Integer); cdecl; external WDSP_LIB;
procedure SetTXAPostGenTTPulseMag(channel: Integer; mag1: Double; mag2: Double); cdecl; external WDSP_LIB;
procedure SetTXAPostGenTTPulseFreq(channel: Integer; freq: Double); cdecl; external WDSP_LIB;
procedure SetTXAPostGenTTPulseDutyCycle(channel: Integer; dc: Double); cdecl; external WDSP_LIB;
procedure SetTXAPostGenTTPulseToneFreq(channel: Integer; freq1: Double; freq2: Double); cdecl; external WDSP_LIB;
procedure SetTXAPostGenTTPulseTransition(channel: Integer; transtime: Double); cdecl; external WDSP_LIB;
procedure SetTXAPostGenTTPulseIQout(channel: Integer; IQout: Integer); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// iir.c
// ---------------------------------------------------------------------------
procedure SetRXABiQuadRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXABiQuadFreq(channel: Integer; freq: Double); cdecl; external WDSP_LIB;
procedure SetRXABiQuadBandwidth(channel: Integer; bw: Double); cdecl; external WDSP_LIB;
procedure SetRXABiQuadGain(channel: Integer; gain: Double); cdecl; external WDSP_LIB;
procedure SetRXAmpeakRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXAmpeakNpeaks(channel: Integer; npeaks: Integer); cdecl; external WDSP_LIB;
procedure SetRXAmpeakFilEnable(channel: Integer; fil: Integer; enable: Integer); cdecl; external WDSP_LIB;
procedure SetRXAmpeakFilFreq(channel: Integer; fil: Integer; freq: Double); cdecl; external WDSP_LIB;
procedure SetRXAmpeakFilBw(channel: Integer; fil: Integer; bw: Double); cdecl; external WDSP_LIB;
procedure SetRXAmpeakFilGain(channel: Integer; fil: Integer; gain: Double); cdecl; external WDSP_LIB;
procedure SetTXAPHROTRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetTXAPHROTCorner(channel: Integer; corner: Double); cdecl; external WDSP_LIB;
procedure SetTXAPHROTNstages(channel: Integer; nstages: Integer); cdecl; external WDSP_LIB;
procedure SetTXAPHROTReverse(channel: Integer; reverse: Integer); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// impulse_cache.c
// ---------------------------------------------------------------------------
function  save_impulse_cache(path: PAnsiChar): Integer; cdecl; external WDSP_LIB;
function  read_impulse_cache(path: PAnsiChar): Integer; cdecl; external WDSP_LIB;
procedure use_impulse_cache(use: Integer); cdecl; external WDSP_LIB;
procedure init_impulse_cache(use: Integer); cdecl; external WDSP_LIB;
procedure destroy_impulse_cache; cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// iobuffs.c
// ---------------------------------------------------------------------------
procedure fexchange0(channel: Integer; ain: PDouble; aout: PDouble; error: PInteger); cdecl; external WDSP_LIB;
procedure fexchange2(channel: Integer; Iin: PINREAL; Qin: PINREAL;
  Iout: POUTREAL; Qout: POUTREAL; error: PInteger); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// iqc.c  (IQ Correction)
// ---------------------------------------------------------------------------
procedure GetTXAiqcValues(channel: Integer; cm: PDouble; cc: PDouble; cs: PDouble); cdecl; external WDSP_LIB;
procedure SetTXAiqcValues(channel: Integer; cm: PDouble; cc: PDouble; cs: PDouble); cdecl; external WDSP_LIB;
procedure SetTXAiqcSwap(channel: Integer; cm: PDouble; cc: PDouble; cs: PDouble); cdecl; external WDSP_LIB;
procedure SetTXAiqcStart(channel: Integer; cm: PDouble; cc: PDouble; cs: PDouble); cdecl; external WDSP_LIB;
procedure SetTXAiqcEnd(channel: Integer); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// matchedCW.c
// ---------------------------------------------------------------------------
procedure SetRXAMatchedRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXAMatchedFreqs(channel: Integer; f_center: Double; bandwidth: Double); cdecl; external WDSP_LIB;
procedure SetRXAMatchedGain(channel: Integer; gain: Double); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// meter.c
// ---------------------------------------------------------------------------
function GetRXAMeter(channel: Integer; mt: Integer): Double; cdecl; external WDSP_LIB;
function GetTXAMeter(channel: Integer; mt: Integer): Double; cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// nbp.c  (Notch Band Pass)
// ---------------------------------------------------------------------------
function  RXANBPAddNotch(channel: Integer; notch: Integer; fcenter: Double;
  fwidth: Double; active: Integer): Integer; cdecl; external WDSP_LIB;
function  RXANBPGetNotch(channel: Integer; notch: Integer; fcenter: PDouble;
  fwidth: PDouble; active: PInteger): Integer; cdecl; external WDSP_LIB;
function  RXANBPDeleteNotch(channel: Integer; notch: Integer): Integer; cdecl; external WDSP_LIB;
function  RXANBPEditNotch(channel: Integer; notch: Integer; fcenter: Double;
  fwidth: Double; active: Integer): Integer; cdecl; external WDSP_LIB;
procedure RXANBPGetNumNotches(channel: Integer; nnotches: PInteger); cdecl; external WDSP_LIB;
procedure RXANBPSetTuneFrequency(channel: Integer; tunefreq: Double); cdecl; external WDSP_LIB;
procedure RXANBPSetShiftFrequency(channel: Integer; shift: Double); cdecl; external WDSP_LIB;
procedure RXANBPSetNotchesRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure RXANBPSetRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure RXANBPSetFreqs(channel: Integer; flow: Double; fhigh: Double); cdecl; external WDSP_LIB;
procedure RXANBPSetWindow(channel: Integer; wintype: Integer); cdecl; external WDSP_LIB;
procedure RXANBPSetNC(channel: Integer; nc: Integer); cdecl; external WDSP_LIB;
procedure RXANBPSetMP(channel: Integer; mp: Integer); cdecl; external WDSP_LIB;
procedure RXANBPGetMinNotchWidth(channel: Integer; minwidth: PDouble); cdecl; external WDSP_LIB;
procedure RXANBPSetAutoIncrease(channel: Integer; autoincr: Integer); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// nob.c  (Noise/Impulse Blankers - ANB and NOB)
// ---------------------------------------------------------------------------
function  create_anb(run: Integer; buffsize: Integer; ain: PDouble; aout: PDouble;
  samplerate: Double; tau: Double; hangtime: Double; advtime: Double;
  backtau: Double; threshold: Double): TANB; cdecl; external WDSP_LIB;
procedure destroy_anb(a: TANB); cdecl; external WDSP_LIB;
procedure flush_anb(a: TANB); cdecl; external WDSP_LIB;
procedure xanb(a: TANB); cdecl; external WDSP_LIB;
procedure pSetRCVRANBRun(a: TANB; run: Integer); cdecl; external WDSP_LIB;
procedure pSetRCVRANBBuffsize(a: TANB; size: Integer); cdecl; external WDSP_LIB;
procedure pSetRCVRANBSamplerate(a: TANB; rate: Integer); cdecl; external WDSP_LIB;
procedure pSetRCVRANBTau(a: TANB; tau: Double); cdecl; external WDSP_LIB;
procedure pSetRCVRANBHangtime(a: TANB; time: Double); cdecl; external WDSP_LIB;
procedure pSetRCVRANBAdvtime(a: TANB; time: Double); cdecl; external WDSP_LIB;
procedure pSetRCVRANBBacktau(a: TANB; tau: Double); cdecl; external WDSP_LIB;
procedure pSetRCVRANBThreshold(a: TANB; thresh: Double); cdecl; external WDSP_LIB;
procedure create_anbEXT(id: Integer; run: Integer; buffsize: Integer;
  samplerate: Double; tau: Double; hangtime: Double; advtime: Double;
  backtau: Double; threshold: Double); cdecl; external WDSP_LIB;
procedure destroy_anbEXT(id: Integer); cdecl; external WDSP_LIB;
procedure flush_anbEXT(id: Integer); cdecl; external WDSP_LIB;
procedure xanbEXT(id: Integer; ain: PDouble; aout: PDouble); cdecl; external WDSP_LIB;
procedure SetEXTANBRun(id: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetEXTANBBuffsize(id: Integer; size: Integer); cdecl; external WDSP_LIB;
procedure SetEXTANBSamplerate(id: Integer; rate: Integer); cdecl; external WDSP_LIB;
procedure SetEXTANBTau(id: Integer; tau: Double); cdecl; external WDSP_LIB;
procedure SetEXTANBHangtime(id: Integer; time: Double); cdecl; external WDSP_LIB;
procedure SetEXTANBAdvtime(id: Integer; time: Double); cdecl; external WDSP_LIB;
procedure SetEXTANBBacktau(id: Integer; tau: Double); cdecl; external WDSP_LIB;
procedure SetEXTANBThreshold(id: Integer; thresh: Double); cdecl; external WDSP_LIB;
procedure xanbEXTF(id: Integer; I: PSingle; Q: PSingle); cdecl; external WDSP_LIB;

// NOB (Noise Blanker II)
function  create_nob(run: Integer; buffsize: Integer; ain: PDouble; aout: PDouble;
  samplerate: Double; mode: Integer; advslewtime: Double; advtime: Double;
  hangslewtime: Double; hangtime: Double; max_imp_seq_time: Double;
  backtau: Double; threshold: Double): TNOB; cdecl; external WDSP_LIB;
procedure destroy_nob(a: TNOB); cdecl; external WDSP_LIB;
procedure flush_nob(a: TNOB); cdecl; external WDSP_LIB;
procedure xnob(a: TNOB); cdecl; external WDSP_LIB;
procedure pSetRCVRNOBRun(a: TNOB; run: Integer); cdecl; external WDSP_LIB;
procedure pSetRCVRNOBMode(a: TNOB; mode: Integer); cdecl; external WDSP_LIB;
procedure pSetRCVRNOBBuffsize(a: TNOB; size: Integer); cdecl; external WDSP_LIB;
procedure pSetRCVRNOBSamplerate(a: TNOB; rate: Integer); cdecl; external WDSP_LIB;
procedure pSetRCVRNOBTau(a: TNOB; tau: Double); cdecl; external WDSP_LIB;
procedure pSetRCVRNOBHangtime(a: TNOB; time: Double); cdecl; external WDSP_LIB;
procedure pSetRCVRNOBAdvtime(a: TNOB; time: Double); cdecl; external WDSP_LIB;
procedure pSetRCVRNOBBacktau(a: TNOB; tau: Double); cdecl; external WDSP_LIB;
procedure pSetRCVRNOBThreshold(a: TNOB; thresh: Double); cdecl; external WDSP_LIB;
procedure create_nobEXT(id: Integer; run: Integer; mode: Integer; buffsize: Integer;
  samplerate: Double; slewtime: Double; hangtime: Double; advtime: Double;
  backtau: Double; threshold: Double); cdecl; external WDSP_LIB;
procedure destroy_nobEXT(id: Integer); cdecl; external WDSP_LIB;
procedure flush_nobEXT(id: Integer); cdecl; external WDSP_LIB;
procedure xnobEXT(id: Integer; ain: PDouble; aout: PDouble); cdecl; external WDSP_LIB;
procedure SetEXTNOBRun(id: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetEXTNOBMode(id: Integer; mode: Integer); cdecl; external WDSP_LIB;
procedure SetEXTNOBBuffsize(id: Integer; size: Integer); cdecl; external WDSP_LIB;
procedure SetEXTNOBSamplerate(id: Integer; rate: Integer); cdecl; external WDSP_LIB;
procedure SetEXTNOBTau(id: Integer; tau: Double); cdecl; external WDSP_LIB;
procedure SetEXTNOBHangtime(id: Integer; time: Double); cdecl; external WDSP_LIB;
procedure SetEXTNOBAdvtime(id: Integer; time: Double); cdecl; external WDSP_LIB;
procedure SetEXTNOBBacktau(id: Integer; tau: Double); cdecl; external WDSP_LIB;
procedure SetEXTNOBThreshold(id: Integer; thresh: Double); cdecl; external WDSP_LIB;
procedure xnobEXTF(id: Integer; I: PSingle; Q: PSingle); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// osctrl.c
// ---------------------------------------------------------------------------
procedure SetTXAosctrlRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// patchpanel.c
// ---------------------------------------------------------------------------
procedure SetRXAPanelRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXAPanelSelect(channel: Integer; select: Integer); cdecl; external WDSP_LIB;
procedure SetRXAPanelGain1(channel: Integer; gain: Double); cdecl; external WDSP_LIB;
procedure SetRXAPanelGain2(channel: Integer; gainI: Double; gainQ: Double); cdecl; external WDSP_LIB;
procedure SetRXAPanelPan(channel: Integer; pan: Double); cdecl; external WDSP_LIB;
procedure SetRXAPanelCopy(channel: Integer; copy: Integer); cdecl; external WDSP_LIB;
procedure SetRXAPanelBinaural(channel: Integer; bin: Integer); cdecl; external WDSP_LIB;
procedure SetTXAPanelRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetTXAPanelGain1(channel: Integer; gain: Double); cdecl; external WDSP_LIB;
procedure SetTXAPanelSelect(channel: Integer; select: Integer); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// resample.c
// ---------------------------------------------------------------------------
function  create_resample(run: Integer; size: Integer; ain: PDouble; aout: PDouble;
  in_rate: Integer; out_rate: Integer; fc: Double; ncoef: Integer;
  gain: Double): TRESAMPLE; cdecl; external WDSP_LIB;
procedure destroy_resample(a: TRESAMPLE); cdecl; external WDSP_LIB;
procedure flush_resample(a: TRESAMPLE); cdecl; external WDSP_LIB;
function  xresample(a: TRESAMPLE): Integer; cdecl; external WDSP_LIB;
function  create_resampleV(in_rate: Integer; out_rate: Integer): Pointer; cdecl; external WDSP_LIB;
procedure xresampleV(input: PDouble; output: PDouble; numsamps: Integer;
  outsamps: PInteger; ptr: Pointer); cdecl; external WDSP_LIB;
procedure destroy_resampleV(ptr: Pointer); cdecl; external WDSP_LIB;
function  create_resampleFV(in_rate: Integer; out_rate: Integer): Pointer; cdecl; external WDSP_LIB;
procedure xresampleFV(input: PSingle; output: PSingle; numsamps: Integer;
  outsamps: PInteger; ptr: Pointer); cdecl; external WDSP_LIB;
procedure destroy_resampleFV(ptr: Pointer); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// rmatch.c  (Rate Matching buffer)
// ---------------------------------------------------------------------------
procedure xrmatchIN(b: Pointer; ain: PDouble); cdecl; external WDSP_LIB;
procedure xrmatchOUT(b: Pointer; aout: PDouble); cdecl; external WDSP_LIB;
procedure getRMatchDiags(b: Pointer; underflows: PInteger; overflows: PInteger;
  var_: PDouble; ringsize: PInteger; nring: PInteger); cdecl; external WDSP_LIB;
procedure resetRMatchDiags(b: Pointer); cdecl; external WDSP_LIB;
procedure forceRMatchVar(b: Pointer; force: Integer; fvar: Double); cdecl; external WDSP_LIB;
function  create_rmatchV(in_size: Integer; out_size: Integer; nom_inrate: Integer;
  nom_outrate: Integer; ringsize: Integer; var_: Double): Pointer; cdecl; external WDSP_LIB;
procedure destroy_rmatchV(ptr: Pointer); cdecl; external WDSP_LIB;
procedure setRMatchInsize(ptr: Pointer; insize: Integer); cdecl; external WDSP_LIB;
procedure setRMatchOutsize(ptr: Pointer; outsize: Integer); cdecl; external WDSP_LIB;
procedure setRMatchNomInrate(ptr: Pointer; nom_inrate: Integer); cdecl; external WDSP_LIB;
procedure setRMatchNomOutrate(ptr: Pointer; nom_outrate: Integer); cdecl; external WDSP_LIB;
procedure setRMatchRingsize(ptr: Pointer; ringsize: Integer); cdecl; external WDSP_LIB;
procedure setRMatchFeedbackGain(b: Pointer; feedback_gain: Double); cdecl; external WDSP_LIB;
procedure setRMatchSlewTime(b: Pointer; slew_time: Double); cdecl; external WDSP_LIB;
procedure setRMatchSlewTime1(b: Pointer; slew_time: Double); cdecl; external WDSP_LIB;
procedure setRMatchPropRingMin(ptr: Pointer; prop_min: Integer); cdecl; external WDSP_LIB;
procedure setRMatchPropRingMax(ptr: Pointer; prop_max: Integer); cdecl; external WDSP_LIB;
procedure setRMatchFFRingMin(ptr: Pointer; ff_ringmin: Integer); cdecl; external WDSP_LIB;
procedure setRMatchFFRingMax(ptr: Pointer; ff_ringmax: Integer); cdecl; external WDSP_LIB;
procedure setRMatchFFAlpha(ptr: Pointer; ff_alpha: Double); cdecl; external WDSP_LIB;
procedure getControlFlag(ptr: Pointer; control_flag: PInteger); cdecl; external WDSP_LIB;
function  create_rmatchLegacyV(in_size: Integer; out_size: Integer; nom_inrate: Integer;
  nom_outrate: Integer; ringsize: Integer): Pointer; cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// rnnr.c  (RNN-based Noise Reduction)
// ---------------------------------------------------------------------------
procedure SetRXARNNRRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure RNNRloadModel(file_path: PAnsiChar); cdecl; external WDSP_LIB;
procedure SetRXARNNRPosition(channel: Integer; position: Integer); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// sbnr.c  (Spectral Blind Noise Reduction)
// ---------------------------------------------------------------------------
procedure SetRXASBNRRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXASBNRreductionAmount(channel: Integer; amount: Single); cdecl; external WDSP_LIB;
procedure SetRXASBNRsmoothingFactor(channel: Integer; factor: Single); cdecl; external WDSP_LIB;
procedure SetRXASBNRwhiteningFactor(channel: Integer; factor: Single); cdecl; external WDSP_LIB;
procedure SetRXASBNRnoiseRescale(channel: Integer; factor: Single); cdecl; external WDSP_LIB;
procedure SetRXASBNRpostFilterThreshold(channel: Integer; threshold: Single); cdecl; external WDSP_LIB;
procedure SetRXASBNRnoiseScalingType(channel: Integer; noise_scaling_type: Integer); cdecl; external WDSP_LIB;
procedure SetRXASBNRPosition(channel: Integer; position: Integer); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// sender.c
// ---------------------------------------------------------------------------
procedure SetRXASpectrum(channel: Integer; flag: Integer; disp: Integer;
  ss: Integer; LO: Integer); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// shift.c
// ---------------------------------------------------------------------------
procedure SetRXAShiftRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXAShiftFreq(channel: Integer; fshift: Double); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// siphon.c
// ---------------------------------------------------------------------------
procedure RXAGetaSipF(channel: Integer; aout: PSingle; size: Integer); cdecl; external WDSP_LIB;
procedure RXAGetaSipF1(channel: Integer; aout: PSingle; size: Integer); cdecl; external WDSP_LIB;
procedure TXASetSipPosition(channel: Integer; pos: Integer); cdecl; external WDSP_LIB;
procedure TXASetSipMode(channel: Integer; mode: Integer); cdecl; external WDSP_LIB;
procedure TXASetSipDisplay(channel: Integer; disp: Integer); cdecl; external WDSP_LIB;
procedure TXAGetaSipF(channel: Integer; aout: PSingle; size: Integer); cdecl; external WDSP_LIB;
procedure TXAGetaSipF1(channel: Integer; aout: PSingle; size: Integer); cdecl; external WDSP_LIB;
procedure TXASetSipSpecmode(channel: Integer; mode: Integer); cdecl; external WDSP_LIB;
procedure TXAGetSpecF1(channel: Integer; aout: PSingle); cdecl; external WDSP_LIB;
procedure TXASetSipAllocDisps(channel: Integer; n_alloc_disps: Integer;
  alloc_run: PInteger; alloc_disp: PInteger); cdecl; external WDSP_LIB;
procedure create_siphonEXT(id: Integer; run: Integer; insize: Integer;
  sipsize: Integer; fftsize: Integer; specmode: Integer); cdecl; external WDSP_LIB;
procedure destroy_siphonEXT(id: Integer); cdecl; external WDSP_LIB;
procedure flush_siphonEXT(id: Integer); cdecl; external WDSP_LIB;
procedure xsiphonEXT(id: Integer; buff: PDouble); cdecl; external WDSP_LIB;
procedure GetaSipF1EXT(id: Integer; aout: PSingle; size: Integer); cdecl; external WDSP_LIB;
procedure SetSiphonInsize(id: Integer; size: Integer); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// slew.c
// ---------------------------------------------------------------------------
procedure SetTXAuSlewTime(channel: Integer; time: Double); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// snb.c  (Spectral Noise Blanker A)
// ---------------------------------------------------------------------------
procedure SetRXASNBARun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXASNBAovrlp(channel: Integer; ovrlp: Integer); cdecl; external WDSP_LIB;
procedure SetRXASNBAasize(channel: Integer; size: Integer); cdecl; external WDSP_LIB;
procedure SetRXASNBAnpasses(channel: Integer; npasses: Integer); cdecl; external WDSP_LIB;
procedure SetRXASNBAk1(channel: Integer; k1: Double); cdecl; external WDSP_LIB;
procedure SetRXASNBAk2(channel: Integer; k2: Double); cdecl; external WDSP_LIB;
procedure SetRXASNBAbridge(channel: Integer; bridge: Integer); cdecl; external WDSP_LIB;
procedure SetRXASNBApresamps(channel: Integer; presamps: Integer); cdecl; external WDSP_LIB;
procedure SetRXASNBApostsamps(channel: Integer; postsamps: Integer); cdecl; external WDSP_LIB;
procedure SetRXASNBApmultmin(channel: Integer; pmultmin: Double); cdecl; external WDSP_LIB;
procedure SetRXASNBAOutputBandwidth(channel: Integer; flow: Double; fhigh: Double); cdecl; external WDSP_LIB;
procedure RXABPSNBASetNC(channel: Integer; nc: Integer); cdecl; external WDSP_LIB;
procedure RXABPSNBASetMP(channel: Integer; mp: Integer); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// ssql.c  (Signal Squelch)
// ---------------------------------------------------------------------------
procedure SetRXASSQLRun(channel: Integer; run: Integer); cdecl; external WDSP_LIB;
procedure SetRXASSQLThreshold(channel: Integer; threshold: Double); cdecl; external WDSP_LIB;
procedure SetRXASSQLTauMute(channel: Integer; tau_mute: Double); cdecl; external WDSP_LIB;
procedure SetRXASSQLTauUnMute(channel: Integer; tau_unmute: Double); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// utilities.c
// ---------------------------------------------------------------------------
function  malloc0(size: Integer): Pointer; cdecl; external WDSP_LIB;
function  NewCriticalSection: Pointer; cdecl; external WDSP_LIB;
procedure DestroyCriticalSection(cs_ptr: TLPCRITICAL_SECTION); cdecl; external WDSP_LIB;
procedure analyze_bandpass_filter(N: Integer; f_low: Double; f_high: Double;
  samplerate: Double; wintype: Integer; rtype: Integer; scale: Double); cdecl; external WDSP_LIB;
procedure print_buffer_parameters(filename: PAnsiChar; channel: Integer); cdecl; external WDSP_LIB;
function  create_bfcu(id: Integer; min_size: Integer; max_size: Integer;
  rate: Double; corner: Double; points: Integer): Integer; cdecl; external WDSP_LIB;
procedure destroy_bfcu(id: Integer); cdecl; external WDSP_LIB;
procedure getFilterCorners(id: Integer; lower_index: PInteger; upper_index: PInteger); cdecl; external WDSP_LIB;
procedure getFilterCurve(id: Integer; size: Integer; w_type: Integer;
  index_low: Integer; index_high: Integer; segment: PDouble); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// varsamp.c
// ---------------------------------------------------------------------------
function  create_varsampV(in_rate: Integer; out_rate: Integer; R: Integer): Pointer; cdecl; external WDSP_LIB;
procedure xvarsampV(input: PDouble; output: PDouble; numsamps: Integer;
  var_: Double; outsamps: PInteger; ptr: Pointer); cdecl; external WDSP_LIB;
procedure destroy_varsampV(ptr: Pointer); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// version.c
// ---------------------------------------------------------------------------
function GetWDSPVersion: Integer; cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// wcpAGC.c  (Wideband Constant Power AGC)
// ---------------------------------------------------------------------------
procedure SetRXAAGCMode(channel: Integer; mode: Integer); cdecl; external WDSP_LIB;
procedure SetRXAAGCAttack(channel: Integer; attack: Integer); cdecl; external WDSP_LIB;
procedure SetRXAAGCDecay(channel: Integer; decay: Integer); cdecl; external WDSP_LIB;
procedure SetRXAAGCHang(channel: Integer; hang: Integer); cdecl; external WDSP_LIB;
procedure GetRXAAGCHangLevel(channel: Integer; hangLevel: PDouble); cdecl; external WDSP_LIB;
procedure SetRXAAGCHangLevel(channel: Integer; hangLevel: Double); cdecl; external WDSP_LIB;
procedure GetRXAAGCHangThreshold(channel: Integer; hangthreshold: PInteger); cdecl; external WDSP_LIB;
procedure SetRXAAGCHangThreshold(channel: Integer; hangthreshold: Integer); cdecl; external WDSP_LIB;
procedure GetRXAAGCThresh(channel: Integer; thresh: PDouble; size: Double; rate: Double); cdecl; external WDSP_LIB;
procedure SetRXAAGCThresh(channel: Integer; thresh: Double; size: Double; rate: Double); cdecl; external WDSP_LIB;
procedure GetRXAAGCTop(channel: Integer; max_agc: PDouble); cdecl; external WDSP_LIB;
procedure SetRXAAGCTop(channel: Integer; max_agc: Double); cdecl; external WDSP_LIB;
procedure SetRXAAGCSlope(channel: Integer; slope: Integer); cdecl; external WDSP_LIB;
procedure SetRXAAGCFixed(channel: Integer; fixed_agc: Double); cdecl; external WDSP_LIB;
procedure SetRXAAGCMaxInputLevel(channel: Integer; level: Double); cdecl; external WDSP_LIB;
procedure SetTXAALCSt(channel: Integer; state: Integer); cdecl; external WDSP_LIB;
procedure SetTXAALCAttack(channel: Integer; attack: Integer); cdecl; external WDSP_LIB;
procedure SetTXAALCDecay(channel: Integer; decay: Integer); cdecl; external WDSP_LIB;
procedure SetTXAALCHang(channel: Integer; hang: Integer); cdecl; external WDSP_LIB;
procedure SetTXAALCMaxGain(channel: Integer; maxgain: Double); cdecl; external WDSP_LIB;
procedure SetTXALevelerSt(channel: Integer; state: Integer); cdecl; external WDSP_LIB;
procedure SetTXALevelerAttack(channel: Integer; attack: Integer); cdecl; external WDSP_LIB;
procedure SetTXALevelerDecay(channel: Integer; decay: Integer); cdecl; external WDSP_LIB;
procedure SetTXALevelerHang(channel: Integer; hang: Integer); cdecl; external WDSP_LIB;
procedure SetTXALevelerTop(channel: Integer; maxgain: Double); cdecl; external WDSP_LIB;

// ---------------------------------------------------------------------------
// wisdom.c  (FFTW wisdom)
// ---------------------------------------------------------------------------
function  wisdom_get_status: PAnsiChar; cdecl; external WDSP_LIB;
function  WDSPwisdom(directory: PAnsiChar): Integer; cdecl; external WDSP_LIB;

implementation

end.
