diff options
author | Robin Krahl <me@robin-krahl.de> | 2019-01-13 12:03:34 +0100 |
---|---|---|
committer | Robin Krahl <me@robin-krahl.de> | 2019-01-13 12:03:34 +0100 |
commit | 4a7ce051bd4004fb62f1c7022d92efa2ce42b6ab (patch) | |
tree | 35eef9d44c5c9a6413131599ddacb51e5c1ff140 | |
parent | eb55579c1c0e03ea98372280a344c79bb52a1f1a (diff) | |
download | libnitrokey-4a7ce051bd4004fb62f1c7022d92efa2ce42b6ab.tar.gz libnitrokey-4a7ce051bd4004fb62f1c7022d92efa2ce42b6ab.tar.bz2 |
Change Device::enumerate return type to use DeviceInfo
The return type of Device::enumerate is changed from
std::vector<std::string> to std::vector<DeviceInfo> to expose the
additional information contained in the DeviceInfo struct.
-rw-r--r-- | NitrokeyManager.cc | 10 | ||||
-rw-r--r-- | device.cc | 11 | ||||
-rw-r--r-- | libnitrokey/device.h | 8 | ||||
-rw-r--r-- | unittest/test_multiple_devices.cc | 6 |
4 files changed, 26 insertions, 9 deletions
diff --git a/NitrokeyManager.cc b/NitrokeyManager.cc index a950e4b..8825fce 100644 --- a/NitrokeyManager.cc +++ b/NitrokeyManager.cc @@ -109,7 +109,12 @@ using nitrokey::misc::strcpyT; std::lock_guard<std::mutex> lock(mex_dev_com_manager); auto p = make_shared<Stick20>(); - return p->enumerate(); // make static + auto device_infos = p->enumerate(); + std::vector<std::string> strings; + strings.resize(device_infos.size()); + std::transform(device_infos.begin(), device_infos.end(), strings.begin(), + [](auto device_info) { return device_info.m_path; }); + return strings; } std::vector<std::string> NitrokeyManager::list_devices_by_cpuID(){ @@ -130,7 +135,8 @@ using nitrokey::misc::strcpyT; auto d = make_shared<Stick20>(); const auto v = d->enumerate(); LOGD1("Discovering IDs"); - for (auto & p: v){ + for (auto & i: v){ + auto p = i.m_path; d = make_shared<Stick20>(); LOGD1( std::string("Found: ") + p ); d->set_path(p); @@ -171,14 +171,17 @@ int Device::recv(void *packet) { return status; } -std::vector<std::string> Device::enumerate(){ +std::vector<DeviceInfo> Device::enumerate(){ //TODO make static auto pInfo = hid_enumerate(m_vid, m_pid); auto pInfo_ = pInfo; - std::vector<std::string> res; + std::vector<DeviceInfo> res; while (pInfo != nullptr){ - std::string a (pInfo->path); - res.push_back(a); + std::string path(pInfo->path); + std::wstring serialNumber(pInfo->serial_number); + auto deviceModel = this->get_device_model(); + DeviceInfo info = { deviceModel, path, serialNumber }; + res.push_back(info); pInfo = pInfo->next; } diff --git a/libnitrokey/device.h b/libnitrokey/device.h index 1183c9c..1a84402 100644 --- a/libnitrokey/device.h +++ b/libnitrokey/device.h @@ -127,7 +127,13 @@ public: * @return true if visible by OS */ bool could_be_enumerated(); - std::vector<std::string> enumerate(); + /** + * Returns a vector with all connected Nitrokey devices of the same device + * type as this device. + * + * @return information about all connected devices + */ + std::vector<DeviceInfo> enumerate(); void show_stats(); diff --git a/unittest/test_multiple_devices.cc b/unittest/test_multiple_devices.cc index cd78681..b224653 100644 --- a/unittest/test_multiple_devices.cc +++ b/unittest/test_multiple_devices.cc @@ -37,7 +37,8 @@ TEST_CASE("List devices", "[BASIC]") { shared_ptr<Stick20> d = make_shared<Stick20>(); auto v = d->enumerate(); REQUIRE(v.size() > 0); - for (auto a : v){ + for (auto i : v){ + auto a = i.m_path; std::cout << a; d->set_path(a); d->connect(); @@ -57,7 +58,8 @@ TEST_CASE("Regenerate AES keys", "[BASIC]") { REQUIRE(v.size() > 0); std::vector<shared_ptr<Stick20>> devices; - for (auto a : v){ + for (auto i : v){ + auto a = i.m_path; std::cout << a << endl; d = make_shared<Stick20>(); d->set_path(a); |