diff options
| author | Szczepan Zalega <szczepan@nitrokey.com> | 2017-12-12 16:58:24 +0100 | 
|---|---|---|
| committer | Szczepan Zalega <szczepan@nitrokey.com> | 2018-02-23 15:42:37 +0100 | 
| commit | 809b618d4d064cedc7070cac5ccc8797e5d89f54 (patch) | |
| tree | d2423759226e6f0a7d016ca2866acd03c35abbe7 | |
| parent | 0b0898f2b5d88738aa8f49ce6b9ba98db1c775f7 (diff) | |
| download | libnitrokey-809b618d4d064cedc7070cac5ccc8797e5d89f54.tar.gz libnitrokey-809b618d4d064cedc7070cac5ccc8797e5d89f54.tar.bz2 | |
Correct getting minor and major from firmware version
Add get_minor_firmware_version
Correct get_major_firmware version (was returning minor instead)
Name 3rd version field for test builds
Use minor firmware version in tests
Signed-off-by: Szczepan Zalega <szczepan@nitrokey.com>
| -rw-r--r-- | NK_C_API.cc | 7 | ||||
| -rw-r--r-- | NK_C_API.h | 8 | ||||
| -rw-r--r-- | NitrokeyManager.cc | 18 | ||||
| -rw-r--r-- | include/NitrokeyManager.h | 2 | ||||
| -rw-r--r-- | include/stick10_commands.h | 8 | ||||
| -rw-r--r-- | include/stick20_commands.h | 9 | ||||
| -rw-r--r-- | unittest/conftest.py | 2 | 
7 files changed, 45 insertions, 9 deletions
| diff --git a/NK_C_API.cc b/NK_C_API.cc index 33a5fbb..c886b6a 100644 --- a/NK_C_API.cc +++ b/NK_C_API.cc @@ -569,6 +569,13 @@ extern "C" {  	NK_C_API int NK_get_major_firmware_version() {  		auto m = NitrokeyManager::instance();  		return get_with_result([&]() { +			return m->get_major_firmware_version(); +		}); +	} + +  NK_C_API int NK_get_minor_firmware_version() { +		auto m = NitrokeyManager::instance(); +		return get_with_result([&]() {  			return m->get_minor_firmware_version();  		});  	} @@ -360,10 +360,16 @@ extern "C" {  	/**  	 * Get device's major firmware version -	 * @return 7,8 for Pro and major for Storage +	 * @return major part of the version number (e.g. 0 from 0.48, 0 from 0.7 etc.)  	 */  	NK_C_API int NK_get_major_firmware_version(); +	/** +	 * Get device's minor firmware version +	 * @return minor part of the version number (e.g. 7 from 0.7, 48 from 0.48 etc.) +	 */ +	NK_C_API int NK_get_minor_firmware_version(); +  	/** diff --git a/NitrokeyManager.cc b/NitrokeyManager.cc index 14e3952..d12bf54 100644 --- a/NitrokeyManager.cc +++ b/NitrokeyManager.cc @@ -755,11 +755,25 @@ using nitrokey::misc::strcpyT;        switch(device->get_device_model()){          case DeviceModel::PRO:{            auto status_p = GetStatus::CommandTransaction::run(device); -          return status_p.data().firmware_version; //7 or 8 +          return status_p.data().firmware_version_st.minor; //7 or 8          }          case DeviceModel::STORAGE:{            auto status = stick20::GetDeviceStatus::CommandTransaction::run(device); -          return status.data().versionInfo.minor; +          auto test_firmware = status.data().versionInfo.build_iteration != 0; +          return status.data().versionInfo.minor + (test_firmware? 1 : 0); +        } +      } +      return 0; +    } +    int NitrokeyManager::get_major_firmware_version(){ +      switch(device->get_device_model()){ +        case DeviceModel::PRO:{ +          auto status_p = GetStatus::CommandTransaction::run(device); +          return status_p.data().firmware_version_st.major; //0 +        } +        case DeviceModel::STORAGE:{ +          auto status = stick20::GetDeviceStatus::CommandTransaction::run(device); +          return status.data().versionInfo.major;          }        }        return 0; diff --git a/include/NitrokeyManager.h b/include/NitrokeyManager.h index 8f47860..f6e02cc 100644 --- a/include/NitrokeyManager.h +++ b/include/NitrokeyManager.h @@ -210,6 +210,8 @@ char * strndup(const char* str, size_t maxlen);          void set_unencrypted_read_write_admin_pin(const char *admin_pin);          void set_unencrypted_read_only_admin_pin(const char *admin_pin); + +      int get_major_firmware_version();      };  } diff --git a/include/stick10_commands.h b/include/stick10_commands.h index c9a5e5b..893b98f 100644 --- a/include/stick10_commands.h +++ b/include/stick10_commands.h @@ -367,7 +367,13 @@ class ReadSlot : Command<CommandID::READ_SLOT> {  class GetStatus : Command<CommandID::GET_STATUS> {   public:    struct ResponsePayload { -    uint16_t firmware_version; +    union { +      uint16_t firmware_version; +      struct { +        uint8_t minor; +        uint8_t major; +      } firmware_version_st; +    };      union{        uint8_t card_serial[4];        uint32_t card_serial_u32; diff --git a/include/stick20_commands.h b/include/stick20_commands.h index f45283f..4b75e6a 100644 --- a/include/stick20_commands.h +++ b/include/stick20_commands.h @@ -168,10 +168,10 @@ namespace nitrokey {                      union{                      uint8_t VersionInfo_au8[4];                          struct { -                            uint8_t _reserved; +                            uint8_t major;                              uint8_t minor;                              uint8_t _reserved2; -                            uint8_t major; +                            uint8_t build_iteration;                          } __packed versionInfo;                      } __packed; @@ -215,8 +215,9 @@ namespace nitrokey {                        print_to_ss((int) ReadWriteFlagUncryptedVolume_u8 );                        print_to_ss((int) ReadWriteFlagCryptedVolume_u8 );                        print_to_ss((int) ReadWriteFlagHiddenVolume_u8 ); -                      print_to_ss((int) VersionInfo_au8[1] ); -                      print_to_ss((int) VersionInfo_au8[3] ); +                      print_to_ss((int) versionInfo.major ); +                      print_to_ss((int) versionInfo.minor ); +                      print_to_ss((int) versionInfo.build_iteration );                        print_to_ss((int) FirmwareLocked_u8 );                        print_to_ss((int) NewSDCardFound_u8 );                        print_to_ss((int) NewSDCardFound_st.NewCard ); diff --git a/unittest/conftest.py b/unittest/conftest.py index 8f386e0..edcbff4 100644 --- a/unittest/conftest.py +++ b/unittest/conftest.py @@ -83,7 +83,7 @@ def C(request):          print('No devices detected!')      assert nk_login != 0  # returns 0 if not connected or wrong model or 1 when connected      global device_type -    firmware_version = C.NK_get_major_firmware_version() +    firmware_version = C.NK_get_minor_firmware_version()      model = 'P' if firmware_version in [7,8] else 'S'      device_type = (model, firmware_version) | 
