|
|
// 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
|