/***************************************************************** 函数原型:LowBatteryDisplay 功能描述:本函数为电池电量显示 参数描述:无 参数名称: 输入/输出? 类型 描述 作 者: 刘及华 日 期: 2012-11-24 修改历史: 日期 修改人 修改描述 返 回 值:无 *****************************************************************/ INT8U LowBatteryDisplay(void) { ET_PowerInfo PowerInfo; // ET_PowerType ucType; // ET_PowerCapLevel ucCapability; if( EA_ucGetPowerInfo(&PowerInfo) != EM_SUCCESS ) { lcddisperr("batt check failed."); return notok; } if( PowerInfo.ucType == EM_power_TYPE_BATTERY ) { if( PowerInfo.ucCapLevel == EM_power_CAPACITY_LEVEL_LOW ) { lcddisperr(" 电池电量低请充电 "); return notok; } else if( PowerInfo.ucCapLevel == EM_power_CAPACITY_LEVEL_CRITICAL ) { lcddisp(1, 1, (void *)"电池电量过低系统无法"); lcddisp(2, 1, (void *)" 启动请立即充电 "); (void)EA_uiInkey(1); return notok; } } return ok; }
/* 函数功能: 按format格式在相应的行显示相应数据。 * 入口参数: dln -- 显示行(1-7) * pszFmt -- 显示格式 * pcStr -- 显示数据 * 返 回 值: 无 */ void TA_LCD_vDisplays(char dln, char dlc, char *pszFmt, ...) { char szDispStr[500]; uint uiFont; va_list VarList; va_start(VarList, pszFmt); vsnprintf(szDispStr, sizeof(szDispStr), pszFmt, VarList); // vsprintf(szDispStr, pszFmt, VarList); va_end(VarList); if (dln > 6 || dln < 0) { TA_LCD_vDisplay(4, "显示行号错!"); EA_uiInkey(10); return; } uiFont = EM_key_FONT6X12; if (dln == 0) EA_vTextOut(1, dlc, uiFont, 0, 1, 1, szDispStr); else EA_vDisplays(dln, dlc, "%s", szDispStr); return; }
uchar ucGetKEKCheckCode(uchar * ucKey, uchar * ucCheckCode) { uchar ucZero[8];//8字节0x00 uchar ucDESResult[8];//DES后的结果 uchar ucRet; uint ucRetLength; if(ucKey == NULL || ucCheckCode == NULL) { return EM_ERROR; } memset(ucZero, 0, 8); memset(ucDESResult, 0, 8); ucRet = EA_ucTDes( EM_alg_TDESENCRYPT|EM_alg_TDESTECBMODE, 16, ucKey, 8, ucZero, &ucRetLength, ucDESResult);//密钥长度16,待加密数据8字节,返回应为8字节 if(ucRet != EM_SUCCESS) { EA_vDisplay(1,"DES算法出错 "); EA_uiInkey(0); return EM_ERROR; } if(ucRetLength != 8) { EA_vDisplay(1,"DES算法出错 "); EA_uiInkey(0); return EM_ERROR; } //生成校验码,//将hex变为asc的结果,8+'\0' if( PubHexToAsc(ucCheckCode, ucDESResult, 8, 0) !=NORMAL )//转换8个字符,原hex左不补0 { EA_vDisplay(1,"HexToAsc转换出错 "); EA_uiInkey(0); return EM_ERROR; } ucCheckCode[8] = '\0'; return EM_SUCCESS; }
// ***************************************************************** // 功能: query_oil_price // 说明: 查询当前油价 // 入口参数: // 出口参数: Null // 作者: frank // 返回值: Null // ***************************************************************** void query_oil_price(void) { //当前油价显示 EA_vCls(); EA_vDisplay(2, "天然气 :%2.2f元/立方", DevStat.price[0]/100.0); EA_vDisplay(3, "汽油93#:%2.2f元/升 ", DevStat.price[1]/100.0); EA_vDisplay(4, "汽油97#:%2.2f元/升 ", DevStat.price[2]/100.0); EA_vDisplay(5, "柴 油 :%2.2f元/升 ", DevStat.price[3]/100.0); //按任意键退出 (void)EA_uiInkey(0); return; }
uchar TA_BT_ucSetBTPINCodeMode(uchar ucMode) { uchar ucRet = 0, ucCmd = 0, ucData = 0; if (0x00 == ucMode) // SPP 无需PIN配对 { ucCmd = EM_BT_PARE_MODE; ucData = EM_BT_PARE_SSP_JUST; } else { ucCmd = EM_BT_PARE_MODE; ucData = EM_BT_PARE_FIXED; } ucRet = EA_ucSetBTParamConfig(ucCmd, &ucData); if (EM_SUCCESS != ucRet) { ucCmd = 20; EA_vCls(); TA_vDisplayLine(DISP_LINE_M1, DISP_POS_MID, "设置蓝牙配对模式错%02X", ucRet); while (ucCmd--) { EA_vLCDLightOff(); EA_vDelayMs(500); EA_vLCDLightOn(); EA_vDelayMs(500); EA_vBeepMs(500); TA_vDisplayLine(DISP_LINE_M2, DISP_POS_MID, "请联系厂商客服!"); EA_uiInkey(3); } EA_uiInkey(30); EA_vSystemManage(EM_SHUTDOWN); } return ucRet; }
// ***************************************************************** // 功能: QUERY_NOTE_RECORD // 说明: 查询日结小票 // 入口参数: // 出口参数: Null // 作者: // 返回值: -1 关机 // ***************************************************************** int QUERY_NOTE_RECORD(void) { int count; INT32U RecordCount = 0; uchar uckey; uint uikey; uchar ucOpenID=0; INT8U rec[60]; memset(rec, 0, sizeof(rec)); if ( EA_ucPFOpen( (uchar *)hisrecFileName, &ucOpenID) != EM_ffs_SUCCESS ) { lcddisperr("打开日结文件失败"); return 0; } // 获取有效信息条数 (void)EA_ucPFInfo(ucOpenID, EM_ffs_VALIDREC, &RecordCount); if( RecordCount == 0) { lcddisperr("没有日结信息"); (void)EA_ucPFClose(ucOpenID); return 0;//表示没有记录 } count = RecordCount;//最后一条 if(EA_ucPFReadRec(ucOpenID, count, 1, &RecordCount, rec) != EM_SUCCESS) { (void)EA_ucPFClose(ucOpenID); lcddisperr((void *)"读取不符合"); return 0; } AnalyAndDisplayNote(rec); while ( 1 ) { uckey = EA_ucKBHit(); if(uckey == EM_key_HIT) //有按键 { uikey = EA_uiInkey(0); //读取按键键值 if ( (uikey == EM_key_EXIT) || (uikey == EM_key_CANCEL) ) //退出 { (void)EA_ucPFClose(ucOpenID); return 1; } switch ( uikey ) { case EM_key_UP: // 按[2]键或往上拨动拨轮则屏幕往上滚动一行 count --; if ( count < 0 )//记录超限 { lcddisperr("最后一条"); count ++; } break; case EM_key_DOWN: // 按[8]键或往下拨动拨轮则屏幕往下滚动一行 count ++; if ( count >= RecordCount ) { lcddisperr("最后一条"); count --; } break; case EM_key_ENTER: break; default: break; } if ( (uikey==EM_key_UP) || (uikey==EM_key_DOWN) ) { if(EA_ucPFReadRec(ucOpenID, count, 1, &RecordCount, rec) != EM_SUCCESS) { (void)EA_ucPFClose(ucOpenID); lcddisperr((void *)"读取不符合"); return 0; } AnalyAndDisplayNote(rec); } if(uikey == EM_key_ENTER) { print_work_note_his(rec); (void)EA_ucPFClose(ucOpenID); return 1; } } } }
/***************************************************************** 函数原型:main() 功能描述:主函数 参数描述: 返回值: 无 作 者: 许岩/刘及华 日 期: 2012-11-24 修改历史: 日期 修改人 修改描述 ------ --------- ------------- *****************************************************************/ int main(void) { INT8U ret = 0; char mainflag = 1; INT8S buf[30]; uchar uckey; uint uikey; BUS_TIME ltime; (void)EA_ucSetStopFlag( EM_DISABLE_STOP ); //不允许系统进入睡眠状态; reboot: ret = System_Init(); //系统初始化,包括PSAM,参数表,GPRS初始化 if( ret != ok ) { lcddisperr("系统初始化失败!"); goto reboot; } Beep(1000); for ( ;; ) { Get_Time(<ime); sprintf((void *)buf, " %02X%02X-%02X-%02X %02X:%02X", ltime.century, ltime.year, ltime.month, ltime.day, ltime.hour, ltime.minute); // EA_vTextOut(0, 0, EM_key_FONT8X16, 0, 1, 1, (char *)buf); EA_vDisplay(3, (void *)buf); if( mainflag == 1 ) { DisplayWelcomeMenu(); mainflag = 0; } uckey = EA_ucKBHit(); if(uckey == EM_key_HIT) //有按键 { uikey = EA_uiInkey(0); //读取按键键值 switch ( uikey ) { case EM_key_EXIT: //关机 { mainflag = 1; goto shutdown; break; } case EM_key_F3: { Login(); //登录界面 mainflag = 1; break; } case EM_key_F1: { Parm_Setting(); //参数配置 mainflag = 1; break; } case EM_key_1: { GPRS_TEST(); //无线连接测试 mainflag = 1; break; } case EM_key_F2: { // QUERY_NOTE_RECORD(); Gprs_Upload_data(); //数据上传 mainflag = 1; break; } default: break; } } } shutdown: Power_Down(); }
int dlm_main(char *CMDBUF , int *nCmdLen) { char szGetBuffer[30],szTmpBuf[30]; char szBuffer[100]; // char cWaitRet; uint uiKey , uiRet,nRet; // uchar ucRetVal; // uchar ucFd; uchar ucRet; int nScreen = 0; char cMenuTime; // uint uiCount; uint uiOption; uint puiConfigInfo; // uchar i, ucIfExist, ucStatus; const char *pcModuleName = MODULE_FILE_NAME; // const char *pcCommModuleName = "applib"; DevHandle phPinpad; // DevHandle hVoiceHandle; #ifdef EPT_A9L // uint_64 llCnt = 0; // char szData[100]; #endif #ifdef EMVIC EA_EMV_vInit(); #endif //设备句柄清空 gbPrintHandle = EM_NULL; //清空所有全局设备句柄,add by zhuchentao 060831 gbhdlMagCard = EM_NULL;; //磁卡模块 gbhdlUserCard = EM_NULL; gbhdlMasterCard = EM_NULL; gbhdlSAM1Card = EM_NULL; gbhdlSAM2Card = EM_NULL; gbhdlSAM3Card = EM_NULL; gbhdlSAM4Card = EM_NULL; gbMifCardHandle = EM_NULL; #ifdef EMVIC gbhdlPINPAD = EM_NULL; gbhdlRS232 = EM_NULL; gbMifCardHandle = EM_NULL; #endif cRunState = 1; CommInfo.gbHdl = EM_NULL; memset(&iso, 0, sizeof(ISODataStru)); memset(&iso1, 0, sizeof(ISODataStru)); memset(&printiso, 0, sizeof(ISODataStru)); memset(&upiso, 0, sizeof(ISODataStru)); gbcECDefault = 0; #ifndef EPT_A9L #ifdef EPT_M3 if (EA_uiLoadAndExecuteModule("LibRFReader.dlm", "") != EM_SUCCESS) #endif #ifdef EPT56X0 if (EA_uiLoadAndExecuteModule("LibRFReader", "") != EM_SUCCESS) #endif { PubDisplay(3, "载入LibRFReader.dlm失败"); PubDisplay(4, "请下载LibRFReader.dlm文件"); PubuiInkey(0); return EXCEPTION; } #endif EA_vCls(); PubucLoadAllMfVar((char*)MODULE_FILE_NAME, &FV, sizeof(FV)); // #ifdef EPT56X0 // EA_ucSetStopFlag(EM_DISABLE_STOP); // #endif // #ifdef EPT_A9L // EA_ucSetStopFlag(EM_DISABLE_STOP); // #endif // 银商允许修改参数标志,提交程序的时候分别2种情况编译提交 // setup.c 中还有一个地方要设置,勿忘!!! #ifdef TMS cSetupModifyFlag = 0;// TMS服务器版 不允许修改参数 #else cSetupModifyFlag = 1;// 下载版 允许修改参数 #endif #ifndef EPT5610 EA_vSetLCDLightTimer(60); #endif EA_vCls(); if (PubucFirstRunPara(pcModuleName, "parafile") == EM_SUCCESS) { PubGetPinpadPara();// 先读取参数文件中密码键盘标签 FV.gbnParaFirstFlag = YES; WRITE_nVAR(FV.gbnParaFirstFlag); } PubUsePinpadInside(FV.Other.SetPinpadType); // PubUsePinpadInside(1); PubGetPrinterType(&iPrinterType); PubGetPinpadType(&iPinpadType); while ((ucRet = PubOpenDevice("PINPAD", EM_io_IPP, &phPinpad)) != EM_SUCCESS) { PubGetPosType(); if (FV.gbnPosTypeFlag == YES) { FV.Other.SetPinpadType = 1; PubUsePinpadInside(1); WRITE_nVAR(FV.Other.SetPinpadType); } else { PubDisplayInv(2, "打开密码键盘错"); PubDisplay(3, "请接入密码键盘"); PubDisplay(4, "[%d][%02x][%d]", ucRet, ucRet,FV.gbnPosTypeFlag); EA_vBeepMs(50); uiRet = PubuiInkey(1); if (uiRet == EM_key_FUNC1) { PubSetUsePinpadType(); } if (uiRet == EM_key_FUNC9||EM_key_CANCEL) { return EM_ERROR; } } } while ((PubGetPinpadVer(phPinpad ,&iPinpadVer)) == 3) { PubDisplayInv(2, "请接好密码键盘"); EA_vBeepMs(50); PubuiInkey(1); } #ifndef EPT5610 //20070914 by wei 将安全级别设置成默认级别 if ( iPinpadVer == 2 ) { EA_pci_ucGetSecureConfig(phPinpad, EM_NULL, &puiConfigInfo); if ( puiConfigInfo != EM_pin_DEFAULTCONFIG) { EA_pci_ucSetSecureConfig(phPinpad, EM_NULL, EM_pin_DEFAULTCONFIG); } } #endif EA_ucCloseDevice(&phPinpad); nFirstSetupFlag = NO; if (PubucFirstRunProg(pcModuleName) == EM_SUCCESS) { FV.gbnFirstFlag = YES; WRITE_nVAR(FV.gbnFirstFlag); } // 注册headcommon /* if (PubLoadAndExecuteModule(pcCommModuleName, "F0506") != EM_SUCCESS) { EA_vCls(); PubDisplay(3, "装载公共模块失败!"); //因为PubDisplay是在applib中的,注册applib失败也就无法使用PubDisplay函数,只能用EA_vDisplay函数 PubuiInkey(0); return EXCEPTION; } */ // 导入def8583.h中的8583包定义 if (PubImport8583(YlIso8583Def) == EXCEPTION) { EA_vCls(); PubDisplay(3, "8583包导入出错"); PubDisplay(4, "请检查程序重新下装"); PubuiInkey(0); return EXCEPTION; } // 导入结束 PubGetMifsType(&iMifsType); //增加POS模块判断/必须放在initcomm之前,initcomm可能会影响底层的判断 if (FV.gbnFirstFlag == YES) { PubGetPosType(); PubSetupFirst(); #ifdef EMVIC setup_first (); #endif WRITE_nVAR(FV); //这里把setupfirst里面的内容统一写入一次 nFirstSetupFlag = YES; FV.gbnFirstFlag = NO; WRITE_nVAR(FV.gbnFirstFlag); FV.gbnParaFirstFlag = YES; WRITE_nVAR(FV.gbnParaFirstFlag); if (FV.gbnParaFirstFlag == YES) { PubReadPara() ; } FV.gbnParaFirstFlag = NO; WRITE_nVAR(FV.gbnParaFirstFlag); } if (FV.gbnParaFirstFlag == YES) { PubReadPara(); } if (nFirstSetupFlag == YES) { PubInitGlobal(); PubSetup(10); nFirstSetupFlag = NO; } else { PubInitGlobal(); } #ifdef TMS //读取主控应用参数 ProReadBasePara(); #endif // by wei 每次进入应用不需要重新操作员签到 modify by baijz 20110723 BCTC要求每次开机操作员签到 BUFCLR(szGetBuffer); // VERIFY_NORMAL(PubGetPoscfgcPosState(szGetBuffer)); // if (szGetBuffer[0] == LOGON) // PubSetPoscfgcPosState(NO_LOGON); EA_vCls(); PubKeyOn(); #ifdef BZ /*标准版*/ PubDisplayInv( 1, "中国银联"); #endif #ifdef Largevalue /*大额支付*/ PubDisplayInv( 1, "中国银联-大额"); #endif #ifdef NMLS /*内蒙移动零售*/ PubDisplayInv( 1, "内蒙移动零售"); #endif #ifdef NMJF /*内蒙移动缴费*/ PubDisplayInv( 1, "内蒙移动缴费"); #endif PubDisplayCen(2, "CUP2.0"); PubDisplayCen(3, "自检..."); szGetCmdFlag = 0 ; szCMDChangeAppFlag = 0 ; //ucRet = EA_ucOpenDevice("PINPAD",EM_io_IPP, &phPinpad); while ((ucRet = PubOpenDevice("PINPAD", EM_io_IPP, &phPinpad)) != EM_SUCCESS) { PubDisplayInv(2, "打开密码键盘错"); PubDisplay(3, "[%d][%02x]", ucRet, ucRet); EA_vBeepMs(50); PubuiInkey(1); } while ((ucRet = PubResetPinpad(phPinpad)) != EM_SUCCESS) { PubDisplayInv(2, "请接好密码键盘"); PubDisplay(3, "[%d][%02x]", ucRet, ucRet); EA_vBeepMs(50); PubuiInkey(1); } // 为多应用,怕其他应用使用和银联相同的mackey workkey的ID号,这里重新load一次。 PubucSelectKey(phPinpad, EM_pin_MASTERKEY, FV.bank.nMKeyIndex); if(FV.Other.gbMacKeyLen) PubucLoadKey(phPinpad,EM_pin_DEFAULTMODE ,EM_pin_MACKEY, 0, FV.Other.gbMacKeyLen, FV.Other.gbszMacKey); if(FV.Other.gbWorkKeyLen) PubucLoadKey(phPinpad, EM_pin_DEFAULTMODE ,EM_pin_WORKKEY, 0, FV.Other.gbWorkKeyLen, FV.Other.gbszWorkKey); EA_ucCloseDevice(&phPinpad); if (PubuiInkeyMs(500) == EM_key_CANCEL) PubLogin(); PubGetMifsType(&iMifsType); //增加POS模块判断/必须放在initcomm之前,initcomm可能会影响底层的判断 PubInitComm(&CommInfo, AUTOCHECK); BUFCLR(szGetBuffer); VERIFY_NORMAL(PubGetPoscfgcBatchState(szGetBuffer)); if (szGetBuffer[0] == YES) { EA_vCls(); PubDisplayInv(2, "请先结算再作交易"); PubuiInkey(1); } //打开MISPOS的通讯接口 #ifdef EPT_A9L ucRet = EA_ucOpenDevice(FV.Other.gbcMISPort,0, &gbhdCMDRS232); if (ucRet != EM_SUCCESS) { ucRet = EA_ucOpenDevice("COM3",0, &gbhdCMDRS232); if (ucRet == EM_SUCCESS) { memcpy(FV.Other.gbcMISPort,"COM3",4); WRITE_nVAR(FV.Other.gbcMISPort); } } if (ucRet != EM_SUCCESS) { EA_vCls(); PubDisplay(1,"请先设置COMPOS 端口"); EA_vBeepMs(1000); PubuiInkey(0); return ProFuncBankszComPos(); /*memcpy(FV.Other.gbcMISPort,"COM2",4); WRITE_nVAR(FV.Other.gbcMISPort); EA_vCls(); PubDisplay(1,"无法打开通信端口!"); PubDisplay(2,"请重启设备"); EA_vBeepMs(1000); PubuiInkey(2); return EXCEPTION;*/ } else { ucRet = EA_ucInitRS232(gbhdCMDRS232,FV.gbRSInfo.ucBps,EM_232_NOPAR ,EM_232_8DBS); //ucRet = EA_ucCloseDevice(&gbhdCMDRS232); //gbhdCMDRS232 = EM_NULL; } #endif if ( nCmdLen != NULL && CMDBUF != NULL) { CMDBUFLen = *nCmdLen; if (CMDBUFLen >0 ) { memset(szCMDBuffer , 0 , sizeof(szCMDBuffer)); memcpy(szCMDBuffer , CMDBUF , CMDBUFLen); memset(&TlvSendValue,0,sizeof(struct TLVVALUE)); CMDProcess(szCMDBuffer, (char*)&TlvSendValue, &gbctlvflag); szGetCmdFlag = 15; } } BUFCLR(szGetBuffer); BUFCLR(gbPosTags); gbTags = 0; gbnDisplayTime = 0; #ifdef EMVIC PubSetExeReader(1); #endif while (1) { PubDispIcon();//显示一下5650电池电量和信号 #ifdef TMS if (ProJudgeBaseDlaVer() == EM_SUCCESS) { ProGetBaseDialFix(); ucRet = PubReturnUpdate() ; if (ucRet != EM_ERROR) { PubDelAllBit(&iso); close_all_dev(); return ucRet; } if (PubCheckRunState() == EM_SUCCESS) { PubDelAllBit(&iso); close_all_dev(); return EM_ERROR; } } #endif memset(&gbTrkInfo, 0, sizeof(struct TrackInfo)); memset(&gbCardinfo, 0, sizeof(struct CardConfig)); // PubDisplay(4 , "%d %d %d %d",EM_VOC_LEVEL0,EM_VOC_LEVEL1,EM_VOC_LEVEL2,EM_VOC_LEVEL3); // PubuiInkey(60); // FV.Other.POSSTATFLAG = 6;//chenjs20060915 ls add for test TMS // EA_ucAudioSetVolume(FV.Other.ucNewVolume); // EA_ucAudioPlay("qing.wav"); // EA_ucAudioPlay("shuaka.wav"); #if 0 ucRet = EA_ucOpenDevice("EVOICE", 0, &hVoiceHandle); //打开外置语音设备 if(ucRet != EM_SUCCESS) { EA_vDisplays(2,1, "Test Open Err:%02x", ucRet); EA_uiInkey(0); return EM_ERROR; } else { EA_vDisplays(2,1, "Open OK"); EA_uiInkey(2); } ucRet = EA_ucIfVoiceExist(hVoiceHandle, &ucIfExist); if(ucRet != EM_SUCCESS) { EA_vDisplays(2,1, "Test IfExist Err:%02x", ucRet); EA_ucCloseDevice(&hVoiceHandle); EA_uiInkey(0); return EM_ERROR; } else { if(ucIfExist == 1) //If Exist { for(i = 0; i < 8; i++) { ucRet = EA_ucPlayVoice(hVoiceHandle, i); if(ucRet != EM_SUCCESS) { EA_vDisplays(2,1, "Test play%d Err:%02x",i, ucRet); EA_uiInkey(0); } else { EA_vDisplays(2,1, "Test play%d OK", i); } do { EA_ucGetPlayStatus(hVoiceHandle, &ucStatus); }while(ucStatus == EM_VOICE_PLAYING); } } else { EA_vDisplays(2,1, "No voice module exists"); EA_uiInkey(0); } EA_ucCloseDevice(&hVoiceHandle); } #endif #if 0 switch (FV.Other.POSSTATFLAG) { case 0: break; case 1: if (ProCheckPOSSTATFLAG()!= NORMAL) { break; } EA_vCls(); PubDisplay(1, "系统要求下载参数"); PubDisplay(2, "请按确认键继续"); PubuiInkey(0); if ( PubDownPara() == NORMAL) { ACK(4,"00"); } else { NAK_info(4,"XX","交易失败"); } continue; case 2: if (ProCheckPOSSTATFLAG()!= NORMAL) { break; } EA_vCls(); PubDisplay(1, "系统要求上传状态"); PubDisplay(2, "请按确认键继续"); PubuiInkey(0); if (PubUploadState() == NORMAL) { ACK(4,"00"); } else { NAK_info(4,"XX","交易失败"); } continue; case 3: if (ProCheckPOSSTATFLAG()!= NORMAL) { break; } EA_vCls(); PubDisplay(1, "系统要求重新签到"); PubDisplay(2, "请按确认键继续"); PubuiInkey(0); if (PubBankLogin() == NORMAL) { ACK(4,"00"); } else { NAK_info(4,"XX","交易失败"); } continue; #ifdef EMVIC case 4: if (ProCheckPOSSTATFLAG()!= NORMAL) { break; } EA_vCls(); PubDisplay(1, "系统要求公钥下载"); PubDisplay(2, "请按确认键继续"); PubuiInkey(0); //if(PubYlConnect(&CommInfo)!=NORMAL) // continue; if (PubQueryPubilcKey () == 1) { PubDownPubilcKey (); } ACK(4, "00"); //PubDialOff (&CommInfo); continue; case 5: if (ProCheckPOSSTATFLAG()!= NORMAL) { break; } EA_vCls(); PubDisplay(1, "系统要求更新参数"); PubDisplay(2, "请按确认键继续"); PubuiInkey(0); if(PubYlConnect(&CommInfo)!=NORMAL) continue; //add by baijz 20110906 下载过程断电,需要删除EMV参数文件,否则会重复下载 EA_ucPFDel (FEmvPara); EA_ucPFCreate (FEmvPara, (sizeof (struct EMVPARA))); //add end PubDownEmvPara (); PubDialOff (&CommInfo); continue; #endif #ifdef TMS case 6: if (ProCheckPOSSTATFLAG()!= NORMAL) { break; } EA_vCls(); PubDisplay(1, "要求下载TMS参数"); PubDisplay(2, "请按确认键继续"); PubuiInkey(60); TmsDownPara(); continue; #endif case 7: if (ProCheckPOSSTATFLAG()!= NORMAL) { break; } EA_vCls(); PubDisplay(1, "要求下载卡BIN黑名单"); PubDisplay(2, "请按确认键继续"); PubuiInkey(60); PubDownCardBin(); continue; //JP add default: break; } FV.Other.POSSTATFLAG = 0;//chenjs20070104 add防止不小心死循环 CheckPOSSTATFLAGTimes = 0; WRITE_nVAR(FV.Other.POSSTATFLAG); #endif EA_ucGetDateTime(&datetime); sprintf(szTmpBuf , "%04d%02d%02d", datetime.usYear, datetime.ucMonth, datetime.ucDay); PubDialOff(&CommInfo); // 判断打印是否完成 PubJudePrintFinish(1); // 如果隔日了,就要求POS的操作员签到。 if(memcmp( szTmpBuf , FV.Other.gbLoginDate, 8 )) PubSetPoscfgcPosState(NO_LOGON); BUFCLR(szGetBuffer); VERIFY_NORMAL(PubGetPoscfgcPosState(szGetBuffer)); /* if (szGetBuffer[0] == NO_LOGON) { #ifdef TMS EA_vCls(); PubDisplayInv(1,"银联EMV应用"); PubDisplayCen(3,"按任意键签到"); PubDisplayCen(4,"按取消键切换应用"); uiRet = PubuiInkey(10); if (uiRet == EM_key_FUNC9|| uiRet == EM_key_CANCEL) { EA_vCls(); PubDisplayCen(2, "应用切换"); PubuiInkeyMs(500); PubDelAllBit(&iso); close_all_dev(); EA_vCls(); return EM_ERROR; } #endif if (PubLogin() != NORMAL) continue; } */ // 20060119 //for test dudj /* PubDisplay(3, "是否联机签到?"); if (PubuiInkey(2)!=EM_key_ENTER) sprintf( FV.Other.gbLoginDate , "%s", szTmpBuf); PubDisplay(3, ""); */ // 测试的时候打开。发布的封掉 /*sprintf( FV.Other.gbLoginDate , "%s", szTmpBuf); if(memcmp( szTmpBuf , FV.Other.gbLoginDate, 8 )) { if (PubBankLogin() != NORMAL) { PubSetPoscfgcPosState(NO_LOGON); } else { EA_ucGetDateTime(&datetime); sprintf(szTmpBuf , "%04d%02d%02d", datetime.usYear, datetime.ucMonth, datetime.ucDay); sprintf( FV.Other.gbLoginDate , "%s", szTmpBuf); WRITE_nVAR(FV.Other.gbLoginDate); } continue; }*/ BUFCLR(szGetBuffer); VERIFY_NORMAL(PubGetPoscfgcPosState(szGetBuffer)); if (szGetBuffer[0] == LOCK) { PubLock(); continue; } PubGetPoscfgcMenuTime(&cMenuTime); PubGetTermCapSet(); //add by chenjis 20130311 while (1) { if (szCMDChangeAppFlag == 2)//强制切换到应用2 { PubDelAllBit(&iso); close_all_dev(); return 2; } // PubSetExeReader(0); gbcECDefault = 0; PubDispIcon(); #ifdef TMS if (ProJudgeBaseDlaVer() == EM_SUCCESS) { // for 主控应用更新,添加一个新返回值2 ucRet = PubReturnUpdate() ; if (ucRet != EM_ERROR) { PubDelAllBit(&iso); close_all_dev(); return ucRet; } if (PubCheckRunState() == EM_SUCCESS) { PubDelAllBit(&iso); close_all_dev(); return EM_ERROR; } } #endif PubSetPoscfgcSettleEnd(1); /*设置结算未结束标志 */ EA_vCls(); nScreen = 0 ; //chenjs20060725 add down memset(&gbTrkInfo, 0, sizeof(struct TrackInfo)); memset(&gbCardinfo, 0, sizeof(struct CardConfig)); gbTrkInfo.cDoneFlag = 0; PubSetBankcMacChk(MAC_ECB); #ifdef EMVIC //ecash by wei gblTranAmt = 0l; BUFCLR(gbszTermData); gbszTermData[0] = FV.EmvStru.gbcMSD;//loyes #endif strcpy(gbszErrCode, ""); while (1) { gbnComposFlag =1; gbnSettleFlag=0; if (szCMDChangeAppFlag == 2)//强制切换到应用2 { PubDelAllBit(&iso); close_all_dev(); return 2; } PubSetPoscfgcSettleEnd(1); /*设置结算未结束标志 */ //EA_vCls(); nScreen = 0 ; //chenjs20060725 add down memset(&gbTrkInfo, 0, sizeof(struct TrackInfo)); memset(&gbCardinfo, 0, sizeof(struct CardConfig)); gbTrkInfo.cDoneFlag = 0; if (CMDCONT.Type == CMD_NONE) // CMD_NONE表示无命令 { nRet = GetCMD(); if (szCMDChangeAppFlag == 15) { PubDelAllBit(&iso); close_all_dev(); EA_ucCloseDevice(&gbhdCMDRS232); memcpy(CMDBUF , szCMDBuffer , CMDBUFLen); CMDBUF[CMDBUFLen] = 0 ; *nCmdLen = CMDBUFLen; return 15; } if (nRet != NORMAL) { //PubDisdoter(); PubDispLogo(); if( EA_ucKBHit_ped() == EM_key_HIT ) { uiKey = PubuiInkeyMs(500); #ifdef BZ /*标准版*/ if (uiKey == ENTER) #endif #ifdef Largevalue /*大额支付*/ if (uiKey == ENTER) #endif #ifdef NMLS /*内蒙移动零售*/ if (uiKey == EM_key_F1) /*应内蒙银商要求F1进入查询菜单wujianyuan modify 20130712*/ #endif #ifdef NMJF /*内蒙移动缴费*/ if (uiKey == EM_key_F1) /*应内蒙银商要求F1进入查询菜单wujianyuan modify 20130712*/ #endif { EA_vCls(); PubDisplay(2, "请输入安全密码:"); BUFCLR(szGetBuffer); PubGetSAFEPWD(szGetBuffer, sizeof(szGetBuffer)); PubKeyOff(); BUFCLR(szBuffer); if (PubGetNStr(3, BIGFONT, szBuffer, 6) == NORMAL && memcmp(szGetBuffer, szBuffer, 6) == 0) { PubKeyOn(); EA_ucCloseDevice(&gbhdCMDRS232); gbhdCMDRS232 = EM_NULL; PubSetupNew(); EA_vCls(); } EA_vCls(); PubKeyOn(); } if(uiKey==EM_key_9) { if (PubuiInkey(1) == '5') if (PubuiInkey(1) == '9') { EA_vSystemManage(EM_RESET);//add by wujy 20111020 实现重启 } } if (uiKey == EM_key_FUNC9) //多应用切换 { EA_ucCloseDevice(&gbhdCMDRS232); gbhdCMDRS232 = EM_NULL; PubDelAllBit(&iso); close_all_dev(); EA_vCls(); return EM_SUCCESS; } if (uiKey == EM_key_FUNC) { gbnComposFlag =0; memset(&TlvSendValue,0,sizeof(struct TLVVALUE)); PubGetBankszTerminal(TlvSendValue.szTerminal, 8); PubGetBankszCust(TlvSendValue.szCust, 15); BUFCLR(szGetBuffer); VERIFY_NORMAL(PubGetPoscfgcPosState(szGetBuffer)); if (szGetBuffer[0] == NO_LOGON) { if(PubLogin()!=NORMAL) { EA_vCls(); continue; } } BUFCLR(szGetBuffer); VERIFY_NORMAL(PubGetPoscfgcLoginState(szGetBuffer)); if (szGetBuffer[0] == NO_LOGON) { VERIFY_NORMAL(PubSetPoscfgcPosState(NO_LOGON)); if(PubBankLogin()== NORMAL) { VERIFY_NORMAL(PubSetPoscfgcPosState(LOGON)); VERIFY_NORMAL(PubSetPoscfgcLoginState(LOGON)); EA_ucGetDateTime(&datetime); BUFCLR(FV.Other.gbLoginDate); sprintf(FV.Other.gbLoginDate , "%04d%02d%02d", datetime.usYear, datetime.ucMonth, datetime.ucDay); WRITE_nVAR(FV.Other.gbLoginDate); } else { PubDialOff (&CommInfo); EA_vCls(); continue; } } EA_vCls(); PubDisplay (1, "1.消 费 2.撤 销"); PubDisplay (2, "3.退 货 4.预授权"); PubDisplay (3, "5.离 线 6.打 印"); PubDisplay (4, "7.管 理 8.其 它"); uiKey = PubuiInkey((char) cMenuTime); if(uiKey>='1'&&uiKey<='8') uiOption=uiKey-'0'; else { EA_vCls(); continue; } PubUpYLDataOld(); PubProcessOld(uiOption); EA_vCls(); continue; } } continue; } } if (CMDCONT.Type != CMD_NONE) { break; } } if (PubProcess(CMDCONT.Type) != CMD_INTERRUPT) { ClearCMD(); } EA_vLCDLightOff(); } return EM_SUCCESS; } }
// [03/24/2015 shizd DJ] 用通用接口读非接卡数据 int PubReadCardM1( void) { uchar ucRet; uchar ucConfig; uint uiLen; DevHandle hDevHandle; uchar ucDataout[256]; uchar ucKey[6] = {0x11, 0x11, 0x22, 0x22, 0x33, 0x33}; char szTrack2Buf[256]; ET_MAGCARD szTrack2; int nTrack2StxLen; // 保存二磁道SS标志的长度 int nTrack2FsPos; // 保存二磁道分隔符FS的位置 int i; ucRet = EA_ucOpenRfCardDevEI((char *)"COM1", &hDevHandle, &ucConfig);// by shizd20150324 内外置射频统一打开接口 if( ucRet != EM_SUCCESS ) { EA_vDisplay(2 ,"打开RFCARD失败!"); EA_ucCloseRfCardDevEI(&hDevHandle); // by shizd20150324 内外置射频统一关闭接口 PubuiInkey(2); return EXCEPTION; } EA_vDisplay(2 ,"请放卡"); uiLen = 0; BUFCLR(ucDataout); ucRet = EA_ucMIFActivateLib(hDevHandle, 5, &uiLen, ucDataout); EA_ucSetRFParamLib(hDevHandle,7,11);// by shizd20150324 统一在EA_ucMIFActivateLib之后调用 /* // 根据卡片类型进行激活 switch(ucMifType) { case EM_mifs_S50: ucRet = EA_ucMIFActivateLib(hDevHandle, EM_mifs_S50, &uiLen, ucDataout); break; case EM_mifs_S70: ucRet = EA_ucMIFActivateLib(hDevHandle, EM_mifs_S70, &uiLen, ucDataout); break; case EM_mifs_PROCARD: ucRet = EA_ucMIFActivateLib(hDevHandle, EM_mifs_PROCARD, &uiLen, ucDataout); break; case EM_mifs_PRO_S50: // 对于这种卡片,如果按照S50存储卡方式激活,则后继该卡只能做为S50存 储卡使用 // ucRet = EA_ucMIFCardActivate(hDevHandle, EM_mifs_S50, &uiLen, ucDataout); // 如果按照Pro卡方式激活,则后继该卡做为Pro卡使用 ucRet = EA_ucMIFCardActivate(hDevHandle, EM_mifs_PROCARD, &uiLen, ucDataout); break; case EM_mifs_PRO_S70: // 对于这种卡片,如果按照S70存储卡方式激活,则后继只能做为S70存储卡 使用 // ucRet = EA_ucMIFCardActivate(hDevHandle, EM_mifs_S70, &uiLen, ucDataout); // 如果按照Pro卡方式激活,则后继只能做为Pro卡使用 ucRet = EA_ucMIFCardActivate(hDevHandle, EM_mifs_PROCARD, &uiLen, ucDataout); break; case EM_mifs_TYPEBCARD: ucRet = EA_ucMIFCardActivate(hDevHandle, EM_mifs_TYPEBCARD, &uiLen, ucDataout); break; default: ucRet = EM_ERROR; break; } */ if( ucRet != EM_SUCCESS ) { EA_vDisplay(2 ,"激活卡片失败=%d!", ucRet); EA_ucCloseRfCardDevEI(&hDevHandle); PubuiInkey(2); return EXCEPTION; } else { // by shizd20150324 读取非接卡二磁道数据 ucRet = EA_ucMIFAuthToRamLib(hDevHandle, 2, EM_mifs_KEYA, ucKey); if (ucRet != EM_mifs_SUCCESS) { EA_vDisplay(2 ,"卡片认证失败!"); EA_ucCloseRfCardDevEI(&hDevHandle); PubuiInkey(2); return EXCEPTION; } BUFCLR(szTrack2Buf); BUFCLR(ucDataout); ucRet = EA_ucMIFReadLib(hDevHandle, 8, ucDataout); if (ucRet != EM_SUCCESS) { EA_vDisplay(2 ,"读卡片失败!"); EA_ucCloseRfCardDevEI(&hDevHandle); PubuiInkey(2); return EXCEPTION; } memcpy(szTrack2Buf, ucDataout, 16); BUFCLR(ucDataout); ucRet = EA_ucMIFReadLib(hDevHandle, 9, ucDataout); if (ucRet != EM_SUCCESS) { EA_vDisplay(2 ,"读卡片失败!"); EA_ucCloseRfCardDevEI(&hDevHandle); PubuiInkey(2); return EXCEPTION; } memcpy(szTrack2Buf+16, ucDataout, 16); BUFCLR(ucDataout); ucRet = EA_ucMIFReadLib(hDevHandle, 10, ucDataout); if (ucRet != EM_SUCCESS) { EA_vDisplay(2 ,"读卡片失败!"); EA_ucCloseRfCardDevEI(&hDevHandle); PubuiInkey(2); return EXCEPTION; } memcpy(szTrack2Buf+32, ucDataout, 2); EA_ucMIFHalt(hDevHandle);//by shizd20150324 挂起卡片 } memset ((char *) &szTrack2, 0, sizeof (ET_MAGCARD)); memcpy(szTrack2.aucTrkBuf , szTrack2Buf,strlen(szTrack2Buf)); szTrack2.ucTrkFlag = EM_mag_SUCCESS; szTrack2.ucTrkLength = strlen(szTrack2Buf); nTrack2StxLen = 0; for (i = 0; i < szTrack2.ucTrkLength; i++) // 确定分隔符FS的位置,如果不是0-9,就认为是FS,Mastercard的FS为符号'=' { if ((szTrack2.aucTrkBuf[i] < '0') || (szTrack2.aucTrkBuf[i] > '9')) break; } if (i >= szTrack2.ucTrkLength) // 若没找到分隔符,按PAN长度位最长算即19推算,FS的位置 { i = nTrack2StxLen + 19;//chenjs20061025 add } nTrack2FsPos = i; memcpy (GBTRANSDATA.stPosLs.szCardNo, szTrack2.aucTrkBuf + nTrack2StxLen, nTrack2FsPos - nTrack2StxLen); EA_vDisplay(2 ,"卡号:%s",GBTRANSDATA.stPosLs.szCardNo); EA_vDisplay(3 ,"请确认"); EA_uiInkey(10); EA_ucCloseRfCardDevEI(&hDevHandle); return NORMAL; }
/****************************************************************************** 函数名称:print_work_note_history 功能描述:打印日结算历史票据 参数名称:输入/输出? 类型 描述 输入 返 回 值: 作 者 :于福勇 日 期:2004-09-02 修改历史: 日期 修改人 修改描述 ------ --------- ------------- ******************************************************************************/ void print_work_note_his(INT8U * rec) { uchar ucRet; INT8U RecBuff[70]; INT8U strbuff[50]; INT8U time[7+2]; _BANLANCE_IN_HAND * prec = (_BANLANCE_IN_HAND *)rec; EA_vCls(); EA_vDisplay(1, " 历史日结帐单打印 ");//(int qx, int qy, char * ceStr, int xyFlag) EA_vDisplay(2, " 请等待... ");//(int qx, int qy, char * ceStr, int xyFlag) SleepMs(1500); memset(RecBuff, 0, sizeof(RecBuff)); ucRet = EA_ucGetPrinterStatus(hDprinterHandle); //打印前必须判断打印机的状态 if( ucRet == EM_prn_PAPERENDED ) { EA_vCls(); EA_vDisplay(1, " 缺纸,打印失败! "); EA_vDisplay(2, " 请放入纸张后 "); EA_vDisplay(3, " 按确认任意键 "); EA_uiInkey(0); } if( ucRet == EM_prn_OVERHEAT ) { EA_vDisplay(2, " 机芯温度过高 "); EA_vDisplay(3, " 请稍后再打印 "); EA_uiInkeyMs(500); return; } if( ucRet == EM_prn_LOWVOL ) { EA_vDisplay(2, " 电池电量过低 "); EA_vDisplay(3, " 请充电后再打印 "); EA_uiInkeyMs(500); return; } (void)EA_ucPrinterAutoFeeding(hDprinterHandle); ///打印头 (void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)"淄博市公共汽车公司\r\n"); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)"日结帐单历史记录\r\n"); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)"------------------------------\r\n"); //消费次数 sprintf((void *)strbuff, "天然气加气次数 :%6d次\r\n", prec->consume_cnt[0]); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)strbuff); sprintf((void *)strbuff, "汽油93#加油次数:%6d次\r\n", prec->consume_cnt[1]); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)strbuff); sprintf((void *)strbuff, "汽油97#加油次数:%6d次\r\n", prec->consume_cnt[2]); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)strbuff); sprintf((void *)strbuff, "柴油加油次数 :%6d次\r\n", prec->consume_cnt[3]); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)strbuff); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)"------------------------------\r\n"); //消费体积 sprintf((void *)strbuff, "天然气体积 :%6.2lf元\r\n", (double)(prec->consume_cap[0])/100); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)strbuff); sprintf((void *)strbuff, "汽油93#体积:%6.2lf元\r\n", (double)(prec->consume_cap[1])/100); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)strbuff); sprintf((void *)strbuff, "汽油97#体积:%6.2lf元\r\n", (double)(prec->consume_cap[2])/100); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)strbuff); sprintf((void *)strbuff, "柴 油 体 积:%6.2lf元\r\n", (double)(prec->consume_cap[3])/100); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)strbuff); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)"------------------------------\r\n"); //消费金额 sprintf((void *)strbuff, "天然气金额 :%6.2lf元\r\n", (double)(prec->consume_amt[0])/100); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)strbuff); sprintf((void *)strbuff, "汽油93#金额:%6.2lf元\r\n", (double)(prec->consume_amt[1])/100); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)strbuff); sprintf((void *)strbuff, "汽油97#金额:%6.2lf元\r\n", (double)(prec->consume_amt[2])/100); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)strbuff); sprintf((void *)strbuff, "柴 油 金 额:%6.2lf元\r\n", (double)(prec->consume_amt[3])/100); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)strbuff); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)"------------------------------\r\n"); sprintf((void *)strbuff, "总 金 额 :%6.2lf元\r\n", (double)(prec->consume_amt[0]+prec->consume_amt[1]+prec->consume_amt[2] +prec->consume_amt[3])/100); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)strbuff); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)"------------------------------\r\n"); //上班时间 memcpy(time, (INT8U*)&prec->work_datetime, 7); sprintf((void *)strbuff, "上班时间:\r\n"); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char*)strbuff); sprintf((void *)strbuff, "%02X%02X-%02X-%02X %02X:%02X:%02X\r\n", time[0],time[1],time[2],time[3],time[4],time[5],time[6]); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char*)strbuff); //下班时间 memcpy(time, (INT8U*)&prec->down_datetime,7); sprintf((void *)strbuff, "下班时间:\r\n"); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char*)strbuff); sprintf((void *)strbuff, "%02X%02X-%02X-%02X %02X:%02X:%02X\r\n", time[0],time[1],time[2],time[3],time[4],time[5],time[6]); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char*)strbuff); //分行符号 strcpy((void *)strbuff, "---------------------------------- \r\r\r"); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)strbuff); //设备编号 htoa(RecBuff, &prec->equ_id[0], 3); sprintf((void *)strbuff, "设备编号 :%s\r\n", RecBuff); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)strbuff); //商户号 htoa(RecBuff, &prec->acnt_id[0], 2); sprintf((void *)strbuff, "站 点 号:%s\r\n", RecBuff); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)strbuff); //操作员号 htoa(RecBuff, &prec->oper_id[0], 1); sprintf((void *)strbuff, "加油员工号:%s\r\n", RecBuff); (void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)strbuff); // 打印最后调用换页命令 ucRet = EA_ucLinePrinter(hDprinterHandle, 0, "\f"); if ( ucRet == EM_SUCCESS ) { EA_vDisplay(2, "本次打印结束!"); Beep(1000); EA_uiInkeyMs(2000); } }
// ***************************************************************** // 功能: man_set_busnum // 说明: 手动输入车号 // 入口参数: // 出口参数: Null // 作者: // 返回值: Null // ***************************************************************** void man_set_busnum(void) { INT8U i = 0; INT8U input1[20]; uchar uckey; uint uikey; uchar ret; uchar temp_uc[5]; // if ( strcmp((void *)&DevStat.bus_number[0], "12345") == 0 ) // { // goto set_bus_number; // } EA_vCls(); lcddisp(2, 1, (void *)"输入车号: "); strcpy((void *)input1, ""); for ( ;; ) { i = EA_ucGetInputStr(2, 10, 20, EM_BIG_FONT | EM_MODE_CHAR | EM_ALIGN_LEFT | EM_SHOW_ORIGINALLY , 5, 5, 0, (void *)input1); //刘及华,修改只能输入数字和字母 if ( i == EM_SUCCESS ) break; if ( i == EM_ABOLISH ) return; //do nothing } memcpy((void *)&CardInfo.bus_number[0], (void *)input1, 5); WriteParam(); EA_ucSetInverse(EM_lcd_INVON); lcddisp(3, 1, (void *)" 输入成功 "); EA_ucSetInverse(EM_lcd_INVOFF); SleepMs(1500); RESELECT: memcpy(temp_uc, &CardInfo.bus_number[0], 5); i = BlackName_Find((char *)temp_uc); //白名单判断 if ( i != ok ) //不是白名单 { lcddisperr("该卡不在白名单中"); Beeperr(); return; } EA_vCls(); EA_vDisplay(1, "车 号 :鲁C-%s", CardInfo.bus_number); lcddisp(4, 1, (void *)" 请刷员工卡 "); while(1) { if( CardInit() == ok ) break; uckey = EA_ucKBHit(); if ( uckey == EM_key_HIT ) //按下取消键 { uikey = EA_uiInkey(0); if ( uikey == EM_key_CANCEL ) //按下取消键 { return ; } } } ret = M1CardProcess(); //再检测员工卡 if(ret == ok) { ; } else { goto RESELECT; } return; }
/***************************************************************** 函数原型:main() 功能描述:主函数 参数描述: 返回值: 无 作 者: 刘及华 日 期: 2012-11-24 修改历史: 日期 修改人 修改描述 ------ --------- ------------- *****************************************************************/ int main(int argc, char **argv) { INT8U ret = 0; char mainflag = 1; uchar uckey; uint uikey; (void)EA_ucSetStopFlag( EM_DISABLE_STOP ); //不允许系统进入睡眠状态; reboot: ret = System_Init(); //系统初始化,包括PSAM,参数表,GPRS初始化 if( ret != ok ) { lcddisperr("系统初始化失败!"); goto reboot; } Beep(1000); //(void)EA_ucSetStopFlag( EM_ENABLE_STOP ); //允许系统进入睡眠状态; for ( ;; ) { if( mainflag == 1 ) { DisplayWelcomeMenu(); mainflag = 0; } uckey = EA_ucKBHit(); if(uckey == EM_key_HIT) //有按键 { uikey = EA_uiInkey(0); //读取按键键值 switch ( uikey ) { case EM_key_EXIT: //关机 { mainflag = 1; goto shutdown; break; } case EM_key_F3: { Login(); //登录界面 mainflag = 1; break; } case EM_key_F1: { Parm_Setting(); //参数设置 mainflag = 1; break; } case EM_key_1: { gprs_test(); //无线连接测试 mainflag = 1; break; } case EM_key_F2: { kuaijiefangshi(); //快捷方式 // Gprs_Upload_data(); // GPRS_Close(); mainflag = 1; break; } default: break; } } } shutdown: Power_Down(); }