28 const auto isAbsentLocation = [&ports](
const QString& location) {
29 return std::none_of(ports.cbegin(), ports.cend(),
30 [&location](
const auto& port) { return port.systemLocation == location; });
32 const auto isAbsent = [&isAbsentLocation](
const auto& entry) {
return isAbsentLocation(entry.key()); };
33 _identities.removeIf(isAbsent);
34 for (
const auto& port : ports) {
35 const Identity identity{port.physicalDeviceId, port.boardType, port.bootloader};
36 const auto previous = _identities.constFind(port.systemLocation);
37 if (previous != _identities.cend() && previous.value() != identity) {
38 _configs.remove(port.systemLocation);
39 _waitingPorts.
remove(port.systemLocation);
41 _identities.insert(port.systemLocation, identity);
43 _configs.removeIf(isAbsent);
44 _waitingPorts.
removeIf(isAbsentLocation);
46 QSet<QString> seenDevices;
48 if (!_allowed(port.boardType, options) || port.bootloader ||
57 auto config = _configs.value(port.systemLocation);
60 config->noteReconnectAttempt();
68 _waitingPorts.
remove(port.systemLocation);
70 QCoreApplication::translate(
"LinkManager",
"%1 on %2 (AutoConnect)").arg(port.boardName, port.portName));
74 serialConfig->setDynamic(
true);
75 serialConfig->setPortName(port.systemLocation);
76 serialConfig->setAutoConnect(
true);
77 config.reset(serialConfig);
78 _configs.insert(port.systemLocation,
config);
79 config->noteReconnectAttempt();