mirror of https://github.com/markqvist/MMDVM.git
Add YSF low deviation mode.
parent
8c38341c17
commit
12dc9183da
|
@ -218,6 +218,7 @@ uint8_t CSerialPort::setConfig(const uint8_t* data, uint8_t length)
|
||||||
bool rxInvert = (data[0U] & 0x01U) == 0x01U;
|
bool rxInvert = (data[0U] & 0x01U) == 0x01U;
|
||||||
bool txInvert = (data[0U] & 0x02U) == 0x02U;
|
bool txInvert = (data[0U] & 0x02U) == 0x02U;
|
||||||
bool pttInvert = (data[0U] & 0x04U) == 0x04U;
|
bool pttInvert = (data[0U] & 0x04U) == 0x04U;
|
||||||
|
bool ysfLoDev = (data[0U] & 0x08U) == 0x08U;
|
||||||
bool simplex = (data[0U] & 0x80U) == 0x80U;
|
bool simplex = (data[0U] & 0x80U) == 0x80U;
|
||||||
|
|
||||||
bool dstarEnable = (data[1U] & 0x01U) == 0x01U;
|
bool dstarEnable = (data[1U] & 0x01U) == 0x01U;
|
||||||
|
@ -275,6 +276,8 @@ uint8_t CSerialPort::setConfig(const uint8_t* data, uint8_t length)
|
||||||
dmrDMORX.setColorCode(colorCode);
|
dmrDMORX.setColorCode(colorCode);
|
||||||
dmrIdleRX.setColorCode(colorCode);
|
dmrIdleRX.setColorCode(colorCode);
|
||||||
|
|
||||||
|
ysfTX.setLoDev(ysfLoDev);
|
||||||
|
|
||||||
io.setParameters(rxInvert, txInvert, pttInvert, rxLevel, cwIdTXLevel, dstarTXLevel, dmrTXLevel, ysfTXLevel, p25TXLevel);
|
io.setParameters(rxInvert, txInvert, pttInvert, rxLevel, cwIdTXLevel, dstarTXLevel, dmrTXLevel, ysfTXLevel, p25TXLevel);
|
||||||
|
|
||||||
io.start();
|
io.start();
|
||||||
|
|
29
YSFTX.cpp
29
YSFTX.cpp
|
@ -37,10 +37,15 @@ static q15_t YSF_C4FSK_FILTER[] = {401, 104, -340, -731, -847, -553, 112, 909, 1
|
||||||
const uint16_t YSF_C4FSK_FILTER_LEN = 42U;
|
const uint16_t YSF_C4FSK_FILTER_LEN = 42U;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const q15_t YSF_LEVELA[] = { 809, 809, 809, 809, 809};
|
const q15_t YSF_LEVELA_HI[] = { 809, 809, 809, 809, 809};
|
||||||
const q15_t YSF_LEVELB[] = { 269, 269, 269, 269, 269};
|
const q15_t YSF_LEVELB_HI[] = { 269, 269, 269, 269, 269};
|
||||||
const q15_t YSF_LEVELC[] = {-269, -269, -269, -269, -269};
|
const q15_t YSF_LEVELC_HI[] = {-269, -269, -269, -269, -269};
|
||||||
const q15_t YSF_LEVELD[] = {-809, -809, -809, -809, -809};
|
const q15_t YSF_LEVELD_HI[] = {-809, -809, -809, -809, -809};
|
||||||
|
|
||||||
|
const q15_t YSF_LEVELA_LO[] = { 405, 405, 405, 405, 405};
|
||||||
|
const q15_t YSF_LEVELB_LO[] = { 135, 135, 135, 135, 135};
|
||||||
|
const q15_t YSF_LEVELC_LO[] = {-135, -135, -135, -135, -135};
|
||||||
|
const q15_t YSF_LEVELD_LO[] = {-405, -405, -405, -405, -405};
|
||||||
|
|
||||||
const uint8_t YSF_START_SYNC = 0x77U;
|
const uint8_t YSF_START_SYNC = 0x77U;
|
||||||
const uint8_t YSF_END_SYNC = 0xFFU;
|
const uint8_t YSF_END_SYNC = 0xFFU;
|
||||||
|
@ -52,7 +57,8 @@ m_modState(),
|
||||||
m_poBuffer(),
|
m_poBuffer(),
|
||||||
m_poLen(0U),
|
m_poLen(0U),
|
||||||
m_poPtr(0U),
|
m_poPtr(0U),
|
||||||
m_txDelay(240U) // 200ms
|
m_txDelay(240U), // 200ms
|
||||||
|
m_loDev(false)
|
||||||
{
|
{
|
||||||
::memset(m_modState, 0x00U, 70U * sizeof(q15_t));
|
::memset(m_modState, 0x00U, 70U * sizeof(q15_t));
|
||||||
|
|
||||||
|
@ -124,16 +130,16 @@ void CYSFTX::writeByte(uint8_t c)
|
||||||
for (uint8_t i = 0U; i < 4U; i++, c <<= 2, p += YSF_RADIO_SYMBOL_LENGTH) {
|
for (uint8_t i = 0U; i < 4U; i++, c <<= 2, p += YSF_RADIO_SYMBOL_LENGTH) {
|
||||||
switch (c & MASK) {
|
switch (c & MASK) {
|
||||||
case 0xC0U:
|
case 0xC0U:
|
||||||
::memcpy(p, YSF_LEVELA, YSF_RADIO_SYMBOL_LENGTH * sizeof(q15_t));
|
::memcpy(p, m_loDev ? YSF_LEVELA_LO : YSF_LEVELA_HI, YSF_RADIO_SYMBOL_LENGTH * sizeof(q15_t));
|
||||||
break;
|
break;
|
||||||
case 0x80U:
|
case 0x80U:
|
||||||
::memcpy(p, YSF_LEVELB, YSF_RADIO_SYMBOL_LENGTH * sizeof(q15_t));
|
::memcpy(p, m_loDev ? YSF_LEVELB_LO : YSF_LEVELB_HI, YSF_RADIO_SYMBOL_LENGTH * sizeof(q15_t));
|
||||||
break;
|
break;
|
||||||
case 0x00U:
|
case 0x00U:
|
||||||
::memcpy(p, YSF_LEVELC, YSF_RADIO_SYMBOL_LENGTH * sizeof(q15_t));
|
::memcpy(p, m_loDev ? YSF_LEVELC_LO : YSF_LEVELC_HI, YSF_RADIO_SYMBOL_LENGTH * sizeof(q15_t));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
::memcpy(p, YSF_LEVELD, YSF_RADIO_SYMBOL_LENGTH * sizeof(q15_t));
|
::memcpy(p, m_loDev ? YSF_LEVELD_LO : YSF_LEVELD_HI, YSF_RADIO_SYMBOL_LENGTH * sizeof(q15_t));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -153,3 +159,8 @@ uint8_t CYSFTX::getSpace() const
|
||||||
return m_buffer.getSpace() / YSF_FRAME_LENGTH_BYTES;
|
return m_buffer.getSpace() / YSF_FRAME_LENGTH_BYTES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CYSFTX::setLoDev(bool on)
|
||||||
|
{
|
||||||
|
m_loDev = on;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
3
YSFTX.h
3
YSFTX.h
|
@ -35,6 +35,8 @@ public:
|
||||||
|
|
||||||
uint8_t getSpace() const;
|
uint8_t getSpace() const;
|
||||||
|
|
||||||
|
void setLoDev(bool on);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CSerialRB m_buffer;
|
CSerialRB m_buffer;
|
||||||
arm_fir_instance_q15 m_modFilter;
|
arm_fir_instance_q15 m_modFilter;
|
||||||
|
@ -43,6 +45,7 @@ private:
|
||||||
uint16_t m_poLen;
|
uint16_t m_poLen;
|
||||||
uint16_t m_poPtr;
|
uint16_t m_poPtr;
|
||||||
uint16_t m_txDelay;
|
uint16_t m_txDelay;
|
||||||
|
bool m_loDev;
|
||||||
|
|
||||||
void writeByte(uint8_t c);
|
void writeByte(uint8_t c);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue