?? lb_msg.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 + -