summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobin Krahl <robin.krahl@ireas.org>2019-01-27 23:34:04 +0000
committerRobin Krahl <robin.krahl@ireas.org>2019-01-28 00:36:53 +0100
commit1d68e24db4078ad1a004afd7bec90a81e7d31ec8 (patch)
treefafbdf83ccf00838adf224bec0813320a23d75cc /src
parentc30cbd35ba187cd6e5055d3beb8420b11fb030ec (diff)
downloadnitrokey-rs-1d68e24db4078ad1a004afd7bec90a81e7d31ec8.tar.gz
nitrokey-rs-1d68e24db4078ad1a004afd7bec90a81e7d31ec8.tar.bz2
Add get_firmware_version method
This patch combines the get_{major,minor}_firmware_version methods into the new get_firmware_version method that returns a FirmwareVersion struct. Currently, this requires casting from i32 to u8. But this will be fixed with the next libnitrokey version as we change the return types for the firmware getters.
Diffstat (limited to 'src')
-rw-r--r--src/device.rs45
1 files changed, 16 insertions, 29 deletions
diff --git a/src/device.rs b/src/device.rs
index 4178922..2fac4f2 100644
--- a/src/device.rs
+++ b/src/device.rs
@@ -379,7 +379,7 @@ pub trait Device: Authenticate + GetPasswordSafe + GenerateOtp + fmt::Debug {
result_or_error(unsafe { nitrokey_sys::NK_get_admin_retry_count() })
}
- /// Returns the major part of the firmware version (should be zero).
+ /// Returns the firmware version.
///
/// # Example
///
@@ -389,37 +389,24 @@ pub trait Device: Authenticate + GetPasswordSafe + GenerateOtp + fmt::Debug {
///
/// # fn try_main() -> Result<(), Error> {
/// let device = nitrokey::connect()?;
- /// println!(
- /// "Firmware version: {}.{}",
- /// device.get_major_firmware_version().unwrap(),
- /// device.get_minor_firmware_version().unwrap(),
- /// );
+ /// match device.get_firmware_version() {
+ /// Ok(version) => println!("Firmware version: {}", version),
+ /// Err(err) => println!("Could not access firmware version: {}", err),
+ /// };
/// # Ok(())
/// # }
/// ```
- fn get_major_firmware_version(&self) -> Result<i32, Error> {
- result_or_error(unsafe { nitrokey_sys::NK_get_major_firmware_version() })
- }
-
- /// Returns the minor part of the firmware version (for example 8 for version 0.8).
- ///
- /// # Example
- ///
- /// ```no_run
- /// use nitrokey::Device;
- /// # use nitrokey::Error;
- ///
- /// # fn try_main() -> Result<(), Error> {
- /// let device = nitrokey::connect()?;
- /// println!(
- /// "Firmware version: {}.{}",
- /// device.get_major_firmware_version().unwrap(),
- /// device.get_minor_firmware_version().unwrap(),
- /// );
- /// # Ok(())
- /// # }
- fn get_minor_firmware_version(&self) -> Result<i32, Error> {
- result_or_error(unsafe { nitrokey_sys::NK_get_minor_firmware_version() })
+ fn get_firmware_version(&self) -> Result<FirmwareVersion, Error> {
+ let major = result_or_error(unsafe { nitrokey_sys::NK_get_major_firmware_version() })?;
+ let minor = result_or_error(unsafe { nitrokey_sys::NK_get_minor_firmware_version() })?;
+ let max = i32::from(u8::max_value());
+ if major < 0 || minor < 0 || major > max || minor > max {
+ return Err(Error::UnexpectedError);
+ }
+ Ok(FirmwareVersion {
+ major: major as u8,
+ minor: minor as u8,
+ })
}
/// Returns the current configuration of the Nitrokey device.