7#include <QtCore/QElapsedTimer>
10#include <QtCore/QObject>
12#include <QtCore/QStringList>
13#include <QtQmlIntegration/QtQmlIntegration>
22 QML_UNCREATABLE(
"Managed by QGroundControl")
90 static QList<Port> _enumeratePorts();
93 QStringList _serialPorts;
94 QElapsedTimer _scanTimer;
95 QHash<QString, std::weak_ptr<const Reservation>> _reservations;
96 QHash<QString, std::weak_ptr<const Reservation>> _autoConnectExclusions;
97 bool _singlePortOnly =
false;
109 bool settled(
const QString& port, quint64 nowUs)
111 const auto it = _deadlinesUs.constFind(port);
112 if (it == _deadlinesUs.cend()) {
113 _deadlinesUs.insert(port, nowUs + std::chrono::duration_cast<std::chrono::microseconds>(
121 bool contains(
const QString& port)
const {
return _deadlinesUs.contains(port); }
123 bool isEmpty()
const {
return _deadlinesUs.isEmpty(); }
125 void remove(
const QString& port) { _deadlinesUs.remove(port); }
128 template <
typename Predicate>
131 _deadlinesUs.removeIf([&forget](
const auto& it) {
return forget(it.key()); });
134 void clear() { _deadlinesUs.clear(); }
137 QMap<QString, quint64> _deadlinesUs;
Shared serial inventory and exclusive claims. Called on the application thread.
static SerialPortManager * instance()
bool anyPortReserved() const
std::shared_ptr< const Reservation > ReservationPtr
static QStringList supportedBaudRates()
bool canReservePort(const QString &systemLocation) const
bool isAutoConnectExcluded(const QString &systemLocation) const
void serialPortsChanged()
bool isPortReserved(const QString &systemLocation) const
bool canAutoConnectPort(const QString &systemLocation) const
static bool isPrimaryInterface(const Port &port, QSet< QString > &seenDevices)
static constexpr std::chrono::milliseconds NEW_PORT_SETTLE_DELAY
How long a newly listed port settles before automatic connection opens it.
ReservationPtr excludeFromAutoConnect(const QString &systemLocation)
Routing exclusions survive reconnects without marking the hardware occupied.
QList< Port > availablePorts()
QString displayName(const QString &systemLocation)
void portsEnumerated(const QStringList &availablePorts)
Emitted only after a fresh scan, never for a retained Android snapshot. Includes native names and pat...
std::function< QList< Port >()> Enumerator
ReservationPtr reservePort(const QString &systemLocation)
void rescan()
As availablePorts(), without reusing a scan made less than a second ago.
QStringList serialPorts() const
void setSinglePortOnly(bool enabled)
friend class SerialAutoConnectTest
friend class LinkManagerTest
void removeIf(Predicate forget)
Forgets the ports forget returns true for.
bool contains(const QString &port) const
bool settled(const QString &port, quint64 nowUs)
Records port as listed at nowUs; true once it has been listed for the settle delay.
void remove(const QString &port)
QGCSerialPortInfo::BoardType_t boardType
QString physicalDeviceId
Shared by interfaces with the same VID/PID/serial; empty when identity is unavailable.