diff options
author | cslashm <cslashm@gmail.com> | 2019-03-07 23:34:53 +0100 |
---|---|---|
committer | cslashm <cslashm@gmail.com> | 2019-03-28 18:26:15 +0100 |
commit | 3a981a331368d6fb33f9005fb71a2cf89200ae11 (patch) | |
tree | 7149fa5376fbc847ae0573c48688e88751b3050d /src/device | |
parent | Merge pull request #5359 (diff) | |
download | monero-3a981a331368d6fb33f9005fb71a2cf89200ae11.tar.xz |
Add application version compatibility check.
Diffstat (limited to 'src/device')
-rw-r--r-- | src/device/device_ledger.cpp | 20 | ||||
-rw-r--r-- | src/device/device_ledger.hpp | 12 |
2 files changed, 30 insertions, 2 deletions
diff --git a/src/device/device_ledger.cpp b/src/device/device_ledger.cpp index 0f197272c..a904d5eab 100644 --- a/src/device/device_ledger.cpp +++ b/src/device/device_ledger.cpp @@ -302,8 +302,24 @@ namespace hw { } bool device_ledger::reset() { - send_simple(INS_RESET); - return true; + reset_buffer(); + int offset = set_command_header_noopt(INS_RESET); + memmove(this->buffer_send+offset, MONERO_VERSION, strlen(MONERO_VERSION)); + offset += strlen(MONERO_VERSION); + this->buffer_send[4] = offset-5; + this->length_send = offset; + this->exchange(); + + ASSERT_X(this->length_recv>=3, "Communication error, less than three bytes received. Check your application version."); + + unsigned int device_version = 0; + device_version = VERSION(this->buffer_recv[0], this->buffer_recv[1], this->buffer_recv[2]); + + ASSERT_X (device_version >= MINIMAL_APP_VERSION, + "Unsupported device application version: " << VERSION_MAJOR(device_version)<<"."<<VERSION_MINOR(device_version)<<"."<<VERSION_MICRO(device_version) << + " At least " << MINIMAL_APP_VERSION_MAJOR<<"."<<MINIMAL_APP_VERSION_MINOR<<"."<<MINIMAL_APP_VERSION_MICRO<<" is required."); + + return true; } unsigned int device_ledger::exchange(unsigned int ok, unsigned int mask) { diff --git a/src/device/device_ledger.hpp b/src/device/device_ledger.hpp index 252354e1c..7ceeabc4f 100644 --- a/src/device/device_ledger.hpp +++ b/src/device/device_ledger.hpp @@ -41,6 +41,18 @@ namespace hw { namespace ledger { + /* Minimal supported version */ + #define MINIMAL_APP_VERSION_MAJOR 1 + #define MINIMAL_APP_VERSION_MINOR 3 + #define MINIMAL_APP_VERSION_MICRO 1 + + #define VERSION(M,m,u) ((M)<<16|(m)<<8|(u)) + #define VERSION_MAJOR(v) (((v)>>16)&0xFF) + #define VERSION_MINOR(v) (((v)>>8)&0xFF) + #define VERSION_MICRO(v) (((v)>>0)&0xFF) + + #define MINIMAL_APP_VERSION VERSION(MINIMAL_APP_VERSION_MAJOR, MINIMAL_APP_VERSION_MINOR, MINIMAL_APP_VERSION_MICRO) + void register_all(std::map<std::string, std::unique_ptr<device>> ®istry); #ifdef WITH_DEVICE_LEDGER |