summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSzczepan Zalega <szczepan@nitrokey.com>2017-12-12 16:58:24 +0100
committerSzczepan Zalega <szczepan@nitrokey.com>2018-02-23 15:42:37 +0100
commit809b618d4d064cedc7070cac5ccc8797e5d89f54 (patch)
treed2423759226e6f0a7d016ca2866acd03c35abbe7
parent0b0898f2b5d88738aa8f49ce6b9ba98db1c775f7 (diff)
downloadlibnitrokey-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.cc7
-rw-r--r--NK_C_API.h8
-rw-r--r--NitrokeyManager.cc18
-rw-r--r--include/NitrokeyManager.h2
-rw-r--r--include/stick10_commands.h8
-rw-r--r--include/stick20_commands.h9
-rw-r--r--unittest/conftest.py2
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();
});
}
diff --git a/NK_C_API.h b/NK_C_API.h
index a4fb088..0131caa 100644
--- a/NK_C_API.h
+++ b/NK_C_API.h
@@ -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)