Esempio n. 1
0
uint8	ReadCardPara(stcCardPara * sCardPara)
{
	uint16		CrcCheck;
	ReadCard(CARD_FLG_ADDR+sizeof(stcCardID)+sizeof(stcCardType),
			(uint8 *)sCardPara,sizeof(stcCardPara));

	CrcCheck = GetCrc16Check((uint8 *)sCardPara,sizeof(stcCardPara) - 2);
	
	if(CrcCheck == sCardPara->CrcCheck)		
	{
		return	1;
	}
	else
	{
		return	0;
	}
}
Esempio n. 2
0
////-------------------------------------------------------------------------------------------------
////函数名称:             uint8	ModCard(stcCardFlg	sCardFlg)
////函数功能:             普通卡处理
////入口参数:             无
////出口参数:             无
////--------------------------------------------------------------------------------------------------
uint8	ModCard(void)
{
	uint8	buf[256];
	uint32	writedsize = 0;
	uint32	readsize = 0;
		
	while(writedsize < sizeof(stcModelCard))
	{
		readsize = (sizeof(stcModelCard)- writedsize)>256?
					256:(sizeof(stcModelCard)- writedsize);

		ReadCard(CARD_DATA_ADDR+writedsize,buf,readsize);

		StoreOilBoxModel(writedsize,buf,readsize);

		writedsize +=readsize;
	}	
		
	return	1;
} 
Esempio n. 3
0
/*hdr
**	Copyright Mox Products, Australia
**
**	FUNCTION NAME:	ACACsnPwdMod()
**	AUTHOR:		    Michael Ma
**	DATE:		    15 - Oct - 2012
**
**	DESCRIPTION:	
**			        using functionality '*3#' to modify the corresponding PWD of specified card. 
**                  waiting for the net package from the gate sontroling client and then process
**                  this information,at last sending result to the gate sontroling client.
**	ARGUMENTS:	    ARGNAME		DRIECTION	TYPE	DESCRIPTION
**				    pmsg                    MXMSG    
**	RETURNED VALUE:	
**				    None
**	NOTES:
**			        
*/
static VOID ACACsnPwdMod(MXMSG* pmsg)
{
    CDINFO*	CdInfo			= NULL;
	CDINFO  pCDInfo;
	CDINFO_OLD * CdInfo_Old = NULL;
	BYTE	CSN[CSN_LEN]	= { 0 };
	BYTE	byResult		= 0;
	BYTE	byVerify		= 0;
	INT		nPwdLen			= 0;
	char	CdPwd[PWD_LEN]  = { 0 };
    //BYTE    byCardMode      = 0;
    //BYTE    byCSNLength     = 0;
    size_t  nTypeSize       = sizeof(unsigned short);

	if (pmsg == NULL || pmsg->pParam == NULL)
	{
		printf(" %s: ERROR, the pParam can not be NULL.\n", __FUNCTION__);
		return;
	}
    
	//byCardMode  = *(pmsg->pParam + nTypeSize + 0);
    //byCSNLength = *(pmsg->pParam + nTypeSize + 1);
	memcpy(CSN,     pmsg->pParam + nTypeSize + 1/*Card Mode*/ + 1/*CSN Len*/, CSN_LEN);
	nPwdLen     = *(pmsg->pParam + nTypeSize + 2 + CSN_LEN);
	memcpy(CdPwd,   pmsg->pParam + nTypeSize + 3 + CSN_LEN, PWD_LEN);
	byVerify    = *(pmsg->pParam + nTypeSize + 3 + CSN_LEN + PWD_LEN);
	
	if( TRUE == ReadCard(g_HandleHashCard,CSN,TYPE_NORMAL_CARD,&pCDInfo) )
		{
			CdInfo = &pCDInfo;
			DEBUG_CARD_PRINTF("%s,%d,TYPE_NORMAL_CARD Card existed\r\n",__func__,__LINE__);	
		}
	else if(TRUE == ReadCard(g_HandleHashCard,CSN,TYPE_PATROL_CARD,&pCDInfo))
		{  	
			CdInfo = &pCDInfo;
			DEBUG_CARD_PRINTF("%s,%d,TYPE_PATROL_CARD Card existed\r\n",__func__,__LINE__);	
		}
	else
		{
			CdInfo_Old = AsGetCdInfobyCd(CSN);
			if(ConversionCdInfoOld2CdInfo(&pCDInfo,CdInfo_Old))
			{
				CdInfo = &pCDInfo;
	        	printf("card found\n");
			}			
		}
    printf("CdInfo exit : %d\n",CdInfo != NULL ? 1 : 0); 
    
    if(NULL != CdInfo)
    {
        if(SWIPECARD_REQUEST_VERIFY_CSN == byVerify)
        {
            switch(JudgeCardInfo(CdInfo))
            {
                case CARD_INFO_AUTHORIZED       : 
                    {
                        if(TYPE_NORMAL_CARD == CdInfo->CardType)
                        {
			                byResult = CSN_PWD_MOD_CARD_EXIST;       //Óд˿¨ºÅ
                        }
                        else if(TYPE_PATROL_CARD == CdInfo->CardType)
                        {
                            byResult = CSN_PWD_MOD_PATROL;        //Ѳ¸ü¿¨      
                        } 
                        else if(TYPE_AUTHORIZE_CARD == CdInfo->CardType)    //ÓÐÊÚȨ¹¦ÄܵĿ¨
                        {   
                            byResult = CSN_PWD_MOD_AUTHORIZING;        
                        }
                    }
                    break;
                case CARD_INFO_DISABLED         :
                    {
                        byResult = 	CSN_PWD_MOD_DISABLED;
                    }
                    break;
                case CARD_INFO_EXPIRED          :
                    {
                        byResult = 	CSN_PWD_MOD_EXPIRED;
                    }
                    break;
                /*case CARD_INFO_OUTOFTIMESLICE   :
                    {
                        byResult = 	CSN_PWD_MOD_NOT_IN_TIME_SLICE;
                    }
                    break;*/
                default                         :
                    {
                        
                    }
            }
        }
        else if(SWIPECARD_REQUEST_VERIFY_PWD == byVerify)
        {
            if (UkPwdCompare(CdInfo->UlkPwd, CdPwd, nPwdLen))
			{
                byResult = CSN_PWD_MOD_PWD_CORRECT;
		    }
			else
			{
			    byResult = CSN_PWD_MOD_PWD_ERROR;
			}
        }
        else if(SWIPECARD_REQUEST_SAVE_NEW_PWD == byVerify)
        {
            memset(CdInfo->UlkPwd,0,PWD_LEN);
            memcpy(CdInfo->UlkPwd, CdPwd, nPwdLen);		
		    SaveCdInfo2Mem();
            AsModCdPwdbyCsn(CdInfo->CSN,CSN_LEN,CdPwd, nPwdLen);
            return ;
        }
        else
        {
            //ÈÝ´í
        }
    }
    else
    {
        byResult = CSN_PWD_MOD_INVALID; //´Ë¿¨²»´æÔÚ£¬¼´¿¨Î´ÊÚȨ
    }
    printf("byResult : %d\n",byResult);
    SendCsnPwdModAck2ACC(pmsg->dwParam,byResult);
}
Esempio n. 4
0
/*hdr
**	Copyright Mox Products, Australia
**
**	FUNCTION NAME:	ACASwipeCard()
**	AUTHOR:		   Wayde Zeng
**	DATE:		1 - March - 2011
**
**	DESCRIPTION:	
**			release the resource of MXMSG  .
**
**	ARGUMENTS:	ARGNAME		DRIECTION	TYPE	DESCRIPTION
**				None
**	RETURNED VALUE:	
**				None
**	NOTES:
**			
*/
static
VOID
ACASwipeCard(MXMSG* pmsg)
{
	CDINFO*	CdInfo			= NULL;
	CDINFO_OLD *CdInfo_Old	= NULL;
	CDINFO  pCDInfo			;
	BYTE	CSN[CSN_LEN]	= { 0 };
	BYTE	tempCSN[CSN_LEN]	= { 0 };
	BYTE	CdSts			= 0;
	BYTE	byResult		= 0;
	BYTE	byVerify		= 0;
	int		nPwdLen			= 0;
	char	CdPwd[PWD_LEN];
	BYTE bInOut=1;
	BYTE byCardMode;
	UINT 	CardID = 0;
	if (pmsg == NULL || pmsg->pParam == NULL)
	{
		DEBUG_CARD_PRINTF(" %s,%d: ERROR, the pParam can not be NULL.\n", __FUNCTION__,__LINE__);
		return;
	}

	memcpy(CSN, pmsg->pParam + sizeof(int) + 1/*Card Mode*/ + 1/*CSN Len*/, CSN_LEN);
	nPwdLen =  *(pmsg->pParam + sizeof(int) + 10);
	memcpy(CdPwd, pmsg->pParam + sizeof(int) + 11, PWD_LEN);
	byVerify = *(pmsg->pParam + sizeof(int) + 25);
	byCardMode= *(pmsg->pParam + sizeof(int));


	
	if (MODE_CARD_ONLY_SET & g_ASPara.ASOpenMode )
	{
		
	}
	else if(MODE_CARD_PASSWORD_SET & g_ASPara.ASOpenMode)
	{
		if(byVerify == 0)
		{
			byVerify=1;		//set status to need password
		}
	}
	else
	{
		SendSwipeCardAck2ACC(pmsg->dwParam,SWIPECARD_FUN_DISABLE );
		return;
	}

/**/if(isAHASHFILEExisted())
	{
		DEBUG_CARD_PRINTF("func=%s,LINE=%d\n" ,__func__,__LINE__);
		
		if( TRUE == ReadCard(g_HandleHashCard,CSN,TYPE_NORMAL_CARD,&pCDInfo) )
		{
			CdInfo = &pCDInfo;
			DEBUG_CARD_PRINTF("%s,%d,TYPE_NORMAL_CARD Card existed\r\n",__func__,__LINE__);	
		}
		else
		{  	
			if(TRUE == ReadCard(g_HandleHashCard,CSN,TYPE_PATROL_CARD,&pCDInfo))
			{
				CdInfo = &pCDInfo;
				DEBUG_CARD_PRINTF("%s,%d,TYPE_PATROL_CARD Card existed\r\n",__func__,__LINE__);	
			}
		}
	}
	if (CdInfo == NULL)//Èç¹ûHASH ÕÒµ½ÁË¿¨Æ¬¾Í²»ÓüÌÐøÑ°ÕÒ¿¨Æ¬
	{
		DEBUG_CARD_PRINTF("%s,%d,card no found in hashfunc\r\n",__func__,__LINE__);
		if(isAST_HVFileExisted())
	    {
	        if(NULL != (CdInfo_Old= (CDINFO_OLD*)AsGetCdHVInfobyCd(CSN)))
	        {
	        	ConversionCdInfoOld2CdInfo(&pCDInfo,CdInfo_Old);
				CdInfo = &pCDInfo;
	            printf("card found HV\n");
	        }
		}
	    else
	    {
	        if(NULL != (CdInfo_Old = AsGetCdInfobyCd(CSN)))
	        {
	        	ConversionCdInfoOld2CdInfo(&pCDInfo,CdInfo_Old);
				CdInfo = &pCDInfo;
	            printf("card found\n");
	        }
	    }
	}
	AsPrintCd(CdInfo);

	if (CdInfo) 
	{
		memcpy(CSN, CdInfo->CSN, CSN_LEN);
		CdSts = JudgeCardInfo(CdInfo);
		
		CardID = CdInfo->Reserved[0];
#ifdef ACA_DEBUG		
		printf("%s,CdSts=%d,CdInfo->GateNumber=%d,verify=%d,card type=%d\n",__FUNCTION__,CdSts,CdInfo->GateNumber,byVerify,CdInfo->CardType);
#endif
		if (CARD_INFO_DISABLED == CdSts)
		{
			byResult = 	SWIPECARD_CARD_DISABLED;
		}
		else if (CARD_INFO_EXPIRED == CdSts)
		{
			byResult = 	SWIPECARD_EXPIRED;
		}
		else if (CARD_INFO_AUTHORIZED == CdSts)
		{
			if (1 == CdInfo->GateNumber || 3 == CdInfo->GateNumber)
			{
#ifdef ACA_DEBUG
				printf("%s swipe card verify = %d,GetCardType()=%d\n", __FUNCTION__, byVerify,CdInfo->CardType);
#endif
				if(CdInfo->CardType == TYPE_AUTHORIZE_CARD)
				{
					byResult = SWIPECARD_CARD_AUTHORIZE;
				}
				else if (CdInfo->CardType == TYPE_PATROL_CARD || 0 == byVerify)		// verify card then unlock,patrol not need password
				{
					UnlockGateStart(FALSE, 0, 0, NULL, NULL);

					g_UnlockCtrl.dwUnlockState = ST_UK_DELAY;
					g_UnlockCtrl.dwTickCount = GetTickCount();
					
					byResult = SWIPECARD_UNLOCK;
				}
				else if (1 == byVerify)	// verify card
				{
					byResult = SWIPECARD_ENTER_PASSWORD;
				}
				else if (2 == byVerify)	// verify card and password then unlock
				{
					if (UkPwdCompare(CdInfo->UlkPwd, CdPwd, nPwdLen))
					{
						UnlockGateStart(FALSE, 0, 0, NULL, NULL);

						g_UnlockCtrl.dwUnlockState = ST_UK_DELAY;
						g_UnlockCtrl.dwTickCount = GetTickCount();
						
						byResult = SWIPECARD_UNLOCK;
					}
					else
					{
						byResult = SWIPECARD_PASSWORD_ERROR;
					}
				}				
			}
			else
			{
				byResult = 	SWIPECARD_INVALID;
			}
		}				
	}
	else
	{	
		byResult = 	SWIPECARD_INVALID;
	}

	if((byResult!=SWIPECARD_ENTER_PASSWORD) && (byResult <= SWIPECARD_PASSWORD_ERROR/*SWIPECARD_PASSWORD_USER*/))
	{
		RecordSwipeCardLog(byCardMode, CSN, READER_PORT_DEFAULT, READER_ID_DEFAULT, GATE_ID_DEFAULT, 
							INOUT_DEFAULT, byResult, CardID);
		if(((byResult == SWIPECARD_CARD_PATROL_UNLOCK) || (byResult == SWIPECARD_UNLOCK)) &&
			 CdInfo != NULL &&
			 CdInfo->CardType == TYPE_PATROL_CARD)
		{
			RecordSwipeCardLog(byCardMode, CSN, READER_PORT_DEFAULT, READER_ID_DEFAULT, GATE_ID_DEFAULT, 
							INOUT_DEFAULT, SWIPECARD_CARD_PATROL_UNLOCK, CardID);
		}
	}


	if((CdInfo != NULL) && 
		(CdInfo->CardType == TYPE_PATROL_CARD))
	{
		SendSwipeCardAck2ACC(pmsg->dwParam, GetPatrolResult(byResult));
	}
	else
	{
		SendSwipeCardAck2ACC(pmsg->dwParam,byResult );
	}
}