From 279251d48410717a1bf06787fbf893c924b8dee8 Mon Sep 17 00:00:00 2001 From: Shawn Chain Date: Fri, 31 May 2019 18:31:29 +0800 Subject: [PATCH] add udid support to the firmware --- SerialPort.cpp | 8 +++++++- SerialSTM.cpp | 24 ++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/SerialPort.cpp b/SerialPort.cpp index 0e8c8e3..ea0af12 100644 --- a/SerialPort.cpp +++ b/SerialPort.cpp @@ -78,6 +78,8 @@ const uint8_t MMDVM_DEBUG5 = 0xF5U; const uint8_t PROTOCOL_VERSION = 1U; +char UDID[] = "00000000000000000000000000000000"; + CSerialPort::CSerialPort() : m_buffer(), m_ptr(0U), @@ -198,7 +200,7 @@ void CSerialPort::getStatus() void CSerialPort::getVersion() { - uint8_t reply[100U]; + uint8_t reply[132U]; reply[0U] = MMDVM_FRAME_START; reply[1U] = 0U; @@ -210,6 +212,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 aae4117..a086bef 100644 --- a/SerialSTM.cpp +++ b/SerialSTM.cpp @@ -433,9 +433,33 @@ void WriteUSART2(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); + +#elif defined(STM32F10X_MD) + 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: #if defined(STM32_USART1_HOST)