Bugfix of the DMRTA decoding for blocks comes in with random order
This commit is contained in:
parent
afdb36f7b6
commit
334307cd4a
3 changed files with 33 additions and 17 deletions
16
DMRSlot.cpp
16
DMRSlot.cpp
|
@ -630,7 +630,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
|||
if (!(m_rfTalkerId & TALKER_ID_HEADER)) {
|
||||
if (m_rfTalkerId == TALKER_ID_NONE)
|
||||
m_rfTalkerAlias.reset();
|
||||
m_rfTalkerAlias.add(data, 6U);
|
||||
m_rfTalkerAlias.add(0, data, 6U);
|
||||
m_display->writeDMRTA(m_slotNo, (unsigned char*)m_rfTalkerAlias.get(), "R");
|
||||
|
||||
if (m_dumpTAData) {
|
||||
|
@ -649,7 +649,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
|||
if (!(m_rfTalkerId & TALKER_ID_BLOCK1)) {
|
||||
if (m_rfTalkerId == TALKER_ID_NONE)
|
||||
m_rfTalkerAlias.reset();
|
||||
m_rfTalkerAlias.add(data, 7U);
|
||||
m_rfTalkerAlias.add(1, data, 7U);
|
||||
m_display->writeDMRTA(m_slotNo, (unsigned char*)m_rfTalkerAlias.get(), "R");
|
||||
|
||||
if (m_dumpTAData) {
|
||||
|
@ -668,7 +668,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
|||
if (!(m_rfTalkerId & TALKER_ID_BLOCK2)) {
|
||||
if (m_rfTalkerId == TALKER_ID_NONE)
|
||||
m_rfTalkerAlias.reset();
|
||||
m_rfTalkerAlias.add(data, 7U);
|
||||
m_rfTalkerAlias.add(2, data, 7U);
|
||||
m_display->writeDMRTA(m_slotNo, (unsigned char*)m_rfTalkerAlias.get(), "R");
|
||||
|
||||
if (m_dumpTAData) {
|
||||
|
@ -687,7 +687,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
|||
if (!(m_rfTalkerId & TALKER_ID_BLOCK3)) {
|
||||
if (m_rfTalkerId == TALKER_ID_NONE)
|
||||
m_rfTalkerAlias.reset();
|
||||
m_rfTalkerAlias.add(data, 7U);
|
||||
m_rfTalkerAlias.add(3, data, 7U);
|
||||
m_display->writeDMRTA(m_slotNo, (unsigned char*)m_rfTalkerAlias.get(), "R");
|
||||
|
||||
if (m_dumpTAData) {
|
||||
|
@ -1424,7 +1424,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
|||
if (!(m_netTalkerId & TALKER_ID_HEADER)) {
|
||||
if (!m_netTalkerId)
|
||||
m_rfTalkerAlias.reset();
|
||||
m_rfTalkerAlias.add(data + 2U, 7U);
|
||||
m_rfTalkerAlias.add(0, data + 2U, 7U);
|
||||
m_display->writeDMRTA(m_slotNo, (unsigned char*)m_rfTalkerAlias.get(), "N");
|
||||
|
||||
if (m_dumpTAData) {
|
||||
|
@ -1439,7 +1439,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
|||
if (!(m_netTalkerId & TALKER_ID_BLOCK1)) {
|
||||
if (!m_netTalkerId)
|
||||
m_rfTalkerAlias.reset();
|
||||
m_rfTalkerAlias.add(data + 2U, 7U);
|
||||
m_rfTalkerAlias.add(1, data + 2U, 7U);
|
||||
m_display->writeDMRTA(m_slotNo, (unsigned char*)m_rfTalkerAlias.get(), "N");
|
||||
|
||||
if (m_dumpTAData) {
|
||||
|
@ -1454,7 +1454,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
|||
if (!(m_netTalkerId & TALKER_ID_BLOCK2)) {
|
||||
if (!m_netTalkerId)
|
||||
m_rfTalkerAlias.reset();
|
||||
m_rfTalkerAlias.add(data + 2U, 7U);
|
||||
m_rfTalkerAlias.add(2, data + 2U, 7U);
|
||||
m_display->writeDMRTA(m_slotNo, (unsigned char*)m_rfTalkerAlias.get(), "N");
|
||||
|
||||
if (m_dumpTAData) {
|
||||
|
@ -1469,7 +1469,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
|||
if (!(m_netTalkerId & TALKER_ID_BLOCK3)) {
|
||||
if (!m_netTalkerId)
|
||||
m_rfTalkerAlias.reset();
|
||||
m_rfTalkerAlias.add(data+2U, 7U);
|
||||
m_rfTalkerAlias.add(3, data+2U, 7U);
|
||||
m_display->writeDMRTA(m_slotNo, (unsigned char*)m_rfTalkerAlias.get(), "N");
|
||||
|
||||
if (m_dumpTAData) {
|
||||
|
|
31
DMRTA.cpp
31
DMRTA.cpp
|
@ -20,8 +20,7 @@
|
|||
|
||||
CDMRTA::CDMRTA() :
|
||||
m_TA(),
|
||||
m_buf(),
|
||||
m_bufOffset(0)
|
||||
m_buf()
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -29,18 +28,37 @@ CDMRTA::~CDMRTA()
|
|||
{
|
||||
}
|
||||
|
||||
bool CDMRTA::add(const unsigned char* data, unsigned int len)
|
||||
bool CDMRTA::add(unsigned int blockId, const unsigned char* data, unsigned int len)
|
||||
{
|
||||
assert(data != NULL);
|
||||
|
||||
if (m_bufOffset + len >= sizeof(m_buf)) {
|
||||
unsigned int offset;
|
||||
switch(blockId) {
|
||||
case 0:
|
||||
offset = 0;
|
||||
break;
|
||||
case 1:
|
||||
offset = 6;
|
||||
break;
|
||||
case 2:
|
||||
offset = 13;
|
||||
break;
|
||||
case 3:
|
||||
offset = 20;
|
||||
break;
|
||||
default:
|
||||
// invalid block id
|
||||
reset();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (offset + len >= sizeof(m_buf)) {
|
||||
// buffer overflow
|
||||
reset();
|
||||
return false;
|
||||
}
|
||||
|
||||
::memcpy(m_buf + m_bufOffset, data, len);
|
||||
m_bufOffset += len;
|
||||
::memcpy(m_buf + offset, data, len);
|
||||
|
||||
decodeTA();
|
||||
return true;
|
||||
|
@ -55,7 +73,6 @@ void CDMRTA::reset()
|
|||
{
|
||||
::memset(m_TA, 0, sizeof(m_TA));
|
||||
::memset(m_buf, 0, sizeof(m_buf));
|
||||
m_bufOffset = 0;
|
||||
}
|
||||
|
||||
void CDMRTA::decodeTA()
|
||||
|
|
3
DMRTA.h
3
DMRTA.h
|
@ -20,7 +20,7 @@ public:
|
|||
CDMRTA();
|
||||
~CDMRTA();
|
||||
|
||||
bool add(const unsigned char* data, unsigned int len);
|
||||
bool add(unsigned int blockId, const unsigned char* data, unsigned int len);
|
||||
const unsigned char* get();
|
||||
void reset();
|
||||
|
||||
|
@ -30,7 +30,6 @@ protected:
|
|||
private:
|
||||
char m_TA[32];
|
||||
unsigned char m_buf[32];
|
||||
unsigned int m_bufOffset;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue