From 8869950ef74242414737788d931728a0b5fbc9bc Mon Sep 17 00:00:00 2001 From: Andy CA6JAU Date: Tue, 4 Jul 2017 00:17:44 -0400 Subject: [PATCH 1/9] Increasing TX and RX IO bit ring buffer --- Globals.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Globals.h b/Globals.h index 2bd31ee..4c26f07 100644 --- a/Globals.h +++ b/Globals.h @@ -47,8 +47,8 @@ enum MMDVM_STATE { #include "P25TX.h" #include "Debug.h" -const uint16_t TX_RINGBUFFER_SIZE = 100U; -const uint16_t RX_RINGBUFFER_SIZE = 120U; +const uint16_t TX_RINGBUFFER_SIZE = 256U; +const uint16_t RX_RINGBUFFER_SIZE = 256U; extern MMDVM_STATE m_modemState; extern MMDVM_STATE m_modemState_prev; From eefda572bfbd7d608bebe2ea911eee3beecf2da2 Mon Sep 17 00:00:00 2001 From: Andy CA6JAU Date: Tue, 4 Jul 2017 00:18:22 -0400 Subject: [PATCH 2/9] Increasing STM serial port buffer --- SerialSTM.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SerialSTM.cpp b/SerialSTM.cpp index 3762f92..d8dd0d7 100644 --- a/SerialSTM.cpp +++ b/SerialSTM.cpp @@ -41,8 +41,8 @@ USART2 - TXD PA2 - RXD PA3 */ -#define TX_SERIAL_FIFO_SIZE 256U -#define RX_SERIAL_FIFO_SIZE 256U +#define TX_SERIAL_FIFO_SIZE 512U +#define RX_SERIAL_FIFO_SIZE 512U #if defined(STM32_USART1_HOST) From 6486bf4efc9e97a9660fc3e4369e4f121c386c03 Mon Sep 17 00:00:00 2001 From: Andy CA6JAU Date: Tue, 4 Jul 2017 14:27:57 -0400 Subject: [PATCH 3/9] =?UTF-8?q?Adding=20Jonathan=E2=80=99s=20ring=20buffer?= =?UTF-8?q?=20to=20serial=20repeater?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SerialArduino.cpp | 20 ++++++++++++++++++++ SerialPort.cpp | 27 ++++++++++++++++++++------- SerialPort.h | 3 +++ SerialSTM.cpp | 40 +++++++++++++++++++++++++++++++++------- 4 files changed, 76 insertions(+), 14 deletions(-) diff --git a/SerialArduino.cpp b/SerialArduino.cpp index 021bfbc..65f05c6 100644 --- a/SerialArduino.cpp +++ b/SerialArduino.cpp @@ -112,5 +112,25 @@ void CSerialPort::writeInt(uint8_t n, const uint8_t* data, uint16_t length, bool } } +int CSerialPort::availableForWriteInt(uint8_t n) +{ + switch (n) { + case 1U: + #if defined(STM32_USART1_HOST) && defined(__STM32F1__) + return Serial1.availableForWrite(); + #else + return Serial.availableForWrite(); + #endif + case 3U: + #if defined(SERIAL_REPEATER) && defined(__STM32F1__) + return Serial2.availableForWrite(); + #elif defined(SERIAL_REPEATER) && (defined(__MK20DX256__) || defined(__MK64FX512__) || defined(__MK66FX1M0__)) + return Serial1.availableForWrite(); + #endif + default: + return false; + } +} + #endif diff --git a/SerialPort.cpp b/SerialPort.cpp index 9acfc52..891aafa 100644 --- a/SerialPort.cpp +++ b/SerialPort.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013,2015,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2013,2015,2016,2017 by Jonathan Naylor G4KLX * Copyright (C) 2016 by Colin Durbridge G4EML * Copyright (C) 2016, 2017 by Andy Uribe CA6JAU * @@ -90,7 +90,8 @@ CSerialPort::CSerialPort() : m_buffer(), m_ptr(0U), m_len(0U), -m_debug(false) +m_debug(false), +m_repeat() { } @@ -536,12 +537,11 @@ void CSerialPort::process() } break; -#if defined(SERIAL_REPEATER) case MMDVM_SERIAL: - writeInt(3U, m_buffer + 3U, m_len - 3U); + for (uint8_t i = 3U; i < m_len; i++) + m_repeat.put(m_buffer[i]); break; -#endif - + default: // Handle this, send a NAK back sendNAK(1U); @@ -555,7 +555,20 @@ void CSerialPort::process() } #if defined(SERIAL_REPEATER) - // Drain any incoming serial data + // Write any outgoing serial data + uint16_t space = m_repeat.getData(); + if (space > 0U) { + int avail = availableForWriteInt(3U); + if (avail < space) + space = avail; + + for (uint16_t i = 0U; i < space; i++) { + uint8_t c = m_repeat.get(); + writeInt(3U, &c, 1U); + } + } + + // Read any incoming serial data while (availableInt(3U)) readInt(3U); #endif diff --git a/SerialPort.h b/SerialPort.h index 920b220..7cf3300 100644 --- a/SerialPort.h +++ b/SerialPort.h @@ -20,6 +20,7 @@ #define SERIALPORT_H #include "Globals.h" +#include "SerialRB.h" class CSerialPort { public: @@ -55,6 +56,7 @@ private: uint8_t m_ptr; uint8_t m_len; bool m_debug; + CSerialRB m_repeat; void sendACK(); void sendNAK(uint8_t err); @@ -68,6 +70,7 @@ private: // Hardware versions void beginInt(uint8_t n, int speed); int availableInt(uint8_t n); + int availableForWriteInt(uint8_t n); uint8_t readInt(uint8_t n); void writeInt(uint8_t n, const uint8_t* data, uint16_t length, bool flush = false); }; diff --git a/SerialSTM.cpp b/SerialSTM.cpp index d8dd0d7..7e1f639 100644 --- a/SerialSTM.cpp +++ b/SerialSTM.cpp @@ -41,8 +41,8 @@ USART2 - TXD PA2 - RXD PA3 */ -#define TX_SERIAL_FIFO_SIZE 512U -#define RX_SERIAL_FIFO_SIZE 512U +#define TX_SERIAL_FIFO_SIZE 256U +#define RX_SERIAL_FIFO_SIZE 256U #if defined(STM32_USART1_HOST) @@ -208,7 +208,7 @@ void InitUSART1(int speed) RXSerialfifoinit1(); } -uint8_t AvailUSART1(void) +uint8_t AvailUSART1() { if (RXSerialfifolevel1() > 0U) return 1U; @@ -216,7 +216,12 @@ uint8_t AvailUSART1(void) return 0U; } -uint8_t ReadUSART1(void) +int AvailForWriteUSART1() +{ + return TX_SERIAL_FIFO_SIZE - TXSerialfifolevel1(); +} + +uint8_t ReadUSART1() { uint8_t data_c = RXSerialfifo1[RXSerialfifotail1]; @@ -403,7 +408,7 @@ void InitUSART2(int speed) RXSerialfifoinit2(); } -uint8_t AvailUSART2(void) +uint8_t AvailUSART2() { if (RXSerialfifolevel2() > 0U) return 1U; @@ -411,7 +416,12 @@ uint8_t AvailUSART2(void) return 0U; } -uint8_t ReadUSART2(void) +int AvailForWriteUSART2() +{ + return TX_SERIAL_FIFO_SIZE - TXSerialfifolevel2(); +} + +uint8_t ReadUSART2() { uint8_t data_c = RXSerialfifo2[RXSerialfifotail2]; @@ -468,7 +478,23 @@ int CSerialPort::availableInt(uint8_t n) return AvailUSART2(); #endif default: - return false; + return 0; + } +} + +int CSerialPort::availableForWriteInt(uint8_t n) +{ + switch (n) { + case 1U: + #if defined(STM32_USART1_HOST) + return AvailForWriteUSART1(); + #endif + #if defined(SERIAL_REPEATER) + case 3U: + return AvailForWriteUSART2(); + #endif + default: + return 0; } } From 22f510d167a8a5eb88bafcde8675bc22786f29f1 Mon Sep 17 00:00:00 2001 From: Andy CA6JAU Date: Sat, 8 Jul 2017 13:58:55 -0400 Subject: [PATCH 4/9] =?UTF-8?q?Revert=20"Adding=20Jonathan=E2=80=99s=20rin?= =?UTF-8?q?g=20buffer=20to=20serial=20repeater"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 6486bf4efc9e97a9660fc3e4369e4f121c386c03. --- SerialArduino.cpp | 20 -------------------- SerialPort.cpp | 27 +++++++-------------------- SerialPort.h | 3 --- SerialSTM.cpp | 40 +++++++--------------------------------- 4 files changed, 14 insertions(+), 76 deletions(-) diff --git a/SerialArduino.cpp b/SerialArduino.cpp index 65f05c6..021bfbc 100644 --- a/SerialArduino.cpp +++ b/SerialArduino.cpp @@ -112,25 +112,5 @@ void CSerialPort::writeInt(uint8_t n, const uint8_t* data, uint16_t length, bool } } -int CSerialPort::availableForWriteInt(uint8_t n) -{ - switch (n) { - case 1U: - #if defined(STM32_USART1_HOST) && defined(__STM32F1__) - return Serial1.availableForWrite(); - #else - return Serial.availableForWrite(); - #endif - case 3U: - #if defined(SERIAL_REPEATER) && defined(__STM32F1__) - return Serial2.availableForWrite(); - #elif defined(SERIAL_REPEATER) && (defined(__MK20DX256__) || defined(__MK64FX512__) || defined(__MK66FX1M0__)) - return Serial1.availableForWrite(); - #endif - default: - return false; - } -} - #endif diff --git a/SerialPort.cpp b/SerialPort.cpp index 891aafa..9acfc52 100644 --- a/SerialPort.cpp +++ b/SerialPort.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013,2015,2016,2017 by Jonathan Naylor G4KLX + * Copyright (C) 2013,2015,2016 by Jonathan Naylor G4KLX * Copyright (C) 2016 by Colin Durbridge G4EML * Copyright (C) 2016, 2017 by Andy Uribe CA6JAU * @@ -90,8 +90,7 @@ CSerialPort::CSerialPort() : m_buffer(), m_ptr(0U), m_len(0U), -m_debug(false), -m_repeat() +m_debug(false) { } @@ -537,11 +536,12 @@ void CSerialPort::process() } break; +#if defined(SERIAL_REPEATER) case MMDVM_SERIAL: - for (uint8_t i = 3U; i < m_len; i++) - m_repeat.put(m_buffer[i]); + writeInt(3U, m_buffer + 3U, m_len - 3U); break; - +#endif + default: // Handle this, send a NAK back sendNAK(1U); @@ -555,20 +555,7 @@ void CSerialPort::process() } #if defined(SERIAL_REPEATER) - // Write any outgoing serial data - uint16_t space = m_repeat.getData(); - if (space > 0U) { - int avail = availableForWriteInt(3U); - if (avail < space) - space = avail; - - for (uint16_t i = 0U; i < space; i++) { - uint8_t c = m_repeat.get(); - writeInt(3U, &c, 1U); - } - } - - // Read any incoming serial data + // Drain any incoming serial data while (availableInt(3U)) readInt(3U); #endif diff --git a/SerialPort.h b/SerialPort.h index 7cf3300..920b220 100644 --- a/SerialPort.h +++ b/SerialPort.h @@ -20,7 +20,6 @@ #define SERIALPORT_H #include "Globals.h" -#include "SerialRB.h" class CSerialPort { public: @@ -56,7 +55,6 @@ private: uint8_t m_ptr; uint8_t m_len; bool m_debug; - CSerialRB m_repeat; void sendACK(); void sendNAK(uint8_t err); @@ -70,7 +68,6 @@ private: // Hardware versions void beginInt(uint8_t n, int speed); int availableInt(uint8_t n); - int availableForWriteInt(uint8_t n); uint8_t readInt(uint8_t n); void writeInt(uint8_t n, const uint8_t* data, uint16_t length, bool flush = false); }; diff --git a/SerialSTM.cpp b/SerialSTM.cpp index 7e1f639..d8dd0d7 100644 --- a/SerialSTM.cpp +++ b/SerialSTM.cpp @@ -41,8 +41,8 @@ USART2 - TXD PA2 - RXD PA3 */ -#define TX_SERIAL_FIFO_SIZE 256U -#define RX_SERIAL_FIFO_SIZE 256U +#define TX_SERIAL_FIFO_SIZE 512U +#define RX_SERIAL_FIFO_SIZE 512U #if defined(STM32_USART1_HOST) @@ -208,7 +208,7 @@ void InitUSART1(int speed) RXSerialfifoinit1(); } -uint8_t AvailUSART1() +uint8_t AvailUSART1(void) { if (RXSerialfifolevel1() > 0U) return 1U; @@ -216,12 +216,7 @@ uint8_t AvailUSART1() return 0U; } -int AvailForWriteUSART1() -{ - return TX_SERIAL_FIFO_SIZE - TXSerialfifolevel1(); -} - -uint8_t ReadUSART1() +uint8_t ReadUSART1(void) { uint8_t data_c = RXSerialfifo1[RXSerialfifotail1]; @@ -408,7 +403,7 @@ void InitUSART2(int speed) RXSerialfifoinit2(); } -uint8_t AvailUSART2() +uint8_t AvailUSART2(void) { if (RXSerialfifolevel2() > 0U) return 1U; @@ -416,12 +411,7 @@ uint8_t AvailUSART2() return 0U; } -int AvailForWriteUSART2() -{ - return TX_SERIAL_FIFO_SIZE - TXSerialfifolevel2(); -} - -uint8_t ReadUSART2() +uint8_t ReadUSART2(void) { uint8_t data_c = RXSerialfifo2[RXSerialfifotail2]; @@ -478,23 +468,7 @@ int CSerialPort::availableInt(uint8_t n) return AvailUSART2(); #endif default: - return 0; - } -} - -int CSerialPort::availableForWriteInt(uint8_t n) -{ - switch (n) { - case 1U: - #if defined(STM32_USART1_HOST) - return AvailForWriteUSART1(); - #endif - #if defined(SERIAL_REPEATER) - case 3U: - return AvailForWriteUSART2(); - #endif - default: - return 0; + return false; } } From cb3e286585c9b80b344347b3f83303fa9b32f52f Mon Sep 17 00:00:00 2001 From: Andy CA6JAU Date: Sat, 8 Jul 2017 13:59:07 -0400 Subject: [PATCH 5/9] Revert "Increasing STM serial port buffer" This reverts commit eefda572bfbd7d608bebe2ea911eee3beecf2da2. --- SerialSTM.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SerialSTM.cpp b/SerialSTM.cpp index d8dd0d7..3762f92 100644 --- a/SerialSTM.cpp +++ b/SerialSTM.cpp @@ -41,8 +41,8 @@ USART2 - TXD PA2 - RXD PA3 */ -#define TX_SERIAL_FIFO_SIZE 512U -#define RX_SERIAL_FIFO_SIZE 512U +#define TX_SERIAL_FIFO_SIZE 256U +#define RX_SERIAL_FIFO_SIZE 256U #if defined(STM32_USART1_HOST) From 91211c89d6dbb3f06ee473681282c8cff6024ca5 Mon Sep 17 00:00:00 2001 From: Andy CA6JAU Date: Sat, 8 Jul 2017 14:00:47 -0400 Subject: [PATCH 6/9] Doubling bit I/O buffer ring --- Globals.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Globals.h b/Globals.h index 4c26f07..e2a32d7 100644 --- a/Globals.h +++ b/Globals.h @@ -47,8 +47,8 @@ enum MMDVM_STATE { #include "P25TX.h" #include "Debug.h" -const uint16_t TX_RINGBUFFER_SIZE = 256U; -const uint16_t RX_RINGBUFFER_SIZE = 256U; +const uint16_t TX_RINGBUFFER_SIZE = 512U; +const uint16_t RX_RINGBUFFER_SIZE = 512U; extern MMDVM_STATE m_modemState; extern MMDVM_STATE m_modemState_prev; From bcf82b36df039acc0733a70945dcf868e5fabfcd Mon Sep 17 00:00:00 2001 From: Andy CA6JAU Date: Sat, 8 Jul 2017 14:09:45 -0400 Subject: [PATCH 7/9] Minor changes --- SerialSTM.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/SerialSTM.cpp b/SerialSTM.cpp index 3762f92..0d28c67 100644 --- a/SerialSTM.cpp +++ b/SerialSTM.cpp @@ -208,7 +208,7 @@ void InitUSART1(int speed) RXSerialfifoinit1(); } -uint8_t AvailUSART1(void) +uint8_t AvailUSART1() { if (RXSerialfifolevel1() > 0U) return 1U; @@ -216,7 +216,7 @@ uint8_t AvailUSART1(void) return 0U; } -uint8_t ReadUSART1(void) +uint8_t ReadUSART1() { uint8_t data_c = RXSerialfifo1[RXSerialfifotail1]; @@ -403,7 +403,7 @@ void InitUSART2(int speed) RXSerialfifoinit2(); } -uint8_t AvailUSART2(void) +uint8_t AvailUSART2() { if (RXSerialfifolevel2() > 0U) return 1U; @@ -411,7 +411,7 @@ uint8_t AvailUSART2(void) return 0U; } -uint8_t ReadUSART2(void) +uint8_t ReadUSART2() { uint8_t data_c = RXSerialfifo2[RXSerialfifotail2]; @@ -468,7 +468,7 @@ int CSerialPort::availableInt(uint8_t n) return AvailUSART2(); #endif default: - return false; + return 0; } } From 76b05cf1142cd07fc469fa4d2007689f9d97c6f0 Mon Sep 17 00:00:00 2001 From: Andy CA6JAU Date: Sun, 9 Jul 2017 00:07:51 -0400 Subject: [PATCH 8/9] Removing unused variables --- SerialSTM.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/SerialSTM.cpp b/SerialSTM.cpp index 0d28c67..ae8109b 100644 --- a/SerialSTM.cpp +++ b/SerialSTM.cpp @@ -52,7 +52,6 @@ extern "C" { /* ************* USART1 ***************** */ -volatile uint32_t intcount1; volatile uint8_t TXSerialfifo1[TX_SERIAL_FIFO_SIZE]; volatile uint8_t RXSerialfifo1[RX_SERIAL_FIFO_SIZE]; volatile uint16_t TXSerialfifohead1, TXSerialfifotail1; @@ -139,7 +138,6 @@ void USART1_IRQHandler() } USART_ClearITPendingBit(USART1, USART_IT_RXNE); - intcount1++; } if (USART_GetITStatus(USART1, USART_IT_TXE)) { @@ -245,7 +243,6 @@ extern "C" { /* ************* USART2 ***************** */ -volatile uint32_t intcount2; volatile uint8_t TXSerialfifo2[TX_SERIAL_FIFO_SIZE]; volatile uint8_t RXSerialfifo2[RX_SERIAL_FIFO_SIZE]; volatile uint16_t TXSerialfifohead2, TXSerialfifotail2; @@ -317,7 +314,6 @@ uint8_t TXSerialfifoput2(uint8_t next) void USART2_IRQHandler() { uint8_t c; - io.DEB_pin(HIGH); if (USART_GetITStatus(USART2, USART_IT_RXNE)) { c = (uint8_t) USART_ReceiveData(USART2); @@ -333,7 +329,6 @@ void USART2_IRQHandler() } USART_ClearITPendingBit(USART2, USART_IT_RXNE); - intcount2++; } if (USART_GetITStatus(USART2, USART_IT_TXE)) { From 438cfc2b8263b4e82d18c5b439fa16da01c86244 Mon Sep 17 00:00:00 2001 From: Andy CA6JAU Date: Sun, 9 Jul 2017 00:58:41 -0400 Subject: [PATCH 9/9] Fix serial repeater port --- SerialArduino.cpp | 8 +++----- SerialSTM.cpp | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/SerialArduino.cpp b/SerialArduino.cpp index 021bfbc..5aab5e8 100644 --- a/SerialArduino.cpp +++ b/SerialArduino.cpp @@ -62,7 +62,7 @@ int CSerialPort::availableInt(uint8_t n) return Serial1.available(); #endif default: - return false; + return 0; } } @@ -92,21 +92,19 @@ void CSerialPort::writeInt(uint8_t n, const uint8_t* data, uint16_t length, bool case 1U: #if defined(STM32_USART1_HOST) && defined(__STM32F1__) Serial1.write(data, length); - break; #else Serial.write(data, length); if (flush) Serial.flush(); - break; #endif + break; case 3U: #if defined(SERIAL_REPEATER) && defined(__STM32F1__) Serial2.write(data, length); - break; #elif defined(SERIAL_REPEATER) && (defined(__MK20DX256__) || defined(__MK64FX512__) || defined(__MK66FX1M0__)) Serial1.write(data, length); - break; #endif + break; default: break; } diff --git a/SerialSTM.cpp b/SerialSTM.cpp index ae8109b..e02ea81 100644 --- a/SerialSTM.cpp +++ b/SerialSTM.cpp @@ -497,8 +497,8 @@ void CSerialPort::writeInt(uint8_t n, const uint8_t* data, uint16_t length, bool usbserial.write(data, length); if (flush) usbserial.flush(); - break; #endif + break; #if defined(SERIAL_REPEATER) case 3U: WriteUSART2(data, length);