From 4426b62f6edb9719155a418ff8107cd9471662b2 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Thu, 22 Mar 2018 21:02:16 +0000 Subject: [PATCH] Simplify the networking. --- YSFParrot/Network.cpp | 39 +++----- YSFParrot/Network.h | 6 +- YSFParrot/RingBuffer.h | 147 ---------------------------- YSFParrot/YSFParrot.cpp | 1 - YSFParrot/YSFParrot.vcxproj | 1 - YSFParrot/YSFParrot.vcxproj.filters | 3 - 6 files changed, 13 insertions(+), 184 deletions(-) delete mode 100644 YSFParrot/RingBuffer.h diff --git a/YSFParrot/Network.cpp b/YSFParrot/Network.cpp index d426cb6..262fe8f 100644 --- a/YSFParrot/Network.cpp +++ b/YSFParrot/Network.cpp @@ -27,8 +27,7 @@ const unsigned int BUFFER_LENGTH = 200U; CNetwork::CNetwork(unsigned int port) : m_socket(port), m_address(), -m_port(0U), -m_buffer(1000U, "YSF Network") +m_port(0U) { } @@ -76,53 +75,39 @@ bool CNetwork::writePoll(const in_addr& address, unsigned int port) return m_socket.write(buffer, 14U, address, port); } -void CNetwork::clock(unsigned int ms) +unsigned int CNetwork::read(unsigned char* data) { - unsigned char buffer[BUFFER_LENGTH]; - in_addr address; unsigned int port; - int length = m_socket.read(buffer, BUFFER_LENGTH, address, port); + int length = m_socket.read(data, BUFFER_LENGTH, address, port); if (length <= 0) - return; + return 0U; // Handle incoming polls - if (::memcmp(buffer, "YSFP", 4U) == 0) { + if (::memcmp(data, "YSFP", 4U) == 0) { writePoll(address, port); - return; + return 0U; } // Handle incoming unlinks - if (::memcmp(buffer, "YSFU", 4U) == 0) - return; + if (::memcmp(data, "YSFU", 4U) == 0) + return 0U; // Handle the status command - if (::memcmp(buffer, "YSFS", 4U) == 0) { + if (::memcmp(data, "YSFS", 4U) == 0) { unsigned char status[50U]; ::sprintf((char*)status, "YSFS%05u%-16.16s%-14.14s%03u", 1U, "Parrot", "Parrot", 0U); m_socket.write(status, 42U, address, port); - return; + return 0U; } // Invalid packet type? - if (::memcmp(buffer, "YSFD", 4U) != 0) - return; + if (::memcmp(data, "YSFD", 4U) != 0) + return 0U; m_address.s_addr = address.s_addr; m_port = port; - m_buffer.addData(buffer, 155U); -} - -unsigned int CNetwork::read(unsigned char* data) -{ - assert(data != NULL); - - if (m_buffer.isEmpty()) - return 0U; - - m_buffer.getData(data, 155U); - return 155U; } diff --git a/YSFParrot/Network.h b/YSFParrot/Network.h index a285f5f..a705c64 100644 --- a/YSFParrot/Network.h +++ b/YSFParrot/Network.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2009-2014,2016,2018 by Jonathan Naylor G4KLX * * 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 @@ -19,7 +19,6 @@ #ifndef Network_H #define Network_H -#include "RingBuffer.h" #include "UDPSocket.h" #include @@ -40,13 +39,10 @@ public: void close(); - void clock(unsigned int ms); - private: CUDPSocket m_socket; in_addr m_address; unsigned int m_port; - CRingBuffer m_buffer; bool writePoll(const in_addr& address, unsigned int port); }; diff --git a/YSFParrot/RingBuffer.h b/YSFParrot/RingBuffer.h deleted file mode 100644 index f93e7a2..0000000 --- a/YSFParrot/RingBuffer.h +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Copyright (C) 2006-2009,2012,2013,2015,2016,2018 by Jonathan Naylor G4KLX - * - * 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 - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef RingBuffer_H -#define RingBuffer_H - -#include -#include -#include - -template class CRingBuffer { -public: - CRingBuffer(unsigned int length, const char* name) : - m_length(length), - m_name(name), - m_buffer(NULL), - m_iPtr(0U), - m_oPtr(0U) - { - assert(length > 0U); - assert(name != NULL); - - m_buffer = new T[length]; - - ::memset(m_buffer, 0x00, m_length * sizeof(T)); - } - - ~CRingBuffer() - { - delete[] m_buffer; - } - - bool addData(const T* buffer, unsigned int nSamples) - { - if (nSamples >= freeSpace()) { - ::fprintf(stderr, "**** Overflow in %s ring buffer, %u >= %u\n", m_name, nSamples, freeSpace()); - return false; - } - - for (unsigned int i = 0U; i < nSamples; i++) { - m_buffer[m_iPtr++] = buffer[i]; - - if (m_iPtr == m_length) - m_iPtr = 0U; - } - - return true; - } - - bool getData(T* buffer, unsigned int nSamples) - { - if (dataSize() < nSamples) { - ::fprintf(stderr, "**** Underflow in %s ring buffer, %u < %u\n", m_name, dataSize(), nSamples); - return false; - } - - for (unsigned int i = 0U; i < nSamples; i++) { - buffer[i] = m_buffer[m_oPtr++]; - - if (m_oPtr == m_length) - m_oPtr = 0U; - } - - return true; - } - - bool peek(T* buffer, unsigned int nSamples) - { - if (dataSize() < nSamples) { - ::fprintf(stderr, "**** Underflow peek in %s ring buffer, %u < %u\n", m_name, dataSize(), nSamples); - return false; - } - - unsigned int ptr = m_oPtr; - for (unsigned int i = 0U; i < nSamples; i++) { - buffer[i] = m_buffer[ptr++]; - - if (ptr == m_length) - ptr = 0U; - } - - return true; - } - - void clear() - { - m_iPtr = 0U; - m_oPtr = 0U; - - ::memset(m_buffer, 0x00, m_length * sizeof(T)); - } - - unsigned int freeSpace() const - { - if (m_oPtr == m_iPtr) - return m_length; - - if (m_oPtr > m_iPtr) - return m_oPtr - m_iPtr; - - return (m_length + m_oPtr) - m_iPtr; - } - - unsigned int dataSize() const - { - return m_length - freeSpace(); - } - - bool hasSpace(unsigned int length) const - { - return freeSpace() > length; - } - - bool hasData() const - { - return m_oPtr != m_iPtr; - } - - bool isEmpty() const - { - return m_oPtr == m_iPtr; - } - -private: - unsigned int m_length; - const char* m_name; - T* m_buffer; - unsigned int m_iPtr; - unsigned int m_oPtr; -}; - -#endif diff --git a/YSFParrot/YSFParrot.cpp b/YSFParrot/YSFParrot.cpp index 437e06f..5c0a8bc 100644 --- a/YSFParrot/YSFParrot.cpp +++ b/YSFParrot/YSFParrot.cpp @@ -119,7 +119,6 @@ void CYSFParrot::run() unsigned int ms = stopWatch.elapsed(); stopWatch.start(); - network.clock(ms); watchdogTimer.clock(ms); turnaroundTimer.clock(ms); diff --git a/YSFParrot/YSFParrot.vcxproj b/YSFParrot/YSFParrot.vcxproj index 885e461..9f1bd2c 100644 --- a/YSFParrot/YSFParrot.vcxproj +++ b/YSFParrot/YSFParrot.vcxproj @@ -150,7 +150,6 @@ - diff --git a/YSFParrot/YSFParrot.vcxproj.filters b/YSFParrot/YSFParrot.vcxproj.filters index ffb1f1a..2fa57db 100644 --- a/YSFParrot/YSFParrot.vcxproj.filters +++ b/YSFParrot/YSFParrot.vcxproj.filters @@ -17,9 +17,6 @@ Header Files - - Header Files - Header Files