diff options
| -rw-r--r-- | include/LongOperationInProgressException.h | 10 | ||||
| -rw-r--r-- | include/device_proto.h | 15 | 
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( | 
