AusweisApp2
ReaderManager.h
gehe zur Dokumentation dieser Datei
1 
5 #pragma once
6 
8 #include "Env.h"
9 #include "Reader.h"
10 #include "ReaderFilter.h"
11 #include "ReaderManagerWorker.h"
12 
13 #include <QMutex>
14 #include <QPointer>
15 #include <QThread>
16 
17 
18 namespace governikus
19 {
21  : public QObject
22  , private Env::ThreadSafe
23 {
24  Q_OBJECT
25  friend class Env;
26 
27  private:
28  mutable QMutex mMutex;
29  QThread mThread;
30  QPointer<ReaderManagerWorker> mWorker;
31  QMap<QString, ReaderInfo> mReaderInfoCache;
32  QMap<ReaderManagerPlugInType, ReaderManagerPlugInInfo> mPlugInInfoCache;
33 
34  protected:
35  ReaderManager();
36  ~ReaderManager() override;
37 
38  public:
43  void init();
44 
48  void reset(ReaderManagerPlugInType pType);
49 
53  void startScanAll(bool pAutoConnect = true);
54 
58  void startScan(ReaderManagerPlugInType pType, bool pAutoConnect = true);
59 
63  void stopScanAll(const QString& pError = QString());
64 
68  bool isScanRunning() const;
69 
73  bool isScanRunning(ReaderManagerPlugInType pType) const;
74 
80  void stopScan(ReaderManagerPlugInType pType, const QString& pError = QString());
81 
82  QVector<ReaderManagerPlugInInfo> getPlugInInfos() const;
83  virtual QVector<ReaderInfo> getReaderInfos(const ReaderFilter& pFilter = ReaderFilter()) const;
84  ReaderInfo getReaderInfo(const QString& pReaderName) const;
85  void updateReaderInfo(const QString& pReaderName);
86 
93  template<typename T>
94  QMetaObject::Connection callCreateCardConnectionCommand(const QString& pReaderName, const typename QtPrivate::FunctionPointer<T>::Object* pReceiver, T pSlot)
95  {
96  auto* command = new CreateCardConnectionCommand(pReaderName, mWorker);
97  QMetaObject::Connection connection = connect(command, &CreateCardConnectionCommand::fireCommandDone, pReceiver, pSlot, Qt::UniqueConnection);
98  if (connection)
99  {
100  command->run();
101  }
102  else
103  {
104  qCCritical(card) << "Cannot invoke CreateCardConnectionCommand command";
105  command->deleteLater();
106  }
107 
108  return connection;
109  }
110 
111 
112  void updateRetryCounters();
113 
114  Q_SIGNALS:
115  void firePluginAdded(const ReaderManagerPlugInInfo& pInfo);
116  void fireStatusChanged(const ReaderManagerPlugInInfo& pInfo);
117  void fireReaderAdded(const ReaderInfo& pInfo);
118  void fireReaderRemoved(const ReaderInfo& pInfo);
119  void fireReaderPropertiesUpdated(const ReaderInfo& pInfo);
120  void fireCardInserted(const ReaderInfo& pInfo);
121  void fireCardRemoved(const ReaderInfo& pInfo);
122  void fireCardRetryCounterChanged(const ReaderInfo& pInfo);
123  void fireReaderEvent();
124  void fireInitialized();
125 
126  private Q_SLOTS:
127  void doUpdateCacheEntry(const ReaderInfo& pInfo);
128  void doRemoveCacheEntry(const ReaderInfo& pInfo);
129  void doFullUpdateCache(const ReaderManagerPlugInInfo& pInfo);
130 
131  public Q_SLOTS:
136  void shutdown();
137 };
138 
139 } // namespace governikus
void startScanAll(bool pAutoConnect=true)
Starts a scan for all device types.
Definition: ReaderManager.cpp:142
ReaderManager()
Definition: ReaderManager.cpp:14
Definition: Env.h:46
void fireCardRetryCounterChanged(const ReaderInfo &pInfo)
Definition: ReaderFilter.h:20
void fireReaderRemoved(const ReaderInfo &pInfo)
bool isScanRunning() const
Queries if any plugin is currently scanning.
Definition: ReaderManager.cpp:177
Definition: ReaderInfo.h:16
~ReaderManager() override
Definition: ReaderManager.cpp:24
void updateRetryCounters()
Definition: ReaderManager.cpp:299
void reset(ReaderManagerPlugInType pType)
Resets the plugins matching the given type.
Definition: ReaderManager.cpp:87
Implementation of ActivationContext for Intent based activation on Android systems.
Definition: ActivationContext.h:14
QMetaObject::Connection callCreateCardConnectionCommand(const QString &pReaderName, const typename QtPrivate::FunctionPointer< T >::Object *pReceiver, T pSlot)
Executes a command to create a CardConnection for a specified reader.
Definition: ReaderManager.h:94
void init()
Initialize the reader manager service.
Definition: ReaderManager.cpp:39
void fireStatusChanged(const ReaderManagerPlugInInfo &pInfo)
void firePluginAdded(const ReaderManagerPlugInInfo &pInfo)
void stopScanAll(const QString &pError=QString())
Stops scan for all device types.
Definition: ReaderManager.cpp:168
Definition: CreateCardConnectionCommand.h:22
#define T(v)
Definition: http_parser.cpp:237
void updateReaderInfo(const QString &pReaderName)
Definition: ReaderManager.cpp:290
void stopScan(ReaderManagerPlugInType pType, const QString &pError=QString())
Stops started scan for devices.
Definition: ReaderManager.cpp:151
void fireCardRemoved(const ReaderInfo &pInfo)
QVector< ReaderManagerPlugInInfo > getPlugInInfos() const
Definition: ReaderManager.cpp:205
Definition: Env.h:43
void shutdown()
Shuts down the reader manager service.
Definition: ReaderManager.cpp:104
void fireReaderAdded(const ReaderInfo &pInfo)
void fireCommandDone(QSharedPointer< CreateCardConnectionCommand > pCommand)
void startScan(ReaderManagerPlugInType pType, bool pAutoConnect=true)
Starts a scan for devices if registered plugin don&#39;t scan anytime.
Definition: ReaderManager.cpp:125
virtual QVector< ReaderInfo > getReaderInfos(const ReaderFilter &pFilter=ReaderFilter()) const
Definition: ReaderManager.cpp:265
void fireReaderPropertiesUpdated(const ReaderInfo &pInfo)
Definition: ReaderManager.h:20
ReaderInfo getReaderInfo(const QString &pReaderName) const
Definition: ReaderManager.cpp:280
void fireCardInserted(const ReaderInfo &pInfo)