Files
TX/source/fgen.h
2025-08-26 16:10:47 -05:00

72 lines
1.9 KiB
C

#ifndef _FGEN_H
#define _FGEN_H
#include "dds.h"
#define RAMP_300KHZ 300000
typedef enum
{
DDS_SIGNAL = 0,
DDS_DIRECTION,
DDS_RAMP,
NUM_DDS
} dds_type_t;
//Locate direction (LD)
#define FREQ_LD_MAX_FREQUENCY 10000 //LD runs at or below this frequency
#define FREQ_LD_SWITCH_POINT 1500 //At or below this freq, f2 is f1 * 2. above this f2 = f1 / 2
typedef enum
{
FT_ACTIVE, //active
FT_LD_ACTIVE, //active w/ Locate Direction
FT_POWER, //RX ONLY individual power
FT_GROUPED_POWER, //RX ONLY Radio style grouped power
FT_CATHODIC, //RX ONLY cathodic protection - Identical to individual power except naming in frequency menu
FT_SONDE, //RX ONLY
FT_RADIO, //RX ONLY
FT_FAULT_FIND, //RX ONLY fault finder - Has it's own dedicated frequency set. frequencies are NOT user definable
} FREQ_TYPE_t;
//Data for individual frequencies
typedef struct
{
FREQ_TYPE_t type;
uint32_t frequency; //frequency in Hz
uint32_t ldFrequency;
uint8_t enabled;
float i_coeff_lo;
float i_coeff_hi;
float v_coeff_lo;
float v_coeff_hi;
} FREQUENCY_t;
typedef struct
{
// list of frequencies...
FREQUENCY_t frequencies[FREQ_MAX_NUM];
uint32_t numFrequencies; //number of frequencies in array
dds_t dds[NUM_DDS];
uint8_t amplitude;
} fgen_t;
fgen_t* fgen_init(void);
FREQUENCY_t* fgen_findNearest(uint32_t freq);
FREQUENCY_t *fgen_getByIndex(int index);
void fgen_getFrequencyName(FREQUENCY_t *freq, uint8_t *string);
uint32_t fgen_getNumFrequencies(void);
void fgen_addFrequency(uint32_t frequency, uint8_t enabled, uint8_t inMenu, FREQ_TYPE_t type);
void fgen_clearFrequencies(void);
void fgen_setFrequency(FREQUENCY_t *freq);
void fgen_enableDDS(dds_type_t dds, bool enable);
dds_t* fgen_getDDS(dds_type_t dds);
void fgen_setAmplitude(uint8_t amplitude);
#endif