diff options
| author | Szczepan Zalega <szczepan@nitrokey.com> | 2017-03-09 17:36:39 +0100 | 
|---|---|---|
| committer | Szczepan Zalega <szczepan@nitrokey.com> | 2017-03-11 15:41:53 +0100 | 
| commit | 077aa887ba94e93006feadc28a06c13c829d318a (patch) | |
| tree | 368693019e99ef2b83c6c80931213bda53e701ba /include | |
| parent | 6c2e2c8177ff6bf5731ea25f3211fc6d889628d6 (diff) | |
| download | libnitrokey-077aa887ba94e93006feadc28a06c13c829d318a.tar.gz libnitrokey-077aa887ba94e93006feadc28a06c13c829d318a.tar.bz2 | |
Dynamically increase delay between retries on busy status
Signed-off-by: Szczepan Zalega <szczepan@nitrokey.com>
Diffstat (limited to 'include')
| -rw-r--r-- | include/device_proto.h | 9 | 
1 files changed, 6 insertions, 3 deletions
| diff --git a/include/device_proto.h b/include/device_proto.h index f1f52d6..b137689 100644 --- a/include/device_proto.h +++ b/include/device_proto.h @@ -261,6 +261,8 @@ namespace nitrokey {                  // FIXME make checks done in device:recv here                  receiving_retry_counter = dev->get_retry_receiving_count(); +                int busy_counter = 0; +                auto retry_timeout = dev->get_retry_timeout();                  while (receiving_retry_counter-- > 0) {                    dev->m_counters.recv_executed++;                    status = dev->recv(&resp); @@ -302,16 +304,17 @@ namespace nitrokey {                      break;                    }                    if (resp.device_status == static_cast<uint8_t>(stick10::device_status::busy)) { -                    static int busy_counter = 0;                      dev->m_counters.busy++;                      if (busy_counter++<10) {                        receiving_retry_counter++;                        LOG("Status busy, not decreasing receiving_retry_counter counter: " +                                        std::to_string(receiving_retry_counter), Loglevel::DEBUG_L2);                      } else { +                      retry_timeout *= 2;                        busy_counter = 0;                        LOG("Status busy, decreasing receiving_retry_counter counter: " + -                                      std::to_string(receiving_retry_counter), Loglevel::DEBUG); +                                      std::to_string(receiving_retry_counter) + ", current delay:" +                          + std::to_string(retry_timeout.count()), Loglevel::DEBUG);                      }                    }                    if (resp.device_status == static_cast<uint8_t>(stick10::device_status::busy) && @@ -335,7 +338,7 @@ namespace nitrokey {                    LOG("Invalid incoming HID packet:", Loglevel::DEBUG_L2);                    LOG(static_cast<std::string>(resp), Loglevel::DEBUG_L2);                    dev->m_counters.total_retries++; -                  std::this_thread::sleep_for(dev->get_retry_timeout()); +                  std::this_thread::sleep_for(retry_timeout);                    continue;                  }                  if (successful_communication) break; | 
