⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lb_msg.c

📁 中国石油二期加油站IC系统后台通讯软件
💻 C
字号:
/*
***********************************************************************************************************
                                                      Amos
                                          The Real_Time Operation System
                                                   Multi Task
                                 (c) Copyright 1998-2002, ShangYaoHui, Shenzhen
                                              All Right Reserved
                                                  VERSION 6.01

" By  : 商耀挥(ShangYaoHui)
 create time: 2002-7-1 23:46:10  
***********************************************************************************************************
*/

/************ head file list *************/
/* header include files -- defines (.h) */
#include "envopt.h"        /* environment options */
#include "envdep.h"        /* environment dependent */
#include "envind.h"        /* environment independent */

#include "gen.h"           /* general */
#include "cm5.h"           /* common functions */
#include "ssi.h"           /* system services */

/* header/extern include files (.x) */

#include "gen.x"           /* general */
#include "cm5.x"           /* common functions */
#include "ssi.x"           /* system services */

#include "cm_llist.h"
#include "cm_llist.x"

#ifdef WIN32
	#include "winbase.h"
#endif

#include "rx.h"
#include "rx.x"

#include "rx_msg.h"
#include "rx_msg.x"

#include "lb_cm.h"
#include "lb_cm.x"

#include "lb_recv.h"
#include "lb_recv.x"
#include "lb_xmit.h"
#include "lb_xmit.x"
#include "lb_msg.h"
#include "lb_msg.x"

#include "lb_bdy1.h"
#include "lb_bdy1.x"
#include "lb_bdy2.h"
#include "lb_bdy2.x"
#include "lb_bdy4.h"
#include "lb_bdy3.h"
#include "lb_bdy3.x"
#include "lb_bdy4.h"
#include "lb_bdy4.h"
#include "lb_bdy4.x"
#include "lb_bdy5.h"
#include "lb_bdy5.x"

#include "lb_err.h"
#include "lb_err.x"

/************* const define **************/

/******** import variable declare ********/

/******* gloable variable declare ********/

/*********** function declare ************/

/********** function prototype ***********/
S16 lbProcRqstStatAck(EquCfgEntry_s * equ, TranCb_s * tran, RqstStatAck_s * ack)
{
	
	if(ack->ackCode != 'A')
	{

		printf("error: receive invalide ack code\n");
		RETVALUE(RFAILED);
	}

	if(ack->errStat != 0)
	{
		lbErrProc(equ, ack->errStat);
		RETVALUE(ROK);
	}

	equ->cfmStat = ROK;
	equ->cmdProcErrCode = 0;
	/* 
	 * 1:
	 * when gun up I need to send gunup info 
	 * and get card info to console, 
	 * authrize start
	 * 2:  
	 * when gun down I only need to send gundown auth 
	 * and if card not in station rqst card info
	 * else only send gundown 
	 */
	lbUpdateGunStat(equ, ack->hdr.sideId, ack);
	/* 
	 * when gunup find card handle must be ignore
	 */
	lbScRqstProc(equ, ack->rqstFlag);


	RETVALUE(ROK);
}
S16 lbProcCmdRqstAck(ScCommCb_s * scCommCb, CommonAck_s * ack)
{
	TranCb_s * tran = NULLP;
	CmdMsg_s * cmdNode;
	EquCfgEntry_s * equ;
	S16 ret;

	if(scCommCb == NULLP)
	{
		RXLOGERROR(0, 0, 0, "ERROR");
		RETVALUE(RFAILED);
	}
	equ = scCommCb->equ;

	if (ROK != findFirstCmdNodeByChannel(equ->entry.channelId, &cmdNode))
	{
//		RXLOGERROR(0, 0, 0, "ERROR");
		RETVALUE(RFAILED);
	}

	if(cmdNode->dir == IND_DIR)
	{
		printf("error: dir error\n");
		RETVALUE(RFAILED);
	}
	if(cmdNode->msgCode != ack->cmdCode)
	{
		rxLog("recv stale packet");
		RETVALUE(RFAILED);
	}


	switch(cmdNode->msgCode)
	{
	case 0xa0:

		lbProcRqstStatAck(equ, tran, (RqstStatAck_s *)ack);
		ret = ROK;
		break;
		

	case 0xa1: /* read totle */
		LBLOG("读累计回应", ack, ack->hdr.dataLen + 5); 
        ret = lbRecvReadTotleAck(equ, tran, (ReadTotleAck_s *)ack);
		break;
	case 0xa4:

		switch(cmdNode->action)
		{
		case 0x01:
			LBLOG("读员工卡回应", ack, ack->hdr.dataLen + 5); 
			ret = lbRecvReadWorkerCardAsnAck(equ, tran, (ReadCardAsnAck_s *)ack);
			break;
		case 0x00:
			LBLOG("读加油卡回应", ack, ack->hdr.dataLen + 5); 
			ret = lbRecvReadFillCardAsnAck(equ, tran, (ReadCardAsnAck_s *)ack);
			break;
		case 0x02:
			LBLOG("读黑卡回应", ack, ack->hdr.dataLen + 5); 
			ret = lbRecvReadBlkCardAsnAck(equ, tran, (ReadCardAsnAck_s *)ack);
			break;
		}

	break;
	case 0xa5:
		LBLOG("读卡状态回应", ack, ack->hdr.dataLen + 5); 
		ret = lbRecvReadCardInfoAck(equ, tran, (ReadCardInfoAck_s *)ack);
		break;

	case 0xb0:
		LBLOG("设联网回应", ack, ack->hdr.dataLen + 5); 
		ret = lbRecvSetNetModeAck(equ, tran, (CommonAck_s *)ack, cmdNode);
		break;

    case 0xb2:
		LBLOG("授权回应", ack, ack->hdr.dataLen + 5); 
		ret = lbRecvAuthAck(equ, tran, (CommonAck_s *)ack);
		break;
	case 0xb3:
		LBLOG("结束加油回应", ack, ack->hdr.dataLen + 5); 
		ret = lbRecvFinishFillAck(equ, tran, (CommonAck_s *)ack);

		break;
	case 0xb4:
		LBLOG("关班回应", ack, ack->hdr.dataLen + 5); 
		ret = lbRecvCloseDuringAck(equ, tran, (CommonAck_s *)ack);

		break;
	case 0xc0:
		LBLOG("读单价回应", ack, ack->hdr.dataLen + 5); 
		ret = lbRecvGetCrrntPriceAck(equ, tran, (ReadCrrntPriceAck_s *)ack);
		break;

	case 0xc1:
		LBLOG("写单价回应", ack, ack->hdr.dataLen + 5); 
		ret = lbRecvWriteBackupPriceAck(equ, tran, (CommonAck_s *)ack);
		break;
	case 0xc4:
		LBLOG("读油品回应", ack, ack->hdr.dataLen + 5); 
		ret = lbRecvReadOilTypeAck(equ, tran, (ReadOilTypeAck_s *)ack);
		break;
	case 0xc5:
		LBLOG("写油品回应", ack, ack->hdr.dataLen + 5); 
		ret = lbRecvWriteOilTypeAck(equ,tran, (CommonAck_s *)ack);
		break;
	case 0xd0:
		LBLOG("执行情况回应", ack, ack->hdr.dataLen + 5); 
		ret = lbRecvCmdCfmAck(equ,tran , (CommonAck_s *)ack, cmdNode);
		break;

	case 0xd1:
		LBLOG("写配置回应", ack, ack->hdr.dataLen + 5); 
		ret = lbRecvSysCfgAck(equ, tran, (CommonAck_s *)ack, cmdNode);
		break;
	case 0xdb:
		LBLOG("下黑名单回应", ack, ack->hdr.dataLen + 5); 
		ret = lbRecvBlkListAck(equ,tran, (CommonAck_s *)ack, cmdNode);
		break;
	case 0xd3:
		LBLOG("下24小时灰回应", ack, ack->hdr.dataLen + 5); 
		ret = lbRecvSendGreyAck(equ, tran, (CommonAck_s *)ack, cmdNode);
		break;

	case 0xd4:
		LBLOG("下定点回应", ack, ack->hdr.dataLen + 5); 
		ret = lbRecvSpecCodeAck(equ, tran , (CommonAck_s *)ack, cmdNode);
		break;
	case 0xd5:
		LBLOG("解灰回应", ack, ack->hdr.dataLen + 5); 
		ret = lbRecvWriteGreyAck(equ, tran , (CommonAck_s *)ack, cmdNode);
		break;
	case 0xd6:
		LBLOG("上传记录", ack, ack->hdr.dataLen + 5); 
		ret = lbRecvGetRecAck(equ, tran, (GetRecAck_s *)ack, cmdNode);
		break;
	case 0xd7:
		LBLOG("上传灰记录", ack, ack->hdr.dataLen + 5); 
		ret = lbRecvGetGreyAck(equ, tran, (GetGreyAck_s*)ack, cmdNode);
		break;
	case 0xd8:
		LBLOG("校准时间回应", ack, ack->hdr.dataLen + 5); 
		ret = lbRecvSetTimeAck(equ, tran , (CommonAck_s *)ack, cmdNode);
		break;
	case 0xda:
		LBLOG("取历史记录", ack, ack->hdr.dataLen + 5); 
		lbRecvGetHistroyAck(equ, tran, (GetHistoryAck_s *) ack, cmdNode);
		RETVALUE(ROK);
	case 0xd2:
//		LBLOG("下黑名单回应", ack, ack->hdr.dataLen + 5); 
		ret = lbRecvBlkListAck(equ,tran, (CommonAck_s *)ack, cmdNode);
		break;
	}

	if(ret == ROK)
	{
		lbCmDestroyCmdNode(cmdNode);
	}
	RETVALUE(ROK);

}

S16 lbParseRecvMsg(ScCommCb_s * scCommCb, Data * buf, MsgLen len)
{
	Data * temp = buf, *ack;
	MsgLen ackLen, msgLen = len;

	if(buf == NULLP || len == 0)
	{
		RXLOGERROR(ENTSC, 0, buf, "Error: invalide parameters");
		RETVALUE(RFAILED);
	}

	while(msgLen)
	{
		MsgHdr_s * ackHdr;
		segScMsg(temp, msgLen, &ack, &ackLen);

		#ifdef LO_DEBUG
//		lbCmPrntBuf("recv msg:", (Data *)ack, ackLen);
		#endif

		if(ack == NULLP)
		{
			RETVALUE(ROK);
		}
		msgLen -= ackLen;
		temp = &ack[ackLen];
		if(ackLen < sizeof(MsgHdr_s))
		{
			RETVALUE(ROK);
		}
		ackHdr = (MsgHdr_s *)ack;

		if (ackHdr->dataLen + 5 != ackLen)
		{
			printf("Recv msg error\n");
			RETVALUE(ROK);
		}

		if (ROK != lbChkCrc((Data *)ackHdr, ackLen))
		{
			printf("Recv msg CRC error\n");
			continue;
		}

		if(ackHdr->sideId != scCommCb->equ->entry.sideId)
		{
			printf("error: receive invalide side id\n");
			continue;
		}

		

		lbProcCmdRqstAck(scCommCb, (CommonAck_s *)ackHdr);
		RETVALUE(ROK);

	}

	RETVALUE(ROK);
}




/* modify by shang 2002-7-12 6:06:15 */
#if 0 /* last code */
S16 lbBuildRqstStat(ScCommCb_s * scCommCb, Buffer ** ret_msg)
{
	Buffer * msg;
	MsgA_s rqstStatMsg;

	if(scCommCb == NULLP)
	{
		RXLOGERROR(0, 0, 0, "ERROR");
		RETVALUE(RFAILED);
	}
	if(ROK != SGetMsg(0, 0, &msg))
	{
		RXLOGERROR(0, 0, 0, "ERROR");
		RETVALUE(RFAILED);
	}
	rqstStatMsg.hdr.frameStart = 0x55aa;
	rqstStatMsg.hdr.dataLen = 2;

	rqstStatMsg.hdr.sideId = (scCommCb->crrntSide++)&(rxCb.machTbl[scCommCb->machId].sideNum-1);


	rqstStatMsg.cmd = RQST_STAT;


	SAddPstMsgMult((Data *)&rqstStatMsg, (MsgLen)(rqstStatMsg.hdr.dataLen + 3), msg);
	*ret_msg = msg;

	RETVALUE(ROK);
}

#else /* new code */

#endif /* end modify */
/* modify by shang is over 2002-7-12 6:06:15*/





/******************* modify histroy list *******************
001. create at: 2002-7-1 23:46:10 by Shangyaohui

****************** modify histroy list end ****************/


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -