mirror of https://github.com/g4klx/MMDVM.git
Fix a potential issue with reporting the wrong command type in ACK and NAK messages.
This commit is contained in:
parent
43b53fe2fc
commit
f4e1c0b401
|
@ -146,26 +146,26 @@ m_i2CData()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSerialPort::sendACK()
|
void CSerialPort::sendACK(uint8_t type)
|
||||||
{
|
{
|
||||||
uint8_t reply[4U];
|
uint8_t reply[4U];
|
||||||
|
|
||||||
reply[0U] = MMDVM_FRAME_START;
|
reply[0U] = MMDVM_FRAME_START;
|
||||||
reply[1U] = 4U;
|
reply[1U] = 4U;
|
||||||
reply[2U] = MMDVM_ACK;
|
reply[2U] = MMDVM_ACK;
|
||||||
reply[3U] = m_buffer[2U];
|
reply[3U] = type;
|
||||||
|
|
||||||
writeInt(1U, reply, 4);
|
writeInt(1U, reply, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSerialPort::sendNAK(uint8_t err)
|
void CSerialPort::sendNAK(uint8_t type, uint8_t err)
|
||||||
{
|
{
|
||||||
uint8_t reply[5U];
|
uint8_t reply[5U];
|
||||||
|
|
||||||
reply[0U] = MMDVM_FRAME_START;
|
reply[0U] = MMDVM_FRAME_START;
|
||||||
reply[1U] = 5U;
|
reply[1U] = 5U;
|
||||||
reply[2U] = MMDVM_NAK;
|
reply[2U] = MMDVM_NAK;
|
||||||
reply[3U] = m_buffer[2U];
|
reply[3U] = type;
|
||||||
reply[4U] = err;
|
reply[4U] = err;
|
||||||
|
|
||||||
writeInt(1U, reply, 5);
|
writeInt(1U, reply, 5);
|
||||||
|
@ -980,61 +980,61 @@ void CSerialPort::processMessage(uint8_t type, const uint8_t* buffer, uint16_t l
|
||||||
case MMDVM_SET_CONFIG:
|
case MMDVM_SET_CONFIG:
|
||||||
err = setConfig(buffer, length);
|
err = setConfig(buffer, length);
|
||||||
if (err == 0U)
|
if (err == 0U)
|
||||||
sendACK();
|
sendACK(type);
|
||||||
else
|
else
|
||||||
sendNAK(err);
|
sendNAK(type, err);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MMDVM_SET_MODE:
|
case MMDVM_SET_MODE:
|
||||||
err = setMode(buffer, length);
|
err = setMode(buffer, length);
|
||||||
if (err == 0U)
|
if (err == 0U)
|
||||||
sendACK();
|
sendACK(type);
|
||||||
else
|
else
|
||||||
sendNAK(err);
|
sendNAK(type, err);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MMDVM_SET_FREQ:
|
case MMDVM_SET_FREQ:
|
||||||
sendACK();
|
sendACK(type);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if defined(MODE_FM)
|
#if defined(MODE_FM)
|
||||||
case MMDVM_FM_PARAMS1:
|
case MMDVM_FM_PARAMS1:
|
||||||
err = setFMParams1(buffer, length);
|
err = setFMParams1(buffer, length);
|
||||||
if (err == 0U) {
|
if (err == 0U) {
|
||||||
sendACK();
|
sendACK(type);
|
||||||
} else {
|
} else {
|
||||||
DEBUG2("Received invalid FM params 1", err);
|
DEBUG2("Received invalid FM params 1", err);
|
||||||
sendNAK(err);
|
sendNAK(type, err);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MMDVM_FM_PARAMS2:
|
case MMDVM_FM_PARAMS2:
|
||||||
err = setFMParams2(buffer, length);
|
err = setFMParams2(buffer, length);
|
||||||
if (err == 0U) {
|
if (err == 0U) {
|
||||||
sendACK();
|
sendACK(type);
|
||||||
} else {
|
} else {
|
||||||
DEBUG2("Received invalid FM params 2", err);
|
DEBUG2("Received invalid FM params 2", err);
|
||||||
sendNAK(err);
|
sendNAK(type, err);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MMDVM_FM_PARAMS3:
|
case MMDVM_FM_PARAMS3:
|
||||||
err = setFMParams3(buffer, length);
|
err = setFMParams3(buffer, length);
|
||||||
if (err == 0U) {
|
if (err == 0U) {
|
||||||
sendACK();
|
sendACK(type);
|
||||||
} else {
|
} else {
|
||||||
DEBUG2("Received invalid FM params 3", err);
|
DEBUG2("Received invalid FM params 3", err);
|
||||||
sendNAK(err);
|
sendNAK(type, err);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MMDVM_FM_PARAMS4:
|
case MMDVM_FM_PARAMS4:
|
||||||
err = setFMParams4(buffer, length);
|
err = setFMParams4(buffer, length);
|
||||||
if (err == 0U) {
|
if (err == 0U) {
|
||||||
sendACK();
|
sendACK(type);
|
||||||
} else {
|
} else {
|
||||||
DEBUG2("Received invalid FM params 4", err);
|
DEBUG2("Received invalid FM params 4", err);
|
||||||
sendNAK(err);
|
sendNAK(type, err);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#else
|
#else
|
||||||
|
@ -1042,7 +1042,7 @@ void CSerialPort::processMessage(uint8_t type, const uint8_t* buffer, uint16_t l
|
||||||
case MMDVM_FM_PARAMS2:
|
case MMDVM_FM_PARAMS2:
|
||||||
case MMDVM_FM_PARAMS3:
|
case MMDVM_FM_PARAMS3:
|
||||||
case MMDVM_FM_PARAMS4:
|
case MMDVM_FM_PARAMS4:
|
||||||
sendACK();
|
sendACK(type);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1072,10 +1072,10 @@ void CSerialPort::processMessage(uint8_t type, const uint8_t* buffer, uint16_t l
|
||||||
err = calPOCSAG.write(buffer, length);
|
err = calPOCSAG.write(buffer, length);
|
||||||
#endif
|
#endif
|
||||||
if (err == 0U) {
|
if (err == 0U) {
|
||||||
sendACK();
|
sendACK(type);
|
||||||
} else {
|
} else {
|
||||||
DEBUG2("Received invalid calibration data", err);
|
DEBUG2("Received invalid calibration data", err);
|
||||||
sendNAK(err);
|
sendNAK(type, err);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1085,7 +1085,7 @@ void CSerialPort::processMessage(uint8_t type, const uint8_t* buffer, uint16_t l
|
||||||
err = cwIdTX.write(buffer, length);
|
err = cwIdTX.write(buffer, length);
|
||||||
if (err != 0U) {
|
if (err != 0U) {
|
||||||
DEBUG2("Invalid CW Id data", err);
|
DEBUG2("Invalid CW Id data", err);
|
||||||
sendNAK(err);
|
sendNAK(type, err);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1100,7 +1100,7 @@ void CSerialPort::processMessage(uint8_t type, const uint8_t* buffer, uint16_t l
|
||||||
setMode(STATE_DSTAR);
|
setMode(STATE_DSTAR);
|
||||||
} else {
|
} else {
|
||||||
DEBUG2("Received invalid D-Star header", err);
|
DEBUG2("Received invalid D-Star header", err);
|
||||||
sendNAK(err);
|
sendNAK(type, err);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1114,7 +1114,7 @@ void CSerialPort::processMessage(uint8_t type, const uint8_t* buffer, uint16_t l
|
||||||
setMode(STATE_DSTAR);
|
setMode(STATE_DSTAR);
|
||||||
} else {
|
} else {
|
||||||
DEBUG2("Received invalid D-Star data", err);
|
DEBUG2("Received invalid D-Star data", err);
|
||||||
sendNAK(err);
|
sendNAK(type, err);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1128,7 +1128,7 @@ void CSerialPort::processMessage(uint8_t type, const uint8_t* buffer, uint16_t l
|
||||||
setMode(STATE_DSTAR);
|
setMode(STATE_DSTAR);
|
||||||
} else {
|
} else {
|
||||||
DEBUG2("Received invalid D-Star EOT", err);
|
DEBUG2("Received invalid D-Star EOT", err);
|
||||||
sendNAK(err);
|
sendNAK(type, err);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
@ -1146,7 +1146,7 @@ void CSerialPort::processMessage(uint8_t type, const uint8_t* buffer, uint16_t l
|
||||||
setMode(STATE_DMR);
|
setMode(STATE_DMR);
|
||||||
} else {
|
} else {
|
||||||
DEBUG2("Received invalid DMR data", err);
|
DEBUG2("Received invalid DMR data", err);
|
||||||
sendNAK(err);
|
sendNAK(type, err);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1164,7 +1164,7 @@ void CSerialPort::processMessage(uint8_t type, const uint8_t* buffer, uint16_t l
|
||||||
setMode(STATE_DMR);
|
setMode(STATE_DMR);
|
||||||
} else {
|
} else {
|
||||||
DEBUG2("Received invalid DMR data", err);
|
DEBUG2("Received invalid DMR data", err);
|
||||||
sendNAK(err);
|
sendNAK(type, err);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1185,7 +1185,7 @@ void CSerialPort::processMessage(uint8_t type, const uint8_t* buffer, uint16_t l
|
||||||
}
|
}
|
||||||
if (err != 0U) {
|
if (err != 0U) {
|
||||||
DEBUG2("Received invalid DMR start", err);
|
DEBUG2("Received invalid DMR start", err);
|
||||||
sendNAK(err);
|
sendNAK(type, err);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1194,7 +1194,7 @@ void CSerialPort::processMessage(uint8_t type, const uint8_t* buffer, uint16_t l
|
||||||
err = dmrTX.writeShortLC(buffer, length);
|
err = dmrTX.writeShortLC(buffer, length);
|
||||||
if (err != 0U) {
|
if (err != 0U) {
|
||||||
DEBUG2("Received invalid DMR Short LC", err);
|
DEBUG2("Received invalid DMR Short LC", err);
|
||||||
sendNAK(err);
|
sendNAK(type, err);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1203,7 +1203,7 @@ void CSerialPort::processMessage(uint8_t type, const uint8_t* buffer, uint16_t l
|
||||||
err = dmrTX.writeAbort(buffer, length);
|
err = dmrTX.writeAbort(buffer, length);
|
||||||
if (err != 0U) {
|
if (err != 0U) {
|
||||||
DEBUG2("Received invalid DMR Abort", err);
|
DEBUG2("Received invalid DMR Abort", err);
|
||||||
sendNAK(err);
|
sendNAK(type, err);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
@ -1219,7 +1219,7 @@ void CSerialPort::processMessage(uint8_t type, const uint8_t* buffer, uint16_t l
|
||||||
setMode(STATE_YSF);
|
setMode(STATE_YSF);
|
||||||
} else {
|
} else {
|
||||||
DEBUG2("Received invalid System Fusion data", err);
|
DEBUG2("Received invalid System Fusion data", err);
|
||||||
sendNAK(err);
|
sendNAK(type, err);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
@ -1235,7 +1235,7 @@ void CSerialPort::processMessage(uint8_t type, const uint8_t* buffer, uint16_t l
|
||||||
setMode(STATE_P25);
|
setMode(STATE_P25);
|
||||||
} else {
|
} else {
|
||||||
DEBUG2("Received invalid P25 header", err);
|
DEBUG2("Received invalid P25 header", err);
|
||||||
sendNAK(err);
|
sendNAK(type, err);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1249,7 +1249,7 @@ void CSerialPort::processMessage(uint8_t type, const uint8_t* buffer, uint16_t l
|
||||||
setMode(STATE_P25);
|
setMode(STATE_P25);
|
||||||
} else {
|
} else {
|
||||||
DEBUG2("Received invalid P25 LDU", err);
|
DEBUG2("Received invalid P25 LDU", err);
|
||||||
sendNAK(err);
|
sendNAK(type, err);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
@ -1265,7 +1265,7 @@ void CSerialPort::processMessage(uint8_t type, const uint8_t* buffer, uint16_t l
|
||||||
setMode(STATE_NXDN);
|
setMode(STATE_NXDN);
|
||||||
} else {
|
} else {
|
||||||
DEBUG2("Received invalid NXDN data", err);
|
DEBUG2("Received invalid NXDN data", err);
|
||||||
sendNAK(err);
|
sendNAK(type, err);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
@ -1281,7 +1281,7 @@ void CSerialPort::processMessage(uint8_t type, const uint8_t* buffer, uint16_t l
|
||||||
setMode(STATE_M17);
|
setMode(STATE_M17);
|
||||||
} else {
|
} else {
|
||||||
DEBUG2("Received invalid M17 link setup data", err);
|
DEBUG2("Received invalid M17 link setup data", err);
|
||||||
sendNAK(err);
|
sendNAK(type, err);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1295,7 +1295,7 @@ void CSerialPort::processMessage(uint8_t type, const uint8_t* buffer, uint16_t l
|
||||||
setMode(STATE_M17);
|
setMode(STATE_M17);
|
||||||
} else {
|
} else {
|
||||||
DEBUG2("Received invalid M17 stream data", err);
|
DEBUG2("Received invalid M17 stream data", err);
|
||||||
sendNAK(err);
|
sendNAK(type, err);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1309,7 +1309,7 @@ void CSerialPort::processMessage(uint8_t type, const uint8_t* buffer, uint16_t l
|
||||||
setMode(STATE_M17);
|
setMode(STATE_M17);
|
||||||
} else {
|
} else {
|
||||||
DEBUG2("Received invalid M17 packet data", err);
|
DEBUG2("Received invalid M17 packet data", err);
|
||||||
sendNAK(err);
|
sendNAK(type, err);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
@ -1325,7 +1325,7 @@ void CSerialPort::processMessage(uint8_t type, const uint8_t* buffer, uint16_t l
|
||||||
setMode(STATE_POCSAG);
|
setMode(STATE_POCSAG);
|
||||||
} else {
|
} else {
|
||||||
DEBUG2("Received invalid POCSAG data", err);
|
DEBUG2("Received invalid POCSAG data", err);
|
||||||
sendNAK(err);
|
sendNAK(type, err);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
@ -1341,7 +1341,7 @@ void CSerialPort::processMessage(uint8_t type, const uint8_t* buffer, uint16_t l
|
||||||
setMode(STATE_FM);
|
setMode(STATE_FM);
|
||||||
} else {
|
} else {
|
||||||
DEBUG2("Received invalid FM data", err);
|
DEBUG2("Received invalid FM data", err);
|
||||||
sendNAK(err);
|
sendNAK(type, err);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
@ -1354,7 +1354,7 @@ void CSerialPort::processMessage(uint8_t type, const uint8_t* buffer, uint16_t l
|
||||||
}
|
}
|
||||||
if (err != 0U) {
|
if (err != 0U) {
|
||||||
DEBUG2("Received invalid AX.25 data", err);
|
DEBUG2("Received invalid AX.25 data", err);
|
||||||
sendNAK(err);
|
sendNAK(type, err);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
@ -1382,7 +1382,7 @@ void CSerialPort::processMessage(uint8_t type, const uint8_t* buffer, uint16_t l
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// Handle this, send a NAK back
|
// Handle this, send a NAK back
|
||||||
sendNAK(1U);
|
sendNAK(type, 1U);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -109,8 +109,8 @@ private:
|
||||||
uint16_t m_lastSerialAvailCount;
|
uint16_t m_lastSerialAvailCount;
|
||||||
CRingBuffer<uint8_t> m_i2CData;
|
CRingBuffer<uint8_t> m_i2CData;
|
||||||
|
|
||||||
void sendACK();
|
void sendACK(uint8_t type);
|
||||||
void sendNAK(uint8_t err);
|
void sendNAK(uint8_t type, uint8_t err);
|
||||||
void getStatus();
|
void getStatus();
|
||||||
void getVersion();
|
void getVersion();
|
||||||
uint8_t setConfig(const uint8_t* data, uint16_t length);
|
uint8_t setConfig(const uint8_t* data, uint16_t length);
|
||||||
|
|
Loading…
Reference in New Issue