Пример #1
0
/*****************************************************************
函数原型: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;
}
Пример #2
0
/* 函数功能: 按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;
}
Пример #3
0
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;
}
Пример #4
0
// *****************************************************************
// 功能:		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;
}
Пример #5
0
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;
}
Пример #6
0
// *****************************************************************
// 功能:		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;
			}			
		}
	}
}
Пример #7
0
/*****************************************************************
 函数原型: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(&ltime);
		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();
}
Пример #8
0
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;
	}
}
Пример #9
0
// [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;
}
Пример #10
0
/******************************************************************************
 函数名称: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);
	}
		
}
Пример #11
0
// *****************************************************************
// 功能:		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;
}
Пример #12
0
/*****************************************************************
 函数原型: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();
}