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);