implement support to set the ADF7021 hotspot Rx gain;

pull/12/head
Bryan Biedenkapp 4 years ago
parent 4267cf31f5
commit ed19ec8f51

@ -118,9 +118,18 @@ system:
fdmaPreamble: 80
dmrRxDelay: 7
p25CorrCount: 8
rxDCOffset: 0
txDCOffset: 0
txTuning: 0 # freq offset for the hotspot, in hz
dmrDiscBWAdj: 0 # Valid values between -128 and 128
dmrPostBWAdj: 0 # Valid values between -128 and 128
p25DiscBWAdj: 0 # Valid values between -128 and 128
p25PostBWAdj: 0 # Valid values between -128 and 128
adfGainMode: 0 # 0 - Auto, 1 - Auto High Lin, 2 - Low, 3 - High
dmrSymLvl3Adj: 0 # Valid values between -128 and 128
dmrSymLvl1Adj: 0 # Valid values between -128 and 128
p25SymLvl3Adj: 0 # Valid values between -128 and 128
p25SymLvl1Adj: 0 # Valid values between -128 and 128
rxDCOffset: 0 # Valid values between -128 and 128
txDCOffset: 0 # Valid values between -128 and 128
txTuning: 0 # Freq offset for the hotspot, in hz
rxTuning: 0
rxLevel: 50
txLevel: 50

@ -1512,6 +1512,7 @@ bool Host::createModem()
int p25DiscBWAdj = modemConf["p25DiscBWAdj"].as<int>(0);
int dmrPostBWAdj = modemConf["dmrPostBWAdj"].as<int>(0);
int p25PostBWAdj = modemConf["p25PostBWAdj"].as<int>(0);
ADF_GAIN_MODE adfGainMode = (ADF_GAIN_MODE)modemConf["adfGainMode"].as<uint32_t>(0U);
int dmrSymLevel3Adj = modemConf["dmrSymLvl3Adj"].as<int>(0);
int dmrSymLevel1Adj = modemConf["dmrSymLvl1Adj"].as<int>(0);
int p25SymLevel3Adj = modemConf["p25SymLvl3Adj"].as<int>(0);
@ -1649,7 +1650,7 @@ bool Host::createModem()
m_modem->setLevels(rxLevel, cwIdTXLevel, dmrTXLevel, p25TXLevel);
m_modem->setSymbolAdjust(dmrSymLevel3Adj, dmrSymLevel1Adj, p25SymLevel3Adj, p25SymLevel1Adj);
m_modem->setDCOffsetParams(txDCOffset, rxDCOffset);
m_modem->setRFParams(rxActualFreq, txActualFreq, rfPower, dmrDiscBWAdj, p25DiscBWAdj, dmrPostBWAdj, p25PostBWAdj);
m_modem->setRFParams(rxActualFreq, txActualFreq, rfPower, dmrDiscBWAdj, p25DiscBWAdj, dmrPostBWAdj, p25PostBWAdj, adfGainMode);
m_modem->setDMRColorCode(m_dmrColorCode);
m_modem->setP25NAC(m_p25NAC);

@ -130,23 +130,24 @@ HostCal::HostCal(const std::string& confFile) :
m_fec(),
m_transmit(false),
m_duplex(true),
m_txInvert(false),
m_rxInvert(false),
m_txInvert(false),
m_pttInvert(false),
m_dcBlocker(true),
m_txLevel(50.0F),
m_rxLevel(50.0F),
m_txLevel(50.0F),
m_dmrEnabled(false),
m_dmrRx1K(false),
m_p25Enabled(false),
m_p25Rx1K(false),
m_txDCOffset(0),
m_rxDCOffset(0),
m_txDCOffset(0),
m_isHotspot(false),
m_dmrDiscBWAdj(0),
m_p25DiscBWAdj(0),
m_dmrPostBWAdj(0),
m_p25PostBWAdj(0),
m_adfGainMode(ADF_GAIN_AUTO),
m_dmrSymLevel3Adj(0),
m_dmrSymLevel1Adj(0),
m_p25SymLevel3Adj(0),
@ -391,6 +392,8 @@ int HostCal::run()
m_dmrPostBWAdj = modemConf["dmrPostBWAdj"].as<int>(0);
m_p25PostBWAdj = modemConf["p25PostBWAdj"].as<int>(0);
m_adfGainMode = (ADF_GAIN_MODE)modemConf["adfGainMode"].as<uint32_t>(0U);
m_dmrSymLevel3Adj = modemConf["dmrSymLvl3Adj"].as<int>(0);
m_dmrSymLevel1Adj = modemConf["dmrSymLvl1Adj"].as<int>(0);
m_p25SymLevel3Adj = modemConf["p25SymLvl3Adj"].as<int>(0);
@ -704,6 +707,32 @@ int HostCal::run()
printStatus();
}
}
break;
case '5':
{
if (m_isHotspot) {
char value[2] = { '\0' };
::fprintf(stdout, "> ADF7021 Gain Mode (0 - Auto, 1 - Auto High Lin., 2 - Low, 3 - High) [%u] ? ", m_adfGainMode);
::fflush(stdout);
m_console.getLine(value, 2, 0);
if (value[0] != '\0') {
uint8_t gainMode = (uint8_t)m_adfGainMode;
sscanf(value, "%c", &gainMode);
if (gainMode > 0U && gainMode < 4U) {
m_adfGainMode = (ADF_GAIN_MODE)gainMode;
writeRFParams();
} else {
m_adfGainMode = ADF_GAIN_AUTO;
writeRFParams();
}
}
printStatus();
}
}
break;
/** Mode Commands */
@ -1137,6 +1166,7 @@ void HostCal::displayHelp()
LogMessage(LOG_CAL, " 2 Set P25 Disc. Bandwidth Offset");
LogMessage(LOG_CAL, " 3 Set DMR Post Demod Bandwidth Offset");
LogMessage(LOG_CAL, " 4 Set P25 Post Demod Bandwidth Offset");
LogMessage(LOG_CAL, " 5 Set ADF7021 Rx Auto. Gain Mode");
}
}
@ -1912,10 +1942,10 @@ bool HostCal::writeConfig(uint8_t modeOverride)
/// <returns></returns>
bool HostCal::writeRFParams()
{
unsigned char buffer[17U];
unsigned char buffer[18U];
buffer[0U] = DVM_FRAME_START;
buffer[1U] = 17U;
buffer[1U] = 18U;
buffer[2U] = CMD_SET_RFPARAMS;
buffer[3U] = 0x00U;
@ -1941,9 +1971,11 @@ bool HostCal::writeRFParams()
m_conf["system"]["modem"]["p25PostBWAdj"] = __INT_STR(m_p25PostBWAdj);
buffer[16U] = (uint8_t)(m_p25PostBWAdj + 128);
buffer[17U] = (uint8_t)m_adfGainMode;
// CUtils::dump(1U, "Written", buffer, len);
int ret = m_modem->write(buffer, 17U);
int ret = m_modem->write(buffer, 18U);
if (ret <= 0)
return false;
@ -2086,6 +2118,21 @@ void HostCal::printStatus()
if (m_isHotspot) {
LogMessage(LOG_CAL, " - DMR Disc. BW: %d, P25 Disc. BW: %d, DMR Post Demod BW: %d, P25 Post Demod BW: %d",
m_dmrDiscBWAdj, m_p25DiscBWAdj, m_dmrPostBWAdj, m_p25PostBWAdj);
switch (m_adfGainMode) {
case ADF_GAIN_AUTO_LIN:
LogMessage(LOG_CAL, " - ADF7021 Gain Mode: Auto High Linearity");
break;
case ADF_GAIN_LOW:
LogMessage(LOG_CAL, " - ADF7021 Gain Mode: Low");
break;
case ADF_GAIN_HIGH:
LogMessage(LOG_CAL, " - ADF7021 Gain Mode: High");
break;
case ADF_GAIN_AUTO:
default:
LogMessage(LOG_CAL, " - ADF7021 Gain Mode: Auto");
break;
}
}
LogMessage(LOG_CAL, " - FDMA Preambles: %u (%.1fms), DMR Rx Delay: %u (%.1fms), P25 Corr. Count: %u (%.1fms)", m_fdmaPreamble, float(m_fdmaPreamble) * 0.2083F, m_dmrRxDelay, float(m_dmrRxDelay) * 0.0416666F,
m_p25CorrCount, float(m_p25CorrCount) * 0.667F);

@ -69,33 +69,35 @@ private:
bool m_duplex;
bool m_txInvert;
bool m_rxInvert;
bool m_pttInvert;
bool m_rxInvert; // dedicated modem - Rx signal inversion
bool m_txInvert; // dedicated modem - Tx signal inversion
bool m_pttInvert; // dedicated modem - PTT signal inversion
bool m_dcBlocker;
bool m_dcBlocker; // dedicated modem - DC blocker
float m_txLevel;
float m_rxLevel;
float m_rxLevel; // dedicated/hotspot modem - Rx modulation level
float m_txLevel; // dedicated/hotspot modem - Tx modulation level
bool m_dmrEnabled;
bool m_dmrRx1K;
bool m_p25Enabled;
bool m_p25Rx1K;
int m_txDCOffset;
int m_rxDCOffset;
int m_rxDCOffset; // dedicated modem - Rx signal DC offset
int m_txDCOffset; // dedicated modem - Tx signal DC offset
bool m_isHotspot;
int8_t m_dmrDiscBWAdj;
int8_t m_p25DiscBWAdj;
int8_t m_dmrPostBWAdj;
int8_t m_p25PostBWAdj;
int8_t m_dmrDiscBWAdj; // hotspot modem - DMR discriminator BW adjustment
int8_t m_p25DiscBWAdj; // hotspot modem - P25 discriminator BW adjustment
int8_t m_dmrPostBWAdj; // hotspot modem - DMR post demod BW adjustment
int8_t m_p25PostBWAdj; // hotspot modem - P25 post demod BW adjustment
int m_dmrSymLevel3Adj;
int m_dmrSymLevel1Adj;
int m_p25SymLevel3Adj;
int m_p25SymLevel1Adj;
modem::ADF_GAIN_MODE m_adfGainMode; // hotspot modem - ADF7021 Rx gain
int m_dmrSymLevel3Adj; // dedicated modem - +3/-3 DMR symbol adjustment
int m_dmrSymLevel1Adj; // dedicated modem - +1/-1 DMR symbol adjustment
int m_p25SymLevel3Adj; // dedicated modem - +3/-3 P25 symbol adjustment
int m_p25SymLevel1Adj; // dedicated modem - +1/-1 P25 symbol adjustment
uint8_t m_fdmaPreamble;
uint8_t m_dmrRxDelay;
@ -109,9 +111,9 @@ private:
int m_rxTuning;
int m_txTuning;
uint32_t m_rxFrequency;
uint32_t m_rxFrequency; // hotspot modem - Rx Frequency
uint32_t m_rxAdjustedFreq;
uint32_t m_txFrequency;
uint32_t m_txFrequency; // hotspot modem - Tx Frequency
uint32_t m_txAdjustedFreq;
uint8_t m_channelId;
uint32_t m_channelNo;

@ -103,6 +103,7 @@ Modem::Modem(port::IModemPort* port, bool duplex, bool rxInvert, bool txInvert,
m_p25DiscBWAdj(0),
m_dmrPostBWAdj(0),
m_p25PostBWAdj(0),
m_adfGainMode(ADF_GAIN_AUTO),
m_dmrSymLevel3Adj(0),
m_dmrSymLevel1Adj(0),
m_p25SymLevel3Adj(0),
@ -233,8 +234,11 @@ void Modem::setSymbolAdjust(int dmrSymLevel3Adj, int dmrSymLevel1Adj, int p25Sym
/// <param name="p25DiscBWAdj"></param>
/// <param name="dmrPostBWAdj"></param>
/// <param name="p25PostBWAdj"></param>
void Modem::setRFParams(uint32_t rxFreq, uint32_t txFreq, uint8_t rfPower, int8_t dmrDiscBWAdj, int8_t p25DiscBWAdj, int8_t dmrPostBWAdj, int8_t p25PostBWAdj)
/// <param name="gainMode"></param>
void Modem::setRFParams(uint32_t rxFreq, uint32_t txFreq, uint8_t rfPower, int8_t dmrDiscBWAdj, int8_t p25DiscBWAdj,
int8_t dmrPostBWAdj, int8_t p25PostBWAdj, ADF_GAIN_MODE gainMode)
{
m_adfGainMode = gainMode;
m_rfPower = rfPower;
m_rxFrequency = rxFreq;
m_txFrequency = txFreq;
@ -1498,10 +1502,10 @@ bool Modem::writeSymbolAdjust()
/// <returns></returns>
bool Modem::writeRFParams()
{
unsigned char buffer[17U];
unsigned char buffer[18U];
buffer[0U] = DVM_FRAME_START;
buffer[1U] = 17U;
buffer[1U] = 18U;
buffer[2U] = CMD_SET_RFPARAMS;
buffer[3U] = 0x00U;
@ -1523,9 +1527,11 @@ bool Modem::writeRFParams()
buffer[15U] = (uint8_t)(m_dmrPostBWAdj + 128);
buffer[16U] = (uint8_t)(m_p25PostBWAdj + 128);
buffer[17U] = (uint8_t)m_adfGainMode;
// CUtils::dump(1U, "Written", buffer, len);
int ret = m_port->write(buffer, 17U);
int ret = m_port->write(buffer, 18U);
if (ret <= 0)
return false;

@ -163,6 +163,13 @@ namespace modem
RESP_DATA
};
enum ADF_GAIN_MODE {
ADF_GAIN_AUTO = 0U,
ADF_GAIN_AUTO_LIN = 1U,
ADF_GAIN_LOW = 2U,
ADF_GAIN_HIGH = 3U
};
const uint8_t DVM_FRAME_START = 0xFEU;
const uint8_t MAX_FDMA_PREAMBLE = 255U;
@ -195,7 +202,8 @@ namespace modem
/// <summary>Sets the symbol adjustment levels.</summary>
void setSymbolAdjust(int dmrSymLevel3Adj, int dmrSymLevel1Adj, int p25SymLevel3Adj, int p25SymLevel1Adj);
/// <summary>Sets the RF parameters.</summary>
void setRFParams(uint32_t rxFreq, uint32_t txFreq, uint8_t rfPower, int8_t dmrDiscBWAdj, int8_t p25DiscBWAdj, int8_t dmrPostBWAdj, int8_t p25PostBWAdj);
void setRFParams(uint32_t rxFreq, uint32_t txFreq, uint8_t rfPower, int8_t dmrDiscBWAdj, int8_t p25DiscBWAdj,
int8_t dmrPostBWAdj, int8_t p25PostBWAdj, ADF_GAIN_MODE gainMode);
/// <summary>Sets the DMR color code.</summary>
void setDMRColorCode(uint32_t colorCode);
/// <summary>Sets the P25 NAC.</summary>
@ -298,47 +306,49 @@ namespace modem
bool m_duplex;
bool m_rxInvert;
bool m_txInvert;
bool m_pttInvert;
bool m_rxInvert; // dedicated modem - Rx signal inversion
bool m_txInvert; // dedicated modem - Tx signal inversion
bool m_pttInvert; // dedicated modem - PTT signal inversion
bool m_dcBlocker;
bool m_cosLockout;
bool m_dcBlocker; // dedicated modem - DC blocker
bool m_cosLockout; // dedicated modem - COS lockout
uint8_t m_fdmaPreamble;
uint8_t m_dmrRxDelay;
uint8_t m_p25CorrCount;
float m_rxLevel;
float m_cwIdTXLevel;
float m_dmrTXLevel;
float m_p25TXLevel;
float m_rxLevel; // dedicated/hotspot modem - Rx modulation level
float m_cwIdTXLevel; // dedicated/hotspot modem - CW ID Tx modulation level
float m_dmrTXLevel; // dedicated/hotspot modem - DMR Tx modulation level
float m_p25TXLevel; // dedicated/hotspot modem - P25 Tx modulation level
bool m_disableOFlowReset;
bool m_dmrEnabled;
bool m_p25Enabled;
int m_rxDCOffset;
int m_txDCOffset;
int m_rxDCOffset; // dedicated modem - Rx signal DC offset
int m_txDCOffset; // dedicated modem - Tx signal DC offset
bool m_isHotspot;
uint32_t m_rxFrequency;
uint32_t m_txFrequency;
uint8_t m_rfPower;
uint32_t m_rxFrequency; // hotspot modem - Rx Frequency
uint32_t m_txFrequency; // hotspot modem - Tx Frequency
uint8_t m_rfPower; // hotspot modem - RF power
int8_t m_dmrDiscBWAdj; // hotspot modem - DMR discriminator BW adjustment
int8_t m_p25DiscBWAdj; // hotspot modem - P25 discriminator BW adjustment
int8_t m_dmrPostBWAdj; // hotspot modem - DMR post demod BW adjustment
int8_t m_p25PostBWAdj; // hotspot modem - P25 post demod BW adjustment
int8_t m_dmrDiscBWAdj;
int8_t m_p25DiscBWAdj;
int8_t m_dmrPostBWAdj;
int8_t m_p25PostBWAdj;
ADF_GAIN_MODE m_adfGainMode; // hotspot modem - ADF7021 Rx gain
int m_dmrSymLevel3Adj;
int m_dmrSymLevel1Adj;
int m_p25SymLevel3Adj;
int m_p25SymLevel1Adj;
int m_dmrSymLevel3Adj; // dedicated modem - +3/-3 DMR symbol adjustment
int m_dmrSymLevel1Adj; // dedicated modem - +1/-1 DMR symbol adjustment
int m_p25SymLevel3Adj; // dedicated modem - +3/-3 P25 symbol adjustment
int m_p25SymLevel1Adj; // dedicated modem - +1/-1 P25 symbol adjustment
uint32_t m_adcOverFlowCount;
uint32_t m_dacOverFlowCount;
uint32_t m_adcOverFlowCount; // dedicated modem - ADC overflow count
uint32_t m_dacOverFlowCount; // dedicated modem - DAC overflow count
DVM_STATE m_modemState;

Loading…
Cancel
Save

Powered by TurnKey Linux.