📄 stccmd.c
字号:
if( NTStatus == STATUS_SUCCESS )
{
SCCtrl=0xD1; // vcc, clk, io
NTStatus = IFWriteSTCRegister( ReaderExtension, ADR_SC_CONTROL, 1, &SCCtrl );
}
}
return( NTStatus );
}
NTSTATUS
STCSetRST(
PREADER_EXTENSION ReaderExtension,
BOOLEAN On)
/*++
Description:
Arguments:
ReaderExtension context of call
Return Value:
STATUS_SUCCESS
error values from IFRead / IFWrite
--*/
{
NTSTATUS NTStatus = STATUS_SUCCESS;
UCHAR SCCtrl;
NTStatus = IFReadSTCRegister( ReaderExtension, ADR_SC_CONTROL, 1,&SCCtrl );
if( NTStatus == STATUS_SUCCESS )
{
if( On )
{
SCCtrl |= 0x20;
}
else
{
SCCtrl &= ~0x20;
}
NTStatus = IFWriteSTCRegister( ReaderExtension, ADR_SC_CONTROL, 1,&SCCtrl );
}
return(NTStatus);
}
NTSTATUS
STCConfigureSTC(
PREADER_EXTENSION ReaderExtension,
PSTC_REGISTER pConfiguration
)
{
NTSTATUS NTStatus = STATUS_SUCCESS;
UCHAR Value;
do
{
if( pConfiguration->Register == ADR_INT_CONTROL )
{
// Read interrupt status register to acknoledge wrong states
NTStatus = IFReadSTCRegister( ReaderExtension,ADR_INT_STATUS,1,&Value );
}
Value = (UCHAR)pConfiguration->Value;
NTStatus = IFWriteSTCRegister(
ReaderExtension,
pConfiguration->Register,
pConfiguration->Size,
(PUCHAR)&pConfiguration->Value
);
// delay to stabilize the oscilator clock:
if( pConfiguration->Register == ADR_CLOCK_CONTROL )
{
SysDelay( 100 );
}
pConfiguration++;
} while(( NTStatus == STATUS_SUCCESS ) && ( pConfiguration->Size ));
return (NTStatus);
}
NTSTATUS
STCSetETU(
PREADER_EXTENSION ReaderExtension,
ULONG NewETU)
/*++
Description:
Arguments:
ReaderExtension context of call
Return Value:
STATUS_SUCCESS
error values from IFRead / IFWrite
--*/
{
NTSTATUS NTStatus = STATUS_DATA_ERROR;
UCHAR ETU[2];
SmartcardDebug(
DEBUG_TRACE,
(TEXT("%s!STCSetETU %d\n"),
DRIVER_NAME,
NewETU));
if( NewETU < 0x0FFF )
{
NTStatus = IFReadSTCRegister(
ReaderExtension,
ADR_ETULENGTH15,
2,
ETU);
if( NTStatus == STATUS_SUCCESS )
{
//
// save all RFU bits
//
ETU[1] = (UCHAR) NewETU;
ETU[0] = (UCHAR)(( ETU[0] & 0xF0 ) | ( NewETU >> 8 ));
NTStatus = IFWriteSTCRegister(
ReaderExtension,
ADR_ETULENGTH15,
2,
ETU);
}
}
return(NTStatus);
}
NTSTATUS
STCSetCGT(
PREADER_EXTENSION ReaderExtension,
ULONG NewCGT)
/*++
Description:
Arguments:
ReaderExtension context of call
Return Value:
STATUS_SUCCESS
error values from IFRead / IFWrite
--*/
{
NTSTATUS NTStatus = STATUS_DATA_ERROR;
UCHAR CGT[2];
SmartcardDebug(
DEBUG_TRACE,
(TEXT("%s!STCSetCGT %d\n"),
DRIVER_NAME,
NewCGT));
if( NewCGT < 0x01FF )
{
NTStatus = IFReadSTCRegister(
ReaderExtension,
ADR_CGT8,
2,
CGT);
if( NTStatus == STATUS_SUCCESS )
{
//
// save all RFU bits
//
CGT[1] = ( UCHAR )NewCGT;
CGT[0] = (UCHAR)(( CGT[0] & 0xFE ) | ( NewCGT >> 8 ));
NTStatus = IFWriteSTCRegister(
ReaderExtension,
ADR_CGT8,
2,
CGT);
}
}
return(NTStatus);
}
NTSTATUS
STCSetCWT(
PREADER_EXTENSION ReaderExtension,
ULONG NewCWT)
/*++
Description:
Arguments:
ReaderExtension context of call
Return Value:
STATUS_SUCCESS
error values from IFRead / IFWrite
--*/
{
NTSTATUS NTStatus = STATUS_SUCCESS;
UCHAR CWT[4];
SmartcardDebug(
DEBUG_TRACE,
(TEXT("%s!STCSetCWT %d\n"),
DRIVER_NAME,
NewCWT));
// little endians...
CWT[0] = (( PUCHAR )&NewCWT )[3];
CWT[1] = (( PUCHAR )&NewCWT )[2];
CWT[2] = (( PUCHAR )&NewCWT )[1];
CWT[3] = (( PUCHAR )&NewCWT )[0];
NTStatus = IFWriteSTCRegister(
ReaderExtension,
ADR_CWT31,
4,
CWT );
return(NTStatus);
}
NTSTATUS
STCSetBWT(
PREADER_EXTENSION ReaderExtension,
ULONG NewBWT)
/*++
Description:
Arguments:
ReaderExtension context of call
Return Value:
STATUS_SUCCESS
error values from IFRead / IFWrite
--*/
{
NTSTATUS NTStatus = STATUS_SUCCESS;
UCHAR BWT[4];
SmartcardDebug(
DEBUG_TRACE,
(TEXT("%s!STCSetBWT %d\n"),
DRIVER_NAME,
NewBWT));
// little endians...
BWT[0] = (( PUCHAR )&NewBWT )[3];
BWT[1] = (( PUCHAR )&NewBWT )[2];
BWT[2] = (( PUCHAR )&NewBWT )[1];
BWT[3] = (( PUCHAR )&NewBWT )[0];
NTStatus = IFWriteSTCRegister(
ReaderExtension,
ADR_BWT31,
4,
BWT );
return(NTStatus);
}
NTSTATUS
STCSetFDIV(
PREADER_EXTENSION ReaderExtension,
ULONG Factor)
/*++
Description:
Arguments:
ReaderExtension context of call
Return Value:
STATUS_SUCCESS
error values from IFRead / IFWrite
--*/
{
NTSTATUS NTStatus = STATUS_SUCCESS;
UCHAR DIV;
NTStatus = IFReadSTCRegister(
ReaderExtension,
ADR_ETULENGTH15,
1,
&DIV );
if( NTStatus == STATUS_SUCCESS )
{
switch( Factor )
{
case 1:
DIV &= ~M_DIV0;
DIV &= ~M_DIV1;
break;
case 2:
DIV |= M_DIV0;
DIV &= ~M_DIV1;
break;
case 4 :
DIV &= ~M_DIV0;
DIV |= M_DIV1;
break;
case 8 :
DIV |= M_DIV0;
DIV |= M_DIV1;
break;
default :
NTStatus = STATUS_DATA_ERROR;
}
if( NTStatus == STATUS_SUCCESS )
{
NTStatus = IFWriteSTCRegister(
ReaderExtension,
ADR_ETULENGTH15,
1,
&DIV );
}
}
return(NTStatus);
}
NTSTATUS
STCInitUART(
PREADER_EXTENSION ReaderExtension,
BOOLEAN AutoLearn)
/*++
Description:
Arguments:
ReaderExtension context of call
Return Value:
STATUS_SUCCESS
error values from IFRead / IFWrite
--*/
{
NTSTATUS NTStatus = STATUS_SUCCESS;
UCHAR Value;
Value = AutoLearn ? 0x6F : 0x66;
NTStatus = IFWriteSTCRegister(
ReaderExtension,
ADR_UART_CONTROL,
1,
&Value );
return( NTStatus );
}
//---------------------------------------- END OF FILE ----------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -