From b081422856340e9a95880edf8621a172797410b8 Mon Sep 17 00:00:00 2001 From: David Chiu Date: Mon, 25 Apr 2022 16:33:47 +0800 Subject: Support write protection --- rmi4update/rmi4update.cpp | 27 ++++++++++++++++++++++++++- rmi4update/rmi4update.h | 2 ++ rmi4update/updateutil.cpp | 1 + rmi4update/updateutil.h | 1 + 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/rmi4update/rmi4update.cpp b/rmi4update/rmi4update.cpp index 5e1d924..6a21c38 100755 --- a/rmi4update/rmi4update.cpp +++ b/rmi4update/rmi4update.cpp @@ -1119,6 +1119,10 @@ int RMI4Update::WriteFlashConfigV7() do { Sleep(20); rmi4update_poll(); + if (CheckWriteProtectionActivated()) { + if (m_flashStatus == WRITE_PROTECTION) + return UPDATE_FAIL_WRITE_PROTECTED; + } if (m_flashStatus == SUCCESS){ break; } @@ -1252,6 +1256,10 @@ int RMI4Update::WriteFLDV7() do { Sleep(20); rmi4update_poll(); + if (CheckWriteProtectionActivated()) { + if (m_flashStatus == WRITE_PROTECTION) + return UPDATE_FAIL_WRITE_PROTECTED; + } if (m_flashStatus == SUCCESS){ break; @@ -1442,6 +1450,10 @@ int RMI4Update::EraseFlashConfigV10() do { Sleep(20); rmi4update_poll(); + if (CheckWriteProtectionActivated()) { + if (m_flashStatus == WRITE_PROTECTION) + return UPDATE_FAIL_WRITE_PROTECTED; + } if (m_flashStatus == SUCCESS){ break; } @@ -1569,6 +1581,10 @@ int RMI4Update::EraseFirmwareV7() do { Sleep(20); rmi4update_poll(); + if (CheckWriteProtectionActivated()) { + if (m_flashStatus == WRITE_PROTECTION) + return UPDATE_FAIL_WRITE_PROTECTED; + } if (m_flashStatus == SUCCESS){ break; } @@ -1681,7 +1697,7 @@ int RMI4Update::EnterFlashProgrammingV7() rmi4update_poll(); if (!m_inBLmode) return UPDATE_FAIL_DEVICE_NOT_IN_BOOTLOADER; - + } else fprintf(stdout, "Already in BL mode, skip...\n"); @@ -1972,3 +1988,12 @@ int RMI4Update::WaitForIdle(int timeout_ms, bool readF34OnSucess) return UPDATE_SUCCESS; } + +bool RMI4Update::CheckWriteProtectionActivated() +{ + if ((m_bootloaderID[1] >= 10) || + ((m_bootloaderID[1] == 8) && (m_bootloaderID[0] >= 7))){ + return true; + } else + return false; +} diff --git a/rmi4update/rmi4update.h b/rmi4update/rmi4update.h index 928e07b..80923dd 100755 --- a/rmi4update/rmi4update.h +++ b/rmi4update/rmi4update.h @@ -35,6 +35,7 @@ enum v7_status { FLASH_PROGRAMMING_KEY_INCORRECT, BAD_PARTITION_TABLE, CHECKSUM_FAILED, + WRITE_PROTECTION = 0x0E, FLASH_HARDWARE_FAILURE = 0x1f, }; @@ -194,6 +195,7 @@ private: int GetFirmwareSize() { return m_blockSize * m_fwBlockCount; } int GetConfigSize() { return m_blockSize * m_configBlockCount; } int WriteSignatureV7(enum signature_BLv7 signature_partition, unsigned char* data, int offset); + bool CheckWriteProtectionActivated(); private: RMIDevice & m_device; diff --git a/rmi4update/updateutil.cpp b/rmi4update/updateutil.cpp index 52245d3..cc607d2 100644 --- a/rmi4update/updateutil.cpp +++ b/rmi4update/updateutil.cpp @@ -52,6 +52,7 @@ const char *update_error_str[] = { "the firmware image is older then the firmware on the device", // UPDATE_FAIL_FIRMWARE_IMAGE_IS_OLDER "invalid parameter", // UPDATE_FAIL_INVALID_PARAMETER "failed to open firmware image file", // UPDATE_FAIL_OPEN_FIRMWARE_IMAGE + "write protection is activated", // UPDATE_FAIL_WRITE_PROTECTED }; const char * update_err_to_string(int err) diff --git a/rmi4update/updateutil.h b/rmi4update/updateutil.h index c65c53a..8667086 100644 --- a/rmi4update/updateutil.h +++ b/rmi4update/updateutil.h @@ -51,6 +51,7 @@ enum update_error { UPDATE_FAIL_FIRMWARE_IMAGE_IS_OLDER, UPDATE_FAIL_INVALID_PARAMETER, UPDATE_FAIL_OPEN_FIRMWARE_IMAGE, + UPDATE_FAIL_WRITE_PROTECTED, }; const char * update_err_to_string(int err); -- cgit v1.2.3 From 833d55ac8895265d756ccde3f5255320e213dad9 Mon Sep 17 00:00:00 2001 From: David Chiu Date: Fri, 29 Apr 2022 11:04:46 +0800 Subject: Rename function --- rmi4update/rmi4update.cpp | 10 +++++----- rmi4update/rmi4update.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/rmi4update/rmi4update.cpp b/rmi4update/rmi4update.cpp index 6a21c38..5338234 100755 --- a/rmi4update/rmi4update.cpp +++ b/rmi4update/rmi4update.cpp @@ -1119,7 +1119,7 @@ int RMI4Update::WriteFlashConfigV7() do { Sleep(20); rmi4update_poll(); - if (CheckWriteProtectionActivated()) { + if (IsWriteProtectionSupported()) { if (m_flashStatus == WRITE_PROTECTION) return UPDATE_FAIL_WRITE_PROTECTED; } @@ -1256,7 +1256,7 @@ int RMI4Update::WriteFLDV7() do { Sleep(20); rmi4update_poll(); - if (CheckWriteProtectionActivated()) { + if (IsWriteProtectionSupported()) { if (m_flashStatus == WRITE_PROTECTION) return UPDATE_FAIL_WRITE_PROTECTED; } @@ -1450,7 +1450,7 @@ int RMI4Update::EraseFlashConfigV10() do { Sleep(20); rmi4update_poll(); - if (CheckWriteProtectionActivated()) { + if (IsWriteProtectionSupported()) { if (m_flashStatus == WRITE_PROTECTION) return UPDATE_FAIL_WRITE_PROTECTED; } @@ -1581,7 +1581,7 @@ int RMI4Update::EraseFirmwareV7() do { Sleep(20); rmi4update_poll(); - if (CheckWriteProtectionActivated()) { + if (IsWriteProtectionSupported()) { if (m_flashStatus == WRITE_PROTECTION) return UPDATE_FAIL_WRITE_PROTECTED; } @@ -1989,7 +1989,7 @@ int RMI4Update::WaitForIdle(int timeout_ms, bool readF34OnSucess) return UPDATE_SUCCESS; } -bool RMI4Update::CheckWriteProtectionActivated() +bool RMI4Update::IsWriteProtectionSupported() { if ((m_bootloaderID[1] >= 10) || ((m_bootloaderID[1] == 8) && (m_bootloaderID[0] >= 7))){ diff --git a/rmi4update/rmi4update.h b/rmi4update/rmi4update.h index 80923dd..cfc5d21 100755 --- a/rmi4update/rmi4update.h +++ b/rmi4update/rmi4update.h @@ -195,7 +195,7 @@ private: int GetFirmwareSize() { return m_blockSize * m_fwBlockCount; } int GetConfigSize() { return m_blockSize * m_configBlockCount; } int WriteSignatureV7(enum signature_BLv7 signature_partition, unsigned char* data, int offset); - bool CheckWriteProtectionActivated(); + bool IsWriteProtectionSupported(); private: RMIDevice & m_device; -- cgit v1.2.3