Simplify the code.

This commit is contained in:
Jonathan Naylor 2017-03-01 19:05:27 +00:00
parent 510d7d8e4a
commit 535960feb0
2 changed files with 77 additions and 91 deletions

134
Modem.cpp
View file

@ -55,21 +55,11 @@ m_p25Timer(1000U, 0U, 180U),
m_dmrFP(NULL),
m_ysfFP(NULL),
m_p25FP(NULL),
m_dmrThresholdVal(0),
m_dmrCentreVal(0),
m_dmrThreshold(),
m_dmrCentre(),
m_dmrAveragePtr(NOAVEPTR),
m_ysfThresholdVal(0),
m_ysfCentreVal(0),
m_ysfThreshold(),
m_ysfCentre(),
m_ysfAveragePtr(NOAVEPTR),
m_p25ThresholdVal(0),
m_p25CentreVal(0),
m_p25Threshold(),
m_p25Centre(),
m_p25AveragePtr(NOAVEPTR)
m_thresholdVal(0),
m_centreVal(0),
m_threshold(),
m_centre(),
m_averagePtr(NOAVEPTR)
{
}
@ -318,6 +308,8 @@ void CModem::processDMR()
FILE* m_dmrFP = ::fopen(filename, "rb");
if (m_dmrFP == NULL)
return;
m_averagePtr = NOAVEPTR;
}
if (feof(m_dmrFP))
@ -371,6 +363,8 @@ void CModem::processP25()
FILE* m_p25FP = ::fopen(filename, "rb");
if (m_p25FP == NULL)
return;
m_averagePtr = NOAVEPTR;
}
if (feof(m_p25FP))
@ -432,6 +426,8 @@ void CModem::processYSF()
FILE* m_ysfFP = ::fopen(filename, "rb");
if (m_ysfFP == NULL)
return;
m_averagePtr = NOAVEPTR;
}
if (feof(m_ysfFP))
@ -509,41 +505,41 @@ void CModem::p25CalculateLevels(const int16_t* symbols)
LogMessage("P25RX: pos/neg/centre/threshold %d/%d/%d/%d", posThresh, negThresh, centre, threshold);
if (m_p25AveragePtr == NOAVEPTR) {
if (m_averagePtr == NOAVEPTR) {
for (uint8_t i = 0U; i < 16U; i++) {
m_p25Centre[i] = centre;
m_p25Threshold[i] = threshold;
m_centre[i] = centre;
m_threshold[i] = threshold;
}
m_p25AveragePtr = 0U;
m_averagePtr = 0U;
} else {
m_p25Centre[m_p25AveragePtr] = centre;
m_p25Threshold[m_p25AveragePtr] = threshold;
m_centre[m_averagePtr] = centre;
m_threshold[m_averagePtr] = threshold;
m_p25AveragePtr++;
if (m_p25AveragePtr >= 16U)
m_p25AveragePtr = 0U;
m_averagePtr++;
if (m_averagePtr >= 16U)
m_averagePtr = 0U;
}
m_p25CentreVal = 0;
m_p25ThresholdVal = 0;
m_centreVal = 0;
m_thresholdVal = 0;
for (uint8_t i = 0U; i < 16U; i++) {
m_p25CentreVal += m_p25Centre[i];
m_p25ThresholdVal += m_p25Threshold[i];
m_centreVal += m_centre[i];
m_thresholdVal += m_threshold[i];
}
m_p25CentreVal >>= 4;
m_p25ThresholdVal >>= 4;
m_centreVal >>= 4;
m_thresholdVal >>= 4;
}
void CModem::p25SamplesToBits(const int16_t* symbols, unsigned char* buffer)
{
unsigned int offset = 0U;
for (uint16_t i = 0U; i < P25_LDU_FRAME_LENGTH_SYMBOLS; i++) {
int16_t sample = symbols[i] - m_p25CentreVal;
int16_t sample = symbols[i] - m_centreVal;
if (sample < -m_p25ThresholdVal) {
if (sample < -m_thresholdVal) {
WRITE_BIT1(buffer, offset, false);
offset++;
WRITE_BIT1(buffer, offset, true);
@ -553,7 +549,7 @@ void CModem::p25SamplesToBits(const int16_t* symbols, unsigned char* buffer)
offset++;
WRITE_BIT1(buffer, offset, false);
offset++;
} else if (sample < m_p25ThresholdVal) {
} else if (sample < m_thresholdVal) {
WRITE_BIT1(buffer, offset, true);
offset++;
WRITE_BIT1(buffer, offset, false);
@ -600,41 +596,41 @@ void CModem::ysfCalculateLevels(const int16_t* symbols)
LogMessage("YSFRX: pos/neg/centre/threshold %d/%d/%d/%d", posThresh, negThresh, centre, threshold);
if (m_ysfAveragePtr == NOAVEPTR) {
if (m_averagePtr == NOAVEPTR) {
for (uint8_t i = 0U; i < 16U; i++) {
m_ysfCentre[i] = centre;
m_ysfThreshold[i] = threshold;
m_centre[i] = centre;
m_threshold[i] = threshold;
}
m_ysfAveragePtr = 0U;
m_averagePtr = 0U;
} else {
m_ysfCentre[m_ysfAveragePtr] = centre;
m_ysfThreshold[m_ysfAveragePtr] = threshold;
m_centre[m_averagePtr] = centre;
m_threshold[m_averagePtr] = threshold;
m_ysfAveragePtr++;
if (m_ysfAveragePtr >= 16U)
m_ysfAveragePtr = 0U;
m_averagePtr++;
if (m_averagePtr >= 16U)
m_averagePtr = 0U;
}
m_ysfCentreVal = 0;
m_ysfThresholdVal = 0;
m_centreVal = 0;
m_thresholdVal = 0;
for (uint8_t i = 0U; i < 16U; i++) {
m_ysfCentreVal += m_ysfCentre[i];
m_ysfThresholdVal += m_ysfThreshold[i];
m_centreVal += m_centre[i];
m_thresholdVal += m_threshold[i];
}
m_ysfCentreVal >>= 4;
m_ysfThresholdVal >>= 4;
m_centreVal >>= 4;
m_thresholdVal >>= 4;
}
void CModem::ysfSamplesToBits(const int16_t* symbols, unsigned char* buffer)
{
unsigned int offset = 0U;
for (uint16_t i = 0U; i < YSF_FRAME_LENGTH_SYMBOLS; i++) {
int16_t sample = symbols[i] - m_ysfCentreVal;
int16_t sample = symbols[i] - m_centreVal;
if (sample < -m_ysfThresholdVal) {
if (sample < -m_thresholdVal) {
WRITE_BIT1(buffer, offset, false);
offset++;
WRITE_BIT1(buffer, offset, true);
@ -644,7 +640,7 @@ void CModem::ysfSamplesToBits(const int16_t* symbols, unsigned char* buffer)
offset++;
WRITE_BIT1(buffer, offset, false);
offset++;
} else if (sample < m_ysfThresholdVal) {
} else if (sample < m_thresholdVal) {
WRITE_BIT1(buffer, offset, true);
offset++;
WRITE_BIT1(buffer, offset, false);
@ -691,41 +687,41 @@ void CModem::dmrCalculateLevels(const int16_t* symbols)
LogMessage("DMRRX: pos/neg/centre/threshold %d/%d/%d/%d", posThresh, negThresh, centre, threshold);
if (m_dmrAveragePtr == NOAVEPTR) {
if (m_averagePtr == NOAVEPTR) {
for (uint8_t i = 0U; i < 16U; i++) {
m_dmrCentre[i] = centre;
m_dmrThreshold[i] = threshold;
m_centre[i] = centre;
m_threshold[i] = threshold;
}
m_dmrAveragePtr = 0U;
m_averagePtr = 0U;
} else {
m_dmrCentre[m_dmrAveragePtr] = centre;
m_dmrThreshold[m_dmrAveragePtr] = threshold;
m_centre[m_averagePtr] = centre;
m_threshold[m_averagePtr] = threshold;
m_dmrAveragePtr++;
if (m_dmrAveragePtr >= 16U)
m_dmrAveragePtr = 0U;
m_averagePtr++;
if (m_averagePtr >= 16U)
m_averagePtr = 0U;
}
m_dmrCentreVal = 0;
m_dmrThresholdVal = 0;
m_centreVal = 0;
m_thresholdVal = 0;
for (uint8_t i = 0U; i < 16U; i++) {
m_dmrCentreVal += m_dmrCentre[i];
m_dmrThresholdVal += m_dmrThreshold[i];
m_centreVal += m_centre[i];
m_thresholdVal += m_threshold[i];
}
m_dmrCentreVal >>= 4;
m_dmrThresholdVal >>= 4;
m_centreVal >>= 4;
m_thresholdVal >>= 4;
}
void CModem::dmrSamplesToBits(const int16_t* symbols, unsigned char* buffer)
{
unsigned int offset = 0U;
for (uint16_t i = 0U; i < DMR_FRAME_LENGTH_SYMBOLS; i++) {
int16_t sample = symbols[i] - m_ysfCentreVal;
int16_t sample = symbols[i] - m_centreVal;
if (sample < -m_ysfThresholdVal) {
if (sample < -m_thresholdVal) {
WRITE_BIT1(buffer, offset, false);
offset++;
WRITE_BIT1(buffer, offset, true);
@ -735,7 +731,7 @@ void CModem::dmrSamplesToBits(const int16_t* symbols, unsigned char* buffer)
offset++;
WRITE_BIT1(buffer, offset, false);
offset++;
} else if (sample < m_ysfThresholdVal) {
} else if (sample < m_thresholdVal) {
WRITE_BIT1(buffer, offset, true);
offset++;
WRITE_BIT1(buffer, offset, false);

34
Modem.h
View file

@ -87,36 +87,26 @@ private:
CRingBuffer<unsigned char> m_rxDMRData2;
CRingBuffer<unsigned char> m_rxYSFData;
CRingBuffer<unsigned char> m_rxP25Data;
CTimer m_dmrTimer;
CTimer m_dmrTimer;
CTimer m_ysfTimer;
CTimer m_p25Timer;
FILE* m_dmrFP;
CTimer m_p25Timer;
FILE* m_dmrFP;
FILE* m_ysfFP;
FILE* m_p25FP;
int16_t m_dmrThresholdVal;
int16_t m_dmrCentreVal;
int16_t m_dmrThreshold[16U];
int16_t m_dmrCentre[16U];
uint16_t m_dmrAveragePtr;
int16_t m_ysfThresholdVal;
int16_t m_ysfCentreVal;
int16_t m_ysfThreshold[16U];
int16_t m_ysfCentre[16U];
uint16_t m_ysfAveragePtr;
int16_t m_p25ThresholdVal;
int16_t m_p25CentreVal;
int16_t m_p25Threshold[16U];
int16_t m_p25Centre[16U];
uint16_t m_p25AveragePtr;
int16_t m_thresholdVal;
int16_t m_centreVal;
int16_t m_threshold[16U];
int16_t m_centre[16U];
uint16_t m_averagePtr;
void processYSF();
void processP25();
void processDMR();
void processDMR();
void dmrCalculateLevels(const int16_t* symbols);
void dmrSamplesToBits(const int16_t* symbols, unsigned char* buffer);
void dmrCalculateLevels(const int16_t* symbols);
void dmrSamplesToBits(const int16_t* symbols, unsigned char* buffer);
void ysfCalculateLevels(const int16_t* symbols);
void ysfCalculateLevels(const int16_t* symbols);
void ysfSamplesToBits(const int16_t* symbols, unsigned char* buffer);
void p25CalculateLevels(const int16_t* symbols);