Windows2003-3790/drivers/smartcrd/gempc430/usbreader.h
2020-09-30 16:53:55 +02:00

132 lines
4.4 KiB
C++

// Gemplus (C) 1999
//
// Version 1.0
// Author: Sergey Ivanov
// Date of creation - 11.01.1999
// Change log:
//
#ifndef USB_READER
#define USB_READER
#include "debug.h"
#include "thread.h"
#include "usbdev.h"
#include "reader.h"
class CUSBDevice;
class CReader;
class CSmartCard;
//class CGemCore;//TOBE REMOVED
#pragma PAGEDCODE
class CUSBReader : public CUSBDevice, public CReader
{
public:
NTSTATUS m_Status;
SAFE_DESTRUCTORS();
virtual VOID dispose(){self_delete();};
protected:
virtual ~CUSBReader();
public:
CUSBReader();
virtual PDEVICE_OBJECT getSystemDeviceObject()
{
PDEVICE_OBJECT pFdo = getSystemObject();
TRACE("Reader reports device object 0x%x\n",pFdo);
return pFdo;
};
virtual VOID reader_set_busy();
virtual VOID reader_set_Idle();
virtual NTSTATUS reader_WaitForIdle();
virtual NTSTATUS reader_WaitForIdleAndBlock();
// We support asynchronous communications only for Open and DeviceIOControl functions...
virtual NTSTATUS open(PIRP Irp);
virtual NTSTATUS thread_open(IN PIRP Irp);
virtual NTSTATUS close(PIRP Irp);
virtual NTSTATUS deviceControl(IN PIRP Irp);
virtual NTSTATUS thread_deviceControl(IN PIRP Irp);
virtual NTSTATUS cleanup(PIRP irp);
//Overwrite some generic USB device handlers
virtual NTSTATUS PnP_HandleSurprizeRemoval(IN PIRP Irp);
virtual VOID setNotificationState(ULONG state){StateToNotify = state;};
virtual ULONG getNotificationState(){ return StateToNotify;};
virtual BOOL isSmartCardInitialized(){return scard_Initialized;};
virtual VOID setSmartCardInitialized(BOOL state) {scard_Initialized = state;};
virtual PSMARTCARD_EXTENSION getCardExtention()
{
return &smartCardExtention;
};
virtual CSmartCard* getSmartCard()
{
return smartCard;
};
//virtual BOOL createInterface(LONG interfaceType, LONG protocolType,CDevice* device);//TOBE CHANGED
virtual BOOL createInterface(LONG interfaceType, LONG protocolType,CUSBReader* device);
virtual VOID initializeSmartCardSystem();
virtual ULONG reader_UpdateCardState();
virtual VOID completeCardTracking();
virtual BOOLEAN setDevicePowerState(IN DEVICE_POWER_STATE DeviceState);
// Do specific step on the way system goes down
virtual VOID onSystemPowerDown();
virtual VOID onSystemPowerUp();
virtual NTSTATUS reader_getVersion(PUCHAR pVersion, PULONG pLength);
virtual NTSTATUS reader_setMode(ULONG mode);
#ifdef DEBUG
virtual NTSTATUS reader_Read(IN PIRP Irp);
virtual NTSTATUS reader_Write(IN PIRP Irp);
#endif
virtual NTSTATUS reader_Read(BYTE * pRequest,ULONG RequestLength,BYTE * pReply,ULONG* pReplyLength);
virtual NTSTATUS reader_Write(BYTE* pRequest,ULONG RequestLength,BYTE * pReply,ULONG* pReplyLength);
virtual NTSTATUS reader_Ioctl(ULONG ControlCode,BYTE* pRequest,ULONG RequestLength,BYTE* pReply,ULONG* pReplyLength);
virtual NTSTATUS reader_SwitchSpeed(ULONG ControlCode,BYTE* pRequest,ULONG RequestLength,BYTE* pReply,ULONG* pReplyLength);
virtual NTSTATUS reader_VendorAttribute(ULONG ControlCode,BYTE* pRequest,ULONG RequestLength,BYTE* pReply,ULONG* pReplyLength);
virtual NTSTATUS reader_Power(ULONG ControlCode,BYTE* pReply,ULONG* pReplyLength, BOOLEAN Specific);
virtual NTSTATUS reader_SetProtocol(ULONG ProtocolRequested, UCHAR ProtocolNegociation);
virtual NTSTATUS setTransparentConfig(PSCARD_CARD_CAPABILITIES cardCapabilities, BYTE NewWtx);
virtual NTSTATUS reader_translate_request(BYTE * pRequest,ULONG RequestLength,BYTE * pReply,ULONG* pReplyLength, PSCARD_CARD_CAPABILITIES cardCapabilities, BYTE NewWtx);
virtual NTSTATUS reader_translate_response(BYTE * pRequest,ULONG RequestLength,BYTE * pReply,ULONG* pReplyLength);
#ifdef DEBUG
// virtual NTSTATUS read(IN PIRP Irp);
// virtual NTSTATUS write(IN PIRP Irp);
#endif
static VOID PoolingThreadFunction(CUSBReader* device);
virtual NTSTATUS PoolingThreadRoutine();
virtual NTSTATUS startIoRequest(CPendingIRP* IrpReq);
virtual NTSTATUS ThreadRoutine();//Overwrite standard function...
virtual VOID onDeviceStart();
virtual VOID onDeviceStop();
private:
BOOL scard_Initialized;
// Interface to communicate with reader from smartCard system...
CReaderInterface* interface;
//CGemCore* interface;//TOBE CHANGED
//ULONG CardState;
ULONG StateToNotify;
CSmartCard* smartCard;
SMARTCARD_EXTENSION smartCardExtention;
CThread* PoolingThread;
};
#endif // If defined