diff --git a/DStarControl.cpp b/DStarControl.cpp index e371d2c..e9aa4bf 100644 --- a/DStarControl.cpp +++ b/DStarControl.cpp @@ -13,6 +13,7 @@ #include "DStarControl.h" #include "Utils.h" +#include "Sync.h" #include "Log.h" #include @@ -231,7 +232,7 @@ bool CDStarControl::writeModem(unsigned char *data) // Regenerate the sync if (m_n == 0U) - ::memcpy(data + DSTAR_VOICE_FRAME_LENGTH_BYTES + 1U, DSTAR_SYNC_BYTES, DSTAR_DATA_FRAME_LENGTH_BYTES); + CSync::addDStarSync(data + 1U); m_n = (m_n + 1U) % 21U; @@ -486,7 +487,7 @@ void CDStarControl::writeNetwork() // Regenerate the sync if (n == 0U) - ::memcpy(data + DSTAR_VOICE_FRAME_LENGTH_BYTES + 2U, DSTAR_SYNC_BYTES, DSTAR_DATA_FRAME_LENGTH_BYTES); + CSync::addDStarSync(data + 2U); m_n = n; diff --git a/Sync.cpp b/Sync.cpp index 6bca463..648da79 100644 --- a/Sync.cpp +++ b/Sync.cpp @@ -17,12 +17,23 @@ */ #include "Sync.h" + +#include "DStarDefines.h" #include "DMRDefines.h" +#include "YSFDefines.h" #include #include +#include +void CSync::addDStarSync(unsigned char* data) +{ + assert(data != NULL); + + ::memcpy(data + DSTAR_VOICE_FRAME_LENGTH_BYTES, DSTAR_SYNC_BYTES, DSTAR_DATA_FRAME_LENGTH_BYTES); +} + void CSync::addDMRDataSync(unsigned char* data) { assert(data != NULL); @@ -38,3 +49,10 @@ void CSync::addDMRAudioSync(unsigned char* data) for (unsigned int i = 0U; i < 7U; i++) data[i + 13U] = (data[i + 13U] & ~SYNC_MASK[i]) | BS_SOURCED_AUDIO_SYNC[i]; } + +void CSync::addYSFSync(unsigned char* data) +{ + assert(data != NULL); + + ::memcpy(data, YSF_SYNC_BYTES, YSF_SYNC_LENGTH_BYTES); +} diff --git a/Sync.h b/Sync.h index 507662e..ac4ac65 100644 --- a/Sync.h +++ b/Sync.h @@ -22,9 +22,13 @@ class CSync { public: + static void addDStarSync(unsigned char* data); + static void addDMRDataSync(unsigned char* data); static void addDMRAudioSync(unsigned char* data); + static void addYSFSync(unsigned char* data); + private: }; diff --git a/YSFDefines.h b/YSFDefines.h index f713e5b..d1bed14 100644 --- a/YSFDefines.h +++ b/YSFDefines.h @@ -22,6 +22,7 @@ const unsigned int YSF_FRAME_LENGTH_BYTES = 120U; const unsigned char YSF_SYNC_BYTES[] = {0xD4U, 0x71U, 0xC9U, 0x63U, 0x4DU}; +const unsigned int YSF_SYNC_LENGTH_BYTES = 5U; const unsigned char YSF_FI_MASK = 0xC0U; const unsigned char YSF_DT_MASK = 0x30U;