From 5e3c4c91bbe9de81403a49d732464de185a5b79d Mon Sep 17 00:00:00 2001 From: phl0 Date: Tue, 22 Jan 2019 22:21:40 +0100 Subject: [PATCH 01/20] Add basics for a POCSAG Cal mode --- CalPOCSAG.cpp | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++ CalPOCSAG.h | 44 ++++++++++++++++++++++++++++++++++ Globals.h | 5 +++- MMDVM.cpp | 4 ++++ MMDVM.ino | 4 ++++ 5 files changed, 122 insertions(+), 1 deletion(-) create mode 100644 CalPOCSAG.cpp create mode 100644 CalPOCSAG.h diff --git a/CalPOCSAG.cpp b/CalPOCSAG.cpp new file mode 100644 index 0000000..a449232 --- /dev/null +++ b/CalPOCSAG.cpp @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2018 by Florian Wolters DF2ET + * + * 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. + */ + +#include "Config.h" +#include "Globals.h" +#include "CalPOCSAG.h" + +// POCSAG 600 Hz Test Pattern + +CCalPOCSAG::CCalPOCSAG() : +m_transmit(false), +m_state(POCSAGCAL_IDLE), +m_audioSeq(0U) +{ +} + +void CCalPOCSAG::process() +{ + pocsagTX.process(); + + uint16_t space = pocsagTX.getSpace(); + if (space < 1U) + return; + + switch (m_state) { + case POCSAGCAL_TX: + //pocsagTX.writeData(POCSAG_CAL[m_audioSeq], POCSAG_FRAME_LENGTH_BYTES + 1U); + m_audioSeq = (m_audioSeq + 1U) % 4U; + if(!m_transmit) + m_state = POCSAGCAL_IDLE; + break; + default: + m_state = POCSAGCAL_IDLE; + m_audioSeq = 0U; + break; + } +} + +uint8_t CCalPOCSAG::write(const uint8_t* data, uint8_t length) +{ + if (length != 1U) + return 4U; + + m_transmit = data[0U] == 1U; + + if(m_transmit && m_state == POCSAGCAL_IDLE) + m_state = POCSAGCAL_TX; + + return 0U; +} + diff --git a/CalPOCSAG.h b/CalPOCSAG.h new file mode 100644 index 0000000..7d4abab --- /dev/null +++ b/CalPOCSAG.h @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2019 by Florian Wolters DF2ET + * + * 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. + */ + +#if !defined(CALPOCSAG_H) +#define CALPOCSAG_H + +#include "Config.h" + +enum POCSAGCAL { + POCSAGCAL_IDLE, + POCSAGCAL_TX +}; + +class CCalPOCSAG { +public: + CCalPOCSAG(); + + void process(); + + uint8_t write(const uint8_t* data, uint8_t length); + +private: + bool m_transmit; + POCSAGCAL m_state; + uint8_t m_audioSeq; +}; + +#endif + diff --git a/Globals.h b/Globals.h index c082d60..b52074f 100644 --- a/Globals.h +++ b/Globals.h @@ -60,7 +60,9 @@ enum MMDVM_STATE { STATE_RSSICAL = 96, STATE_CWID = 97, STATE_DMRCAL = 98, - STATE_DSTARCAL = 99 + STATE_DSTARCAL = 99, + STATE_INTCAL = 100, + STATE_POCSAGCAL = 101 }; #include "SerialPort.h" @@ -83,6 +85,7 @@ enum MMDVM_STATE { #include "CalDMR.h" #include "CalP25.h" #include "CalNXDN.h" +#include "CalPOCSAG.h" #include "CalRSSI.h" #include "CWIdTX.h" #include "Debug.h" diff --git a/MMDVM.cpp b/MMDVM.cpp index 6fd894c..306cdcd 100644 --- a/MMDVM.cpp +++ b/MMDVM.cpp @@ -64,6 +64,7 @@ CCalDStarTX calDStarTX; CCalDMR calDMR; CCalP25 calP25; CCalNXDN calNXDN; +CCalPOCSAG calPOCSAG; CCalRSSI calRSSI; CCWIdTX cwIdTX; @@ -117,6 +118,9 @@ void loop() if (m_modemState == STATE_NXDNCAL1K) calNXDN.process(); + if (m_modemState == STATE_POCSAGCAL) + calPOCSAG.process(); + if (m_modemState == STATE_IDLE) cwIdTX.process(); } diff --git a/MMDVM.ino b/MMDVM.ino index ff392e1..dcb1fcf 100644 --- a/MMDVM.ino +++ b/MMDVM.ino @@ -61,6 +61,7 @@ CCalDStarTX calDStarTX; CCalDMR calDMR; CCalP25 calP25; CCalNXDN calNXDN; +CCalPOCSAG calPOCSAG; CCalRSSI calRSSI; CCWIdTX cwIdTX; @@ -114,6 +115,9 @@ void loop() if (m_modemState == STATE_NXDNCAL1K) calNXDN.process(); + if (m_modemState == STATE_POCSAGCAL) + calPOCSAG.process(); + if (m_modemState == STATE_IDLE) cwIdTX.process(); } From 580ba0b536a2b6aede5c2fd4afa161b34355de8e Mon Sep 17 00:00:00 2001 From: phl0 Date: Wed, 23 Jan 2019 14:58:01 +0100 Subject: [PATCH 02/20] Add synthetic 600Hz sine wave and some more POCSAGCal states --- CalPOCSAG.cpp | 6 ++++++ Globals.h | 1 + SerialPort.cpp | 4 ++-- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CalPOCSAG.cpp b/CalPOCSAG.cpp index a449232..9472bdd 100644 --- a/CalPOCSAG.cpp +++ b/CalPOCSAG.cpp @@ -21,6 +21,12 @@ #include "CalPOCSAG.h" // POCSAG 600 Hz Test Pattern +const q15_t sine600Hz[] = { + 0, 5125, 10125, 14875, 19259, 23169, 26509, 29195, 31163, 32363, + 32767, 32363, 31163, 29195, 26509, 23169, 19259, 14875, 10125, 5125, + 0, -5126, -10126, -14876, -19260, -23170, -26510, -29196, -31164, -32364, + -32767, -32364, -31164, -29196, -26510, -23170, -19260, -14876, -10126, -5126, + }; CCalPOCSAG::CCalPOCSAG() : m_transmit(false), diff --git a/Globals.h b/Globals.h index b52074f..149cb25 100644 --- a/Globals.h +++ b/Globals.h @@ -149,6 +149,7 @@ extern CCalDStarTX calDStarTX; extern CCalDMR calDMR; extern CCalP25 calP25; extern CCalNXDN calNXDN; +extern CCalPOCSAG calPOCSAG; extern CCalRSSI calRSSI; extern CCWIdTX cwIdTX; diff --git a/SerialPort.cpp b/SerialPort.cpp index f12e6bb..1cc0e45 100644 --- a/SerialPort.cpp +++ b/SerialPort.cpp @@ -280,7 +280,7 @@ uint8_t CSerialPort::setConfig(const uint8_t* data, uint8_t length) MMDVM_STATE modemState = MMDVM_STATE(data[3U]); - if (modemState != STATE_IDLE && modemState != STATE_DSTAR && modemState != STATE_DMR && modemState != STATE_YSF && modemState != STATE_P25 && modemState != STATE_NXDN && modemState != STATE_POCSAG && modemState != STATE_DSTARCAL && modemState != STATE_DMRCAL && modemState != STATE_RSSICAL && modemState != STATE_LFCAL && modemState != STATE_DMRCAL1K && modemState != STATE_P25CAL1K && modemState != STATE_DMRDMO1K && modemState != STATE_NXDNCAL1K) + if (modemState != STATE_IDLE && modemState != STATE_DSTAR && modemState != STATE_DMR && modemState != STATE_YSF && modemState != STATE_P25 && modemState != STATE_NXDN && modemState != STATE_POCSAG && modemState != STATE_DSTARCAL && modemState != STATE_DMRCAL && modemState != STATE_RSSICAL && modemState != STATE_LFCAL && modemState != STATE_DMRCAL1K && modemState != STATE_P25CAL1K && modemState != STATE_DMRDMO1K && modemState != STATE_NXDNCAL1K && modemState != STATE_POCSAGCAL) return 4U; if (modemState == STATE_DSTAR && !dstarEnable) return 4U; @@ -360,7 +360,7 @@ uint8_t CSerialPort::setMode(const uint8_t* data, uint8_t length) if (modemState == m_modemState) return 0U; - if (modemState != STATE_IDLE && modemState != STATE_DSTAR && modemState != STATE_DMR && modemState != STATE_YSF && modemState != STATE_P25 && modemState != STATE_NXDN && modemState != STATE_POCSAG && modemState != STATE_DSTARCAL && modemState != STATE_DMRCAL && modemState != STATE_RSSICAL && modemState != STATE_LFCAL && modemState != STATE_DMRCAL1K && modemState != STATE_P25CAL1K && modemState != STATE_DMRDMO1K && modemState != STATE_NXDNCAL1K) + if (modemState != STATE_IDLE && modemState != STATE_DSTAR && modemState != STATE_DMR && modemState != STATE_YSF && modemState != STATE_P25 && modemState != STATE_NXDN && modemState != STATE_POCSAG && modemState != STATE_DSTARCAL && modemState != STATE_DMRCAL && modemState != STATE_RSSICAL && modemState != STATE_LFCAL && modemState != STATE_DMRCAL1K && modemState != STATE_P25CAL1K && modemState != STATE_DMRDMO1K && modemState != STATE_NXDNCAL1K && modemState != STATE_POCSAGCAL) return 4U; if (modemState == STATE_DSTAR && !m_dstarEnable) return 4U; From 461182bf605bdfe53ecbf0623b027ee450489760 Mon Sep 17 00:00:00 2001 From: phl0 Date: Wed, 23 Jan 2019 16:23:45 +0100 Subject: [PATCH 03/20] 1st attempt to send 600Hz sine wave --- CalPOCSAG.cpp | 4 ++-- SerialPort.cpp | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CalPOCSAG.cpp b/CalPOCSAG.cpp index 9472bdd..4232cc1 100644 --- a/CalPOCSAG.cpp +++ b/CalPOCSAG.cpp @@ -45,8 +45,8 @@ void CCalPOCSAG::process() switch (m_state) { case POCSAGCAL_TX: - //pocsagTX.writeData(POCSAG_CAL[m_audioSeq], POCSAG_FRAME_LENGTH_BYTES + 1U); - m_audioSeq = (m_audioSeq + 1U) % 4U; + pocsagTX.writeData((uint8_t) &sine600Hz[m_audioSeq], 40U); + m_audioSeq++; if(!m_transmit) m_state = POCSAGCAL_IDLE; break; diff --git a/SerialPort.cpp b/SerialPort.cpp index 1cc0e45..35a35de 100644 --- a/SerialPort.cpp +++ b/SerialPort.cpp @@ -617,6 +617,8 @@ void CSerialPort::process() err = calP25.write(m_buffer + 3U, m_len - 3U); if (m_modemState == STATE_NXDNCAL1K) err = calNXDN.write(m_buffer + 3U, m_len - 3U); + if (m_modemState == STATE_POCSAGCAL) + err = calPOCSAG.write(m_buffer + 3U, m_len - 3U); if (err == 0U) { sendACK(); } else { From 5456f403a1ee1a166a24e38a7c6fcf828cb70320 Mon Sep 17 00:00:00 2001 From: phl0 Date: Wed, 30 Jan 2019 09:25:33 +0100 Subject: [PATCH 04/20] Add changes by G4KLX --- CalPOCSAG.cpp | 42 +++++++++++++++++++++++------------------- CalPOCSAG.h | 2 -- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/CalPOCSAG.cpp b/CalPOCSAG.cpp index 4232cc1..55feb9d 100644 --- a/CalPOCSAG.cpp +++ b/CalPOCSAG.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018 by Florian Wolters DF2ET + * Copyright (C) 2019 by Florian Wolters DF2ET * * 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 @@ -29,7 +29,6 @@ const q15_t sine600Hz[] = { }; CCalPOCSAG::CCalPOCSAG() : -m_transmit(false), m_state(POCSAGCAL_IDLE), m_audioSeq(0U) { @@ -37,24 +36,26 @@ m_audioSeq(0U) void CCalPOCSAG::process() { - pocsagTX.process(); - - uint16_t space = pocsagTX.getSpace(); - if (space < 1U) + if (m_state == POCSAGCAL_IDLE) return; - switch (m_state) { - case POCSAGCAL_TX: - pocsagTX.writeData((uint8_t) &sine600Hz[m_audioSeq], 40U); - m_audioSeq++; - if(!m_transmit) - m_state = POCSAGCAL_IDLE; - break; - default: - m_state = POCSAGCAL_IDLE; + uint16_t space = io.getSpace(); + if (space == 0U) + return; + + q15_t samples[200U]; + unt16_t length = 0U; + + if (space > 200U) + space = 200U; + + for (uint16_t i = 0U; i < space; i++, length++) + samples[i] = sine600Hz[m_audioSeq++]; + if (m_audioSeq >= 40U) m_audioSeq = 0U; - break; } + + io.write(MODE_POCSAG, samples, length); } uint8_t CCalPOCSAG::write(const uint8_t* data, uint8_t length) @@ -62,11 +63,14 @@ uint8_t CCalPOCSAG::write(const uint8_t* data, uint8_t length) if (length != 1U) return 4U; - m_transmit = data[0U] == 1U; + bool on = data[0U] == 1U; - if(m_transmit && m_state == POCSAGCAL_IDLE) + if (on && m_state == POCSAGCAL_IDLE) { m_state = POCSAGCAL_TX; + m_audioSeq = 0U; + } else if (!on && m_state == POCSAGCAL_TX) { + m_state = POCSAGCAL_IDLE; + } return 0U; } - diff --git a/CalPOCSAG.h b/CalPOCSAG.h index 7d4abab..2e60a72 100644 --- a/CalPOCSAG.h +++ b/CalPOCSAG.h @@ -35,10 +35,8 @@ public: uint8_t write(const uint8_t* data, uint8_t length); private: - bool m_transmit; POCSAGCAL m_state; uint8_t m_audioSeq; }; #endif - From 0a634b1223ac4545a50caf0c242e853fab2e15c4 Mon Sep 17 00:00:00 2001 From: phl0 Date: Wed, 30 Jan 2019 09:40:09 +0100 Subject: [PATCH 05/20] Fix some minor bugs :) --- CalPOCSAG.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CalPOCSAG.cpp b/CalPOCSAG.cpp index 55feb9d..0bd753d 100644 --- a/CalPOCSAG.cpp +++ b/CalPOCSAG.cpp @@ -44,18 +44,18 @@ void CCalPOCSAG::process() return; q15_t samples[200U]; - unt16_t length = 0U; + uint16_t length = 0U; if (space > 200U) space = 200U; - for (uint16_t i = 0U; i < space; i++, length++) + for (uint16_t i = 0U; i < space; i++, length++) { samples[i] = sine600Hz[m_audioSeq++]; if (m_audioSeq >= 40U) m_audioSeq = 0U; } - io.write(MODE_POCSAG, samples, length); + io.write(STATE_POCSAG, samples, length); } uint8_t CCalPOCSAG::write(const uint8_t* data, uint8_t length) From 000da1889f6e43dbadd7110693a6156338a1ca73 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Wed, 30 Jan 2019 11:18:16 +0000 Subject: [PATCH 06/20] Simplify the POCSAG calibration code. --- CalPOCSAG.cpp | 32 ++++++++------------------------ CalPOCSAG.h | 1 - 2 files changed, 8 insertions(+), 25 deletions(-) diff --git a/CalPOCSAG.cpp b/CalPOCSAG.cpp index 0bd753d..0234a50 100644 --- a/CalPOCSAG.cpp +++ b/CalPOCSAG.cpp @@ -29,8 +29,7 @@ const q15_t sine600Hz[] = { }; CCalPOCSAG::CCalPOCSAG() : -m_state(POCSAGCAL_IDLE), -m_audioSeq(0U) +m_state(POCSAGCAL_IDLE) { } @@ -40,22 +39,14 @@ void CCalPOCSAG::process() return; uint16_t space = io.getSpace(); - if (space == 0U) + if (space <= 205U) return; - q15_t samples[200U]; - uint16_t length = 0U; - - if (space > 200U) - space = 200U; - - for (uint16_t i = 0U; i < space; i++, length++) { - samples[i] = sine600Hz[m_audioSeq++]; - if (m_audioSeq >= 40U) - m_audioSeq = 0U; - } - - io.write(STATE_POCSAG, samples, length); + io.write(STATE_POCSAG, sine600Hz, 40U); + io.write(STATE_POCSAG, sine600Hz, 40U); + io.write(STATE_POCSAG, sine600Hz, 40U); + io.write(STATE_POCSAG, sine600Hz, 40U); + io.write(STATE_POCSAG, sine600Hz, 40U); } uint8_t CCalPOCSAG::write(const uint8_t* data, uint8_t length) @@ -63,14 +54,7 @@ uint8_t CCalPOCSAG::write(const uint8_t* data, uint8_t length) if (length != 1U) return 4U; - bool on = data[0U] == 1U; - - if (on && m_state == POCSAGCAL_IDLE) { - m_state = POCSAGCAL_TX; - m_audioSeq = 0U; - } else if (!on && m_state == POCSAGCAL_TX) { - m_state = POCSAGCAL_IDLE; - } + m_state = data[0U] == 1U ? POCSAGCAL_TX : POCSAGCAL_IDLE; return 0U; } diff --git a/CalPOCSAG.h b/CalPOCSAG.h index 2e60a72..291e360 100644 --- a/CalPOCSAG.h +++ b/CalPOCSAG.h @@ -36,7 +36,6 @@ public: private: POCSAGCAL m_state; - uint8_t m_audioSeq; }; #endif From 98fffb9b77125349a8728ae10e7b29f9b00665fd Mon Sep 17 00:00:00 2001 From: phl0 Date: Wed, 30 Jan 2019 13:02:55 +0100 Subject: [PATCH 07/20] Fix const compiler issue --- CalPOCSAG.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CalPOCSAG.cpp b/CalPOCSAG.cpp index 0234a50..d3d4ace 100644 --- a/CalPOCSAG.cpp +++ b/CalPOCSAG.cpp @@ -21,7 +21,7 @@ #include "CalPOCSAG.h" // POCSAG 600 Hz Test Pattern -const q15_t sine600Hz[] = { +q15_t sine600Hz[] = { 0, 5125, 10125, 14875, 19259, 23169, 26509, 29195, 31163, 32363, 32767, 32363, 31163, 29195, 26509, 23169, 19259, 14875, 10125, 5125, 0, -5126, -10126, -14876, -19260, -23170, -26510, -29196, -31164, -32364, From 6b00f7d27a0096c49318ae362981f1e049fcbf39 Mon Sep 17 00:00:00 2001 From: phl0 Date: Wed, 30 Jan 2019 14:42:17 +0100 Subject: [PATCH 08/20] Change to square wave and align amplitude --- CalPOCSAG.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/CalPOCSAG.cpp b/CalPOCSAG.cpp index d3d4ace..1e8ce32 100644 --- a/CalPOCSAG.cpp +++ b/CalPOCSAG.cpp @@ -21,11 +21,11 @@ #include "CalPOCSAG.h" // POCSAG 600 Hz Test Pattern -q15_t sine600Hz[] = { - 0, 5125, 10125, 14875, 19259, 23169, 26509, 29195, 31163, 32363, - 32767, 32363, 31163, 29195, 26509, 23169, 19259, 14875, 10125, 5125, - 0, -5126, -10126, -14876, -19260, -23170, -26510, -29196, -31164, -32364, - -32767, -32364, -31164, -29196, -26510, -23170, -19260, -14876, -10126, -5126, +q15_t squreHz[] = { + 950, 950, 950, 950, 950, 950, 950, 950, 950, + 950, 950, 950, 950, 950, 950, 950, 950, 950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, }; CCalPOCSAG::CCalPOCSAG() : @@ -42,11 +42,11 @@ void CCalPOCSAG::process() if (space <= 205U) return; - io.write(STATE_POCSAG, sine600Hz, 40U); - io.write(STATE_POCSAG, sine600Hz, 40U); - io.write(STATE_POCSAG, sine600Hz, 40U); - io.write(STATE_POCSAG, sine600Hz, 40U); - io.write(STATE_POCSAG, sine600Hz, 40U); + io.write(STATE_POCSAG, squreHz, 40U); + io.write(STATE_POCSAG, squreHz, 40U); + io.write(STATE_POCSAG, squreHz, 40U); + io.write(STATE_POCSAG, squreHz, 40U); + io.write(STATE_POCSAG, squreHz, 40U); } uint8_t CCalPOCSAG::write(const uint8_t* data, uint8_t length) From 9987140790a93dfa8463021031d3e33c3a2ec28f Mon Sep 17 00:00:00 2001 From: phl0 Date: Wed, 30 Jan 2019 14:49:21 +0100 Subject: [PATCH 09/20] Fix damn typo --- CalPOCSAG.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/CalPOCSAG.cpp b/CalPOCSAG.cpp index 1e8ce32..2629d41 100644 --- a/CalPOCSAG.cpp +++ b/CalPOCSAG.cpp @@ -20,8 +20,8 @@ #include "Globals.h" #include "CalPOCSAG.h" -// POCSAG 600 Hz Test Pattern -q15_t squreHz[] = { +// POCSAG 600 Hz Square Wave Test Pattern +q15_t square600Hz[] = { 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, -950, -950, -950, -950, -950, -950, -950, -950, -950, @@ -42,11 +42,11 @@ void CCalPOCSAG::process() if (space <= 205U) return; - io.write(STATE_POCSAG, squreHz, 40U); - io.write(STATE_POCSAG, squreHz, 40U); - io.write(STATE_POCSAG, squreHz, 40U); - io.write(STATE_POCSAG, squreHz, 40U); - io.write(STATE_POCSAG, squreHz, 40U); + io.write(STATE_POCSAG, square600Hz, 40U); + io.write(STATE_POCSAG, square600Hz, 40U); + io.write(STATE_POCSAG, square600Hz, 40U); + io.write(STATE_POCSAG, square600Hz, 40U); + io.write(STATE_POCSAG, square600Hz, 40U); } uint8_t CCalPOCSAG::write(const uint8_t* data, uint8_t length) From 03716daca0279bd908a2c74e7643a56e1e7d9b36 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Wed, 30 Jan 2019 13:51:05 +0000 Subject: [PATCH 10/20] Bump the version date. --- SerialPort.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SerialPort.cpp b/SerialPort.cpp index 35a35de..19301d7 100644 --- a/SerialPort.cpp +++ b/SerialPort.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013,2015,2016,2017,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2013,2015-2019 by Jonathan Naylor G4KLX * Copyright (C) 2016 by Colin Durbridge G4EML * * This program is free software; you can redistribute it and/or modify @@ -97,7 +97,7 @@ const uint8_t MMDVM_DEBUG5 = 0xF5U; #define HW_TYPE "MMDVM" #endif -#define DESCRIPTION "20180723 (D-Star/DMR/System Fusion/P25/NXDN/POCSAG)" +#define DESCRIPTION "20190130 (D-Star/DMR/System Fusion/P25/NXDN/POCSAG)" #if defined(GITVERSION) #define concat(h, a, b, c) h " " a " " b " GitID #" c "" From 73d3bd5778ce408891d46adfbfdc2a7b37efe454 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Wed, 30 Jan 2019 14:31:15 +0000 Subject: [PATCH 11/20] Do the POCSAG calibration in a different way. --- CalPOCSAG.cpp | 15 ++------------- POCSAGTX.h | 6 +++--- 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/CalPOCSAG.cpp b/CalPOCSAG.cpp index 1e8ce32..bf88a51 100644 --- a/CalPOCSAG.cpp +++ b/CalPOCSAG.cpp @@ -20,13 +20,6 @@ #include "Globals.h" #include "CalPOCSAG.h" -// POCSAG 600 Hz Test Pattern -q15_t squreHz[] = { - 950, 950, 950, 950, 950, 950, 950, 950, 950, - 950, 950, 950, 950, 950, 950, 950, 950, 950, - -950, -950, -950, -950, -950, -950, -950, -950, -950, - -950, -950, -950, -950, -950, -950, -950, -950, -950, - }; CCalPOCSAG::CCalPOCSAG() : m_state(POCSAGCAL_IDLE) @@ -39,14 +32,10 @@ void CCalPOCSAG::process() return; uint16_t space = io.getSpace(); - if (space <= 205U) + if (space <= 165U) return; - io.write(STATE_POCSAG, squreHz, 40U); - io.write(STATE_POCSAG, squreHz, 40U); - io.write(STATE_POCSAG, squreHz, 40U); - io.write(STATE_POCSAG, squreHz, 40U); - io.write(STATE_POCSAG, squreHz, 40U); + pocsagTX.writeByte(0xAAU); } uint8_t CCalPOCSAG::write(const uint8_t* data, uint8_t length) diff --git a/POCSAGTX.h b/POCSAGTX.h index 8cd75f7..d640862 100644 --- a/POCSAGTX.h +++ b/POCSAGTX.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2017,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2015-2019 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 @@ -29,6 +29,8 @@ public: uint8_t writeData(const uint8_t* data, uint8_t length); + void writeByte(uint8_t c); + void process(); void setTXDelay(uint8_t delay); @@ -45,8 +47,6 @@ private: uint16_t m_poLen; uint16_t m_poPtr; uint16_t m_txDelay; - - void writeByte(uint8_t c); }; #endif From ff7a9fdd4e234caa2f621a32f05c7c7a687c5d73 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Fri, 1 Mar 2019 08:00:20 +0000 Subject: [PATCH 12/20] Simplify the state change. --- SerialPort.cpp | 131 +++++++++---------------------------------------- 1 file changed, 24 insertions(+), 107 deletions(-) diff --git a/SerialPort.cpp b/SerialPort.cpp index 19301d7..99fa62e 100644 --- a/SerialPort.cpp +++ b/SerialPort.cpp @@ -385,157 +385,74 @@ void CSerialPort::setMode(MMDVM_STATE modemState) switch (modemState) { case STATE_DMR: DEBUG1("Mode set to DMR"); - dstarRX.reset(); - ysfRX.reset(); - p25RX.reset(); - nxdnRX.reset(); - cwIdTX.reset(); break; case STATE_DSTAR: DEBUG1("Mode set to D-Star"); - dmrIdleRX.reset(); - dmrDMORX.reset(); - dmrRX.reset(); - ysfRX.reset(); - p25RX.reset(); - nxdnRX.reset(); - cwIdTX.reset(); break; case STATE_YSF: DEBUG1("Mode set to System Fusion"); - dmrIdleRX.reset(); - dmrDMORX.reset(); - dmrRX.reset(); - dstarRX.reset(); - p25RX.reset(); - nxdnRX.reset(); - cwIdTX.reset(); break; case STATE_P25: DEBUG1("Mode set to P25"); - dmrIdleRX.reset(); - dmrDMORX.reset(); - dmrRX.reset(); - dstarRX.reset(); - ysfRX.reset(); - nxdnRX.reset(); - cwIdTX.reset(); break; case STATE_NXDN: DEBUG1("Mode set to NXDN"); - dmrIdleRX.reset(); - dmrDMORX.reset(); - dmrRX.reset(); - dstarRX.reset(); - ysfRX.reset(); - p25RX.reset(); - cwIdTX.reset(); break; case STATE_POCSAG: DEBUG1("Mode set to POCSAG"); - dmrIdleRX.reset(); - dmrDMORX.reset(); - dmrRX.reset(); - dstarRX.reset(); - ysfRX.reset(); - p25RX.reset(); - nxdnRX.reset(); - cwIdTX.reset(); break; case STATE_DSTARCAL: DEBUG1("Mode set to D-Star Calibrate"); - dmrIdleRX.reset(); - dmrDMORX.reset(); - dmrRX.reset(); - dstarRX.reset(); - ysfRX.reset(); - p25RX.reset(); - nxdnRX.reset(); - cwIdTX.reset(); break; case STATE_DMRCAL: DEBUG1("Mode set to DMR Calibrate"); - dmrIdleRX.reset(); - dmrDMORX.reset(); - dmrRX.reset(); - dstarRX.reset(); - ysfRX.reset(); - p25RX.reset(); - nxdnRX.reset(); - cwIdTX.reset(); break; case STATE_RSSICAL: DEBUG1("Mode set to RSSI Calibrate"); - dmrIdleRX.reset(); - dmrDMORX.reset(); - dmrRX.reset(); - dstarRX.reset(); - ysfRX.reset(); - p25RX.reset(); - nxdnRX.reset(); - cwIdTX.reset(); break; case STATE_LFCAL: DEBUG1("Mode set to 80 Hz Calibrate"); - dmrIdleRX.reset(); - dmrDMORX.reset(); - dmrRX.reset(); - dstarRX.reset(); - ysfRX.reset(); - p25RX.reset(); - nxdnRX.reset(); - cwIdTX.reset(); break; case STATE_DMRCAL1K: DEBUG1("Mode set to DMR BS 1031 Hz Calibrate"); - dmrIdleRX.reset(); - dmrDMORX.reset(); - dmrRX.reset(); - dstarRX.reset(); - ysfRX.reset(); - p25RX.reset(); - nxdnRX.reset(); - cwIdTX.reset(); break; case STATE_P25CAL1K: DEBUG1("Mode set to P25 1011 Hz Calibrate"); - dmrIdleRX.reset(); - dmrDMORX.reset(); - dmrRX.reset(); - dstarRX.reset(); - ysfRX.reset(); - p25RX.reset(); - nxdnRX.reset(); - cwIdTX.reset(); break; case STATE_DMRDMO1K: DEBUG1("Mode set to DMR MS 1031 Hz Calibrate"); - dmrIdleRX.reset(); - dmrDMORX.reset(); - dmrRX.reset(); - dstarRX.reset(); - ysfRX.reset(); - p25RX.reset(); - nxdnRX.reset(); - cwIdTX.reset(); break; case STATE_NXDNCAL1K: DEBUG1("Mode set to NXDN 1031 Hz Calibrate"); - dmrIdleRX.reset(); - dmrDMORX.reset(); - dmrRX.reset(); - dstarRX.reset(); - ysfRX.reset(); - p25RX.reset(); - nxdnRX.reset(); - cwIdTX.reset(); break; - default: + case STATE_POCSAGCAL: + DEBUG1("Mode set to POCSAG Calibrate"); + break; + default: // STATE_IDLE DEBUG1("Mode set to Idle"); - // STATE_IDLE break; } + if (modemState != STATE_DSTAR) + dstarRX.reset(); + + if (modemState != STATE_DMR) { + dmrIdleRX.reset(); + dmrDMORX.reset(); + dmrRX.reset(); + } + + if (modemState != STATE_YSF) + ysfRX.reset(); + + if (modemState != STATE_P25) + p25RX.reset(); + + if (modemState != STATE_NXDN) + nxdnRX.reset(); + + cwIdTX.reset(); + m_modemState = modemState; io.setMode(); From 37efcb3d4f4e67d3456c3f13116d49febed6d0e6 Mon Sep 17 00:00:00 2001 From: Shawn Chain Date: Mon, 13 May 2019 21:59:32 +0800 Subject: [PATCH 13/20] add STM32F10X_Lib --- .gitmodules | 3 +++ Config.h | 6 +++--- Makefile.CMSIS | 2 +- STM32F10X_Lib | 1 + 4 files changed, 8 insertions(+), 4 deletions(-) create mode 160000 STM32F10X_Lib diff --git a/.gitmodules b/.gitmodules index 78686ee..6e7071e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "STM32F7XX_Lib"] path = STM32F7XX_Lib url = https://github.com/juribeparada/STM32F7XX_Lib.git +[submodule "STM32F10X_Lib"] + path = STM32F10X_Lib + url = https://github.com/shawnchain/STM32F10X_Lib.git diff --git a/Config.h b/Config.h index c738e21..40317ab 100644 --- a/Config.h +++ b/Config.h @@ -45,10 +45,10 @@ // #define ARDUINO_DUE_PAPA // For the ZUM V1.0 and V1.0.1 boards pin layout -#define ARDUINO_DUE_ZUM_V10 +// #define ARDUINO_DUE_ZUM_V10 // For the SQ6POG board -// #define STM32F1_POG +#define STM32F1_POG // For the SP8NTH board // #define ARDUINO_DUE_NTH @@ -64,7 +64,7 @@ // #define VK6MST_TEENSY_PI3_SHIELD_I2C // Pass RSSI information to the host -// #define SEND_RSSI_DATA +#define SEND_RSSI_DATA // Use the modem as a serial repeater for Nextion displays // #define SERIAL_REPEATER diff --git a/Makefile.CMSIS b/Makefile.CMSIS index 3573d6f..69e7a3e 100644 --- a/Makefile.CMSIS +++ b/Makefile.CMSIS @@ -25,7 +25,7 @@ STARTUP:=$(SYSDIR)/startup_stm32f105xc.S STARTUP_DEFS= # Include directory for CMSIS -CMSISDIR:=/opt/STM32Cube_FW_F1_V1.4.0/Drivers/CMSIS +CMSISDIR:=STM32F10X_Lib/CMSIS # Libraries LIBDIR:= diff --git a/STM32F10X_Lib b/STM32F10X_Lib new file mode 160000 index 0000000..417e0c2 --- /dev/null +++ b/STM32F10X_Lib @@ -0,0 +1 @@ +Subproject commit 417e0c2f4a4571ff836d2705d7551bd07ebbf777 From c8a345a30192bab0db13090ac80437e5cce412a3 Mon Sep 17 00:00:00 2001 From: Shawn Chain Date: Tue, 14 May 2019 11:43:29 +0800 Subject: [PATCH 14/20] rollback changes on Config.h --- Config.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Config.h b/Config.h index 40317ab..c738e21 100644 --- a/Config.h +++ b/Config.h @@ -45,10 +45,10 @@ // #define ARDUINO_DUE_PAPA // For the ZUM V1.0 and V1.0.1 boards pin layout -// #define ARDUINO_DUE_ZUM_V10 +#define ARDUINO_DUE_ZUM_V10 // For the SQ6POG board -#define STM32F1_POG +// #define STM32F1_POG // For the SP8NTH board // #define ARDUINO_DUE_NTH @@ -64,7 +64,7 @@ // #define VK6MST_TEENSY_PI3_SHIELD_I2C // Pass RSSI information to the host -#define SEND_RSSI_DATA +// #define SEND_RSSI_DATA // Use the modem as a serial repeater for Nextion displays // #define SERIAL_REPEATER From 2a6db2ab524c935fe7ec82aa6b5c7e63229e0f7d Mon Sep 17 00:00:00 2001 From: Shawn Chain Date: Tue, 14 May 2019 11:53:21 +0800 Subject: [PATCH 15/20] Make STM32F1_POG as default type when Makefile.CMSIS is used --- Config.h | 8 +++++--- Makefile.CMSIS | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Config.h b/Config.h index c738e21..9d62604 100644 --- a/Config.h +++ b/Config.h @@ -44,11 +44,13 @@ // For the original Arduino Due pin layout // #define ARDUINO_DUE_PAPA +#if defined(STM32F1) +// For the SQ6POG board +#define STM32F1_POG +#else // For the ZUM V1.0 and V1.0.1 boards pin layout #define ARDUINO_DUE_ZUM_V10 - -// For the SQ6POG board -// #define STM32F1_POG +#endif // For the SP8NTH board // #define ARDUINO_DUE_NTH diff --git a/Makefile.CMSIS b/Makefile.CMSIS index 69e7a3e..2bce2ab 100644 --- a/Makefile.CMSIS +++ b/Makefile.CMSIS @@ -65,7 +65,7 @@ COMMON_FLAGS =-mthumb -mlittle-endian -mcpu=$(MCPU) COMMON_FLAGS+= -Wall COMMON_FLAGS+= -I. -I$(CMSISDIR)/Include -I$(CMSISDIR)/Device/ST/STM32F1xx/Include -I$(SYSDIR) COMMON_FLAGS+= $(addprefix -I,$(INCDIR)) -COMMON_FLAGS+= -D$(MCU) -DMADEBYMAKEFILE +COMMON_FLAGS+= -D$(MCU) -DMADEBYMAKEFILE -DSTM32F1 COMMON_FLAGS+= -Os -flto -ffunction-sections -fdata-sections COMMON_FLAGS+= -g # Assembler flags From d6d03158d033d672db2aafe4aac7c20eb9d4882f Mon Sep 17 00:00:00 2001 From: Shawn Chain Date: Thu, 16 May 2019 23:22:27 +0800 Subject: [PATCH 16/20] Fix HWType string of RPT_HAT_TGO to work with MMDVMCal and add udid support to the firmware --- SerialPort.cpp | 9 +++++++-- SerialSTM.cpp | 16 ++++++++++++++++ SerialSTM_CMSIS.cpp | 12 ++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/SerialPort.cpp b/SerialPort.cpp index 99fa62e..23990cc 100644 --- a/SerialPort.cpp +++ b/SerialPort.cpp @@ -92,7 +92,7 @@ const uint8_t MMDVM_DEBUG5 = 0xF5U; #endif #if defined(STM32F4_RPT_HAT_TGO) -#define HW_TYPE "MMDVM_RPT_HAT_TGO" +#define HW_TYPE "MMDVM RPT_HAT_TGO" #else #define HW_TYPE "MMDVM" #endif @@ -109,6 +109,7 @@ const char HARDWARE[] = concat(HW_TYPE, DESCRIPTION, TCXO, __TIME__, __DATE__); const uint8_t PROTOCOL_VERSION = 1U; +char UDID[] = "00000000000000000000000000000000"; CSerialPort::CSerialPort() : m_buffer(), @@ -237,7 +238,7 @@ void CSerialPort::getStatus() void CSerialPort::getVersion() { - uint8_t reply[150U]; + uint8_t reply[192U]; reply[0U] = MMDVM_FRAME_START; reply[1U] = 0U; @@ -249,6 +250,10 @@ void CSerialPort::getVersion() for (uint8_t i = 0U; HARDWARE[i] != 0x00U; i++, count++) reply[count] = HARDWARE[i]; + reply[count++] = '\0'; + for (uint8_t i = 0U; UDID[i] != 0x00U; i++, count++) + reply[count] = UDID[i]; + reply[1U] = count; writeInt(1U, reply, count); diff --git a/SerialSTM.cpp b/SerialSTM.cpp index 8b4ae52..1d79311 100644 --- a/SerialSTM.cpp +++ b/SerialSTM.cpp @@ -834,9 +834,25 @@ void WriteUART5(const uint8_t* data, uint16_t length) #endif ///////////////////////////////////////////////////////////////// +extern char UDID[]; +extern "C" { + #include +} void CSerialPort::beginInt(uint8_t n, int speed) { +#if defined(STM32F4XX) + uint32_t *id0 = (uint32_t *) (0x1FFF7A10); + uint32_t *id1 = (uint32_t *) (0x1FFF7A10 + 0x04); + uint32_t *id2 = (uint32_t *) (0x1FFF7A10 + 0x08); + ::sprintf(UDID, "%08X%08X%08X", *id0,*id1,*id2); +#elif defined(STM32F7XX) + uint32_t *id0 = (uint32_t *) (0x1FF0F420); + uint32_t *id1 = (uint32_t *) (0x1FF0F420 + 0x04); + uint32_t *id2 = (uint32_t *) (0x1FF0F420 + 0x08); + ::sprintf(UDID, "%08X%08X%08X", *id0,*id1,*id2); +#endif + switch (n) { case 1U: #if defined(STM32F4_DISCOVERY) || defined(STM32F7_NUCLEO) diff --git a/SerialSTM_CMSIS.cpp b/SerialSTM_CMSIS.cpp index 38127ac..b7f4399 100644 --- a/SerialSTM_CMSIS.cpp +++ b/SerialSTM_CMSIS.cpp @@ -106,9 +106,21 @@ RAMFUNC void USART1TxData(const uint8_t* data, uint16_t length) ///////////////////////////////////////////////////////////////// +extern char UDID[]; +extern "C" { + #include +} void CSerialPort::beginInt(uint8_t n, int speed) { +#if defined(STM32F105xC) + uint16_t *id00 = (uint16_t *) (0x1FFFF7E8); + uint16_t *id01 = (uint16_t *) (0x1FFFF7E8 + 0x02); + uint32_t *id1 = (uint32_t *) (0x1FFFF7E8 + 0x04); + uint32_t *id2 = (uint32_t *) (0x1FFFF7E8 + 0x08); + ::sprintf(UDID, "%04X%04X%08X%08X", *id00,*id01,*id1,*id2); +#endif + switch (n) { case 1U: USART1Init(speed); From 0f37bfa20d07a099aff4d912d50b70ac0c84a545 Mon Sep 17 00:00:00 2001 From: Shawn Chain Date: Thu, 16 May 2019 23:29:28 +0800 Subject: [PATCH 17/20] arduino_due support --- SerialArduino.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/SerialArduino.cpp b/SerialArduino.cpp index db49759..c146ae7 100644 --- a/SerialArduino.cpp +++ b/SerialArduino.cpp @@ -26,8 +26,29 @@ #elif defined(__SAM3X8E__) || defined(__MK20DX256__) || defined(__MK64FX512__) || defined(__MK66FX1M0__) + +#if defined(__SAM3X8E__) +extern "C" { + #include +} + +extern char UDID[]; + +#define FLASH_ACCESS_MODE_128 0 +#define EFC0 (0x400E0A00U) +#define EFC ((Efc*)EFC0) + +#endif + void CSerialPort::beginInt(uint8_t n, int speed) { +#if defined(__SAM3X8E__) + uint32_t _id[4]; + if (0 == efc_init(EFC, FLASH_ACCESS_MODE_128, 4)) + if (0 == efc_perform_read_sequence(EFC, EFC_FCMD_STUI, EFC_FCMD_SPUI, _id, 4)) + ::sprintf(UDID,"%08X%08X%08X%08X",_id[0],_id[1],_id[2],_id[3]); +#endif + switch (n) { case 1U: Serial.begin(speed); From dfad6d8409486148e48303051b3080eff5ab92b0 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Tue, 4 Jun 2019 10:12:53 +0100 Subject: [PATCH 18/20] Revert "Merge pull request #204 from shawnchain/support_udid" This reverts commit b94b8afb775491c8bf7d50c11bb25e8b8e58b35e, reversing changes made to 7c863671c9cee79f166b298f4c80496e4ead03b2. --- SerialArduino.cpp | 21 --------------------- SerialPort.cpp | 9 ++------- SerialSTM.cpp | 16 ---------------- SerialSTM_CMSIS.cpp | 12 ------------ 4 files changed, 2 insertions(+), 56 deletions(-) diff --git a/SerialArduino.cpp b/SerialArduino.cpp index c146ae7..db49759 100644 --- a/SerialArduino.cpp +++ b/SerialArduino.cpp @@ -26,29 +26,8 @@ #elif defined(__SAM3X8E__) || defined(__MK20DX256__) || defined(__MK64FX512__) || defined(__MK66FX1M0__) - -#if defined(__SAM3X8E__) -extern "C" { - #include -} - -extern char UDID[]; - -#define FLASH_ACCESS_MODE_128 0 -#define EFC0 (0x400E0A00U) -#define EFC ((Efc*)EFC0) - -#endif - void CSerialPort::beginInt(uint8_t n, int speed) { -#if defined(__SAM3X8E__) - uint32_t _id[4]; - if (0 == efc_init(EFC, FLASH_ACCESS_MODE_128, 4)) - if (0 == efc_perform_read_sequence(EFC, EFC_FCMD_STUI, EFC_FCMD_SPUI, _id, 4)) - ::sprintf(UDID,"%08X%08X%08X%08X",_id[0],_id[1],_id[2],_id[3]); -#endif - switch (n) { case 1U: Serial.begin(speed); diff --git a/SerialPort.cpp b/SerialPort.cpp index 23990cc..99fa62e 100644 --- a/SerialPort.cpp +++ b/SerialPort.cpp @@ -92,7 +92,7 @@ const uint8_t MMDVM_DEBUG5 = 0xF5U; #endif #if defined(STM32F4_RPT_HAT_TGO) -#define HW_TYPE "MMDVM RPT_HAT_TGO" +#define HW_TYPE "MMDVM_RPT_HAT_TGO" #else #define HW_TYPE "MMDVM" #endif @@ -109,7 +109,6 @@ const char HARDWARE[] = concat(HW_TYPE, DESCRIPTION, TCXO, __TIME__, __DATE__); const uint8_t PROTOCOL_VERSION = 1U; -char UDID[] = "00000000000000000000000000000000"; CSerialPort::CSerialPort() : m_buffer(), @@ -238,7 +237,7 @@ void CSerialPort::getStatus() void CSerialPort::getVersion() { - uint8_t reply[192U]; + uint8_t reply[150U]; reply[0U] = MMDVM_FRAME_START; reply[1U] = 0U; @@ -250,10 +249,6 @@ void CSerialPort::getVersion() for (uint8_t i = 0U; HARDWARE[i] != 0x00U; i++, count++) reply[count] = HARDWARE[i]; - reply[count++] = '\0'; - for (uint8_t i = 0U; UDID[i] != 0x00U; i++, count++) - reply[count] = UDID[i]; - reply[1U] = count; writeInt(1U, reply, count); diff --git a/SerialSTM.cpp b/SerialSTM.cpp index 1d79311..8b4ae52 100644 --- a/SerialSTM.cpp +++ b/SerialSTM.cpp @@ -834,25 +834,9 @@ void WriteUART5(const uint8_t* data, uint16_t length) #endif ///////////////////////////////////////////////////////////////// -extern char UDID[]; -extern "C" { - #include -} void CSerialPort::beginInt(uint8_t n, int speed) { -#if defined(STM32F4XX) - uint32_t *id0 = (uint32_t *) (0x1FFF7A10); - uint32_t *id1 = (uint32_t *) (0x1FFF7A10 + 0x04); - uint32_t *id2 = (uint32_t *) (0x1FFF7A10 + 0x08); - ::sprintf(UDID, "%08X%08X%08X", *id0,*id1,*id2); -#elif defined(STM32F7XX) - uint32_t *id0 = (uint32_t *) (0x1FF0F420); - uint32_t *id1 = (uint32_t *) (0x1FF0F420 + 0x04); - uint32_t *id2 = (uint32_t *) (0x1FF0F420 + 0x08); - ::sprintf(UDID, "%08X%08X%08X", *id0,*id1,*id2); -#endif - switch (n) { case 1U: #if defined(STM32F4_DISCOVERY) || defined(STM32F7_NUCLEO) diff --git a/SerialSTM_CMSIS.cpp b/SerialSTM_CMSIS.cpp index b7f4399..38127ac 100644 --- a/SerialSTM_CMSIS.cpp +++ b/SerialSTM_CMSIS.cpp @@ -106,21 +106,9 @@ RAMFUNC void USART1TxData(const uint8_t* data, uint16_t length) ///////////////////////////////////////////////////////////////// -extern char UDID[]; -extern "C" { - #include -} void CSerialPort::beginInt(uint8_t n, int speed) { -#if defined(STM32F105xC) - uint16_t *id00 = (uint16_t *) (0x1FFFF7E8); - uint16_t *id01 = (uint16_t *) (0x1FFFF7E8 + 0x02); - uint32_t *id1 = (uint32_t *) (0x1FFFF7E8 + 0x04); - uint32_t *id2 = (uint32_t *) (0x1FFFF7E8 + 0x08); - ::sprintf(UDID, "%04X%04X%08X%08X", *id00,*id01,*id1,*id2); -#endif - switch (n) { case 1U: USART1Init(speed); From 8a60fc1ecb2401269179f5173bb469d2182a99f0 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Mon, 15 Jul 2019 09:06:43 +0100 Subject: [PATCH 19/20] Fix id string for the rpt_hat_tgo. --- SerialPort.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SerialPort.cpp b/SerialPort.cpp index 99fa62e..11d57e5 100644 --- a/SerialPort.cpp +++ b/SerialPort.cpp @@ -92,9 +92,9 @@ const uint8_t MMDVM_DEBUG5 = 0xF5U; #endif #if defined(STM32F4_RPT_HAT_TGO) -#define HW_TYPE "MMDVM_RPT_HAT_TGO" +#define HW_TYPE "MMDVM RPT_HAT_TGO" #else -#define HW_TYPE "MMDVM" +#define HW_TYPE "MMDVM" #endif #define DESCRIPTION "20190130 (D-Star/DMR/System Fusion/P25/NXDN/POCSAG)" From f28a22802d24de0c2dd4d023be68d757f018e83b Mon Sep 17 00:00:00 2001 From: Abad Vera Date: Wed, 23 Oct 2019 14:36:34 -0700 Subject: [PATCH 20/20] Fixed deploy-pi-f7 --- Makefile | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 0051cbf..a7e92d2 100644 --- a/Makefile +++ b/Makefile @@ -239,7 +239,7 @@ $(OBJDIR_F7): $(BINDIR)/$(BINHEX_F4): $(BINDIR)/$(BINELF_F4) $(CP) -O ihex $< $@ @echo "Objcopy from ELF to IHEX complete!\n" - + $(BINDIR)/$(BINBIN_F4): $(BINDIR)/$(BINELF_F4) $(CP) -O binary $< $@ @echo "Objcopy from ELF to BINARY complete!\n" @@ -252,7 +252,7 @@ $(BINDIR)/$(BINELF_F4): $(OBJ_F4) $(BINDIR)/$(BINHEX_F7): $(BINDIR)/$(BINELF_F7) $(CP) -O ihex $< $@ @echo "Objcopy from ELF to IHEX complete!\n" - + $(BINDIR)/$(BINBIN_F7): $(BINDIR)/$(BINELF_F7) $(CP) -O binary $< $@ @echo "Objcopy from ELF to BINARY complete!\n" @@ -342,13 +342,10 @@ deploy-dvm: deploy-pi deploy-pi-f7: ifneq ($(wildcard /usr/local/bin/stm32flash),) -/usr/local/bin/stm32flash -i 20,-21,21:-20,21 /dev/ttyAMA0 - -/usr/local/bin/stm32ld /dev/ttyAMA0 57600 bin/$(BINBIN_F7) /usr/local/bin/stm32flash -v -w bin/$(BINBIN_F7) -g 0x0 -R -c /dev/ttyAMA0 -endif -ifneq ($(wildcard /usr/bin/stm32flash),) +else ifneq ($(wildcard /usr/bin/stm32flash),) -/usr/bin/stm32flash -i 20,-21,21:-20,21 /dev/ttyAMA0 - -/usr/bin/stm32ld /dev/ttyAMA0 57600 bin/$(BINBIN_F7) /usr/bin/stm32flash -v -w bin/$(BINBIN_F7) -g 0x0 -R -c /dev/ttyAMA0 endif