mirror of https://github.com/g4klx/MMDVM.git
Add the external audio parameters.
This commit is contained in:
parent
a816818e3f
commit
96364dc189
14
FM.cpp
14
FM.cpp
|
@ -23,6 +23,7 @@
|
||||||
CFM::CFM() :
|
CFM::CFM() :
|
||||||
m_callsign(),
|
m_callsign(),
|
||||||
m_rfAck(),
|
m_rfAck(),
|
||||||
|
m_extAck(),
|
||||||
m_ctcssRX(),
|
m_ctcssRX(),
|
||||||
m_ctcssTX(),
|
m_ctcssTX(),
|
||||||
m_timeoutTone(),
|
m_timeoutTone(),
|
||||||
|
@ -46,7 +47,9 @@ m_blanking(),
|
||||||
m_useCOS(true),
|
m_useCOS(true),
|
||||||
m_cosInvert(false),
|
m_cosInvert(false),
|
||||||
m_rfAudioBoost(1U),
|
m_rfAudioBoost(1U),
|
||||||
m_downsampler(128)//Size might need adjustement
|
m_extAudioBoost(1U),
|
||||||
|
m_downsampler(128U), //Size might need adjustement
|
||||||
|
m_extEnabled(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -195,6 +198,15 @@ uint8_t CFM::setMisc(uint16_t timeout, uint8_t timeoutLevel, uint8_t ctcssFreque
|
||||||
return m_ctcssTX.setParams(ctcssFrequency, ctcssLevel);
|
return m_ctcssTX.setParams(ctcssFrequency, ctcssLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t CFM::setExt(const char* ack, uint8_t audioBoost, uint8_t speed, uint16_t frequency, uint8_t level)
|
||||||
|
{
|
||||||
|
m_extEnabled = true;
|
||||||
|
|
||||||
|
m_extAudioBoost = q15_t(audioBoost);
|
||||||
|
|
||||||
|
return m_extAck.setParams(ack, speed, frequency, level, level);
|
||||||
|
}
|
||||||
|
|
||||||
void CFM::stateMachine(bool validSignal)
|
void CFM::stateMachine(bool validSignal)
|
||||||
{
|
{
|
||||||
switch (m_state) {
|
switch (m_state) {
|
||||||
|
|
6
FM.h
6
FM.h
|
@ -41,8 +41,6 @@ enum FM_STATE {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class CFM {
|
class CFM {
|
||||||
public:
|
public:
|
||||||
CFM();
|
CFM();
|
||||||
|
@ -56,6 +54,7 @@ public:
|
||||||
uint8_t setCallsign(const char* callsign, uint8_t speed, uint16_t frequency, uint8_t time, uint8_t holdoff, uint8_t highLevel, uint8_t lowLevel, bool callsignAtStart, bool callsignAtEnd, bool callsignAtLatch);
|
uint8_t setCallsign(const char* callsign, uint8_t speed, uint16_t frequency, uint8_t time, uint8_t holdoff, uint8_t highLevel, uint8_t lowLevel, bool callsignAtStart, bool callsignAtEnd, bool callsignAtLatch);
|
||||||
uint8_t setAck(const char* rfAck, uint8_t speed, uint16_t frequency, uint8_t minTime, uint16_t delay, uint8_t level);
|
uint8_t setAck(const char* rfAck, uint8_t speed, uint16_t frequency, uint8_t minTime, uint16_t delay, uint8_t level);
|
||||||
uint8_t setMisc(uint16_t timeout, uint8_t timeoutLevel, uint8_t ctcssFrequency, uint8_t ctcssThreshold, uint8_t ctcssLevel, uint8_t kerchunkTime, uint8_t hangTime, bool useCOS, bool cosInvert, uint8_t rfAudioBoost, uint8_t maxDev, uint8_t rxLevel);
|
uint8_t setMisc(uint16_t timeout, uint8_t timeoutLevel, uint8_t ctcssFrequency, uint8_t ctcssThreshold, uint8_t ctcssLevel, uint8_t kerchunkTime, uint8_t hangTime, bool useCOS, bool cosInvert, uint8_t rfAudioBoost, uint8_t maxDev, uint8_t rxLevel);
|
||||||
|
uint8_t setExt(const char* ack, uint8_t audioBoost, uint8_t speed, uint16_t frequency, uint8_t level);
|
||||||
|
|
||||||
uint8_t getSpace() const;
|
uint8_t getSpace() const;
|
||||||
|
|
||||||
|
@ -64,6 +63,7 @@ public:
|
||||||
private:
|
private:
|
||||||
CFMKeyer m_callsign;
|
CFMKeyer m_callsign;
|
||||||
CFMKeyer m_rfAck;
|
CFMKeyer m_rfAck;
|
||||||
|
CFMKeyer m_extAck;
|
||||||
CFMCTCSSRX m_ctcssRX;
|
CFMCTCSSRX m_ctcssRX;
|
||||||
CFMCTCSSTX m_ctcssTX;
|
CFMCTCSSTX m_ctcssTX;
|
||||||
CFMTimeout m_timeoutTone;
|
CFMTimeout m_timeoutTone;
|
||||||
|
@ -87,7 +87,9 @@ private:
|
||||||
bool m_useCOS;
|
bool m_useCOS;
|
||||||
bool m_cosInvert;
|
bool m_cosInvert;
|
||||||
q15_t m_rfAudioBoost;
|
q15_t m_rfAudioBoost;
|
||||||
|
q15_t m_extAudioBoost;
|
||||||
CFMDownsampler m_downsampler;
|
CFMDownsampler m_downsampler;
|
||||||
|
bool m_extEnabled;
|
||||||
|
|
||||||
void stateMachine(bool validSignal);
|
void stateMachine(bool validSignal);
|
||||||
void listeningState(bool validSignal);
|
void listeningState(bool validSignal);
|
||||||
|
|
|
@ -68,6 +68,7 @@ const uint8_t MMDVM_POCSAG_DATA = 0x50U;
|
||||||
const uint8_t MMDVM_FM_PARAMS1 = 0x60U;
|
const uint8_t MMDVM_FM_PARAMS1 = 0x60U;
|
||||||
const uint8_t MMDVM_FM_PARAMS2 = 0x61U;
|
const uint8_t MMDVM_FM_PARAMS2 = 0x61U;
|
||||||
const uint8_t MMDVM_FM_PARAMS3 = 0x62U;
|
const uint8_t MMDVM_FM_PARAMS3 = 0x62U;
|
||||||
|
const uint8_t MMDVM_FM_PARAMS4 = 0x63U;
|
||||||
const uint8_t MMDVM_FM_DATA = 0x65U;
|
const uint8_t MMDVM_FM_DATA = 0x65U;
|
||||||
|
|
||||||
const uint8_t MMDVM_ACK = 0x70U;
|
const uint8_t MMDVM_ACK = 0x70U;
|
||||||
|
@ -438,6 +439,25 @@ uint8_t CSerialPort::setFMParams3(const uint8_t* data, uint8_t length)
|
||||||
return fm.setMisc(timeout, timeoutLevel, ctcssFrequency, ctcssThreshold, ctcssLevel, kerchunkTime, hangTime, useCOS, cosInvert, rfAudioBoost, maxDev, rxLevel);
|
return fm.setMisc(timeout, timeoutLevel, ctcssFrequency, ctcssThreshold, ctcssLevel, kerchunkTime, hangTime, useCOS, cosInvert, rfAudioBoost, maxDev, rxLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t CSerialPort::setFMParams4(const uint8_t* data, uint8_t length)
|
||||||
|
{
|
||||||
|
if (length < 4U)
|
||||||
|
return 4U;
|
||||||
|
|
||||||
|
uint8_t audioBoost = data[0U];
|
||||||
|
uint8_t speed = data[1U];
|
||||||
|
uint16_t frequency = data[2U] * 10U;
|
||||||
|
uint8_t level = data[3U];
|
||||||
|
|
||||||
|
char ack[50U];
|
||||||
|
uint8_t n = 0U;
|
||||||
|
for (uint8_t i = 4U; i < length; i++, n++)
|
||||||
|
ack[n] = data[i];
|
||||||
|
ack[n] = '\0';
|
||||||
|
|
||||||
|
return fm.setExt(ack, audioBoost, speed, frequency, level);
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t CSerialPort::setMode(const uint8_t* data, uint8_t length)
|
uint8_t CSerialPort::setMode(const uint8_t* data, uint8_t length)
|
||||||
{
|
{
|
||||||
if (length < 1U)
|
if (length < 1U)
|
||||||
|
@ -666,6 +686,16 @@ void CSerialPort::process()
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case MMDVM_FM_PARAMS4:
|
||||||
|
err = setFMParams4(m_buffer + 3U, m_len - 3U);
|
||||||
|
if (err == 0U) {
|
||||||
|
sendACK();
|
||||||
|
} else {
|
||||||
|
DEBUG2("Received invalid FM params 4", err);
|
||||||
|
sendNAK(err);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case MMDVM_CAL_DATA:
|
case MMDVM_CAL_DATA:
|
||||||
if (m_modemState == STATE_DSTARCAL)
|
if (m_modemState == STATE_DSTARCAL)
|
||||||
err = calDStarTX.write(m_buffer + 3U, m_len - 3U);
|
err = calDStarTX.write(m_buffer + 3U, m_len - 3U);
|
||||||
|
|
|
@ -78,6 +78,7 @@ private:
|
||||||
uint8_t setFMParams1(const uint8_t* data, uint8_t length);
|
uint8_t setFMParams1(const uint8_t* data, uint8_t length);
|
||||||
uint8_t setFMParams2(const uint8_t* data, uint8_t length);
|
uint8_t setFMParams2(const uint8_t* data, uint8_t length);
|
||||||
uint8_t setFMParams3(const uint8_t* data, uint8_t length);
|
uint8_t setFMParams3(const uint8_t* data, uint8_t length);
|
||||||
|
uint8_t setFMParams4(const uint8_t* data, uint8_t length);
|
||||||
|
|
||||||
// Hardware versions
|
// Hardware versions
|
||||||
void beginInt(uint8_t n, int speed);
|
void beginInt(uint8_t n, int speed);
|
||||||
|
|
Loading…
Reference in New Issue