Windows clean ups of the new DMR TA code.

This commit is contained in:
Jonathan Naylor 2018-12-08 20:24:05 +00:00
parent e9e0b7fe1e
commit afdb36f7b6
3 changed files with 48 additions and 31 deletions

View file

@ -16,6 +16,7 @@
#include "Log.h" #include "Log.h"
#include <cstring> #include <cstring>
#include <cassert>
CDMRTA::CDMRTA() : CDMRTA::CDMRTA() :
m_TA(), m_TA(),
@ -24,11 +25,13 @@ m_bufOffset(0)
{ {
} }
CDMRTA::~CDMRTA() { CDMRTA::~CDMRTA()
{
} }
bool CDMRTA::add(const unsigned char* data, unsigned int len) { bool CDMRTA::add(const unsigned char* data, unsigned int len)
assert(data); {
assert(data != NULL);
if (m_bufOffset + len >= sizeof(m_buf)) { if (m_bufOffset + len >= sizeof(m_buf)) {
// buffer overflow // buffer overflow
@ -43,69 +46,75 @@ bool CDMRTA::add(const unsigned char* data, unsigned int len) {
return true; return true;
} }
const unsigned char* CDMRTA::get() { const unsigned char* CDMRTA::get()
{
return (unsigned char*)m_TA; return (unsigned char*)m_TA;
} }
void CDMRTA::reset() { void CDMRTA::reset()
{
::memset(m_TA, 0, sizeof(m_TA)); ::memset(m_TA, 0, sizeof(m_TA));
::memset(m_buf, 0, sizeof(m_buf)); ::memset(m_buf, 0, sizeof(m_buf));
m_bufOffset = 0; m_bufOffset = 0;
} }
void CDMRTA::decodeTA() { void CDMRTA::decodeTA()
{
unsigned char *b; unsigned char *b;
unsigned char c; unsigned char c;
int j; int j;
unsigned int i,t1,t2, TAsize, TAformat; unsigned int i, t1, t2;
unsigned char* talkerAlias = m_buf; unsigned char* talkerAlias = m_buf;
TAformat=(talkerAlias[0]>>6U) & 0x03U; unsigned int TAformat = (talkerAlias[0] >> 6U) & 0x03U;
TAsize = (talkerAlias[0]>>1U) & 0x1FU; unsigned int TAsize = (talkerAlias[0] >> 1U) & 0x1FU;
::strncpy(m_TA, "(could not decode)", sizeof(m_TA)); ::strncpy(m_TA, "(could not decode)", sizeof(m_TA));
switch (TAformat) { switch (TAformat) {
case 0U: // 7 bit case 0U: // 7 bit
::memset(m_TA, 0, sizeof(m_TA)); ::memset(m_TA, 0, sizeof(m_TA));
b=&talkerAlias[0]; b = &talkerAlias[0];
t1=0; t2=0; c=0; t1 = 0U; t2 = 0U; c = 0U;
for (i=0; (i<32U)&&(t2<TAsize); i++) { for (i = 0U; (i < 32U) && (t2 < TAsize); i++) {
for (j=7U;j>=0;j--) { for (j = 7; j >= 0; j--) {
c = (c<<1U) | (b[i] >> j); c = (c << 1U) | (b[i] >> j);
if (++t1==7U) { if (++t1 == 7U) {
if (i>0) { if (i > 0U)
m_TA[t2++]=c & 0x7FU; m_TA[t2++] = c & 0x7FU;
}
t1=0; t1 = 0U;
c=0; c = 0U;
} }
} }
} }
m_TA[TAsize]=0; m_TA[TAsize] = 0;
break; break;
case 1U: // ISO 8 bit case 1U: // ISO 8 bit
case 2U: // UTF8 case 2U: // UTF8
::strncpy(m_TA,(char*)talkerAlias+1U, sizeof(m_TA)); ::strncpy(m_TA, (char*)talkerAlias + 1U, sizeof(m_TA));
break; break;
case 3U: // UTF16 poor man's conversion case 3U: // UTF16 poor man's conversion
t2=0; t2=0;
::memset (&m_TA,0,sizeof(m_TA)); ::memset(&m_TA, 0, sizeof(m_TA));
for(i=0; (i<15)&&(t2<TAsize); i++) { for (i = 0U; (i < 15U) && (t2 < TAsize); i++) {
if (talkerAlias[2U*i+1U]==0) if (talkerAlias[2U * i + 1U] == 0)
m_TA[t2++] = talkerAlias[2U*i+2U]; m_TA[t2++] = talkerAlias[2U * i + 2U];
else else
m_TA[t2++] = '?'; m_TA[t2++] = '?';
} }
m_TA[TAsize]=0; m_TA[TAsize] = 0;
break; break;
} }
LogMessage("DMR Talker Alias (Data Format %u, Received %u/%u char): '%s'", TAformat, ::strlen(m_TA), TAsize, m_TA); LogMessage("DMR Talker Alias (Data Format %u, Received %u/%u char): '%s'", TAformat, ::strlen(m_TA), TAsize, m_TA);
if (::strlen(m_TA)>TAsize) {
if (strlen(m_TA)<29U) if (::strlen(m_TA) > TAsize) {
if (strlen(m_TA) < 29U)
strcat(m_TA," ?"); strcat(m_TA," ?");
else else
strcpy(m_TA+28U," ?"); strcpy(m_TA + 28U," ?");
} }
} }

View file

@ -173,6 +173,7 @@
<ClInclude Include="DMRShortLC.h" /> <ClInclude Include="DMRShortLC.h" />
<ClInclude Include="DMRSlot.h" /> <ClInclude Include="DMRSlot.h" />
<ClInclude Include="DMRSlotType.h" /> <ClInclude Include="DMRSlotType.h" />
<ClInclude Include="DMRTA.h" />
<ClInclude Include="DMRTrellis.h" /> <ClInclude Include="DMRTrellis.h" />
<ClInclude Include="DStarControl.h" /> <ClInclude Include="DStarControl.h" />
<ClInclude Include="DStarDefines.h" /> <ClInclude Include="DStarDefines.h" />
@ -264,6 +265,7 @@
<ClCompile Include="DMRShortLC.cpp" /> <ClCompile Include="DMRShortLC.cpp" />
<ClCompile Include="DMRSlot.cpp" /> <ClCompile Include="DMRSlot.cpp" />
<ClCompile Include="DMRSlotType.cpp" /> <ClCompile Include="DMRSlotType.cpp" />
<ClCompile Include="DMRTA.cpp" />
<ClCompile Include="DMRTrellis.cpp" /> <ClCompile Include="DMRTrellis.cpp" />
<ClCompile Include="DStarControl.cpp" /> <ClCompile Include="DStarControl.cpp" />
<ClCompile Include="DStarHeader.cpp" /> <ClCompile Include="DStarHeader.cpp" />

View file

@ -281,6 +281,9 @@
<ClInclude Include="NullModem.h"> <ClInclude Include="NullModem.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="DMRTA.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="BPTC19696.cpp"> <ClCompile Include="BPTC19696.cpp">
@ -526,5 +529,8 @@
<ClCompile Include="NullModem.cpp"> <ClCompile Include="NullModem.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="DMRTA.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
</Project> </Project>