📄 configtest.cpp
字号:
VOID ConfigTest::Test_AccessConfigurationRegisters(){
STATUS status = CERR_SUCCESS;
CARD_SOCKET_HANDLE hSocket = {m_uLocalSock, m_uLocalFunc};
CARD_CONFIG_INFO confInfo = {0};
UINT8 uRegVal;
DEBUGMSG(ZONE_FUNCTION, (TEXT("+ ConfigTest::Test_AccessConfigurationRegisters() enterted\r\n")));
//retrieve current registry values
if(RetrieveRegisterValues(&confInfo) == FALSE){
g_pKato->Log(LOG_FAIL,TEXT(":Test_CardAccessConfigurationRegisters(), Thread %u for Socket %u Function %u: can not retreive configuration register values.\r\n"),
m_dwThreadID, m_uLocalSock, m_uLocalFunc);
SetResult(FALSE);
return;
}
for(int iRepeat = 0; iRepeat < 1000; iRepeat++){
//read ConfigReg
status = CardAccessConfigurationRegister(g_hClient, hSocket, CARD_FCR_READ, 0, &uRegVal);
if(status == CERR_SUCCESS){
if(uRegVal != confInfo.uConfigReg){//not the same value as the first read
g_pKato->Log(LOG_FAIL,TEXT("Thread %u for Socket %u Function %u: : ConfigReg = 0x%x != 0x%x (orig) \r\n"),
m_dwThreadID, m_uLocalSock, m_uLocalFunc, uRegVal, confInfo.uConfigReg);
SetResult(FALSE);
return;
}
}
else if(confInfo.uConfigReg != 0){//it should be a valid value, not zero
g_pKato->Log(LOG_FAIL,TEXT("Thread %u for Socket %u Function %u: : ConfigReg should be valid as 0x%x \r\n"),
m_dwThreadID, m_uLocalSock, m_uLocalFunc, confInfo.uConfigReg);
SetResult(FALSE);
return;
}
//read StatusReg
status = CardAccessConfigurationRegister(g_hClient, hSocket, CARD_FCR_READ, 1, &uRegVal);
if(status == CERR_SUCCESS){
if(uRegVal != confInfo.uStatusReg){//not the same value as the first read
g_pKato->Log(LOG_FAIL,TEXT("Thread %u for Socket %u Function %u: StatusReg = 0x%x != 0x%x (orig) \r\n"),
m_dwThreadID, m_uLocalSock, m_uLocalFunc, uRegVal, confInfo.uStatusReg);
SetResult(FALSE);
return;
}
}
else if(confInfo.uStatusReg != 0){//it should be a valid value, not zero
g_pKato->Log(LOG_FAIL,TEXT("Thread %u for Socket %u Function %u: StatusReg should be valid as 0x%x \r\n"),
m_dwThreadID, m_uLocalSock, m_uLocalFunc, confInfo.uStatusReg);
SetResult(FALSE);
return;
}
//read PinReg
status = CardAccessConfigurationRegister(g_hClient, hSocket, CARD_FCR_READ, 2, &uRegVal);
if(status == CERR_SUCCESS){
if(uRegVal != confInfo.uPinReg){//not the same value as the first read
g_pKato->Log(LOG_FAIL,TEXT("Thread %u for Socket %u Function %u: PinReg = 0x%x != 0x%x (orig) \r\n"),
m_dwThreadID, m_uLocalSock, m_uLocalFunc, uRegVal, confInfo.uPinReg);
SetResult(FALSE);
return;
}
}
else if(confInfo.uPinReg != 0){//it should be a valid value, not zero
g_pKato->Log(LOG_FAIL,TEXT("Thread %u for Socket %u Function %u: PinReg should be valid as 0x%x \r\n"),
m_dwThreadID, m_uLocalSock, m_uLocalFunc, confInfo.uPinReg);
SetResult(FALSE);
return;
}
//read CopyReg
status = CardAccessConfigurationRegister(g_hClient, hSocket, CARD_FCR_READ, 3, &uRegVal);
if(status == CERR_SUCCESS){
if(uRegVal != confInfo.uCopyReg){//not the same value as the first read
g_pKato->Log(LOG_FAIL,TEXT("Thread %u for Socket %u Function %u: CopyReg = 0x%x != 0x%x (orig) \r\n"),
m_dwThreadID, m_uLocalSock, m_uLocalFunc, uRegVal, confInfo.uCopyReg);
SetResult(FALSE);
return;
}
}
else if(confInfo.uCopyReg != 0){//it should be a valid value, not zero
g_pKato->Log(LOG_FAIL,TEXT("Thread %u for Socket %u Function %u: CopyReg should be valid as 0x%x \r\n"),
m_dwThreadID, m_uLocalSock, m_uLocalFunc, confInfo.uCopyReg);
SetResult(FALSE);
return;
}
//read uExtendedStatusReg
status = CardAccessConfigurationRegister(g_hClient, hSocket, CARD_FCR_READ, 4, &uRegVal);
if(status == CERR_SUCCESS){
if(uRegVal != confInfo.uExtendedStatus){//not the same value as the first read
g_pKato->Log(LOG_FAIL,TEXT("Thread %u for Socket %u Function %u: ExtendedStatus = 0x%x != 0x%x (orig) \r\n"),
m_dwThreadID, m_uLocalSock, m_uLocalFunc, uRegVal, confInfo.uExtendedStatus);
SetResult(FALSE);
return;
}
}
else if(confInfo.uExtendedStatus!= 0){//it should be a valid value, not zero
g_pKato->Log(LOG_FAIL,TEXT("Thread %u for Socket %u Function %u: ExtendedStatus should be valid as 0x%x \r\n"),
m_dwThreadID, m_uLocalSock, m_uLocalFunc, confInfo.uExtendedStatus);
SetResult(FALSE);
return;
}
//read IOBases
for(int i = 0; i < NUM_EXT_REGISTERS; i++){
status = CardAccessConfigurationRegister(g_hClient, hSocket, CARD_FCR_READ, NUM_REGISTERS+i, &uRegVal);
if(status == CERR_SUCCESS){
if(uRegVal != confInfo.IOBase[i]){//not the same value as the first read
g_pKato->Log(LOG_FAIL,TEXT("Thread %u for Socket %u Function %u: IOBase[%d] = 0x%x != 0x%x (orig) \r\n"),
m_dwThreadID, m_uLocalSock, m_uLocalFunc, i, uRegVal, confInfo.IOBase[i]);
SetResult(FALSE);
return;
}
}
else if(confInfo.IOBase[i]!= 0){//it should be a valid value, not zero
g_pKato->Log(LOG_FAIL,TEXT("Thread %u for Socket %u Function %u: IOBase[%d] should be valid as 0x%x \r\n"),
m_dwThreadID, m_uLocalSock, m_uLocalFunc, i, confInfo.IOBase[i]);
SetResult(FALSE);
return;
}
}
//read IOLimit
status = CardAccessConfigurationRegister(g_hClient, hSocket, CARD_FCR_READ, 9, &uRegVal);
if(status == CERR_SUCCESS){
if(uRegVal != confInfo.IOLimit){//not the same value as the first read
g_pKato->Log(LOG_FAIL,TEXT("Thread %u for Socket %u Function %u: IOLimit = 0x%x != 0x%x (orig) \r\n"),
m_dwThreadID, m_uLocalSock, m_uLocalFunc, uRegVal, confInfo.IOLimit);
SetResult(FALSE);
return;
}
}
else if(confInfo.IOLimit != 0){//it should be a valid value, not zero
g_pKato->Log(LOG_FAIL,TEXT("Thread %u for Socket %u Function %u: ExtendedStatus should be valid as 0x%x \r\n"),
m_dwThreadID, m_uLocalSock, m_uLocalFunc, confInfo.IOLimit);
SetResult(FALSE);
return;
}
}
//try some invalid offset
//read IOLimit
status = CardAccessConfigurationRegister(g_hClient, hSocket, CARD_FCR_READ, 10, &uRegVal);
if(status == CERR_SUCCESS){
g_pKato->Log(LOG_FAIL,TEXT("Thread %u for Socket %u Function %u: no one at offset 10! \r\n"),
m_dwThreadID, m_uLocalSock, m_uLocalFunc, uRegVal);
SetResult(FALSE);
}
DEBUGMSG(ZONE_FUNCTION, (TEXT("- ConfigTest::Test_AccessConfigurationRegisters() exit\r\n")));
}
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
VOID ConfigTest::Test_CardModifyConfiguration()
{
CARD_CONFIG_INFO confInfo = {0};
CARD_CONFIG_INFO newconfInfo = {0};
STATUS status = CERR_SUCCESS;
DEBUGMSG(ZONE_FUNCTION, (TEXT("+ ConfigTest::Test_CardModifyConfiguration() enterted\r\n")));
//calling CardRequestCOnfiguration using normal parameters
confInfo.hSocket.uFunction = m_uLocalFunc;
confInfo.hSocket.uSocket = m_uLocalSock;
confInfo.fInterfaceType = CFG_IFACE_MEMORY_IO;
confInfo.fAttributes = 0; // CFG_ATTR_IRQ_STEERING;
confInfo.fRegisters = 0xFF;
confInfo.fExtRegisters = 0xFF;
//don't touch power-related parameters
confInfo.uVcc = 0xFF;
confInfo.uVpp1 = 0xFF;
confInfo.uVpp2 = 0xFF;
//retrieve current registry values
if(RetrieveRegisterValues(&confInfo) == FALSE){
g_pKato->Log(LOG_FAIL,TEXT("Thread %u for Socket %u Function %u: can not retreive configuration register values.\r\n"),
m_dwThreadID, m_uLocalSock, m_uLocalFunc);
SetResult(FALSE);
return;
}
//now request configuration
status = CardRequestConfiguration(g_hClient, &confInfo);
if(status != CERR_SUCCESS){
g_pKato->Log(LOG_FAIL,TEXT("Thread %u for Socket %u Function %u: requestconfiguration failed!\r\n"),
m_dwThreadID, m_uLocalSock, m_uLocalFunc);
SetResult(FALSE);
return;
}
confInfo.fAttributes = CFG_ATTR_IRQ_STEERING;
status = CardModifyConfiguration(g_hClient, confInfo.hSocket, &confInfo.fAttributes);
if(status != CERR_SUCCESS){
g_pKato->Log(LOG_FAIL,TEXT("Thread %u for Socket %u Function %u: ModifyConfiguration failed!\r\n"),
m_dwThreadID, m_uLocalSock, m_uLocalFunc);
SetResult(FALSE);
return;
}
DEBUGMSG(ZONE_FUNCTION, (TEXT("+ ConfigTest::Test_CardModifyConfiguration() exit\r\n")));
}
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
VOID ConfigTest::Test_CardDisableandReset()
{
CARD_CONFIG_INFO confInfo = {0};
CARD_CONFIG_INFO newconfInfo = {0};
STATUS status = CERR_SUCCESS;
CARD_SOCKET_HANDLE hSocket = {m_uLocalSock, m_uLocalFunc};
DEBUGMSG(ZONE_FUNCTION, (TEXT("+ ConfigTest::Test_CardDisableandReset() enterted\r\n")));
//re-enumerate card in the system, make sure there is only one card
DWORD dwCardsNum = MAX_SOCKETS*2;
DWORD dwCardsAvail = 0;
if(EnumCard(&dwCardsNum, g_CardDescs, &dwCardsAvail) != CERR_SUCCESS){
g_pKato->Log(LOG_DETAIL,TEXT("ERROR: Can not enum cards in the system!"));
SetResult(FALSE);
return;
}
else if(dwCardsAvail != 1){
g_pKato->Log(LOG_DETAIL,TEXT("ERROR: This test requires only one card in the system (%d cards now), test will skip!"),
dwCardsAvail);
return;
}
//calling CardRequestCOnfiguration using normal parameters
confInfo.hSocket.uFunction = m_uLocalFunc;
confInfo.hSocket.uSocket = m_uLocalSock;
confInfo.fInterfaceType = CFG_IFACE_MEMORY_IO;
confInfo.fAttributes = CFG_ATTR_IRQ_STEERING;
confInfo.fRegisters = 0xFF;
confInfo.fExtRegisters = 0xFF;
//don't touch power-related parameters
confInfo.uVcc = 0xFF;
confInfo.uVpp1 = 0xFF;
confInfo.uVpp2 = 0xFF;
//retrieve current registry values
if(RetrieveRegisterValues(&confInfo) == FALSE){
g_pKato->Log(LOG_FAIL,TEXT("Thread %u for Socket %u Function %u: can not retreive configuration register values.\r\n"),
m_dwThreadID, m_uLocalSock, m_uLocalFunc);
SetResult(FALSE);
return;
}
//now request configuration
if(TryRequestConfig(&confInfo) == FALSE){
g_pKato->Log(LOG_FAIL,TEXT("Thread %u for Socket %u Function %u: requestconfiguration failed!\r\n"),
m_dwThreadID, m_uLocalSock, m_uLocalFunc);
SetResult(FALSE);
return;
}
//now disable the card
status = CardRequestDisable(g_hClient, hSocket);
if(status != CERR_SUCCESS){
g_pKato->Log(LOG_FAIL,TEXT("Thread %u for Socket %u Function %u: disable card failed!\r\n"),
m_dwThreadID, m_uLocalSock, m_uLocalFunc);
SetResult(FALSE);
return;
}
Sleep(TEST_IDLE_TIME);
//now try requesting configuration again, should success
status = CardRequestConfiguration(g_hClient, &confInfo);
if(status != CERR_SUCCESS){
g_pKato->Log(LOG_FAIL,TEXT("Thread %u for Socket %u Function %u: requestconfiguration should fail after card is disabled!\r\n"),
m_dwThreadID, m_uLocalSock, m_uLocalFunc);
SetResult(FALSE);
return;
}
//now reset this card
status = CardResetFunction(g_hClient, hSocket);
if(status != CERR_SUCCESS){
g_pKato->Log(LOG_FAIL,TEXT("Thread %u for Socket %u Function %u: disable card failed!\r\n"),
m_dwThreadID, m_uLocalSock, m_uLocalFunc);
SetResult(FALSE);
return;
}
Sleep(TEST_IDLE_TIME);
//find out the new socket index for this card
dwCardsNum = MAX_SOCKETS*2;
dwCardsAvail = 0;
if(EnumCard(&dwCardsNum, g_CardDescs, &dwCardsAvail) != CERR_SUCCESS){
g_pKato->Log(LOG_DETAIL,TEXT("ERROR: Can not enum cards in the system!"));
SetResult(FALSE);
return;
}
else if(dwCardsAvail != 1){
g_pKato->Log(LOG_DETAIL,TEXT("ERROR: there should be only one card in the system (%d cards now)"),
dwCardsAvail);
SetResult(FALSE);
return;
}
m_uLocalSock = g_CardDescs[0].hCardHandle.uSocket;
hSocket.uSocket = m_uLocalSock;
confInfo.hSocket = hSocket;
//now request configuration
status = CardRequestConfiguration(g_hClient, &confInfo);
if(status != CERR_SUCCESS){
g_pKato->Log(LOG_FAIL,TEXT("Thread %u for Socket %u Function %u: requestconfiguration after reset function failed!\r\n"),
m_dwThreadID, m_uLocalSock, m_uLocalFunc);
SetResult(FALSE);
return;
}
DEBUGMSG(ZONE_FUNCTION, (TEXT("- ConfigTest::Test_CardDisableandReset() exit\r\n")));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -