Skip to content

Commit 5895037

Browse files
committed
New ckass dedicated to frame synchronization with mismatch tolerance
1 parent 565a6c7 commit 5895037

9 files changed

+287
-106
lines changed

CMakeLists.txt

+2
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ set(dsdcc_SOURCES
7575
dsd_opts.cpp
7676
dsd_state.cpp
7777
dsd_symbol.cpp
78+
dsd_sync.cpp
7879
dstar.cpp
7980
ysf.cpp
8081
dpmr.cpp
@@ -106,6 +107,7 @@ set(dsdcc_HEADERS
106107
dsd_opts.h
107108
dsd_state.h
108109
dsd_symbol.h
110+
dsd_sync.h
109111
dstar.h
110112
ysf.h
111113
dpmr.h

dmr.cpp

+8-4
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <string.h>
1919
#include "dmr.h"
2020
#include "dsd_decoder.h"
21+
#include "dsd_sync.h"
2122

2223
namespace DSDcc
2324
{
@@ -399,18 +400,21 @@ void DSDDMR::processVoice()
399400
void DSDDMR::processSyncOrSkip()
400401
{
401402
const int sync_db_size = IN_DIBITS(DMR_SYNC_LEN);
403+
const DSDSync::SyncPattern patterns[2] = { DSDSync::SyncDMRDataBS, DSDSync::SyncDMRVoiceBS };
404+
402405
if (m_symbolIndex > sync_db_size) // accumulate enough symbols to look for a sync
403406
{
404-
if (memcmp(m_dsdDecoder->m_dsdSymbol.getSyncDibitBack(sync_db_size),
405-
DSDDecoder::m_syncDMRDataBS, sync_db_size) == 0)
407+
DSDSync syncEngine;
408+
syncEngine.matchSome(m_dsdDecoder->m_dsdSymbol.getSyncDibitBack(sync_db_size), sync_db_size, patterns, 2);
409+
410+
if (syncEngine.isMatching(DSDSync::SyncDMRDataBS))
406411
{
407412
// std::cerr << "DSDDMR::processSyncOrSkip: data sync" << std::endl;
408413
processDataFirstHalf(90);
409414
m_dsdDecoder->m_fsmState = DSDDecoder::DSDprocessDMRdata;
410415
return;
411416
}
412-
else if (memcmp(m_dsdDecoder->m_dsdSymbol.getSyncDibitBack(sync_db_size),
413-
DSDDecoder::m_syncDMRVoiceBS, sync_db_size) == 0)
417+
else if (syncEngine.isMatching(DSDSync::SyncDMRVoiceBS))
414418
{
415419
// std::cerr << "DSDDMR::processSyncOrSkip: voice sync" << std::endl;
416420
processVoiceFirstHalf(90);

dpmr.cpp

+17-5
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <iostream>
1919
#include "dpmr.h"
2020
#include "dsd_decoder.h"
21+
#include "dsd_sync.h"
2122

2223
namespace DSDcc
2324
{
@@ -281,13 +282,16 @@ void DSDdPMR::processPostFrame()
281282
if (m_symbolIndex == 12) // sync complete
282283
{
283284
m_dsdDecoder->getLogger().log("DSDdPMR::processPostFrame\n"); // DEBUG
285+
DSDSync syncEngine;
286+
const DSDSync::SyncPattern patterns[2] = { DSDSync::SyncDPMRFS2, DSDSync::SyncDPMRFS3 };
287+
syncEngine.matchSome(m_syncDoubleBuffer, 12, patterns, 2);
284288

285-
if (memcmp((const void *) m_syncDoubleBuffer, (const void *) DSDDecoder::m_syncDPMRFS2, 12) == 0) // start of superframes
289+
if (syncEngine.isMatching(DSDSync::SyncDPMRFS2)) // start of superframes
286290
{
287291
m_state = DPMRSuperFrame;
288292
m_symbolIndex = 0;
289293
}
290-
else if (memcmp((const void *) m_syncDoubleBuffer, (const void *) DSDDecoder::m_syncDPMRFS3, 12) == 0) // end frame
294+
else if (syncEngine.isMatching(DSDSync::SyncDPMRFS3)) // end frame
291295
{
292296
m_state = DPMREnd;
293297
m_symbolIndex = 0;
@@ -346,7 +350,11 @@ void DSDdPMR::processExtSearch()
346350
// compare around expected spot
347351
if ((m_syncCycle < 1) || (m_syncCycle > 14))
348352
{
349-
if (memcmp((const void *) &m_syncDoubleBuffer[m_symbolIndex], (const void *) DSDDecoder::m_syncDPMRFS2, 12) == 0)
353+
DSDSync syncEngine;
354+
const DSDSync::SyncPattern patterns[1] = { DSDSync::SyncDPMRFS2 };
355+
syncEngine.matchSome(m_syncDoubleBuffer, 12, patterns, 1);
356+
357+
if (syncEngine.isMatching(DSDSync::SyncDPMRFS2))
350358
{
351359
m_dsdDecoder->getLogger().log("DSDdPMR::processExtSearch: stop extensive sync search (sync found)\n"); // DEBUG
352360
m_state = DPMRSuperFrame;
@@ -509,12 +517,16 @@ void DSDdPMR::processFS2(int symbolIndex, int dibit)
509517

510518
if (symbolIndex == 11) // last symbol
511519
{
512-
if (memcmp((const void *) m_syncDoubleBuffer, (const void *) DSDDecoder::m_syncDPMRFS2, 12) == 0) // start of superframes
520+
DSDSync syncEngine;
521+
const DSDSync::SyncPattern patterns[2] = { DSDSync::SyncDPMRFS2, DSDSync::SyncDPMRFS3 };
522+
syncEngine.matchSome(m_syncDoubleBuffer, 12, patterns, 2);
523+
524+
if (syncEngine.isMatching(DSDSync::SyncDPMRFS2)) // start of superframes
513525
{
514526
// nothing
515527
m_frameType = DPMRPayloadFrame;
516528
}
517-
else if (memcmp((const void *) m_syncDoubleBuffer, (const void *) DSDDecoder::m_syncDPMRFS3, 12) == 0) // end frame
529+
else if (syncEngine.isMatching(DSDSync::SyncDPMRFS3)) // end frame
518530
{
519531
m_state = DPMREnd;
520532
m_symbolIndex = 0;

dsd_decoder.cpp

+26-63
Original file line numberDiff line numberDiff line change
@@ -17,44 +17,14 @@
1717
#include <stdlib.h>
1818
#include <assert.h>
1919
#include <algorithm>
20+
2021
#include "timeutil.h"
22+
#include "dsd_sync.h"
2123
#include "dsd_decoder.h"
2224

2325
namespace DSDcc
2426
{
2527

26-
// Sync wods - Symbol mapping: 01(1):+3, 00(0):+1, 10(2):-1, 11(3):-3
27-
const unsigned char DSDDecoder::m_syncDMRDataBS[24] = {3, 1, 3, 3, 3, 3, 1, 1, 1, 3, 3, 1, 1, 3, 1, 1, 3, 1, 3, 3, 1, 1, 3, 1}; // DF F5 7D 75 DF 5D
28-
const unsigned char DSDDecoder::m_syncDMRVoiceBS[24] = {1, 3, 1, 1, 1, 1, 3, 3, 3, 1, 1, 3, 3, 1, 3, 3, 1, 3, 1, 1, 3, 3, 1, 3}; // 75 5F D7 DF 75 F7
29-
const unsigned char DSDDecoder::m_syncDMRDataMS[24] = {3, 1, 1, 1, 3, 1, 1, 3, 3, 3, 1, 3, 1, 3, 3, 3, 3, 1, 1, 3, 1, 1, 1, 3}; // D5 D7 F7 7F D7 57
30-
const unsigned char DSDDecoder::m_syncDMRVoiceMS[24] = {1, 3, 3, 3, 1, 3, 3, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 3, 3, 1, 3, 3, 3, 1}; // 7F 7D 5D D5 7D FD
31-
const unsigned char DSDDecoder::m_syncDPMRFS1[24] = {1, 1, 1, 3, 3, 3, 3, 3, 1, 1, 3, 3, 1, 3, 1, 1, 3, 1, 1, 1, 1, 3, 1, 3}; // 57 FF 5F 75 D5 77 - non packet data header
32-
const unsigned char DSDDecoder::m_syncDPMRFS4[24] = {3, 3, 3, 1, 1, 1, 1, 1, 3, 3, 1, 1, 3, 1, 3, 3, 1, 3, 3, 3, 3, 1, 3, 1}; // FD 55 F5 DF 7F DD - packet data header
33-
const unsigned char DSDDecoder::m_syncDPMRFS2[12] = {1, 1, 3, 3, 3, 3, 1, 3, 1, 3, 3, 1}; // 5F F7 7D - superframe sync (each 2 384 bit frames)
34-
const unsigned char DSDDecoder::m_syncDPMRFS3[12] = {1, 3, 3, 1, 3, 1, 3, 3, 3, 3, 1, 1}; // 7D DF F5 end frame sync
35-
const unsigned char DSDDecoder::m_syncNXDNRDCHFull[19] = {3, 1, 3, 1, 1, 3, 3, 3, 1, 3, 1, 3, 1, 3, 3, 1, 1, 3, 1};
36-
const unsigned char DSDDecoder::m_syncNXDNRDCHFullInv[19] = {1, 3, 1, 3, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 3, 3, 1, 3};
37-
//const unsigned char DSDDecoder::m_syncNXDNRDCHFull[20] = {1, 3, 1, 3, 1, 1, 3, 3, 3, 1, 3, 1, 3, 1, 3, 3, 1, 1, 3, 1};
38-
//const unsigned char DSDDecoder::m_syncNXDNRDCHFullInv[20] = {3, 1, 3, 1, 3, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 3, 3, 1, 3};
39-
const unsigned char DSDDecoder::m_syncNXDNRDCHFSW[10] = {3, 1, 3, 1, 3, 3, 1, 1, 3, 1};
40-
const unsigned char DSDDecoder::m_syncNXDNRDCHFSWInv[10] = {1, 3, 1, 3, 1, 1, 3, 3, 1, 3};
41-
const unsigned char DSDDecoder::m_syncDStarHeader[24] = {1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 1, 3, 3, 1, 1, 3, 1, 3, 1, 1, 1, 1};
42-
const unsigned char DSDDecoder::m_syncDStarHeaderInv[24] = {3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 3, 3, 1, 3, 1, 3, 3, 3, 3};
43-
const unsigned char DSDDecoder::m_syncDStar[24] = {3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 1, 3, 1, 1, 1, 3, 3, 1, 3, 1, 1, 1};
44-
const unsigned char DSDDecoder::m_syncDStarInv[24] = {1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 3, 1, 3, 3, 3, 1, 1, 3, 1, 3, 3, 3};
45-
const unsigned char DSDDecoder::m_syncYSF[20] = {3, 1, 1, 1, 1, 3, 1, 1, 3, 1, 3, 1, 1, 3, 1, 3, 1, 1, 3, 1}; // D4 71 C9 63 4D => D5 75 DD 77 5D
46-
const unsigned char DSDDecoder::m_syncP25P1[24] = {1, 1, 1, 1, 1, 3, 1, 1, 3, 3, 1, 1, 3, 3, 3, 3, 1, 3, 1, 3, 3, 3, 3, 3};
47-
const unsigned char DSDDecoder::m_syncP25P1Inv[24] = {3, 3, 3, 3, 3, 1, 3, 3, 1, 1, 3, 3, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1};
48-
const unsigned char DSDDecoder::m_syncX2TDMADataBS[24] = {3, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 3, 3, 1, 1, 3, 3};
49-
const unsigned char DSDDecoder::m_syncX2TDMAVoiceBS[24] = {1, 1, 3, 1, 3, 1, 3, 3, 3, 3, 3, 1, 3, 1, 3, 3, 3, 1, 1, 1, 3, 3, 1, 1};
50-
const unsigned char DSDDecoder::m_syncX2TDMADataMS[24] = {3, 1, 3, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3 ,3 ,3 ,1 ,3};
51-
const unsigned char DSDDecoder::m_syncX2TDMAVoiceMS[24] = {1, 3, 1, 3, 3, 1, 1, 1, 1, 3 ,3, 3, 3, 3, 3, 3, 1, 1, 1, 1 ,1 ,1 ,3 ,1};
52-
const unsigned char DSDDecoder::m_syncProVoice[32] = {1, 3, 1, 3, 1, 3, 3, 3, 1, 1, 1, 3, 1, 1, 3, 1, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3};
53-
const unsigned char DSDDecoder::m_syncProVoiceInv[32] = {3, 1, 3, 1, 3, 1, 1, 1, 3, 3, 3, 1, 3, 3, 1, 3, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1};
54-
const unsigned char DSDDecoder::m_syncProVoiceEA[32] = {3, 1, 1, 3, 1, 3, 1, 1, 3, 3, 1, 3, 3, 1, 1, 1, 1, 1, 3, 3, 1, 3, 1, 3, 1, 1, 3 ,1 ,1 ,1, 3 ,3};
55-
const unsigned char DSDDecoder::m_syncProVoiceEAInv[32] = {1, 3, 3, 1, 3, 1, 3, 3, 1, 1, 3, 1, 1 ,3 ,3, 3, 3 ,3, 1, 1 ,3, 1, 3, 1, 3, 3, 1, 3, 3, 3, 1, 1};
56-
57-
5828
DSDDecoder::DSDDecoder() :
5929
m_fsmState(DSDLookForSync),
6030
m_dsdSymbol(this),
@@ -666,12 +636,13 @@ int DSDDecoder::getFrameSync()
666636
}
667637
else // Sync identification starts here
668638
{
639+
DSDSync syncEngine;
669640
m_dmrBurstType = DSDDMR::DSDDMRBurstNone;
670-
unsigned char tmp[64];
641+
syncEngine.matchAll(m_dsdSymbol.getSyncDibitBack(DSDSync::m_history));
671642

672643
if (m_opts.frame_p25p1 == 1)
673644
{
674-
if (memcmp(m_dsdSymbol.getSyncDibitBack(24), m_syncP25P1, 24) == 0)
645+
if (syncEngine.isMatching(DSDSync::SyncP25P1))
675646
{
676647
m_state.carrier = 1;
677648
m_dsdSymbol.setFSK(4);
@@ -687,7 +658,7 @@ int DSDDecoder::getFrameSync()
687658
m_mbeRate = DSDMBERate3600x2450;
688659
return (int) DSDSyncP25p1P;
689660
}
690-
if (memcmp(m_dsdSymbol.getSyncDibitBack(24), m_syncP25P1Inv, 24) == 0)
661+
if (syncEngine.isMatching(DSDSync::SyncP25P1Inv))
691662
{
692663
m_state.carrier = 1;
693664
m_dsdSymbol.setFSK(4, true);
@@ -706,7 +677,7 @@ int DSDDecoder::getFrameSync()
706677
}
707678
if (m_opts.frame_x2tdma == 1)
708679
{
709-
if (memcmp(m_dsdSymbol.getSyncDibitBack(24), m_syncX2TDMADataBS, 24) == 0)
680+
if (syncEngine.isMatching(DSDSync::SyncX2TDMADataBS))
710681
{
711682
m_state.carrier = 1;
712683
m_dsdSymbol.setFSK(4);
@@ -724,7 +695,7 @@ int DSDDecoder::getFrameSync()
724695
return (int) DSDSyncX2TDMADataP; // done
725696
}
726697

727-
if (memcmp(m_dsdSymbol.getSyncDibitBack(24), m_syncX2TDMADataMS, 24) == 0)
698+
if (syncEngine.isMatching(DSDSync::SyncX2TDMADataMS))
728699
{
729700
m_state.carrier = 1;
730701
m_dsdSymbol.setFSK(4);
@@ -742,7 +713,7 @@ int DSDDecoder::getFrameSync()
742713
return (int) DSDSyncX2TDMADataP; // done
743714
}
744715

745-
if (memcmp(m_dsdSymbol.getSyncDibitBack(24), m_syncX2TDMAVoiceBS, 24) == 0)
716+
if (syncEngine.isMatching(DSDSync::SyncX2TDMAVoiceBS))
746717
{
747718
m_state.carrier = 1;
748719
m_dsdSymbol.setFSK(4);
@@ -760,7 +731,7 @@ int DSDDecoder::getFrameSync()
760731
return (int) DSDSyncX2TDMAVoiceP; // done
761732
}
762733

763-
if (memcmp(m_dsdSymbol.getSyncDibitBack(24), m_syncX2TDMAVoiceMS, 24) == 0)
734+
if (syncEngine.isMatching(DSDSync::SyncX2TDMAVoiceMS))
764735
{
765736
m_state.carrier = 1;
766737
m_dsdSymbol.setFSK(4);
@@ -780,7 +751,7 @@ int DSDDecoder::getFrameSync()
780751
}
781752
if (m_opts.frame_ysf == 1)
782753
{
783-
if (memcmp(m_dsdSymbol.getSyncDibitBack(20), m_syncYSF, 20) == 0)
754+
if (syncEngine.isMatching(DSDSync::SyncYSF))
784755
{
785756
m_state.carrier = 1;
786757
m_dsdSymbol.setFSK(4);
@@ -799,7 +770,7 @@ int DSDDecoder::getFrameSync()
799770
}
800771
if (m_opts.frame_dmr == 1)
801772
{
802-
if (memcmp(m_dsdSymbol.getSyncDibitBack(24), m_syncDMRDataBS, 24) == 0)
773+
if (syncEngine.isMatching(DSDSync::SyncDMRDataBS))
803774
{
804775
m_state.carrier = 1;
805776
m_dsdSymbol.setFSK(4);
@@ -820,7 +791,7 @@ int DSDDecoder::getFrameSync()
820791
return (int) DSDSyncDMRDataP; // done
821792
}
822793

823-
if (memcmp(m_dsdSymbol.getSyncDibitBack(24), m_syncDMRDataMS, 24) == 0)
794+
if (syncEngine.isMatching(DSDSync::SyncDMRDataMS))
824795
{
825796
m_state.carrier = 1;
826797
m_dsdSymbol.setFSK(4);
@@ -841,7 +812,7 @@ int DSDDecoder::getFrameSync()
841812
return (int) DSDSyncDMRDataMS; // done
842813
}
843814

844-
if (memcmp(m_dsdSymbol.getSyncDibitBack(24), m_syncDMRVoiceBS, 24) == 0)
815+
if (syncEngine.isMatching(DSDSync::SyncDMRVoiceBS))
845816
{
846817
m_state.carrier = 1;
847818
m_dsdSymbol.setFSK(4);
@@ -862,7 +833,7 @@ int DSDDecoder::getFrameSync()
862833
return (int) DSDSyncDMRVoiceP; // done
863834
}
864835

865-
if (memcmp(m_dsdSymbol.getSyncDibitBack(24), m_syncDMRVoiceMS, 24) == 0)
836+
if (syncEngine.isMatching(DSDSync::SyncDMRVoiceMS))
866837
{
867838
m_state.carrier = 1;
868839
m_dsdSymbol.setFSK(4);
@@ -885,8 +856,7 @@ int DSDDecoder::getFrameSync()
885856
}
886857
if (m_opts.frame_provoice == 1)
887858
{
888-
if ((memcmp(m_dsdSymbol.getSyncDibitBack(32), m_syncProVoice, 32) == 0)
889-
|| (memcmp(m_dsdSymbol.getSyncDibitBack(32), m_syncProVoiceEA, 32) == 0))
859+
if (syncEngine.isMatching(DSDSync::SyncProVoice) || syncEngine.isMatching(DSDSync::SyncProVoiceEA))
890860
{
891861
m_state.carrier = 1;
892862
m_dsdSymbol.setFSK(4);
@@ -902,8 +872,7 @@ int DSDDecoder::getFrameSync()
902872
m_mbeRate = DSDMBERate3600x2450;
903873
return (int) DSDSyncProVoiceP; // done
904874
}
905-
else if ((memcmp(m_dsdSymbol.getSyncDibitBack(32), m_syncProVoiceInv, 32) == 0)
906-
|| (memcmp(m_dsdSymbol.getSyncDibitBack(32), m_syncProVoiceEAInv, 32) == 0))
875+
else if (syncEngine.isMatching(DSDSync::SyncProVoiceInv) || syncEngine.isMatching(DSDSync::SyncProVoiceEAInv))
907876
{
908877
m_state.carrier = 1;
909878
m_state.offset = m_synctest_pos;
@@ -924,7 +893,7 @@ int DSDDecoder::getFrameSync()
924893
}
925894
if ((m_opts.frame_nxdn96 == 1) || (m_opts.frame_nxdn48 == 1))
926895
{
927-
if (countDiff(m_dsdSymbol.getSyncDibitBack(19), m_syncNXDNRDCHFull, tmp, 19) <= 1) // long sync (with preamble)
896+
if (syncEngine.isMatching(DSDSync::SyncNXDNRDCHFull)) // long sync (with preamble)
928897
{
929898
m_nxdnInterSyncCount = 0;
930899
m_state.carrier = 1;
@@ -953,7 +922,7 @@ int DSDDecoder::getFrameSync()
953922
m_mbeRate = DSDMBERate3600x2450;
954923
return (int) DSDSyncNXDNP; // done
955924
}
956-
else if (countDiff(m_dsdSymbol.getSyncDibitBack(19), m_syncNXDNRDCHFullInv, tmp, 19) <= 1) // long sync (with preamble) inverted
925+
else if (syncEngine.isMatching(DSDSync::SyncNXDNRDCHFullInv)) // long sync (with preamble) inverted
957926
{
958927
m_nxdnInterSyncCount = 0;
959928
m_state.carrier = 1;
@@ -982,7 +951,7 @@ int DSDDecoder::getFrameSync()
982951
m_mbeRate = DSDMBERate3600x2450;
983952
return (int) DSDSyncNXDNN; // done
984953
}
985-
else if (countDiff(m_dsdSymbol.getSyncDibitBack(10), m_syncNXDNRDCHFSW, tmp, 10) <= 1) // short sync
954+
else if (syncEngine.isMatching(DSDSync::SyncNXDNRDCHFSW)) // short sync
986955
{
987956
if ((m_nxdnInterSyncCount > 0) && (m_nxdnInterSyncCount % 192 == 0))
988957
{
@@ -1016,7 +985,7 @@ int DSDDecoder::getFrameSync()
1016985
m_nxdnInterSyncCount = 0;
1017986
}
1018987
}
1019-
else if (countDiff(m_dsdSymbol.getSyncDibitBack(10), m_syncNXDNRDCHFSWInv, tmp, 10) <= 1) // short sync inverted
988+
else if (syncEngine.isMatching(DSDSync::SyncNXDNRDCHFSWInv)) // short sync inverted
1020989
{
1021990
if ((m_nxdnInterSyncCount > 0) && (m_nxdnInterSyncCount % 192 == 0))
1022991
{
@@ -1053,7 +1022,7 @@ int DSDDecoder::getFrameSync()
10531022
}
10541023
if (m_opts.frame_dpmr == 1)
10551024
{
1056-
if(memcmp(m_dsdSymbol.getSyncDibitBack(24), m_syncDPMRFS1, 24) == 0) // dPMR classic (not packet)
1025+
if (syncEngine.isMatching(DSDSync::SyncDPMRFS1)) // dPMR classic (not packet)
10571026
{
10581027
m_state.carrier = 1;
10591028
m_dsdSymbol.setFSK(4);
@@ -1072,7 +1041,7 @@ int DSDDecoder::getFrameSync()
10721041
}
10731042
if (m_opts.frame_dstar == 1)
10741043
{
1075-
if (memcmp(m_dsdSymbol.getSyncDibitBack(24), m_syncDStar, 24) == 0)
1044+
if (syncEngine.isMatching(DSDSync::SyncDStar))
10761045
{
10771046
m_state.carrier = 1;
10781047
m_dsdSymbol.setFSK(2);
@@ -1088,7 +1057,7 @@ int DSDDecoder::getFrameSync()
10881057
m_mbeRate = DSDMBERate3600x2400;
10891058
return (int) DSDSyncDStarP;
10901059
}
1091-
if (memcmp(m_dsdSymbol.getSyncDibitBack(24), m_syncDStarInv, 24) == 0)
1060+
if (syncEngine.isMatching(DSDSync::SyncDStarInv))
10921061
{
10931062
m_state.carrier = 1;
10941063
m_dsdSymbol.setFSK(2, true);
@@ -1104,7 +1073,7 @@ int DSDDecoder::getFrameSync()
11041073
m_mbeRate = DSDMBERate3600x2400;
11051074
return (int) DSDSyncDStarN; // done
11061075
}
1107-
if (memcmp(m_dsdSymbol.getSyncDibitBack(24), m_syncDStarHeader, 24) == 0)
1076+
if (syncEngine.isMatching(DSDSync::SyncDStarHeader))
11081077
{
11091078
m_state.carrier = 1;
11101079
m_dsdSymbol.setFSK(2);
@@ -1120,7 +1089,7 @@ int DSDDecoder::getFrameSync()
11201089
m_mbeRate = DSDMBERate3600x2400;
11211090
return (int) DSDSyncDStarHeaderP; // done
11221091
}
1123-
if (memcmp(m_dsdSymbol.getSyncDibitBack(24), m_syncDStarHeaderInv, 24) == 0)
1092+
if (syncEngine.isMatching(DSDSync::SyncDStarHeaderInv))
11241093
{
11251094
m_state.carrier = 1;
11261095
m_dsdSymbol.setFSK(2, true);
@@ -1470,10 +1439,4 @@ int DSDDecoder::comp(const void *a, const void *b)
14701439
return 1;
14711440
}
14721441

1473-
int DSDDecoder::countDiff(const unsigned char *a, const unsigned char *b, unsigned char *t, unsigned int len)
1474-
{
1475-
std::transform(a, a + len, b, t, std::bit_xor<unsigned char>());
1476-
return std::count_if(t, t + len, [](unsigned char& c) { return c != 0; });
1477-
}
1478-
14791442
} // namespace dsdcc

0 commit comments

Comments
 (0)