Merge pull request #1 from jelimoore/master

Add frequency offset logic
pull/12/head
Bryan Biedenkapp 4 years ago committed by GitHub
commit 3838c4d63e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -22,10 +22,10 @@ network:
updateLookups: false
allowActivityTransfer: false
allowDiagnosticTransfer: false
debug: false
debug: true
protocols:
dmr:
enable: true
enable: false
beacons:
enable: false
interval: 60
@ -48,9 +48,9 @@ protocols:
enable: true
tduPreambleCount: 6
control:
enable: false
enable: true
ackRequests: true
dedicated: false
dedicated: true
broadcast: true
interval: 300
duration: 1
@ -62,7 +62,7 @@ protocols:
verifyReg: false
dumpDataPacket: false
repeatDataPacket: true
dumpTsbkData: false
dumpTsbkData: true
callHang: 5
noStatusAck: false
noMessageAck: true
@ -87,11 +87,11 @@ system:
power: 10
location: "Repeater Site, USA"
config:
channelId: 2
channelNo: 1
channelId: 3
channelNo: 50
dmrNetId: 1
voiceChNo:
- 1
- 80
colorCode: 5
nac: 293
pSuperGroup: FFFF
@ -101,9 +101,9 @@ system:
siteId: 1
modem:
protocol:
type: "null" # Valid values are "null", "uart", and "udp"
type: "uart" # Valid values are "null", "uart", and "udp"
uart:
port: /dev/ttyUSB0
port: '/dev/ttyAMA0'
speed: 115200
udp:
mode: master # Valid values are "master", and "peer"
@ -114,13 +114,15 @@ system:
pttInvert: false
dcBlocker: true
cosLockout: false
fdmaPreamble: 80
fdmaPreamble: 100
dmrRxDelay: 7
p25CorrCount: 8
rxDCOffset: 0
txDCOffset: 0
rxLevel: 50
txLevel: 50
txTuning: 0 # freq offset for the hotspot, in hz
rxTuning: 0
# cwIdTxLevel: 50
# dmrTxLevel: 50
# p25TxLevel: 50
@ -128,9 +130,9 @@ system:
packetPlayoutTime: 10
disableOFlowReset: false
trace: false
debug: false
debug: true
cwId:
enable: true
enable: false
time: 15
callsign: ABCD123
iden_table:

Binary file not shown.

@ -1519,6 +1519,8 @@ 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);
int dmrSymLevel3Adj = modemConf["dmrSymLvl3Adj"].as<int>(0);
int dmrSymLevel1Adj = modemConf["dmrSymLvl1Adj"].as<int>(0);
@ -1622,6 +1624,10 @@ bool Host::createModem()
LogInfo(" UDP Port: %u", udpPort);
}
// apply the frequency tuning offsets
int adjustedRx = m_rxFrequency + rxTuning;
int adjustedTx = m_txFrequency + txTuning;
LogInfo(" RX Invert: %s", rxInvert ? "yes" : "no");
LogInfo(" TX Invert: %s", txInvert ? "yes" : "no");
LogInfo(" PTT Invert: %s", pttInvert ? "yes" : "no");
@ -1632,6 +1638,10 @@ bool Host::createModem()
LogInfo(" P25 Corr. Count: %u (%.1fms)", p25CorrCount, float(p25CorrCount) * 0.667F);
LogInfo(" RX DC Offset: %d", rxDCOffset);
LogInfo(" TX DC Offset: %d", txDCOffset);
LogInfo(" RX Tuning Offset: %dhz", rxTuning);
LogInfo(" TX Tuning Offset: %dhz", txTuning);
LogInfo(" RX Effective Frequency: %dhz", adjustedRx);
LogInfo(" TX Effective Frequency: %dhz", adjustedTx);
LogInfo(" RF Power Level: %u", rfPower);
LogInfo(" RX Level: %.1f%%", rxLevel);
LogInfo(" CW Id TX Level: %.1f%%", cwIdTXLevel);
@ -1649,7 +1659,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(m_rxFrequency, m_txFrequency, rfPower);
m_modem->setRFParams(adjustedRx, adjustedTx, rfPower);
m_modem->setDMRColorCode(m_dmrColorCode);
m_modem->setP25NAC(m_p25NAC);

@ -6,3 +6,4 @@
1,762006250,6.25,30.000,12.5,
15,935001250,6.25,-39.00000,12.5,
2,450000000,6.25,5.000,12.5,
3,146000000,6.25,1.000,12.5,

@ -1257,15 +1257,17 @@ bool Modem::getFirmwareVersion()
// Utils::dump(1U, "F/W Ver Written", buffer, 3U);
int ret = write(buffer, 3U);
//LogMessage(LOG_MODEM, "Asking for F/W");
if (ret != 3)
return false;
for (uint32_t count = 0U; count < MAX_RESPONSES; count++) {
Thread::sleep(10U);
RESP_TYPE_DVM resp = getResponse();
if (resp == RTM_OK && m_buffer[2U] == CMD_GET_VERSION) {
LogMessage(LOG_MODEM, "Proto ver: %02x, cpu: %02X", m_buffer[3U], m_buffer[4U]);
uint8_t protoVer = m_buffer[3U];
switch (protoVer) {
case PROTOCOL_VERSION:
LogInfoEx(LOG_MODEM, MODEM_VERSION_STR, m_length - 21U, m_buffer + 21U, protoVer);
@ -1586,6 +1588,8 @@ RESP_TYPE_DVM Modem::getResponse()
{
m_rspDoubleLength = false;
//LogDebug(LOG_MODEM, "getResponse(), checking if we have data");
// get the start of the frame or nothing at all
if (m_rspState == RESP_START) {
int ret = m_port->read(m_buffer + 0U, 1U);
@ -1595,17 +1599,22 @@ RESP_TYPE_DVM Modem::getResponse()
return RTM_ERROR;
}
if (ret == 0)
if (ret == 0) {
//LogDebug(LOG_MODEM, "getResponse(), no data available");
return RTM_TIMEOUT;
}
if (m_buffer[0U] != DVM_FRAME_START)
if (m_buffer[0U] != DVM_FRAME_START) {
LogDebug(LOG_MODEM, "getResponse(), first byte not a frame start");
return RTM_TIMEOUT;
}
// LogDebug(LOG_MODEM, "getResponse(), RESP_START");
//LogDebug(LOG_MODEM, "getResponse(), RESP_START");
m_rspState = RESP_LENGTH1;
}
//LogDebug(LOG_MODEM, "getResponse(), getting frame length 1/2");
// get the length of the frame, 1/2
if (m_rspState == RESP_LENGTH1) {
int ret = m_port->read(m_buffer + 1U, 1U);
@ -1630,12 +1639,12 @@ RESP_TYPE_DVM Modem::getResponse()
else
m_rspState = RESP_TYPE;
// LogDebug(LOG_MODEM, "getResponse(), RESP_LENGTH1, len = %u", m_length);
//LogDebug(LOG_MODEM, "getResponse(), RESP_LENGTH1, len = %u", m_length);
m_rspDoubleLength = false;
m_rspOffset = 2U;
}
//LogDebug(LOG_MODEM, "getResponse(), getting frame length 2/2");
// get the length of the frame, 2/2
if (m_rspState == RESP_LENGTH2) {
int ret = m_port->read(m_buffer + 2U, 1U);
@ -1651,12 +1660,12 @@ RESP_TYPE_DVM Modem::getResponse()
m_length = m_buffer[2U] + 255U;
m_rspState = RESP_TYPE;
// LogDebug(LOG_MODEM, "getResponse(), RESP_LENGTH2, len = %u", m_length);
//LogDebug(LOG_MODEM, "getResponse(), RESP_LENGTH2, len = %u", m_length);
m_rspDoubleLength = true;
m_rspOffset = 3U;
}
//LogDebug(LOG_MODEM, "getResponse(), getting frame type");
// get the frame type
if (m_rspState == RESP_TYPE) {
int ret = m_port->read(m_buffer + m_rspOffset, 1U);
@ -1671,11 +1680,12 @@ RESP_TYPE_DVM Modem::getResponse()
m_rspType = (DVM_COMMANDS)m_buffer[m_rspOffset];
// LogDebug(LOG_MODEM, "getResponse(), RESP_TYPE, len = %u, type = %u", m_length, m_rspType);
//LogDebug(LOG_MODEM, "getResponse(), RESP_TYPE, len = %u, type = %u", m_length, m_rspType);
m_rspState = RESP_DATA;
m_rspOffset++;
}
//LogDebug(LOG_MODEM, "getResponse(), getting frame data");
// get the frame data
if (m_rspState == RESP_DATA) {

Loading…
Cancel
Save

Powered by TurnKey Linux.