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