From ff7a9fdd4e234caa2f621a32f05c7c7a687c5d73 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Fri, 1 Mar 2019 08:00:20 +0000 Subject: [PATCH 1/6] 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 2/6] 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 3/6] 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 4/6] 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 5/6] 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 6/6] 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);