Skip to content

Commit 14bf500

Browse files
committed
Fix the M17 convolution.
1 parent e2e5ddf commit 14bf500

File tree

3 files changed

+12
-33
lines changed

3 files changed

+12
-33
lines changed

M17Control.cpp

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -258,29 +258,12 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len)
258258
unsigned char frame[M17_FN_LENGTH_BYTES + M17_PAYLOAD_LENGTH_BYTES];
259259
unsigned int errors = conv.decodeData(data + 2U + M17_SYNC_LENGTH_BYTES + M17_LICH_FRAGMENT_FEC_LENGTH_BYTES, frame);
260260

261-
// If we have a BER of less than 12, then we consider the audio to be usable
262-
bool valid = errors < 12U;
263-
264-
if (!valid) {
265-
m_rfFN++;
266-
267-
frame[0U] = (m_rfFN >> 8) & 0xFFU;
268-
frame[1U] = (m_rfFN >> 0) & 0xFFU;
269-
270-
if (m_rfState == RS_RF_AUDIO) {
271-
::memcpy(frame + 2U + 0U, M17_3200_SILENCE, 8U);
272-
::memcpy(frame + 2U + 8U, M17_3200_SILENCE, 8U);
273-
} else {
274-
::memcpy(frame + 2U + 0U, M17_1600_SILENCE, 4U);
275-
::memcpy(frame + 2U + 4U, M17_1600_SILENCE, 4U);
276-
::memset(frame + 2U + 8U, 0x00U, 8U);
277-
}
278-
} else {
279-
m_rfFN = (frame[0U] << 8) + (frame[1U] << 0);
280-
}
261+
m_rfFN = (frame[0U] << 8) + (frame[1U] << 0);
281262

282263
LogDebug("M17, audio: FN: %u, errs: %u/272 (%.1f%%)", m_rfFN & 0x7FFFU, errors, float(errors) / 2.72F);
283264

265+
m_rfFN++;
266+
284267
m_rfBits += 272U;
285268
m_rfErrs += errors;
286269

@@ -343,7 +326,7 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len)
343326
m_rfLSFn = 0U;
344327

345328
// Only check for the EOT marker if the frame has a reasonable BER
346-
if (valid && ((m_rfFN & 0x8000U) == 0x8000U)) {
329+
if ((m_rfFN & 0x8000U) == 0x8000U) {
347330
std::string source = m_rfLSF.getSource();
348331
std::string dest = m_rfLSF.getDest();
349332

M17Convolution.cpp

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ const unsigned int PUNCTURE_LIST_LINK_SETUP[] = {
3333
362U, 369U, 372U, 375U, 378U, 385U, 388U, 391U, 394U, 401U, 404U, 407U, 410U, 417U, 420U, 423U, 430U, 433U, 436U, 439U, 446U,
3434
449U, 452U, 455U, 462U, 465U, 468U, 471U, 478U, 481U, 484U};
3535

36-
const unsigned int PUNCTURE_LIST_DATA_COUNT = 22U;
36+
const unsigned int PUNCTURE_LIST_DATA_COUNT = 12U;
3737

3838
const unsigned int PUNCTURE_LIST_DATA[] = {
3939
11U, 23U, 35U, 47U, 59U, 71U, 83U, 95U, 107U, 119U, 131U, 143U, 155U, 167U, 179U, 191U, 203U, 215U, 227U, 239U, 251U, 263U,
@@ -128,6 +128,7 @@ unsigned int CM17Convolution::decodeLinkSetup(const unsigned char* in, unsigned
128128
assert(out != NULL);
129129

130130
uint8_t temp[500U];
131+
::memset(temp, 0x00U, 500U);
131132

132133
unsigned int n = 0U;
133134
unsigned int index = 0U;
@@ -141,9 +142,6 @@ unsigned int CM17Convolution::decodeLinkSetup(const unsigned char* in, unsigned
141142
temp[n++] = b ? 2U : 0U;
142143
}
143144

144-
for (unsigned int i = 0U; i < 8U; i++)
145-
temp[n++] = 0U;
146-
147145
start();
148146

149147
n = 0U;
@@ -154,15 +152,16 @@ unsigned int CM17Convolution::decodeLinkSetup(const unsigned char* in, unsigned
154152
decode(s0, s1);
155153
}
156154

157-
return chainback(out, 144U) - PUNCTURE_LIST_LINK_SETUP_COUNT;
155+
return chainback(out, 240U) - PUNCTURE_LIST_LINK_SETUP_COUNT;
158156
}
159157

160158
unsigned int CM17Convolution::decodeData(const unsigned char* in, unsigned char* out)
161159
{
162160
assert(in != NULL);
163161
assert(out != NULL);
164162

165-
uint8_t temp[350U];
163+
uint8_t temp[300U];
164+
::memset(temp, 0x00U, 300U);
166165

167166
unsigned int n = 0U;
168167
unsigned int index = 0U;
@@ -176,20 +175,17 @@ unsigned int CM17Convolution::decodeData(const unsigned char* in, unsigned char*
176175
temp[n++] = b ? 2U : 0U;
177176
}
178177

179-
for (unsigned int i = 0U; i < 8U; i++)
180-
temp[n++] = 0U;
181-
182178
start();
183179

184180
n = 0U;
185-
for (unsigned int i = 0U; i < 164U; i++) {
181+
for (unsigned int i = 0U; i < 148U; i++) {
186182
uint8_t s0 = temp[n++];
187183
uint8_t s1 = temp[n++];
188184

189185
decode(s0, s1);
190186
}
191187

192-
return chainback(out, 160U) - PUNCTURE_LIST_DATA_COUNT;
188+
return chainback(out, 144U) - PUNCTURE_LIST_DATA_COUNT;
193189
}
194190

195191
void CM17Convolution::start()

Version.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@
1919
#if !defined(VERSION_H)
2020
#define VERSION_H
2121

22-
const char* VERSION = "20210810";
22+
const char* VERSION = "20210811";
2323

2424
#endif

0 commit comments

Comments
 (0)