AusweisApp2/src/card/base/Reader.h

114 lines
2.2 KiB
C
Raw Normal View History

2017-07-03 09:30:10 +02:00
/*!
* \copyright Copyright (c) 2014 Governikus GmbH & Co. KG
*/
#pragma once
#include "Card.h"
2017-07-03 09:33:28 +02:00
#include "DeviceError.h"
2017-07-03 09:30:10 +02:00
#include "ReaderInfo.h"
#include <QObject>
#include <QSharedPointer>
#include <QTimerEvent>
namespace governikus
{
class CardConnectionWorker;
class Reader
: public QObject
{
Q_OBJECT
protected:
enum class CardEvent
{
NONE, CARD_INSERTED, CARD_REMOVED,
};
ReaderInfo mReaderInfo;
int mTimerId;
bool mUpdateRetryCounter;
void timerEvent(QTimerEvent* pEvent) override;
/*!
* Periodically called to perform an update of the readers and cards state.
*/
void update();
private:
virtual CardEvent updateCard() = 0;
void updateRetryCounterIfNecessary();
2017-07-03 09:33:28 +02:00
CardReturnCode getRetryCounter(QSharedPointer<CardConnectionWorker> pCardConnectionWorker, int& pRetryCounter, bool& pPinDeactivated);
2017-07-03 09:30:10 +02:00
void fireUpdateSignal(CardEvent pCardEvent);
public:
Reader(ReaderManagerPlugInType pPlugInType, const QString& pReaderName, ReaderType pType);
virtual ~Reader();
const QString& getName() const
{
return mReaderInfo.getName();
}
ReaderType getReaderType() const
{
return mReaderInfo.getReaderType();
}
const ReaderInfo& getReaderInfo() const
{
return mReaderInfo;
}
virtual Card* getCard() const = 0;
2017-09-15 10:23:30 +02:00
void setPukInoperative();
2017-07-03 09:30:10 +02:00
/*!
* \brief Creates a new CardConnectionWorker if and only if there is a card in the reader which is not already exclusively connected.
* \return a new CardConnectionWorker
*/
QSharedPointer<CardConnectionWorker> createCardConnectionWorker();
2017-07-03 09:33:28 +02:00
CardReturnCode updateRetryCounter(QSharedPointer<CardConnectionWorker> pCardConnectionWorker);
2017-07-03 09:30:10 +02:00
Q_SIGNALS:
void fireCardInserted(const QString& pReaderName);
void fireCardRemoved(const QString& pReaderName);
void fireCardRetryCounterChanged(const QString& pReaderName);
2017-07-03 09:33:28 +02:00
void fireReaderPropertiesUpdated(const QString& pReaderName);
void fireReaderDeviceError(DeviceError pDeviceError);
2017-07-03 09:30:10 +02:00
public Q_SLOTS:
void onRetryCounterPotentiallyChanged();
};
class ConnectableReader
2017-07-03 09:33:28 +02:00
: public Reader
2017-07-03 09:30:10 +02:00
{
2017-07-03 09:33:28 +02:00
Q_OBJECT
2017-07-03 09:30:10 +02:00
public:
2017-07-03 09:33:28 +02:00
using Reader::Reader;
2017-07-03 09:30:10 +02:00
virtual ~ConnectableReader();
virtual void connectReader() = 0;
virtual void disconnectReader() = 0;
};
} /* namespace governikus */