wdsp/calcc.h
Uladzimir Karpenka 89c8a0e2b5 first commit
2026-06-01 15:58:45 +03:00

168 lines
3.6 KiB
C

/* calcc.h
This file is part of a program that implements a Software-Defined Radio.
Copyright (C) 2013, 2016, 2023 Warren Pratt, NR0V
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
The author can be reached by email at
warren@wpratt.com
*/
#ifndef _calcc_h
#define _calcc_h
#include "delay.h"
#include "lmath.h"
typedef struct _calcc
{
int channel;
int runcal;
int size;
volatile long mox;
volatile long solidmox;
int rate;
int ints;
int spi;
int nsamps;
int npsamps;
int pin;
int map;
int convex;
int stbl;
int scOK;
double hw_scale;
double rx_scale;
double alpha;
int tsamps;
double* env_TX;
double* env_RX;
double* x;
double* ym;
double* yc;
double* ys;
double* cat;
double* t;
double* tmap;
double* cm;
double* cc;
double* cs;
double* cm_old;
double* rxs;
double* txs;
double ptol;
int* info;
int* binfo;
double txdel;
BLDR ccbld;
volatile long savecorr_bypass;
HANDLE Sem_SaveCorr;
volatile long restcorr_bypass;
HANDLE Sem_RestCorr;
volatile long calccorr_bypass;
HANDLE Sem_CalcCorr;
volatile long turnoff_bypass;
HANDLE Sem_TurnOff;
struct _ctrl
{
double moxdelay;
double loopdelay;
int state;
int reset;
int automode;
int mancal;
int turnon;
int moxsamps;
int moxcount;
int count;
int* cpi;
int* sindex;
int* sbase;
int full_ints;
int calcinprogress;
volatile LONG calcdone;
int waitsamps;
int waitcount;
double env_maxtx;
volatile long running;
int bs_count;
volatile long current_state;
CRITICAL_SECTION cs_SafeToEnd;
} ctrl;
struct _disp
{
double* x;
double* ym;
double* yc;
double* ys;
double* cm;
double* cc;
double* cs;
CRITICAL_SECTION cs_disp;
} disp;
DELAY rxdelay;
DELAY txdelay;
struct _util
{
char savefile[256];
char restfile[256];
int ints;
int channel;
double* pm;
double* pc;
double* ps;
} util;
double* temptx; //////////////////////////////////////////////////// temporary tx complex buffer - remove with new callback3port()
double* temprx; //////////////////////////////////////////////////// temporary rx complex buffer - remove with new callback3port()
} calcc, *CALCC;
extern CALCC create_calcc (int channel, int runcal, int size, int rate, int ints, int spi, double hw_scale,
double moxdelay, double loopdelay, double ptol, int mox, int solidmox, int pin, int map, int stbl,
int npsamps, double alpha);
extern void destroy_calcc (CALCC a);
extern void flush_calcc (CALCC a);
extern __declspec(dllexport) void pscc (int channel, int size, double* tx, double* rx);
extern void __cdecl PSSaveCorrection(void* pargs);
extern void __cdecl PSRestoreCorrection(void* pargs);
extern void __cdecl doPSCalcCorrection(void* arg);
extern void __cdecl doPSTurnoff(void* arg);
#endif
// 'info' assignments:
// 0 - builder for rx_scale
// 1 - builder for cm
// 2 - builder for cc
// 3 - builder for cs
// 4 - feedback level warning
// 5 - count of attempted calibrations
// 6 - results from scheck()
// 7 - results from rxscheck()
//
// 13 - dogcount
// 14 - indicates iqc_Run = 1
// 15 - control state