From 30bd83dab28d6b3df6b453a72e77ca09b91f78b8 Mon Sep 17 00:00:00 2001 From: Andy CA6JAU Date: Sat, 26 Aug 2017 18:55:37 -0300 Subject: [PATCH] Optimizing ZUMspot debug messages --- ADF7021.cpp | 46 +++++++++++++++++++++++++++++----------------- Debug.h | 1 + Globals.h | 1 + IO.h | 1 + SerialPort.cpp | 41 +++++++++++++++++++++++++++-------------- SerialPort.h | 3 +-- Utils.cpp | 25 +++++++++++++++++++++++++ Utils.h | 2 ++ 8 files changed, 87 insertions(+), 33 deletions(-) diff --git a/ADF7021.cpp b/ADF7021.cpp index 68dea79..8bb65fe 100644 --- a/ADF7021.cpp +++ b/ADF7021.cpp @@ -41,7 +41,7 @@ uint32_t ADF7021_RX_REG0; uint32_t ADF7021_TX_REG0; uint32_t ADF7021_REG1; uint32_t div2; -float f_div; +uint32_t f_div; static void Send_AD7021_control_shift() { @@ -213,9 +213,9 @@ void CIO::ifConf(MMDVM_STATE modemState, bool reset) } if(div2 == 1U) - f_div = 2.0; + f_div = 2U; else - f_div = 1.0; + f_div = 1U; switch (modemState) { case STATE_DSTAR: @@ -801,39 +801,51 @@ void CIO::setRX(bool doSle) } } -uint32_t CIO::RXfreq(void) +uint32_t CIO::RXfreq() { - return (uint32_t)((ADF7021_PFD / f_div) * ((float)m_RX_N_divider + (((float)m_RX_F_divider) / 32768.0)) + 100000.0); + return (uint32_t)((float)(ADF7021_PFD / f_div) * ((float)((32768 * m_RX_N_divider) + m_RX_F_divider) / 32768.0)) + 100000; } -uint32_t CIO::TXfreq(void) +uint32_t CIO::TXfreq() { - return (uint32_t)((ADF7021_PFD / f_div) * ((float)m_TX_N_divider + (((float)m_TX_F_divider) / 32768.0))); + return (uint32_t)((float)(ADF7021_PFD / f_div) * ((float)((32768 * m_TX_N_divider) + m_TX_F_divider) / 32768.0)); } -uint16_t CIO::devDSTAR(void) +uint16_t CIO::devDSTAR() { - return (uint16_t)(ADF7021_PFD * (((float)ADF7021_DEV_DSTAR) / f_div) / 65536.0); + return (uint16_t)((ADF7021_PFD * ADF7021_DEV_DSTAR) / (f_div * 65536)); } -uint16_t CIO::devDMR(void) +uint16_t CIO::devDMR() { - return (uint16_t)(ADF7021_PFD * (((float)ADF7021_DEV_DMR) / f_div) / 65536.0); + return (uint16_t)((ADF7021_PFD * ADF7021_DEV_DMR) / (f_div * 65536)); } -uint16_t CIO::devYSF_H(void) +uint16_t CIO::devYSF_H() { - return (uint16_t)(ADF7021_PFD * (((float)ADF7021_DEV_YSF_H) / f_div) / 65536.0); + return (uint16_t)((ADF7021_PFD * ADF7021_DEV_YSF_H) / (f_div * 65536)); } -uint16_t CIO::devYSF_L(void) +uint16_t CIO::devYSF_L() { - return (uint16_t)(ADF7021_PFD * (((float)ADF7021_DEV_YSF_L) / f_div) / 65536.0); + return (uint16_t)((ADF7021_PFD * ADF7021_DEV_YSF_L) / (f_div * 65536)); } -uint16_t CIO::devP25(void) +uint16_t CIO::devP25() { - return (uint16_t)(ADF7021_PFD * (((float)ADF7021_DEV_P25) / f_div) / 65536.0); + return (uint16_t)((ADF7021_PFD * ADF7021_DEV_P25) / (f_div * 65536)); +} + +void CIO::printConf() +{ + DEBUG1("ZUMspot configuration:"); + DEBUG2I("TX freq (Hz):", TXfreq()); + DEBUG2I("RX freq (Hz):", RXfreq()); + DEBUG2("D-Star dev (Hz):", devDSTAR()); + DEBUG2("DMR +1 sym dev (Hz):", devDMR()); + DEBUG2("YSF_H +1 sym dev (Hz):", devYSF_H()); + DEBUG2("YSF_L +1 sym dev (Hz):", devYSF_L()); + DEBUG2("P25 +1 sym dev (Hz):", devP25()); } #endif diff --git a/Debug.h b/Debug.h index 80ba786..144637d 100644 --- a/Debug.h +++ b/Debug.h @@ -23,6 +23,7 @@ #define DEBUG1(a) serial.writeDebug((a)) #define DEBUG2(a,b) serial.writeDebug((a),(b)) +#define DEBUG2I(a,b) serial.writeDebugI((a),(b)) #define DEBUG3(a,b,c) serial.writeDebug((a),(b),(c)) #define DEBUG4(a,b,c,d) serial.writeDebug((a),(b),(c),(d)) #define DEBUG5(a,b,c,d,e) serial.writeDebug((a),(b),(c),(d),(e)) diff --git a/Globals.h b/Globals.h index baec6dc..71de1ce 100644 --- a/Globals.h +++ b/Globals.h @@ -60,6 +60,7 @@ const uint8_t MARK_NONE = 0x00U; #include "P25RX.h" #include "P25TX.h" #include "Debug.h" +#include "Utils.h" const uint16_t TX_RINGBUFFER_SIZE = 512U; const uint16_t RX_RINGBUFFER_SIZE = 512U; diff --git a/IO.h b/IO.h index fc65deb..8eda84d 100644 --- a/IO.h +++ b/IO.h @@ -125,6 +125,7 @@ public: uint16_t devYSF_H(void); uint16_t devYSF_L(void); uint16_t devP25(void); + void printConf(); private: uint8_t m_RX_N_divider; diff --git a/SerialPort.cpp b/SerialPort.cpp index 715d4a2..3c58e14 100644 --- a/SerialPort.cpp +++ b/SerialPort.cpp @@ -280,7 +280,7 @@ uint8_t CSerialPort::setConfig(const uint8_t* data, uint8_t length) io.ifConf(STATE_P25, true); io.start(); - printConf(); + io.printConf(); return 0U; } @@ -904,6 +904,32 @@ void CSerialPort::writeDebug(const char* text) writeInt(1U, reply, count, true); } +void CSerialPort::writeDebugI(const char* text, int32_t n1) +{ + if (!m_debug) + return; + + uint8_t reply[130U]; + + reply[0U] = MMDVM_FRAME_START; + reply[1U] = 0U; + reply[2U] = MMDVM_DEBUG1; + + uint8_t count = 3U; + for (uint8_t i = 0U; text[i] != '\0'; i++, count++) + reply[count] = text[i]; + + reply[count++] = ' '; + + i2str(&reply[count], 130U - count, n1); + + count += 9U; + + reply[1U] = count; + + writeInt(1U, reply, count, true); +} + void CSerialPort::writeDebug(const char* text, int16_t n1) { if (!m_debug) @@ -1013,16 +1039,3 @@ void CSerialPort::writeDebug(const char* text, int16_t n1, int16_t n2, int16_t n writeInt(1U, reply, count, true); } - -void CSerialPort::printConf() -{ - char buff[60]; - - writeDebug("ZUMspot configuration:"); - writeDebug(buff); - writeDebug("D-Star dev (Hz):", io.devDSTAR()); - writeDebug("DMR +1 sym dev (Hz):", io.devDMR()); - writeDebug("YSF_H +1 sym dev (Hz):", io.devYSF_H()); - writeDebug("YSF_L +1 sym dev (Hz):", io.devYSF_L()); - writeDebug("P25 +1 sym dev (Hz):", io.devP25()); -} diff --git a/SerialPort.h b/SerialPort.h index 1086391..e771591 100644 --- a/SerialPort.h +++ b/SerialPort.h @@ -46,12 +46,11 @@ public: void writeDebug(const char* text); void writeDebug(const char* text, int16_t n1); + void writeDebugI(const char* text, int32_t n1); void writeDebug(const char* text, int16_t n1, int16_t n2); void writeDebug(const char* text, int16_t n1, int16_t n2, int16_t n3); void writeDebug(const char* text, int16_t n1, int16_t n2, int16_t n3, int16_t n4); - void printConf(); - private: uint8_t m_buffer[256U]; uint8_t m_ptr; diff --git a/Utils.cpp b/Utils.cpp index 6a380f4..985caf4 100644 --- a/Utils.cpp +++ b/Utils.cpp @@ -56,4 +56,29 @@ uint8_t countBits64(uint64_t bits) return n; } +// Simple functions to convert from int to string +// Example from: https://stackoverflow.com/questions/8257714/how-to-convert-an-int-to-string-in-c +static uint8_t *i2str_helper(uint8_t *dest, size_t n, int32_t x) { + if (n == 0) { + return NULL; + } + if (x <= -10) { + dest = i2str_helper(dest, n - 1, x / 10); + if (dest == NULL) return NULL; + } + *dest = (uint8_t) ('0' - x % 10); + return dest + 1; +} +uint8_t *i2str(uint8_t *dest, size_t n, int32_t x) { + uint8_t *p = dest; + if (n == 0) { + return NULL; + } + n--; + x = -x; + p = i2str_helper(p, n, x); + if (p == NULL) return NULL; + *p = 0; + return dest; +} diff --git a/Utils.h b/Utils.h index e9098c9..01fd85a 100644 --- a/Utils.h +++ b/Utils.h @@ -32,5 +32,7 @@ uint8_t countBits32(uint32_t bits); uint8_t countBits64(uint64_t bits); +uint8_t *i2str(uint8_t *dest, size_t n, int32_t x); + #endif