Reducing DMRIdleRX buffer a little, fix some format and copyrights

This commit is contained in:
Andy CA6JAU 2018-07-16 13:33:22 -04:00
parent 56d3b16493
commit 1f2ae86612
5 changed files with 72 additions and 83 deletions

View file

@ -1,6 +1,6 @@
/* /*
* Copyright (C) 2009-2016 by Jonathan Naylor G4KLX * Copyright (C) 2009-2016 by Jonathan Naylor G4KLX
* Copyright (C) 2016,2017 by Andy Uribe CA6JAU * Copyright (C) 2016,2017,2018 by Andy Uribe CA6JAU
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -65,7 +65,7 @@ void CDMRDMORX::reset()
} }
void CDMRDMORX::databit(bool bit) void CDMRDMORX::databit(bool bit)
{ {
WRITE_BIT1(m_buffer, m_dataPtr, bit); WRITE_BIT1(m_buffer, m_dataPtr, bit);
m_patternBuffer <<= 1; m_patternBuffer <<= 1;
@ -92,7 +92,7 @@ void CDMRDMORX::databit(bool bit)
correlateSync(); correlateSync();
} }
} }
if (m_dataPtr == m_endPtr) { if (m_dataPtr == m_endPtr) {
frame[0U] = m_control; frame[0U] = m_control;
@ -189,7 +189,7 @@ void CDMRDMORX::databit(bool bit)
// End of this slot, reset some items for the next slot. // End of this slot, reset some items for the next slot.
m_control = CONTROL_NONE; m_control = CONTROL_NONE;
} }
m_dataPtr++; m_dataPtr++;
if (m_dataPtr >= DMO_BUFFER_LENGTH_BITS) if (m_dataPtr >= DMO_BUFFER_LENGTH_BITS)
@ -199,41 +199,37 @@ void CDMRDMORX::databit(bool bit)
} }
void CDMRDMORX::correlateSync() void CDMRDMORX::correlateSync()
{ {
if ( (countBits64((m_patternBuffer & DMR_SYNC_BITS_MASK) ^ DMR_MS_DATA_SYNC_BITS) <= MAX_SYNC_BYTES_ERRS) || \ if ( (countBits64((m_patternBuffer & DMR_SYNC_BITS_MASK) ^ DMR_MS_DATA_SYNC_BITS) <= MAX_SYNC_BYTES_ERRS) || \
(countBits64((m_patternBuffer & DMR_SYNC_BITS_MASK) ^ DMR_S2_DATA_SYNC_BITS) <= MAX_SYNC_BYTES_ERRS) ) { (countBits64((m_patternBuffer & DMR_SYNC_BITS_MASK) ^ DMR_S2_DATA_SYNC_BITS) <= MAX_SYNC_BYTES_ERRS) ) {
m_control = CONTROL_DATA;
m_syncPtr = m_dataPtr;
m_control = CONTROL_DATA; m_startPtr = m_dataPtr + DMO_BUFFER_LENGTH_BITS - DMR_SLOT_TYPE_LENGTH_BITS / 2U - DMR_INFO_LENGTH_BITS / 2U - DMR_SYNC_LENGTH_BITS + 1;
m_syncPtr = m_dataPtr; if (m_startPtr >= DMO_BUFFER_LENGTH_BITS)
m_startPtr -= DMO_BUFFER_LENGTH_BITS;
m_startPtr = m_dataPtr + DMO_BUFFER_LENGTH_BITS - DMR_SLOT_TYPE_LENGTH_BITS / 2U - DMR_INFO_LENGTH_BITS / 2U - DMR_SYNC_LENGTH_BITS + 1; m_endPtr = m_dataPtr + DMR_SLOT_TYPE_LENGTH_BITS / 2U + DMR_INFO_LENGTH_BITS / 2U;
if (m_startPtr >= DMO_BUFFER_LENGTH_BITS) if (m_endPtr >= DMO_BUFFER_LENGTH_BITS)
m_startPtr -= DMO_BUFFER_LENGTH_BITS; m_endPtr -= DMO_BUFFER_LENGTH_BITS;
m_endPtr = m_dataPtr + DMR_SLOT_TYPE_LENGTH_BITS / 2U + DMR_INFO_LENGTH_BITS / 2U; m_modeTimerCnt = 0;
if (m_endPtr >= DMO_BUFFER_LENGTH_BITS) //DEBUG4("SYNC MS Data found pos/start/end:", m_dataPtr, m_startPtr, m_endPtr);
m_endPtr -= DMO_BUFFER_LENGTH_BITS;
m_modeTimerCnt = 0;
//DEBUG4("SYNC MS Data found pos/start/end:", m_dataPtr, m_startPtr, m_endPtr);
} else if ( (countBits64((m_patternBuffer & DMR_SYNC_BITS_MASK) ^ DMR_MS_VOICE_SYNC_BITS) <= MAX_SYNC_BYTES_ERRS) || \ } else if ( (countBits64((m_patternBuffer & DMR_SYNC_BITS_MASK) ^ DMR_MS_VOICE_SYNC_BITS) <= MAX_SYNC_BYTES_ERRS) || \
(countBits64((m_patternBuffer & DMR_SYNC_BITS_MASK) ^ DMR_S2_VOICE_SYNC_BITS) <= MAX_SYNC_BYTES_ERRS) ) { (countBits64((m_patternBuffer & DMR_SYNC_BITS_MASK) ^ DMR_S2_VOICE_SYNC_BITS) <= MAX_SYNC_BYTES_ERRS) ) {
m_control = CONTROL_VOICE;
m_syncPtr = m_dataPtr;
m_control = CONTROL_VOICE; m_startPtr = m_dataPtr + DMO_BUFFER_LENGTH_BITS - DMR_SLOT_TYPE_LENGTH_BITS / 2U - DMR_INFO_LENGTH_BITS / 2U - DMR_SYNC_LENGTH_BITS + 1;
m_syncPtr = m_dataPtr; if (m_startPtr >= DMO_BUFFER_LENGTH_BITS)
m_startPtr -= DMO_BUFFER_LENGTH_BITS;
m_startPtr = m_dataPtr + DMO_BUFFER_LENGTH_BITS - DMR_SLOT_TYPE_LENGTH_BITS / 2U - DMR_INFO_LENGTH_BITS / 2U - DMR_SYNC_LENGTH_BITS + 1; m_endPtr = m_dataPtr + DMR_SLOT_TYPE_LENGTH_BITS / 2U + DMR_INFO_LENGTH_BITS / 2U;
if (m_startPtr >= DMO_BUFFER_LENGTH_BITS) if (m_endPtr >= DMO_BUFFER_LENGTH_BITS)
m_startPtr -= DMO_BUFFER_LENGTH_BITS; m_endPtr -= DMO_BUFFER_LENGTH_BITS;
m_endPtr = m_dataPtr + DMR_SLOT_TYPE_LENGTH_BITS / 2U + DMR_INFO_LENGTH_BITS / 2U; m_modeTimerCnt = 0;
if (m_endPtr >= DMO_BUFFER_LENGTH_BITS) //DEBUG4("SYNC MS Voice found pos/start/end: ", m_dataPtr, m_startPtr, m_endPtr);
m_endPtr -= DMO_BUFFER_LENGTH_BITS;
m_modeTimerCnt = 0;
//DEBUG4("SYNC MS Voice found pos/start/end: ", m_dataPtr, m_startPtr, m_endPtr);
} }
} }

View file

@ -1,6 +1,6 @@
/* /*
* Copyright (C) 2015,2016 by Jonathan Naylor G4KLX * Copyright (C) 2015,2016 by Jonathan Naylor G4KLX
* Copyright (C) 2016,2017 by Andy Uribe CA6JAU * Copyright (C) 2016,2017,2018 by Andy Uribe CA6JAU
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* Copyright (C) 2009-2017 by Jonathan Naylor G4KLX * Copyright (C) 2009-2017 by Jonathan Naylor G4KLX
* Copyright (C) 2017 by Andy Uribe CA6JAU * Copyright (C) 2017,2018 by Andy Uribe CA6JAU
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -60,12 +60,11 @@ void CDMRIdleRX::databit(bool bit)
m_patternBuffer <<= 1; m_patternBuffer <<= 1;
if (bit) if (bit)
m_patternBuffer |= 0x01U; m_patternBuffer |= 0x01U;
if (countBits64((m_patternBuffer & DMR_SYNC_BITS_MASK) ^ DMR_MS_DATA_SYNC_BITS) <= MAX_SYNC_BYTES_ERRS) { if (countBits64((m_patternBuffer & DMR_SYNC_BITS_MASK) ^ DMR_MS_DATA_SYNC_BITS) <= MAX_SYNC_BYTES_ERRS) {
m_endPtr = m_dataPtr + DMR_SLOT_TYPE_LENGTH_BITS / 2U + DMR_INFO_LENGTH_BITS / 2U; m_endPtr = m_dataPtr + DMR_SLOT_TYPE_LENGTH_BITS / 2U + DMR_INFO_LENGTH_BITS / 2U;
if (m_endPtr >= DMR_IDLE_LENGTH_BITS) if (m_endPtr >= DMR_IDLE_LENGTH_BITS)
m_endPtr -= DMR_IDLE_LENGTH_BITS; m_endPtr -= DMR_IDLE_LENGTH_BITS;
// DEBUG3("SYNC MS Data found pos/end:", m_dataPtr, m_endPtr); // DEBUG3("SYNC MS Data found pos/end:", m_dataPtr, m_endPtr);
} }
@ -81,7 +80,7 @@ void CDMRIdleRX::databit(bool bit)
uint8_t dataType; uint8_t dataType;
CDMRSlotType slotType; CDMRSlotType slotType;
slotType.decode(frame + 1U, colorCode, dataType); slotType.decode(frame + 1U, colorCode, dataType);
if (colorCode == m_colorCode && dataType == DT_CSBK) { if (colorCode == m_colorCode && dataType == DT_CSBK) {
frame[0U] = CONTROL_IDLE | CONTROL_DATA | DT_CSBK; frame[0U] = CONTROL_IDLE | CONTROL_DATA | DT_CSBK;
serial.writeDMRData(false, frame, DMR_FRAME_LENGTH_BYTES + 1U); serial.writeDMRData(false, frame, DMR_FRAME_LENGTH_BYTES + 1U);

View file

@ -1,6 +1,6 @@
/* /*
* Copyright (C) 2015 by Jonathan Naylor G4KLX * Copyright (C) 2015 by Jonathan Naylor G4KLX
* Copyright (C) 2017 by Andy Uribe CA6JAU * Copyright (C) 2017,2018 by Andy Uribe CA6JAU
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -26,7 +26,7 @@
#include "DMRDefines.h" #include "DMRDefines.h"
const uint16_t DMR_IDLE_LENGTH_BITS = 400U; const uint16_t DMR_IDLE_LENGTH_BITS = 320U;
class CDMRIdleRX { class CDMRIdleRX {
public: public:

View file

@ -102,8 +102,7 @@ void CDMRSlotRX::reset()
bool CDMRSlotRX::databit(bool bit) bool CDMRSlotRX::databit(bool bit)
{ {
uint16_t min; uint16_t min, max;
uint16_t max;
m_delayPtr++; m_delayPtr++;
if (m_delayPtr < m_delay) if (m_delayPtr < m_delay)
@ -367,58 +366,53 @@ void CDMRSlotRX::correlateSync()
uint8_t control; uint8_t control;
if (countBits64((m_patternBuffer & DMR_SYNC_BITS_MASK) ^ DMR_MS_DATA_SYNC_BITS) <= MAX_SYNC_BYTES_ERRS) { if (countBits64((m_patternBuffer & DMR_SYNC_BITS_MASK) ^ DMR_MS_DATA_SYNC_BITS) <= MAX_SYNC_BYTES_ERRS) {
control = CONTROL_DATA;
syncPtr = m_dataPtr;
control = CONTROL_DATA; startPtr = m_dataPtr + DMR_BUFFER_LENGTH_BITS - DMR_SLOT_TYPE_LENGTH_BITS / 2U - DMR_INFO_LENGTH_BITS / 2U - DMR_SYNC_LENGTH_BITS + 1;
syncPtr = m_dataPtr; if (startPtr >= DMR_BUFFER_LENGTH_BITS)
startPtr -= DMR_BUFFER_LENGTH_BITS;
startPtr = m_dataPtr + DMR_BUFFER_LENGTH_BITS - DMR_SLOT_TYPE_LENGTH_BITS / 2U - DMR_INFO_LENGTH_BITS / 2U - DMR_SYNC_LENGTH_BITS + 1; endPtr = m_dataPtr + DMR_SLOT_TYPE_LENGTH_BITS / 2U + DMR_INFO_LENGTH_BITS / 2U;
if (startPtr >= DMR_BUFFER_LENGTH_BITS) if (endPtr >= DMR_BUFFER_LENGTH_BITS)
startPtr -= DMR_BUFFER_LENGTH_BITS; endPtr -= DMR_BUFFER_LENGTH_BITS;
endPtr = m_dataPtr + DMR_SLOT_TYPE_LENGTH_BITS / 2U + DMR_INFO_LENGTH_BITS / 2U; if(m_slot) {
if (endPtr >= DMR_BUFFER_LENGTH_BITS) m_syncPtr2 = syncPtr;
endPtr -= DMR_BUFFER_LENGTH_BITS; m_startPtr2 = startPtr;
m_endPtr2 = endPtr;
if(m_slot) { m_control2 = control;
m_syncPtr2 = syncPtr; } else {
m_startPtr2 = startPtr; m_syncPtr1 = syncPtr;
m_endPtr2 = endPtr; m_startPtr1 = startPtr;
m_control2 = control; m_endPtr1 = endPtr;
} else { m_control1 = control;
m_syncPtr1 = syncPtr; }
m_startPtr1 = startPtr; //DEBUG5("SYNC corr MS Data found slot/pos/start/end:", m_slot ? 2U : 1U, m_dataPtr, startPtr, endPtr);
m_endPtr1 = endPtr;
m_control1 = control;
}
//DEBUG5("SYNC corr MS Data found slot/pos/start/end:", m_slot ? 2U : 1U, m_dataPtr, startPtr, endPtr);
} else if (countBits64((m_patternBuffer & DMR_SYNC_BITS_MASK) ^ DMR_MS_VOICE_SYNC_BITS) <= MAX_SYNC_BYTES_ERRS) { } else if (countBits64((m_patternBuffer & DMR_SYNC_BITS_MASK) ^ DMR_MS_VOICE_SYNC_BITS) <= MAX_SYNC_BYTES_ERRS) {
control = CONTROL_VOICE;
syncPtr = m_dataPtr;
control = CONTROL_VOICE; startPtr = m_dataPtr + DMR_BUFFER_LENGTH_BITS - DMR_SLOT_TYPE_LENGTH_BITS / 2U - DMR_INFO_LENGTH_BITS / 2U - DMR_SYNC_LENGTH_BITS + 1;
syncPtr = m_dataPtr; if (startPtr >= DMR_BUFFER_LENGTH_BITS)
startPtr -= DMR_BUFFER_LENGTH_BITS;
startPtr = m_dataPtr + DMR_BUFFER_LENGTH_BITS - DMR_SLOT_TYPE_LENGTH_BITS / 2U - DMR_INFO_LENGTH_BITS / 2U - DMR_SYNC_LENGTH_BITS + 1; endPtr = m_dataPtr + DMR_SLOT_TYPE_LENGTH_BITS / 2U + DMR_INFO_LENGTH_BITS / 2U;
if (startPtr >= DMR_BUFFER_LENGTH_BITS) if (endPtr >= DMR_BUFFER_LENGTH_BITS)
startPtr -= DMR_BUFFER_LENGTH_BITS; endPtr -= DMR_BUFFER_LENGTH_BITS;
endPtr = m_dataPtr + DMR_SLOT_TYPE_LENGTH_BITS / 2U + DMR_INFO_LENGTH_BITS / 2U;
if (endPtr >= DMR_BUFFER_LENGTH_BITS)
endPtr -= DMR_BUFFER_LENGTH_BITS;
if(m_slot) { if(m_slot) {
m_syncPtr2 = syncPtr; m_syncPtr2 = syncPtr;
m_startPtr2 = startPtr; m_startPtr2 = startPtr;
m_endPtr2 = endPtr; m_endPtr2 = endPtr;
m_control2 = control; m_control2 = control;
} else { } else {
m_syncPtr1 = syncPtr; m_syncPtr1 = syncPtr;
m_startPtr1 = startPtr; m_startPtr1 = startPtr;
m_endPtr1 = endPtr; m_endPtr1 = endPtr;
m_control1 = control; m_control1 = control;
} }
//DEBUG5("SYNC corr MS Voice found slot/pos/start/end: ", m_slot ? 2U : 1U, m_dataPtr, startPtr, endPtr);
//DEBUG5("SYNC corr MS Voice found slot/pos/start/end: ", m_slot ? 2U : 1U, m_dataPtr, startPtr, endPtr);
} }
} }