Beispiel #1
0
/*****************************************************************
 函数原型:System_Init()
 功能描述:参数等初始化
 参数描述:

 返回值:   OK ?  NOTOK

 作  者:   许岩/刘及华
 日  期:   2012-11-24
 修改历史:
		日期        修改人      修改描述
		------      ---------   -------------
*****************************************************************/
INT8U System_Init(void)
{
	INT8U   i = 0;
	INT16U  key = EM_key_NOHIT;

	EA_vCls();
	EA_ucSetInverse(EM_lcd_INVOFF);
	EA_vDisp(1, 1, "    版本号: ");
	EA_vDisp(1, 13, VERSION);
	SleepMs(2000);
	EA_vCls();
	EA_vDisp(2, 1, "   系统初始化中...  ");
	key = EA_uiInkeyMs(2000);

	if ( key == EM_key_F3 )
	{
		format_process();    		  //可以进行系统格式化操作
	}
	//重要参数部分初始化函数
	appfile_Init();

	memset((void *)&DevStat, 0x00, sizeof(DevStat));

	i = ReadParam();  
	        
	if ( i != ok )
	{
		param_factory_default(0);     //格式化重要参数DEV.STATE
	}

	DevStat.POS_type = POS_T_NORMAL;  //盒类型为正常采集


	DevStat.record_number = query_rec_num();

	memset((void *)&CardInfo, 0x00, sizeof(CardInfo));        //清除卡的信息
	memset((void *)&ErrCardInfo, 0x00, sizeof(ErrCardInfo));  //清除错误卡的信息

	//这里应该添加一个函数,负责管理所有的设备的句柄结构!!!!
	i = Device_Handle_Init();
	if( i != ok)
	{
		return notok;
	}

	if( LowBatteryDisplay() != ok )     //电池电量检测
	{	
		lcddisperr("电池电量检测失败");
		return notok;
	}
	if( SystemCheck() != ok )          //PSAM系统检测
	{
		lcddisperr("PSAM卡检测失败");
		return notok;
	}
	return ok;
}
Beispiel #2
0
/*****************************************************************
函数原型:SystemCheck
功能描述:本函数为系统检测
参数描述:无
参数名称:	输入/输出?	类型		描述
-----------		-----------	------	   	------- 
作    者: 刘及华 
日	  期: 2012-11-28
返 回 值:有
			 1:成功
			 0:失败
*****************************************************************/
INT8U SystemCheck()
{
	INT8U   ret = 0;
	//SAM卡检测
	EA_vCls();
//  EA_vDisp(2, 1, "  PSAM卡检测中...   ");
//  (void)EA_uiInkeyMs(2000);
	ret = SamCheck();
	if ( ret != ok )
	{
		EA_vCls();
		lcddisp(1, 1, (void *)"   PSAM卡检测错误   ");
		lcddisp(2, 1, (void *)"     请检查插槽     ");
		(void)EA_uiInkeyMs(2000);
		return notok;
	}
//  lcddisperr(" PSAM卡检测成功!");
	return ok;
}
Beispiel #3
0
uchar EI_ucDataDownload(TMS_AppScript * ptTMSHead) 
{
    ET_HostData *ptHostData = NULL;
	char szBuffer[100];
    uchar ucRet = EM_SUCCESS;
	uint uiFrameNo = 0;
	uint uiLength;
#if M3_UN_MALLOC	
	uchar aucHostDataBuff[EM_TMS_MAXBUFSIZE];
#endif

	if(NULL == ptTMSHead)
	{
		EA_TMS_vLog("EI_ucDataDownload: NULL Pointer!");
		return EM_ERROR;
	}

	memset(szBuffer, 0, sizeof(szBuffer));
	EI_ClearAll();

	// 创建进度条
	if(TMS_BREAKTYPE_YES == EG_ucBreakType)
	{
		EA_face_vSetInfo("下载中(按取消退出)...");
		EA_TMS_vLog("\r\n#下载中[支持中断]...");
	}
	else
	{
		EA_face_vSetInfo("下载中...");
		EA_TMS_vLog("\r\n下载中...");
	}

#if M3_UN_MALLOC
	ptHostData = (ET_HostData *)&aucHostDataBuff;
#else
	ptHostData = (ET_HostData *)EA_pvMalloc(EG_uiFrameLen+100);
	if (!ptHostData)
	{
		EA_face_vSetInfo("内存分配失败");
		EA_TMS_vLog("EI_ucDataDownload:EA_pvMalloc fail");
		return EM_ALLOCERR;
	}  
#endif
	EG_ucLoadDataFlag = 1;
	/*设置进度条*/
	EA_face_vSetProgress( (float) ((float)EG_usCurFrame/(float)EG_usAllFrame));


    while(EG_usCurFrame < EG_usAllFrame)
    {
		EG_ucStepFlag =TMS_STEP_HOST_DATA;
		EA_TMS_vLog("\r\n# 接收第%d帧,总%d帧", EG_usCurFrame, EG_usAllFrame);

        /* 接收下载数据信息包*/
		uiLength = 0;
		ucRet = EI_ucRecvHostDataPack(EG_usCurFrame, ptHostData, &uiLength);
		if (ucRet != EM_SUCCESS)
        {
            EA_TMS_vLog("EI_ucDataDownload: EI_ucRecvHostDataPack Fail!");
			EA_TMS_vLog("# 发送下载失败应答帧[%x]",EM_TERM_DATAFEED_FAIL);
            EI_ucSendDataAckPack(EM_TERM_DATAFEED_FAIL);
            ucRet =  EM_ERROR;
            goto DOWNEND;
        }
		
        /* 存储数据包信息*/
#ifdef TMS_DEBUG
		if (2 == EG_ucDBShowFlag)
		{
			EA_TMS_vLog("SAVE FRMAE[%d]:", EG_usCurFrame);
			EI_vDebugData(uiLength, (uchar*)ptHostData->acDataBuff);
		}
#endif

		ucRet = EA_ucTMSSaveFrame(EG_usCurFrame, uiLength, ptHostData->acDataBuff);
        if ( EM_SUCCESS != ucRet)
        {
            EA_TMS_vLog("EI_ucDataDownload:EA_ucTMSSaveFrame fail[%x]", ucRet);
			EA_TMS_vLog("SAVE FRMAE[%d] Length[%d]:", EG_usCurFrame, uiLength);
			EI_vDebugData(uiLength, (uchar*)ptHostData->acDataBuff);		
	        goto DOWNEND;		
        }

		

        /* 交互判断*/
        if(EG_ucBreakType == TMS_BREAKTYPE_YES)
        {	
            if(EA_ucKBHit() == EM_key_HIT && EA_uiInkeyMs(0) == EM_key_CANCEL)
            {
				EA_TMS_vLog("# 发送取消失败应答帧[%x]",EM_TERM_DATAFEED_FAIL);
                EI_ucSendDataAckPack(EM_TERM_DATAFEED_FAIL);
                ucRet =  EM_ABOLISH;
                goto DOWNEND;
            }
		}

		uiFrameNo++;
		EG_usCurFrame++;
		if((uiFrameNo == EG_uiSerialPackNum) || (EG_usCurFrame == EG_usAllFrame))
		{
			EA_TMS_vLog("\r\n# 发送应答帧[%d]\r\n", EG_usCurFrame);
			ucRet = EI_ucSendDataAckPack(EG_usCurFrame);
			if (ucRet != EM_SUCCESS)
			{
				EA_TMS_vLog("EI_ucDataDownload:send data ack pack fail[%d]\r\n", ucRet);
				if (EG_usCurFrame != EG_usAllFrame)
				{
					goto DOWNEND;
				}
				else
				{
					ucRet = EM_SUCCESS;
				}
			}

			//工行TMS流程在最后一帧接收完成后还需接收一帧,但不对数据进行校验,直接返回成功
			if (TMS_AUTH_ICBC == EG_ucAuthFlag && EG_usCurFrame == EG_usAllFrame)
			{
				EA_TMS_vLog("# ICBC end!");
				EA_face_vSetProgress( (float) ((float)EG_usCurFrame/(float)EG_usAllFrame));				
				EI_ucReadICBC(5, ptHostData->acDataBuff, &uiLength);
				memset(ptHostData->acDataBuff, 0, sizeof(ptHostData->acDataBuff));
				uiLength = 0;
			}

			uiFrameNo = 0;
		}

#ifdef PED

    	// 设置进度条
		if(TMS_BREAKTYPE_YES == EG_ucBreakType)
		{
			
			sprintf(szBuffer, "下载中[%3.1f%%](按取消退出)...", (float)((float)EG_usCurFrame/(float)EG_usAllFrame)*100);
			EA_face_vSetInfo(szBuffer);
		}
		else
		{
			sprintf(szBuffer, "下载中[%3.1f%%]...", (float)((float)EG_usCurFrame/(float)EG_usAllFrame)*100);
			EA_face_vSetInfo(szBuffer);
		}
#endif      
		
		EA_face_vSetProgress( (float) ((float)EG_usCurFrame/(float)EG_usAllFrame));
	}

	//银联MISPOS
	if (TMS_AUTH_YL == EG_ucAuthFlag && 1 == EG_YL_ucSyncFlag)
	{
		EI_YL_RecvTMSSyncPack();
		EA_face_vSetInfo("接收协议同步包完成");
	}


DOWNEND:
#if M3_UN_MALLOC
	return ucRet;
#else
	if(NULL != ptHostData)
    {
        EA_vFree(ptHostData);
        ptHostData = NULL;
    }
	return ucRet;
#endif
}
Beispiel #4
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));
///打印头
	(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);
	(void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)strbuff);

//消费金额
	sprintf((void *)strbuff, "加油体积:%6.2f元\r\n", (float)(prec->consume_amt)/100);
	(void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)strbuff);
	(void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)"------------------------------\r\n");
//上班时间	
	memcpy(time, (INT8U*)&prec->work_datetime, 7);
	htoa(RecBuff, time, 7);
	sprintf((void *)strbuff, "上班时间:%s\r\n", RecBuff);
	(void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)strbuff);
	
//下班时间
	memcpy(time, (INT8U*)&prec->down_datetime,7);
	htoa(RecBuff, time, 7);

	sprintf((void *)strbuff, "下班时间:%s\r\n",RecBuff);
	(void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)strbuff);

//分行符号
	strcpy((void *)strbuff, "---------------------------------- \r\r\r");
	(void)EA_ucLinePrinter(hDprinterHandle, 0, (char *)strbuff);
	
//设备编号
	htoa(RecBuff+4, &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], 2);
	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);
	}
		
}
Beispiel #5
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);
	}
		
}