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; } }
////------------------------------------------------------------------------------------------------- ////函数名称: 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; }
/*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); }
/*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 ); } }