132 lines
4.3 KiB
C++
132 lines
4.3 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
|