@@ -79,7 +79,6 @@ m_rfBits(1U),
79
79
m_rfLSF(),
80
80
m_rfLSFn(0U ),
81
81
m_netLSF(),
82
- m_netLSFn(0U ),
83
82
m_rssiMapper(rssiMapper),
84
83
m_rssi(0U ),
85
84
m_maxRSSI(0U ),
@@ -309,8 +308,15 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len)
309
308
writeQueueRF (rfData);
310
309
}
311
310
312
- if (m_network != NULL && m_rfTimeoutTimer.isRunning () && !m_rfTimeoutTimer.hasExpired ())
313
- m_network->writeData (m_rfLSF.getSource (), m_rfLSF.getDest (), frame);
311
+ if (m_network != NULL && m_rfTimeoutTimer.isRunning () && !m_rfTimeoutTimer.hasExpired ()) {
312
+ unsigned char lich[M17_LICH_FRAGMENT_LENGTH_BYTES];
313
+ m_rfLSF.getFragment (lich, m_rfLSFn);
314
+
315
+ // Add the fragment number
316
+ lich[5U ] = (m_rfLSFn & 0x07U ) << 5 ;
317
+
318
+ m_network->writeData (m_rfLSF.getSource (), m_rfLSF.getDest (), lich, frame);
319
+ }
314
320
315
321
m_rfFrames++;
316
322
@@ -404,7 +410,7 @@ void CM17Control::writeNetwork()
404
410
m_networkWatchdog.start ();
405
411
406
412
if (netData[0U ] == TAG_HEADER) {
407
- m_netLSF.setNetwork (netData + 25U );
413
+ m_netLSF.setNetwork (netData + 19U );
408
414
m_netLSF.setCAN (m_can);
409
415
410
416
if (!m_allowEncryption) {
@@ -433,6 +439,7 @@ void CM17Control::writeNetwork()
433
439
m_netState = RS_NET_DATA_AUDIO;
434
440
break ;
435
441
default :
442
+ LogMessage (" M17, received unknown network transmission from %s to %s" , source.c_str (), dest.c_str ());
436
443
m_network->reset ();
437
444
break ;
438
445
}
@@ -442,7 +449,6 @@ void CM17Control::writeNetwork()
442
449
m_netTimeoutTimer.start ();
443
450
m_elapsed.start ();
444
451
m_netFrames = 0U ;
445
- m_netLSFn = 0U ;
446
452
447
453
// Create a dummy start message
448
454
unsigned char start[M17_FRAME_LENGTH_BYTES + 2U ];
@@ -478,15 +484,8 @@ void CM17Control::writeNetwork()
478
484
479
485
m_netFrames++;
480
486
481
- // Add the fragment LICH
482
- unsigned char lich[M17_LICH_FRAGMENT_LENGTH_BYTES];
483
- m_netLSF.getFragment (lich, m_netLSFn);
484
-
485
- // Add the fragment number
486
- lich[5U ] = (m_netLSFn & 0x07U ) << 5 ;
487
-
488
487
unsigned int frag1, frag2, frag3, frag4;
489
- CM17Utils::splitFragmentLICH (lich , frag1, frag2, frag3, frag4);
488
+ CM17Utils::splitFragmentLICH (netData + 19U , frag1, frag2, frag3, frag4);
490
489
491
490
// Add Golay to the LICH fragment here
492
491
unsigned int lich1 = CGolay24128::encode24128 (frag1);
@@ -496,26 +495,18 @@ void CM17Control::writeNetwork()
496
495
497
496
CM17Utils::combineFragmentLICHFEC (lich1, lich2, lich3, lich4, data + 2U + M17_SYNC_LENGTH_BYTES);
498
497
499
- // Add the FN and the data/audio
500
- unsigned char payload[M17_FN_LENGTH_BYTES + M17_PAYLOAD_LENGTH_BYTES];
501
- ::memcpy (payload, netData + 24U , M17_FN_LENGTH_BYTES + M17_PAYLOAD_LENGTH_BYTES);
502
-
503
498
// Add the Convolution FEC
504
499
CM17Convolution conv;
505
- conv.encodeData (payload , data + 2U + M17_SYNC_LENGTH_BYTES + M17_LICH_FRAGMENT_FEC_LENGTH_BYTES);
500
+ conv.encodeData (netData + 25U , data + 2U + M17_SYNC_LENGTH_BYTES + M17_LICH_FRAGMENT_FEC_LENGTH_BYTES);
506
501
507
502
unsigned char temp[M17_FRAME_LENGTH_BYTES];
508
503
interleaver (data + 2U , temp);
509
504
decorrelator (temp, data + 2U );
510
505
511
506
writeQueueNet (data);
512
507
513
- m_netLSFn++;
514
- if (m_netLSFn >= 6U )
515
- m_netLSFn = 0U ;
516
-
517
508
// EOT handling
518
- uint16_t fn = (netData[24U ] << 8 ) + (netData[25U ] << 0 );
509
+ uint16_t fn = (netData[25U ] << 8 ) + (netData[26U ] << 0 );
519
510
if ((fn & 0x8000U ) == 0x8000U ) {
520
511
std::string source = m_netLSF.getSource ();
521
512
std::string dest = m_netLSF.getDest ();
0 commit comments