//------------------------------------------------------------------- // This is abstract class for Reader Interface // Specific interfaces should use it as a parent device // Author: Sergey Ivanov // Log: // 11/09/99 - implemented //------------------------------------------------------------------- #ifndef __READER_INTERFACE__ #define __READER_INTERFACE__ #include "generic.h" #include "kernel.h" #include "rdrconfig.h" #define READER_INTERFACE_GEMCORE 1 #define READER_INTERFACE_OROS 2 #define READER_INTERFACE_USB 3 #define READER_INTERFACE_GPR 4 #define READER_MODE_NATIVE 1 #define READER_MODE_ROS 2 #define READER_MODE_TLP 3 #define INTERFACE_OUTPUT_BUFFER_SIZE 0x1000 #define INTERFACE_INPUT_BUFFER_SIZE 0x1000 #define VERSION_STRING_MAX_LENGTH 16 class CProtocol; class CDebug; class CMemory; class CIoPacket; #pragma PAGEDCODE class CReaderInterface { public: NTSTATUS m_Status; SAFE_DESTRUCTORS(); virtual VOID dispose(){self_delete();}; protected: // Internal buffers to manage Xfers... ULONG OutputBufferLength; PUCHAR pOutputBuffer; ULONG InputBufferLength; PUCHAR pInputBuffer; CDebug* debug; CProtocol* protocol; CMemory* memory; BOOL Initialized; UCHAR Version[VERSION_STRING_MAX_LENGTH]; ULONG Mode; protected: CReaderInterface(); virtual ~CReaderInterface(); public: CReaderInterface(CProtocol* protocol); virtual ReaderConfig getConfiguration() {ReaderConfig c; c.Type = 0; c.PresenceDetection = 0; c.Vpp = 0; c.Voltage = 0; c.PTSMode = 0; c.PTS0 = 0; c.PTS1 = 0; c.PTS2 = 0; c.PTS3 = 0; c.ActiveProtocol = 0; c.PowerTimeOut = 0; return c; }; virtual NTSTATUS setConfiguration(ReaderConfig configuration) {return STATUS_SUCCESS;}; virtual NTSTATUS setTransparentConfig(PSCARD_CARD_CAPABILITIES cardCapabilities, BYTE NewWtx) {return STATUS_SUCCESS;}; virtual NTSTATUS getReaderVersion(PUCHAR pVersion, PULONG pLength) {return STATUS_SUCCESS;}; virtual ULONG getReaderState() {return 0;}; virtual NTSTATUS setReaderMode(ULONG mode) {return STATUS_SUCCESS;}; virtual BOOL isInitialized(){return Initialized;}; virtual NTSTATUS initialize() {return STATUS_SUCCESS;}; // Pure virtual functions will be implemented by specific interfaces (expl: CGemCore)... virtual NTSTATUS read(CIoPacket* Irp) {return STATUS_SUCCESS;}; virtual NTSTATUS write(CIoPacket* Irp) {return STATUS_SUCCESS;}; virtual NTSTATUS readAndWait(PUCHAR pRequest,ULONG RequestLength,PUCHAR pReply,ULONG* pReplyLength) {return STATUS_SUCCESS;}; virtual NTSTATUS writeAndWait(PUCHAR pRequest,ULONG RequestLength,PUCHAR pReply,ULONG* pReplyLength) {return STATUS_SUCCESS;}; virtual NTSTATUS ioctl(ULONG ControlCode,PUCHAR pRequest,ULONG RequestLength,PUCHAR pReply,ULONG* pReplyLength) {return STATUS_SUCCESS;}; virtual NTSTATUS SwitchSpeed(ULONG ControlCode,PUCHAR pRequest,ULONG RequestLength,PUCHAR pReply,ULONG* pReplyLength) {return STATUS_SUCCESS;}; virtual NTSTATUS VendorAttribute(ULONG ControlCode,PUCHAR pRequest,ULONG RequestLength,PUCHAR pReply,ULONG* pReplyLength) {return STATUS_SUCCESS;}; virtual NTSTATUS power(ULONG ControlCode,PUCHAR pReply,ULONG* pReplyLength, BOOLEAN Specific) {return STATUS_SUCCESS;}; virtual NTSTATUS setProtocol(ULONG ProtocolRequested) {return STATUS_SUCCESS;}; virtual NTSTATUS translate_request(BYTE * pRequest,ULONG RequestLength,BYTE * pReply,ULONG* pReplyLength, PSCARD_CARD_CAPABILITIES cardCapabilities, BYTE NewWtx) {return STATUS_SUCCESS;}; virtual NTSTATUS translate_response(BYTE * pRequest,ULONG RequestLength,BYTE * pReply,ULONG* pReplyLength) {return STATUS_SUCCESS;}; virtual VOID cancel() {}; }; #endif