aboutsummaryrefslogtreecommitdiff
path: root/NK_C_API.cc
diff options
context:
space:
mode:
authorRobin Krahl <robin.krahl@ireas.org>2019-01-28 11:53:58 +0100
committerSzczepan Zalega <szczepan@nitrokey.com>2019-01-29 16:36:58 +0100
commitd82829f6fc0f55d3eddcf26d14637883541ce452 (patch)
treea09065b937c7b97bd1ed734c83f4fc4bdd89d7bb /NK_C_API.cc
parentb0d1d6a1a44210a25b3d0e6950ec08f551714ccf (diff)
downloadlibnitrokey-d82829f6fc0f55d3eddcf26d14637883541ce452.tar.gz
libnitrokey-d82829f6fc0f55d3eddcf26d14637883541ce452.tar.bz2
Add NK_get_status function to get status struct
Currently, the C API provides access to the device status using the NK_get_{major,minor}_firmware_version, NK_device_serial_number and NK_read_config functions. Each function sends a command to the device, although the data is returned in a single response. This patch adds a NK_status struct and a NK_get_status function that provide access to this data with a single command.
Diffstat (limited to 'NK_C_API.cc')
-rw-r--r--NK_C_API.cc24
1 files changed, 24 insertions, 0 deletions
diff --git a/NK_C_API.cc b/NK_C_API.cc
index eae35d5..6905ef4 100644
--- a/NK_C_API.cc
+++ b/NK_C_API.cc
@@ -261,6 +261,30 @@ extern "C" {
});
}
+ NK_C_API int NK_get_status(struct NK_status* out) {
+ if (out == nullptr) {
+ return -1;
+ }
+ auto m = NitrokeyManager::instance();
+ auto result = get_with_status([&]() {
+ return m->get_status();
+ }, proto::stick10::GetStatus::ResponsePayload());
+ auto error_code = std::get<0>(result);
+ if (error_code != 0) {
+ return error_code;
+ }
+
+ auto status = std::get<1>(result);
+ out->firmware_version_major = status.firmware_version_st.major;
+ out->firmware_version_minor = status.firmware_version_st.minor;
+ out->serial_number_smart_card = status.card_serial_u32;
+ out->config_numlock = status.numlock;
+ out->config_capslock = status.capslock;
+ out->config_scrolllock = status.scrolllock;
+ out->otp_user_password = status.enable_user_password != 0;
+ return 0;
+ }
+
NK_C_API char * NK_device_serial_number() {
auto m = NitrokeyManager::instance();
return get_with_string_result([&]() {