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

272 lines
5.8 KiB
C

/*++
Copyright (c) 1998 Gemplus Development
Name:
gprcmd.h
Description:
This module holds the prototypes of the functions
from gprcmd.c
Environment:
Kernel Mode
Revision History:
06/04/99: (Y. Nadeau + M. Veillette)
- Code Review
06/05/98: V1.00.003 (P. Plouidy)
- Power management for NT5
10/02/98: V1.00.002 (P. Plouidy)
- Plug and Play for NT5
03/07/97: V1.00.001 (P. Plouidy)
- Start of development.
--*/
// Include
// - smclib.h: smart card library definitions.
#include <smclib.h>
#ifndef _GPRCMD_
#define _GPRCMD_
//
// To give possibility for recognition of driver
//
#define ATTR_MANUFACTURER_NAME "Gemplus"
#define ATTR_ORIGINAL_FILENAME "Gpr400.sys"
#define ATTR_LENGTH 32
//
// - SCARD_ATTR_SPEC_BAUD_RATE is the Tag for the speed in use between the
// system and the reader.
// - SCARD_ATTR_SPEC_CMD_TIMEOUT is the Tag for the value of the Cmd Timeout.
// - SCARD_ATTR_SPEC_POWER_TIMEOUT is the Tag for the value of the Power
// Timeout.
// - SCARD_ATTR_SPEC_APDU_TIMEOUT is the Tag to access at the value of the APDU
// Timeout.
//
#define SCARD_ATTR_SPEC_BAUD_RATE SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED,0x0180)
#define SCARD_ATTR_SPEC_CMD_TIMEOUT SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED,0x0181)
#define SCARD_ATTR_SPEC_POWER_TIMEOUT SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED,0x0182)
#define SCARD_ATTR_SPEC_APDU_TIMEOUT SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED,0x0183)
#define SCARD_ATTR_MANUFACTURER_NAME SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED,0x0190)
#define SCARD_ATTR_ORIGINAL_FILENAME SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_DEFINED,0x0191)
//
// - IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE defines a specific IOCTL for the Gemplus
// Reader to exchange data with the reader without control of the driver.
// - IOCTL_SMARTCARD_VENDOR_GET_ATTRIBUTE defines a specific IOCTL for the Gemplus
// Reader to gets vendor attributes.
// - IOCTL_SMARTCARD_VENDOR_SET_ATTRIBUTE defines a specific IOCTL for the Gemplus
// Reader to sets vendor attributes.
//
#define IOCTL_SMARTCARD_VENDOR_IFD_EXCHANGE CTL_CODE(FILE_DEVICE_SMARTCARD,2048,0,0)
#define IOCTL_SMARTCARD_VENDOR_GET_ATTRIBUTE CTL_CODE(FILE_DEVICE_SMARTCARD,2049,0,0)
#define IOCTL_SMARTCARD_VENDOR_SET_ATTRIBUTE CTL_CODE(FILE_DEVICE_SMARTCARD,2050,0,0)
// 2051 is reserved for Gcr420 keyboard reader.
#define IOCTL_SMARTCARD_VENDOR_SWITCH_SPEED CTL_CODE(FILE_DEVICE_SMARTCARD,2052,0,0)
#define LOWORD(l) ((USHORT)(l))
#define HIWORD(l) ((USHORT)(((UINT)(l)) >> 16))
#define LOBYTE(w) ((UCHAR)(w))
#define HIBYTE(w) ((UCHAR)(((USHORT)(w)) >> 8))
USHORT ATRLen
(
UCHAR *ATR,
USHORT MaxChar
);
BOOLEAN NeedToSwitchWithoutPTS
(
BYTE *ATR,
DWORD LengthATR
);
NTSTATUS ValidateDriver
(
PSMARTCARD_EXTENSION pSmartcardExtension
);
NTSTATUS Update
(
PSMARTCARD_EXTENSION pSmartcardExtension,
UCHAR Addr,
UCHAR Value
);
NTSTATUS UpdateORL
(
PSMARTCARD_EXTENSION pSmartcardExtension,
UCHAR Addr,
UCHAR Value
);
NTSTATUS T0toT1
(
PSMARTCARD_EXTENSION pSmartcardExtension
);
NTSTATUS T1toT0
(
PSMARTCARD_EXTENSION pSmartcardExtension
);
//
// Icc Functions
//
// - IccColdReset
// - IccWarmReset
// - IccPowerDown
// - IccIsoOutput
// - IccIsoInput
// - IccIsoT1
//
NTSTATUS IccColdReset
(
PSMARTCARD_EXTENSION SmartcardExtension
);
NTSTATUS IccPowerDown
(
PSMARTCARD_EXTENSION SmartcardExtension
);
NTSTATUS IccIsoOutput
(
PSMARTCARD_EXTENSION SmartcardExtension,
const UCHAR Command[5],
USHORT *RespLen,
UCHAR RespBuff[]
);
NTSTATUS IccIsoInput
(
PSMARTCARD_EXTENSION SmartcardExtension,
const UCHAR Command[5],
const UCHAR Data[],
USHORT *RespLen,
UCHAR RespBuff[]
);
NTSTATUS IccIsoT1
(
PSMARTCARD_EXTENSION SmartcardExtension,
const USHORT CmdLen,
const UCHAR Cmd[],
USHORT *RspLen,
UCHAR Rsp[]
);
//
// Ifd Functions
//
// - IfdReset
// - IfdCheck
// - IfdPowerDown
//
NTSTATUS IfdReset
(
PSMARTCARD_EXTENSION SmartcardExtension
);
NTSTATUS IfdCheck
(
PSMARTCARD_EXTENSION SmartcardExtension
);
NTSTATUS IfdPowerDown
(
PSMARTCARD_EXTENSION SmartcardExtension
);
NTSTATUS IfdConfig
(
PSMARTCARD_EXTENSION pSmartcardExtension,
UCHAR TA1
);
//
// Driver callback Functions
//
// - GprCbReaderPower
// - GprCbTransmit
// - GprCbSetProtocol
// - GprCbSetupCardTracking
// - GprCbVendorIoctl
//
NTSTATUS GprCbReaderPower
(
PSMARTCARD_EXTENSION SmartcardExtension
);
NTSTATUS GprCbTransmit
(
PSMARTCARD_EXTENSION SmartcardExtension
);
NTSTATUS GprCbSetProtocol
(
PSMARTCARD_EXTENSION SmartcardExtension
);
NTSTATUS GprCbSetupCardTracking
(
PSMARTCARD_EXTENSION SmartcardExtension
);
NTSTATUS GprCbVendorIoctl
(
PSMARTCARD_EXTENSION SmartcardExtension
);
// Icc detection utilities
//
// - AskForCardPresence
//
NTSTATUS AskForCardPresence
(
PSMARTCARD_EXTENSION SmartcardExtension
);
//
// Specific
//
// - SpecificTag
// - SwitchSpeed
//
NTSTATUS SpecificTag
(
PSMARTCARD_EXTENSION SmartcardExtension,
DWORD IoControlCode,
DWORD BufferInLen,
BYTE *BufferIn,
DWORD BufferOutLen,
BYTE *BufferOut,
DWORD *LengthOut
);
NTSTATUS SwitchSpeed
(
PSMARTCARD_EXTENSION SmartcardExtension,
ULONG BufferInLen,
PUCHAR BufferIn,
ULONG BufferOutLen,
PUCHAR BufferOut,
PULONG LengthOut
);
#endif