UHSDR/UHSDR-active-devel/mchf-eclipse/drivers/audio/audio_management.h
2022-11-08 16:13:55 +01:00

102 lines
3.4 KiB
C

/* -*- mode: c; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4; coding: utf-8 -*- */
/************************************************************************************
** **
** mcHF QRP Transceiver **
** K Atanassov - M0NKA 2014 **
** **
**---------------------------------------------------------------------------------**
** **
** File name: **
** Description: **
** Last Modified: **
** Licence: GNU GPLv3 **
************************************************************************************/
#ifndef DRIVERS_AUDIO_AUDIO_MANAGEMENT_H_
#define DRIVERS_AUDIO_AUDIO_MANAGEMENT_H_
#include "uhsdr_types.h"
void AudioManagement_CalcIqPhaseGainAdjust(float32_t freq);
void AudioManagement_CalcTxCompLevel(void);
void AudioManagement_CalcNB_AGC(void);
void AudioManagement_CalcAGCVals(void);
void AudioManagement_CalcRFGain(void);
void AudioManagement_CalcALCDecay(void);
void AudioManagement_CalcAGCDecay(void);
void AudioManagement_SetSidetoneForDemodMode(uint8_t dmod_mode, bool tune_mode);
void AudioManagement_LoadToneBurstMode(void);
void AudioManagement_CalcSubaudibleGenFreq(float32_t freq); // load/set current FM subaudible tone settings for generation
void AudioManagement_CalcSubaudibleDetFreq(float32_t freq);
void AudioManagement_KeyBeep(void);
void AudioManagement_KeyBeepPrepare(void);
#define IQ_BALANCE_OFF -128 // Minimum setting for IQ balance
#define IQ_BALANCE_MAX 127 // Maximum setting for IQ balance
#define MIN_IQ_GAIN_BALANCE IQ_BALANCE_OFF // Minimum setting for IQ gain balance
#define MAX_IQ_GAIN_BALANCE IQ_BALANCE_MAX // Maximum setting for IQ gain balance
#define MIN_IQ_PHASE_BALANCE IQ_BALANCE_OFF // Minimum setting for IQ phase balance
#define MAX_IQ_PHASE_BALANCE IQ_BALANCE_MAX // Maximum setting for IQ phase balance
typedef struct
{
int32_t phase;
int32_t gain;
} iq_adjust_balance_t;
typedef enum
{
IQ_RX_GAIN,
IQ_RX_PHASE,
IQ_TX_TRANS_ON_GAIN,
IQ_TX_TRANS_OFF_GAIN,
IQ_TX_TRANS_ON_PHASE,
IQ_TX_TRANS_OFF_PHASE,
} iq_adjust_params_t;
typedef struct {
iq_adjust_balance_t rx;
iq_adjust_balance_t tx[2];
} iq_adjust_vals_t;
typedef struct
{
int32_t freq;
iq_adjust_vals_t adj;
} freq_adjust_point_t;
// this data structure(s) must have at least 2 elements (including the stop element)
// corresponding frequencies are stored in const array iq_adjust_freq
typedef enum {
IQ_80M = 0,
IQ_20M,
IQ_15M,
IQ_10M,
IQ_10M_UP,
IQ_6M,
IQ_160M,
IQ_40M,
IQ_30M,
IQ_17M,
IQ_12M,
IQ_FREQ_NUM
} iq_freq_enum_t;
// the order here must match the order in the structure below!
extern freq_adjust_point_t iq_adjust[];
// For advance I/Q jusify
//const uint8_t iq_adv_adj_order[] = {6, 0, 7, 8, 1, 9, 2, 10, 3, 4, 5};
#endif /* DRIVERS_AUDIO_AUDIO_MANAGEMENT_H_ */