/* 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