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

📄 lb_xmit.c

📁 中国石油二期加油站IC系统后台通讯软件
💻 C
📖 第 1 页 / 共 2 页
字号:
			CHKHANDLESTAT(cmd);
			buf[1] = 0x10;
			len = 2;
			ptr = buf;
			LBLOG("指定密钥回应", ptr, len);
			lbCmDestroyCmdNode(cmd);
			break;
		}
	case 0x11:
		{
			CHKHANDLESTAT(cmd);
			buf[1] = 0x10;
			len = 2;
			ptr = buf;
			LBLOG("下达传传输密钥回应", ptr, len);
			lbCmDestroyCmdNode(cmd);
			break;
		}
	case 0x12:
		{
			CHKHANDLESTAT(cmd);
			buf[1] = 0x10;
			len = 2;
			LBLOG("启用工行应用回应", ptr, len);
			lbCmDestroyCmdNode(cmd);
			break;
		}
	case 0x14:
		{
			CHKHANDLESTAT(cmd);
			buf[1] = 0x10;
			len = 2;
			ptr = buf;
			LBLOG("设定发卡银行标识回应", ptr, len);
			lbCmDestroyCmdNode(cmd);
			break;
		}
	case 0x15:
		{
			CHKHANDLESTAT(cmd);
			buf[1] = 0x10;
			len = 2;
			ptr = buf;
			LBLOG("设定交易密钥回应", ptr, len);
			lbCmDestroyCmdNode(cmd);
			break;

		}
	case 0x16:
		{
			CHKHANDLESTAT(cmd);
			buf[1] = 0x10;
			len = 2;
			ptr = buf;
			LBLOG("启用二期交通卡回应", ptr, len);
			lbCmDestroyCmdNode(cmd);
			break;

		}
	case 0x17:
		{
			U8 i;

			CHKHANDLESTAT(cmd);

			buf[1] = 0x10;

			if(cmd->rqstParam == 0)
			{
				equ = (EquCfgEntry_s *)cmLListFirst(&rxCb.pEquCfgList);
				buf[2] = 0;

				for(i = 0; equ != NULLP; i++, 
					equ = (EquCfgEntry_s *)cmLListNext(&rxCb.pEquCfgList))
				{
					buf[3 + i * 5] = equ->entry.gunId;
					*((U32 *)&buf[4 + i * 5]) = htonl(equ->totleVolume);
				}
				buf[2] = i;
				len = 3 + buf[2] * 5 + 5;
			}
			else
			{
				equ = findEqu(cmd->rqstParam);
				if(NULLP == equ)
				{
					RXLOGERROR(0, 0, 0, "ERROR");
					RETVALUE(RFAILED);
				}
				buf[2] = equ->entry.gunId;
				*((U32 *)&buf[3]) = htonl(equ->totleVolume);
				len = 7 + 5;
			}


			ptr = buf;
			LBLOG("查询泵码回应", ptr, len);


			lbCmFillMac(&buf[2], rxCb.cfg.crrntTranKey, len-2, rxCb.cfg.tranKeyVer);
			lbCmDestroyCmdNode(cmd);

			break;

		}
	case 0x18:
		{
			CHKHANDLESTAT(cmd);
			buf[1] = 0x10;
			len = 2;
			ptr = buf;
			LBLOG("下传油价回应", ptr, len);
			lbCmDestroyCmdNode(cmd);
			break;
		}
	case 0x19:
		{
			U8 errCode = 0;
			U8 * idx = &buf[3];
			U8 i = 0;

			CHKHANDLESTAT(cmd);

			if(cmd->rqstParam == 0)
			{
				equ = (EquCfgEntry_s *)cmLListFirst(&rxCb.pEquCfgList);
				while(NULLP != equ)
				{
					if(equ->cmdProcErrCode)
					{
						errCode |= equ->cmdProcErrCode;
						equ->cmdProcErrCode = 0;
						equ = (EquCfgEntry_s *)cmLListNext(&rxCb.pEquCfgList);
						continue;
					}

					buf[3 + 3 * i] = equ->entry.gunId;
					memcpy(&buf[3 + 3 * i + 1], &equ->crrntPrice, 2);
					i++;

					equ = (EquCfgEntry_s *)cmLListNext(&rxCb.pEquCfgList);
				}
				buf[2] = cmLListLen(&rxCb.pEquCfgList);
				len = 3 + i*3;
			}

			else
			{
				equ = findEqu(cmd->rqstParam);

				if(equ->cmdProcErrCode)
				{
					equ->cmdProcErrCode = 0;
					buf[1] = 0x02;
					buf[2] = cmd->rqstParam;
					len = 3;
					ptr = buf;
					UP_DATA(0, len, ptr);
					lbCmDestroyCmdNode(cmd);
					RETVALUE(ROK);
				}

				buf[1] = 0x00;
				buf[2] = equ->entry.gunId;

				memcpy(&buf[3], &equ->crrntPrice, 2);
				len = 5;
			}

			//lbCmFillMac(buf, rxCb.cfg.crrntTranKey, 5, rxCb.cfg.tranKeyVer);
			buf[1] = 0x00;
			ptr = buf;
			LBLOG("查询油价回应", ptr, len);

			lbCmDestroyCmdNode(cmd);
			break;
		}


	case 0x1a:
		{
			lbCmDestroyCmdNode(cmd);
			break;
		}
	case 0x1c:
		{
			CHKHANDLESTAT(cmd);
			buf[1] = 0x00;
			len = 2;
			ptr = buf;
			LBLOG("暂停加油回应", ptr, len);
			lbCmDestroyCmdNode(cmd);
			break;
		}
	case 0x1d:
		{
			CHKHANDLESTAT(cmd);
			buf[1] = 0x00;
			len = 2;
			ptr = buf;
			LBLOG("恢复加油回应", ptr, len);
			lbCmDestroyCmdNode(cmd);
			break;
		}
	case 0x1e:
		{
			CHKHANDLESTAT(cmd);
			buf[1] = 0x10;
			len = 2;
			ptr = buf;
			LBLOG("灰名单更新回应", ptr, len);
			lbCmDestroyCmdNode(cmd);
			break;
		}
	case 0x1f:
		{
			CHKHANDLESTAT(cmd);
			buf[1] = 0x00;
			len = 2;
			ptr = buf;
			LBLOG("全国黑名单更新回应", ptr, len);
			lbCmDestroyCmdNode(cmd);
			break;

		}
	}

	UP_DATA(0, len, ptr);
	RETVALUE(ROK);
}

S16 lbXmitProc(U8 gunId)
{
	EquCfgEntry_s * equ;
	ScCommCb_s * scCommCb;
	CmdMsg_s * cmd;
	Buffer * xmitMsg;
	RxCmdEntry_s * entry;


	equ  = findEqu(gunId);
	scCommCb = equ->scCommCb;

	GETFIRSTRQSTENTRY(entry);
	if(entry->cmdType == IND_DIR)
	{

		if(ROK != findFirstCmdNode(&cmd))
		{
			RXLOGERROR(0, 0, 0, "ERROR");
			RETVALUE(RFAILED);
		}
	}
	else
	{
		if(ROK != findFirstCmdNodeByChannel(equ->entry.channelId, &cmd))
		{
//			RXLOGERROR(0, 0, 0, "ERROR");
			RETVALUE(RFAILED);
		}
	}
	if(cmd->dir == IND_DIR)
	{
		if(--cmd->timer)
		{
			RETVALUE(ROK);
		}
		cmd->timer = cmd->loadTimer;
		if(!cmd->retry)
		{
			if(cmd->stat == HAVE_SEND)
			{
				rxLog("ind error timer expired\n");

				lbCmDestroyCmdNode(cmd);
				RETVALUE(ROK);
			}
			else if(cmd->stat == HAVE_ACK_W)
			{
			}
		}
		cmd->retry--;
		cmd->stat = HAVE_SEND;
		lbIndMsg(cmd);
		RETVALUE(ROK);
	}
	else if(cmd->dir == CMD_DIR)
	{
		if(--cmd->timer)
		{
			RETVALUE(ROK);
		}
		cmd->timer = cmd->loadTimer;


		if(!cmd->retry)
		{
			if(cmd->stat == HAVE_SEND)
			{
				rxLog("cmd error timer expired\n");
				equ->cmdProcErrCode |= 0x02;
				equ->stat = NO_ACTIVE;
				lbCmDestroyCmdNode(cmd);
				RETVALUE(ROK);
			}
		}
		cmd->retry--;

		if(cmd->stat == HAVE_ACK_W)
		{
			MsgB_s cmd_b;
			cmd_b.hdr.frameStart = 0x55aa;
			cmd_b.hdr.sideId = cmd->sideId;
			cmd_b.hdr.dataLen = 3;
			cmd_b.cmd = 0xe0;
			cmd_b.val = cmd->msgCode;

			if(ROK != SGetMsg(0 ,0, &xmitMsg))
			{
				RXLOGERROR(0, 0, 0, "ERROR");
				RETVALUE(RFAILED);
			}
			SAddPstMsgMult((Data *)&cmd_b, (MsgLen)(cmd_b.hdr.dataLen + 3), xmitMsg);
			lbXmitMsg(scCommCb, xmitMsg);
			RETVALUE(ROK);
		}

		lbScLog(scCommCb, cmd);

		cmd->stat = HAVE_SEND;

		if(cmd->msgCode == 0xd0)
		{
			switch(cmd->rqstType)
			{
			case WORK_ON_RQST:
				if(equ->cfmStat == ROK)
				{
					U32 index;
					FIELD_INDEX(MsgB_s, val, index);
					SRepMsg(2, cmd->msg, (MsgLen)index);
				}
				else
				{
					U32 index;
					FIELD_INDEX(MsgB_s, val, index);
					SRepMsg(19, cmd->msg, (MsgLen)index);
				}
				break;
			case WORK_OUT_RQST:
				if(equ->cfmStat == ROK)
				{
					U32 index;
					FIELD_INDEX(MsgB_s, val, index);
					SRepMsg(1, cmd->msg, (MsgLen)index);
				}
				else
				{
					U32 index;
					FIELD_INDEX(MsgB_s, val, index);
					SRepMsg(18, cmd->msg, (MsgLen)index);
				}
				break;
			case BLK_CARD_RQST:
				if(equ->cfmStat == ROK)
				{
					U32 index;
					FIELD_INDEX(MsgB_s, val, index);
					SRepMsg(5, cmd->msg, (MsgLen)index);
				}
				else
				{
					U32 index;
					FIELD_INDEX(MsgB_s, val, index);
					SRepMsg(6, cmd->msg, (MsgLen)index);
				}
				break;
			case REL_GREY_RQST:
				{
					U32 index;
					FIELD_INDEX(MsgB_s, val, index);
					SRepMsg(10, cmd->msg, (MsgLen)index);
				}
				break;
			case IND_REC_RQST:
				if(equ->cfmStat == ROK)
				{
					U32 index;
					FIELD_INDEX(MsgB_s, val, index);
					SRepMsg(3, cmd->msg, (MsgLen)index);
				}
				else
				{
					U32 index;
					FIELD_INDEX(MsgB_s, val, index);
					SRepMsg(4, cmd->msg, (MsgLen)index);
				}
				break;

			case LOAD_GREY_RQST:
				if(equ->cfmStat == ROK)
				{
					U32 index;
					FIELD_INDEX(MsgB_s, val, index);
					SRepMsg(14, cmd->msg, (MsgLen)index);
				}
				else
				{
					U32 index;
					FIELD_INDEX(MsgB_s, val, index);
					SRepMsg(15, cmd->msg, (MsgLen)index);
				}
				break;

			}
			if(ROK != SAddMsgRef(cmd->msg, 0, 0, &xmitMsg))
			{
				RXLOGERROR(0, 0, 0, "error");
				RETVALUE(RFAILED);
			}
			lbXmitMsg(scCommCb, xmitMsg);
			RETVALUE(ROK);
		}
		if(cmd->msg != NULLP)
		{
			if(ROK != SAddMsgRef(cmd->msg, 0, 0, &xmitMsg))
			{
				RXLOGERROR(0, 0, 0, "error");
				RETVALUE(RFAILED);
			}
		}
	}


#ifdef LO_DEBUG
//	SPrntMsg(xmitMsg, 0 , 0);
	rxLog(scCommCb->commName);
#endif
	

	lbXmitMsg(scCommCb, xmitMsg);

	RETVALUE(ROK);
}



/******************* modify histroy list *******************
001. create at: 2002-7-4 20:28:58 by Shangyaohui

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



⌨️ 快捷键说明

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