aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/LongOperationInProgressException.h10
-rw-r--r--include/device_proto.h15
2 files changed, 13 insertions, 12 deletions
diff --git a/include/LongOperationInProgressException.h b/include/LongOperationInProgressException.h
index 673a218..7f182b0 100644
--- a/include/LongOperationInProgressException.h
+++ b/include/LongOperationInProgressException.h
@@ -5,16 +5,16 @@
#ifndef LIBNITROKEY_LONGOPERATIONINPROGRESSEXCEPTION_H
#define LIBNITROKEY_LONGOPERATIONINPROGRESSEXCEPTION_H
+#include "CommandFailedException.h"
-class LongOperationInProgressException : public std::exception {
+class LongOperationInProgressException : public CommandFailedException {
public:
unsigned char progress_bar_value;
- unsigned char command_id;
- LongOperationInProgressException(unsigned char _command_id, unsigned char _progress_bar_value) {
- command_id = _command_id;
- progress_bar_value = _progress_bar_value;
+ LongOperationInProgressException(
+ unsigned char _command_id, uint8_t last_command_status, unsigned char _progress_bar_value)
+ : CommandFailedException(_command_id, last_command_status), progress_bar_value(_progress_bar_value){
nitrokey::log::Log::instance()(
std::string("LongOperationInProgressException, progress bar status: ")+
std::to_string(progress_bar_value), nitrokey::log::Loglevel::DEBUG);
diff --git a/include/device_proto.h b/include/device_proto.h
index 187d25c..0953566 100644
--- a/include/device_proto.h
+++ b/include/device_proto.h
@@ -316,21 +316,22 @@ namespace nitrokey {
clear_packet(outp);
if (status <= 0)
- throw std::runtime_error(
+ throw std::runtime_error( //FIXME replace with CriticalErrorException
std::string("Device error while executing command ") +
std::to_string(status));
- if (resp.device_status == static_cast<uint8_t>(stick10::device_status::busy) &&
- static_cast<stick20::device_status>(resp.storage_status.device_status)
- == stick20::device_status::busy_progressbar){
- throw LongOperationInProgressException(resp.command_id, resp.storage_status.progress_bar_value);
- }
-
Log::instance()("Incoming HID packet:", Loglevel::DEBUG);
Log::instance()(static_cast<std::string>(resp), Loglevel::DEBUG);
Log::instance()(std::string("receiving_retry_counter count: ") + std::to_string(receiving_retry_counter),
Loglevel::DEBUG);
+ if (resp.device_status == static_cast<uint8_t>(stick10::device_status::busy) &&
+ static_cast<stick20::device_status>(resp.storage_status.device_status)
+ == stick20::device_status::busy_progressbar){
+ throw LongOperationInProgressException(
+ resp.command_id, resp.device_status, resp.storage_status.progress_bar_value);
+ }
+
if (!resp.isValid()) throw std::runtime_error("Invalid incoming packet");
if (receiving_retry_counter <= 0)
throw std::runtime_error(