expose hotspot AFC functionality; remove display of date/time from calibration mode;

2.0-maint
Bryan Biedenkapp 3 years ago
parent cfc86169e9
commit d038cad5e3

@ -154,6 +154,12 @@ system:
nxdnDiscBWAdj: 0 # Valid values between -128 and 128
nxdnPostBWAdj: 0 # Valid values between -128 and 128
adfGainMode: 0 # 0 - Auto, 1 - Auto High Lin, 2 - Low, 3 - High
afcEnable: false
afcKI: 11
afcKP: 4
afcRange: 1
txTuning: 0 # Freq offset for the hotspot, in hz
rxTuning: 0
repeater:
dmrSymLvl3Adj: 0 # Valid values between -128 and 128
dmrSymLvl1Adj: 0 # Valid values between -128 and 128
@ -170,8 +176,6 @@ system:
rssiFine: 127
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
# cwIdTxLevel: 50

@ -1793,11 +1793,11 @@ bool Host::readParams()
removeLockFile();
LogInfo("General Parameters");
LogInfo(" DMR: %s", m_dmrEnabled ? "enabled" : "disabled");
LogInfo(" P25: %s", m_p25Enabled ? "enabled" : "disabled");
LogInfo(" NXDN: %s", m_nxdnEnabled ? "enabled" : "disabled");
LogInfo(" Duplex: %s", m_duplex ? "yes" : "no");
if (!udpMasterMode) {
LogInfo(" DMR: %s", m_dmrEnabled ? "enabled" : "disabled");
LogInfo(" P25: %s", m_p25Enabled ? "enabled" : "disabled");
LogInfo(" NXDN: %s", m_nxdnEnabled ? "enabled" : "disabled");
LogInfo(" Duplex: %s", m_duplex ? "yes" : "no");
if (!m_duplex) {
LogInfo(" Simplex Same Frequency: %s", simplexSameFreq ? "yes" : "no");
}
@ -2000,9 +2000,6 @@ bool Host::createModem()
uint8_t p25CorrCount = (uint8_t)modemConf["p25CorrCount"].as<uint32_t>(4U);
int rxDCOffset = modemConf["rxDCOffset"].as<int>(0);
int txDCOffset = modemConf["txDCOffset"].as<int>(0);
int rxTuning = modemConf["rxTuning"].as<int>(0);
int txTuning = modemConf["txTuning"].as<int>(0);
uint8_t rfPower = (uint8_t)modemConf["rfPower"].as<uint32_t>(100U);
yaml::Node hotspotParams = modemConf["hotspot"];
@ -2013,6 +2010,13 @@ bool Host::createModem()
int p25PostBWAdj = hotspotParams["p25PostBWAdj"].as<int>(0);
int nxdnPostBWAdj = hotspotParams["nxdnPostBWAdj"].as<int>(0);
ADF_GAIN_MODE adfGainMode = (ADF_GAIN_MODE)hotspotParams["adfGainMode"].as<uint32_t>(0U);
bool afcEnable = hotspotParams["afcEnable"].as<bool>(false);
uint8_t afcKI = (uint8_t)hotspotParams["afcKI"].as<uint32_t>(11U);
uint8_t afcKP = (uint8_t)hotspotParams["afcKP"].as<uint32_t>(4U);
uint8_t afcRange = (uint8_t)hotspotParams["afcRange"].as<uint32_t>(1U);
int rxTuning = hotspotParams["rxTuning"].as<int>(0);
int txTuning = hotspotParams["txTuning"].as<int>(0);
uint8_t rfPower = (uint8_t)hotspotParams["rfPower"].as<uint32_t>(100U);
yaml::Node repeaterParams = modemConf["repeater"];
@ -2194,7 +2198,7 @@ bool Host::createModem()
m_modem->setSymbolAdjust(dmrSymLevel3Adj, dmrSymLevel1Adj, p25SymLevel3Adj, p25SymLevel1Adj, nxdnSymLevel3Adj, nxdnSymLevel1Adj);
m_modem->setDCOffsetParams(txDCOffset, rxDCOffset);
m_modem->setRFParams(m_rxFrequency, m_txFrequency, rxTuning, txTuning, rfPower, dmrDiscBWAdj, p25DiscBWAdj, nxdnDiscBWAdj, dmrPostBWAdj,
p25PostBWAdj, nxdnPostBWAdj, adfGainMode);
p25PostBWAdj, nxdnPostBWAdj, adfGainMode, afcEnable, afcKI, afcKP, afcRange);
m_modem->setSoftPot(rxCoarse, rxFine, txCoarse, txFine, rssiCoarse, rssiFine);
m_modem->setDMRColorCode(m_dmrColorCode);
m_modem->setP25NAC(m_p25NAC);

@ -160,6 +160,10 @@ HostCal::HostCal(const std::string& confFile) :
m_dmrPostBWAdj(0),
m_p25PostBWAdj(0),
m_adfGainMode(ADF_GAIN_AUTO),
m_afcEnable(false),
m_afcKI(11U),
m_afcKP(4U),
m_afcRange(1U),
m_dmrSymLevel3Adj(0),
m_dmrSymLevel1Adj(0),
m_p25SymLevel3Adj(0),
@ -173,7 +177,7 @@ HostCal::HostCal(const std::string& confFile) :
m_fdmaPreamble(80U),
m_dmrRxDelay(7U),
m_p25CorrCount(5U),
m_debug(false),
m_debug(true),
m_mode(STATE_DMR_CAL),
m_modeStr(DMR_CAL_STR),
m_rxTuning(0),
@ -218,7 +222,7 @@ int HostCal::run()
}
// initialize system logging
ret = ::LogInitialise("", "", 0U, 1U);
ret = ::LogInitialise("", "", 0U, 1U, true);
if (!ret) {
::fprintf(stderr, "unable to open the log file\n");
return 1;
@ -299,15 +303,6 @@ int HostCal::run()
yaml::Node modemConf = systemConf["modem"];
m_debug = modemConf["debug"].as<bool>(false);
m_rxTuning = modemConf["rxTuning"].as<int>(0);
m_txTuning = modemConf["txTuning"].as<int>(0);
// apply the frequency tuning offsets
m_rxAdjustedFreq = m_rxFrequency + m_rxTuning;
m_txAdjustedFreq = m_txFrequency + m_txTuning;
m_rxInvert = modemConf["rxInvert"].as<bool>(false);
m_txInvert = modemConf["txInvert"].as<bool>(false);
m_pttInvert = modemConf["pttInvert"].as<bool>(false);
@ -329,6 +324,18 @@ int HostCal::run()
m_adfGainMode = (ADF_GAIN_MODE)hotspotParams["adfGainMode"].as<uint32_t>(0U);
m_afcEnable = hotspotParams["afcEnable"].as<bool>(false);
m_afcKI = (uint8_t)hotspotParams["afcKI"].as<uint32_t>(11U);
m_afcKP = (uint8_t)hotspotParams["afcKP"].as<uint32_t>(4U);
m_afcRange = (uint8_t)hotspotParams["afcRange"].as<uint32_t>(1U);
m_rxTuning = hotspotParams["rxTuning"].as<int>(0);
m_txTuning = hotspotParams["txTuning"].as<int>(0);
// apply the frequency tuning offsets
m_rxAdjustedFreq = m_rxFrequency + m_rxTuning;
m_txAdjustedFreq = m_txFrequency + m_txTuning;
yaml::Node repeaterParams = modemConf["repeater"];
m_dmrSymLevel3Adj = repeaterParams["dmrSymLvl3Adj"].as<int>(0);
@ -444,7 +451,8 @@ int HostCal::run()
m_modem->setLevels(m_rxLevel, m_txLevel, m_txLevel, m_txLevel, m_txLevel);
m_modem->setSymbolAdjust(m_dmrSymLevel3Adj, m_dmrSymLevel1Adj, m_p25SymLevel3Adj, m_p25SymLevel1Adj, m_nxdnSymLevel3Adj, m_nxdnSymLevel1Adj);
m_modem->setDCOffsetParams(m_txDCOffset, m_rxDCOffset);
m_modem->setRFParams(m_rxFrequency, m_txFrequency, m_rxTuning, m_txTuning, 100U, m_dmrDiscBWAdj, m_p25DiscBWAdj, m_nxdnDiscBWAdj, m_dmrPostBWAdj, m_p25PostBWAdj, m_nxdnPostBWAdj, m_adfGainMode);
m_modem->setRFParams(m_rxFrequency, m_txFrequency, m_rxTuning, m_txTuning, 100U, m_dmrDiscBWAdj, m_p25DiscBWAdj, m_nxdnDiscBWAdj, m_dmrPostBWAdj, m_p25PostBWAdj, m_nxdnPostBWAdj, m_adfGainMode,
m_afcEnable, m_afcKI, m_afcKP, m_afcRange);
m_modem->setSoftPot(m_rxCoarsePot, m_rxFinePot, m_txCoarsePot, m_txFinePot, m_rssiCoarsePot, m_rssiFinePot);
m_modem->setOpenHandler(MODEM_OC_PORT_HANDLER_BIND(HostCal::portModemOpen, this));
@ -637,7 +645,7 @@ int HostCal::run()
sscanf(value, "%d", &rxTuning);
m_rxTuning = rxTuning;
m_conf["system"]["modem"]["rxTuning"] = __INT_STR(m_rxTuning);
m_conf["system"]["modem"]["hotspot"]["rxTuning"] = __INT_STR(m_rxTuning);
m_rxAdjustedFreq = m_rxFrequency + m_rxTuning;
writeRFParams();
@ -657,7 +665,7 @@ int HostCal::run()
sscanf(value, "%d", &txTuning);
m_txTuning = txTuning;
m_conf["system"]["modem"]["txTuning"] = __INT_STR(m_txTuning);
m_conf["system"]["modem"]["hotspot"]["txTuning"] = __INT_STR(m_txTuning);
m_txAdjustedFreq = m_txFrequency + m_txTuning;
writeRFParams();
@ -888,6 +896,68 @@ int HostCal::run()
}
break;
case '8':
{
if (m_isHotspot && m_modem->getVersion() >= 3U) {
char value[5] = { '\0' };
::fprintf(stdout, "> ADF7021 AFC Enabled [%u] (Y/N) ? ", m_afcEnable);
::fflush(stdout);
m_console.getLine(value, 2, 0);
if (toupper(value[0]) == 'Y' || toupper(value[0]) == 'N') {
m_afcEnable = value[0] == 'Y' ? true : false;
}
::fprintf(stdout, "> AFC Range [%u] ? ", m_afcRange);
::fflush(stdout);
m_console.getLine(value, 4, 0);
if (value[0] != '\0') {
uint32_t afcRange = m_afcRange;
sscanf(value, "%u", &afcRange);
if (afcRange >= 0U && afcRange < 256U)
m_afcRange = (uint8_t)afcRange;
else
m_afcRange = 4U;
}
::fprintf(stdout, "> AFC KI Parameter [%u] ? ", m_afcKI);
::fflush(stdout);
m_console.getLine(value, 3, 0);
if (value[0] != '\0') {
uint32_t afcKI = m_afcKI;
sscanf(value, "%u", &afcKI);
if (afcKI >= 0U && afcKI < 16U)
m_afcKI = (uint8_t)afcKI;
else
m_afcKI = 11U;
}
::fprintf(stdout, "> AFC KP Parameter [%u] ? ", m_afcKP);
::fflush(stdout);
m_console.getLine(value, 2, 0);
if (value[0] != '\0') {
uint32_t afcKP = m_afcKP;
sscanf(value, "%u", &afcKP);
if (afcKP >= 0U && afcKP < 8U)
m_afcKP = (uint8_t)afcKP;
else
m_afcKP = 1U;
}
writeRFParams();
}
else {
LogWarning(LOG_CAL, "ADF7021 AFC alignment is not supported on your firmware!");
}
}
break;
/** Mode Commands */
case 'Z':
{
@ -1463,6 +1533,7 @@ void HostCal::displayHelp()
LogMessage(LOG_CAL, " 5 Set P25 Post Demod Bandwidth Offset");
LogMessage(LOG_CAL, " 6 Set NXDN Post Demod Bandwidth Offset");
LogMessage(LOG_CAL, " 7 Set ADF7021 Rx Auto. Gain Mode");
LogMessage(LOG_CAL, " 8 Set ADF7021 AFC Settings");
}
if (!m_modem->m_flashDisabled) {
LogMessage(LOG_CAL, " E Erase modem configuration area");
@ -2366,8 +2437,8 @@ bool HostCal::writeConfig(uint8_t modeOverride)
/// <returns></returns>
bool HostCal::writeRFParams()
{
uint8_t buffer[20U];
::memset(buffer, 0x00U, 20U);
uint8_t buffer[22U];
::memset(buffer, 0x00U, 22U);
uint8_t lengthToWrite = 18U;
buffer[0U] = DVM_FRAME_START;
@ -2401,12 +2472,21 @@ bool HostCal::writeRFParams()
// are we on a protocol version 3 firmware?
if (m_modem->getVersion() >= 3U) {
lengthToWrite = 20U;
lengthToWrite = 22U;
m_conf["system"]["modem"]["hotspot"]["nxdnDiscBWAdj"] = __INT_STR(m_nxdnDiscBWAdj);
buffer[18U] = (uint8_t)(m_nxdnDiscBWAdj + 128);
m_conf["system"]["modem"]["hotspot"]["nxdnPostBWAdj"] = __INT_STR(m_nxdnPostBWAdj);
buffer[19U] = (uint8_t)(m_nxdnPostBWAdj + 128);
// support optional AFC parameters
m_conf["system"]["modem"]["hotspot"]["afcEnable"] = __BOOL_STR(m_afcEnable);
m_conf["system"]["modem"]["hotspot"]["afcKI"] = __INT_STR(m_afcKI);
m_conf["system"]["modem"]["hotspot"]["afcKP"] = __INT_STR(m_afcKP);
buffer[20U] = (m_afcEnable ? 0x80 : 0x00) +
(m_afcKP << 4) + (m_afcKI);
m_conf["system"]["modem"]["hotspot"]["afcRange"] = __INT_STR(m_afcRange);
buffer[21U] = m_afcRange;
}
buffer[1U] = lengthToWrite;
@ -2592,10 +2672,10 @@ void HostCal::processFlashConfig(const uint8_t *buffer)
}
m_txTuning = int(buffer[25U]) - 128;
m_conf["system"]["modem"]["txTuning"] = __INT_STR(m_txTuning);
m_conf["system"]["modem"]["hotspot"]["txTuning"] = __INT_STR(m_txTuning);
m_txAdjustedFreq = m_txFrequency + m_txTuning;
m_rxTuning = int(buffer[26U]) - 128;
m_conf["system"]["modem"]["rxTuning"] = __INT_STR(m_rxTuning);
m_conf["system"]["modem"]["hotspot"]["rxTuning"] = __INT_STR(m_rxTuning);
m_rxAdjustedFreq = m_rxFrequency + m_rxTuning;
// are we on a protocol version 3 firmware?
@ -2868,6 +2948,9 @@ void HostCal::printStatus()
if (m_modem->getVersion() >= 3U) {
LogMessage(LOG_CAL, " - NXDN Disc. BW: %d, NXDN Post Demod BW: %d",
m_nxdnDiscBWAdj, m_nxdnPostBWAdj);
LogMessage(LOG_CAL, " - AFC Enabled: %u, AFC KI: %u, AFC KP: %u, AFC Range: %u",
m_afcEnable, m_afcKI, m_afcKP, m_afcRange);
}
switch (m_adfGainMode) {

@ -97,6 +97,11 @@ private:
modem::ADF_GAIN_MODE m_adfGainMode; // hotspot modem - ADF7021 Rx gain
bool m_afcEnable; // hotspot modem - ADF7021 AFC enable
uint8_t m_afcKI; // hotspot modem - AFC KI (affects AFC settling time)
uint8_t m_afcKP; // hotspot modem - AFC KP (affects AFC settling time)
uint8_t m_afcRange; // hotspot modem - AFC Maximum Range (m_afcRange * 500hz)
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

@ -151,6 +151,10 @@ Modem::Modem(port::IModemPort* port, bool duplex, bool rxInvert, bool txInvert,
m_p25PostBWAdj(0),
m_nxdnPostBWAdj(0),
m_adfGainMode(ADF_GAIN_AUTO),
m_afcEnable(false),
m_afcKI(11U),
m_afcKP(4U),
m_afcRange(1U),
m_dmrSymLevel3Adj(0),
m_dmrSymLevel1Adj(0),
m_p25SymLevel3Adj(0),
@ -317,10 +321,15 @@ void Modem::setSymbolAdjust(int dmrSymLevel3Adj, int dmrSymLevel1Adj, int p25Sym
/// <param name="p25PostBWAdj"></param>
/// <param name="nxdnPostBWAdj"></param>
/// <param name="gainMode"></param>
/// <param name="afcEnable"></param>
/// <param name="afcKI"></param>
/// <param name="afcKP"></param>
/// <param name="afcRange"></param>
void Modem::setRFParams(uint32_t rxFreq, uint32_t txFreq, int rxTuning, int txTuning, uint8_t rfPower,
int8_t dmrDiscBWAdj, int8_t p25DiscBWAdj, int8_t nxdnDiscBWAdj,
int8_t dmrPostBWAdj, int8_t p25PostBWAdj, int8_t nxdnPostBWAdj,
ADF_GAIN_MODE gainMode)
ADF_GAIN_MODE gainMode,
bool afcEnable, uint8_t afcKI, uint8_t afcKP, uint8_t afcRange)
{
m_adfGainMode = gainMode;
m_rfPower = rfPower;
@ -335,6 +344,11 @@ void Modem::setRFParams(uint32_t rxFreq, uint32_t txFreq, int rxTuning, int txTu
m_dmrPostBWAdj = dmrPostBWAdj;
m_p25PostBWAdj = p25PostBWAdj;
m_nxdnPostBWAdj = nxdnPostBWAdj;
m_afcEnable = afcEnable;
m_afcKI = afcKI;
m_afcKP = afcKP;
m_afcRange = afcRange;
}
/// <summary>
@ -2058,8 +2072,8 @@ bool Modem::writeSymbolAdjust()
/// <returns></returns>
bool Modem::writeRFParams()
{
uint8_t buffer[20U];
::memset(buffer, 0x00U, 20U);
uint8_t buffer[22U];
::memset(buffer, 0x00U, 22U);
uint8_t lengthToWrite = 18U;
buffer[0U] = DVM_FRAME_START;
@ -2090,10 +2104,15 @@ bool Modem::writeRFParams()
// are we on a protocol version 3 firmware?
if (m_protoVer >= 3U) {
lengthToWrite = 20U;
lengthToWrite = 22U;
buffer[18U] = (uint8_t)(m_nxdnDiscBWAdj + 128);
buffer[19U] = (uint8_t)(m_nxdnPostBWAdj + 128);
// support optional AFC parameters
buffer[20U] = (m_afcEnable ? 0x80 : 0x00) +
(m_afcKP << 4) + (m_afcKI);
buffer[21U] = m_afcRange;
}
buffer[1U] = lengthToWrite;

@ -231,7 +231,7 @@ namespace modem
void setSymbolAdjust(int dmrSymLevel3Adj, int dmrSymLevel1Adj, int p25SymLevel3Adj, int p25SymLevel1Adj, int nxdnSymLevel3Adj, int ndxnSymLevel1Adj);
/// <summary>Sets the RF parameters.</summary>
void setRFParams(uint32_t rxFreq, uint32_t txFreq, int rxTuning, int txTuning, uint8_t rfPower, int8_t dmrDiscBWAdj, int8_t p25DiscBWAdj, int8_t nxdnDiscBWAdj,
int8_t dmrPostBWAdj, int8_t p25PostBWAdj, int8_t nxdnPostBWAdj, ADF_GAIN_MODE gainMode);
int8_t dmrPostBWAdj, int8_t p25PostBWAdj, int8_t nxdnPostBWAdj, ADF_GAIN_MODE gainMode, bool afcEnable, uint8_t afcKI, uint8_t afcKP, uint8_t afcRange);
/// <summary>Sets the softpot parameters.</summary>
void setSoftPot(uint8_t rxCoarse, uint8_t rxFine, uint8_t txCoarse, uint8_t txFine, uint8_t rssiCoarse, uint8_t rssiFine);
/// <summary>Sets the DMR color code.</summary>
@ -400,6 +400,11 @@ namespace modem
ADF_GAIN_MODE m_adfGainMode; // hotspot modem - ADF7021 Rx gain
bool m_afcEnable; // hotspot modem - ADF7021 AFC enable
uint8_t m_afcKI; // hotspot modem - AFC KI (affects AFC settling time)
uint8_t m_afcKP; // hotspot modem - AFC KP (affects AFC settling time)
uint8_t m_afcRange; // hotspot modem - AFC Maximum Range (m_afcRange * 500hz)
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

Loading…
Cancel
Save

Powered by TurnKey Linux.