From 7184a6923f5eb5464e0937e0e1b56dbfdacafdff Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Mon, 8 Feb 2021 19:12:21 +0000 Subject: [PATCH] upstream: Add UDID support; NOTE: this changes the serial protocol version and is incompatible with previous versions -- match this commit with a dvmfirmware (commit 72c7385918d529df3f9f6b64c50913de7604fab2 or newer) update! --- host/calibrate/HostCal.cpp | 31 +++++++++++++++++++++++++++++-- modem/Modem.cpp | 27 +++++++++++++++++++++++++-- modem/Modem.h | 5 +++-- 3 files changed, 57 insertions(+), 6 deletions(-) diff --git a/host/calibrate/HostCal.cpp b/host/calibrate/HostCal.cpp index b8aadaf6..8b4bc494 100644 --- a/host/calibrate/HostCal.cpp +++ b/host/calibrate/HostCal.cpp @@ -1524,7 +1524,7 @@ bool HostCal::getFirmwareVersion() sleep(100U); - ret = readModem(buffer, 50U); + ret = readModem(buffer, 200U); if (ret < 0) return false; if (ret == 0) @@ -1536,12 +1536,39 @@ bool HostCal::getFirmwareVersion() return false; } + int length = ret; + if (buffer[2U] != CMD_GET_VERSION) { Utils::dump("Invalid response", buffer, ret); return false; } - LogMessage(LOG_CAL, MODEM_VERSION_STR, buffer[1U] - 4, buffer + 4U, buffer[3U]); + uint8_t protoVer = buffer[3U]; + + switch (protoVer) { + case PROTOCOL_VERSION: + LogInfoEx(LOG_MODEM, MODEM_VERSION_STR, length - 21U, buffer + 21U, protoVer); + switch (buffer[4U]) { + case 0U: + LogMessage(LOG_MODEM, "Atmel ARM, UDID: %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", buffer[5U], buffer[6U], buffer[7U], buffer[8U], buffer[9U], buffer[10U], buffer[11U], buffer[12U], buffer[13U], buffer[14U], buffer[15U], buffer[16U], buffer[17U], buffer[18U], buffer[19U], buffer[20U]); + break; + case 1U: + LogMessage(LOG_MODEM, "NXP ARM, UDID: %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", buffer[5U], buffer[6U], buffer[7U], buffer[8U], buffer[9U], buffer[10U], buffer[11U], buffer[12U], buffer[13U], buffer[14U], buffer[15U], buffer[16U], buffer[17U], buffer[18U], buffer[19U], buffer[20U]); + break; + case 2U: + LogMessage(LOG_MODEM, "ST-Micro ARM, UDID: %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", buffer[5U], buffer[6U], buffer[7U], buffer[8U], buffer[9U], buffer[10U], buffer[11U], buffer[12U], buffer[13U], buffer[14U], buffer[15U], buffer[16U]); + break; + default: + LogMessage(LOG_MODEM, "Unknown CPU type: %u", buffer[4U]); + break; + } + return true; + + default: + LogError(LOG_MODEM, MODEM_UNSUPPORTED_STR, protoVer); + return false; + } + return true; } diff --git a/modem/Modem.cpp b/modem/Modem.cpp index f10035ec..cee3b2cb 100644 --- a/modem/Modem.cpp +++ b/modem/Modem.cpp @@ -1126,8 +1126,31 @@ bool Modem::getFirmwareVersion() Thread::sleep(10U); RESP_TYPE_DVM resp = getResponse(); if (resp == RTM_OK && m_buffer[2U] == CMD_GET_VERSION) { - LogMessage(LOG_MODEM, MODEM_VERSION_STR, m_length - 4U, m_buffer + 4U, m_buffer[3U]); - return true; + uint8_t protoVer = m_buffer[3U]; + + switch (protoVer) { + case PROTOCOL_VERSION: + LogInfoEx(LOG_MODEM, MODEM_VERSION_STR, m_length - 21U, m_buffer + 21U, protoVer); + switch (m_buffer[4U]) { + case 0U: + LogMessage(LOG_MODEM, "Atmel ARM, UDID: %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", m_buffer[5U], m_buffer[6U], m_buffer[7U], m_buffer[8U], m_buffer[9U], m_buffer[10U], m_buffer[11U], m_buffer[12U], m_buffer[13U], m_buffer[14U], m_buffer[15U], m_buffer[16U], m_buffer[17U], m_buffer[18U], m_buffer[19U], m_buffer[20U]); + break; + case 1U: + LogMessage(LOG_MODEM, "NXP ARM, UDID: %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", m_buffer[5U], m_buffer[6U], m_buffer[7U], m_buffer[8U], m_buffer[9U], m_buffer[10U], m_buffer[11U], m_buffer[12U], m_buffer[13U], m_buffer[14U], m_buffer[15U], m_buffer[16U], m_buffer[17U], m_buffer[18U], m_buffer[19U], m_buffer[20U]); + break; + case 2U: + LogMessage(LOG_MODEM, "ST-Micro ARM, UDID: %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", m_buffer[5U], m_buffer[6U], m_buffer[7U], m_buffer[8U], m_buffer[9U], m_buffer[10U], m_buffer[11U], m_buffer[12U], m_buffer[13U], m_buffer[14U], m_buffer[15U], m_buffer[16U]); + break; + default: + LogMessage(LOG_MODEM, "Unknown CPU type: %u", m_buffer[4U]); + break; + } + return true; + + default: + LogError(LOG_MODEM, MODEM_UNSUPPORTED_STR, protoVer); + return false; + } } } diff --git a/modem/Modem.h b/modem/Modem.h index 0c52a8fe..07c574e2 100644 --- a/modem/Modem.h +++ b/modem/Modem.h @@ -39,8 +39,11 @@ #include #define MODEM_VERSION_STR "%.*s, Modem protocol: %u" +#define MODEM_UNSUPPORTED_STR "Modem protocol: %u, unsupported! Stopping." #define NULL_MODEM "null" +const uint8_t PROTOCOL_VERSION = 2U; + namespace modem { // --------------------------------------------------------------------------- @@ -116,8 +119,6 @@ namespace modem CMD_ACK = 0x70U, CMD_NAK = 0x7FU, - CMD_SERIAL = 0x80U, - CMD_DEBUG1 = 0xF1U, CMD_DEBUG2 = 0xF2U, CMD_DEBUG3 = 0xF3U,