QuakeGod
2022-10-17 7a54c0d5730cb2d02229c0ce515bc100bf211079
Src/KBus.c
@@ -17,7 +17,7 @@
unsigned char BufferIn[16]={0};
unsigned char BufferOut[16]={0};
stChnStat ChnStats[9];
stChnStat ChnStats[8];
unsigned char nAddr=0;
unsigned char nChilds;
int ChildStat[16];
@@ -47,7 +47,7 @@
unsigned char Datas[128];      
volatile int PacketLength = 0;
unsigned char BCC(void * pData, int nSize)
unsigned char KBusBCC(void * pData, int nSize)
{
   unsigned char k;
   k=0;
@@ -58,7 +58,7 @@
   return k;   
}
int MakePacket(pPacket p1,unsigned char src, uchar dst, uchar nType,unsigned char nSEQ, unsigned char DataLen,void * pData )
int KBusMakePacket(pPacket p1,unsigned char src, uchar dst, uchar nType,unsigned char nSEQ, unsigned char DataLen,void * pData )
{
   p1->Sign=StartSign;
   p1->DstHost=dst;
@@ -73,7 +73,7 @@
      case cmdPing:
         p1->PacketLen=DataLen;
         memcpy(p1->data,pData,DataLen);
         p1->data[DataLen]=BCC(p1,sizeof(stPacket)+DataLen-1);
         p1->data[DataLen]=KBusBCC(p1,sizeof(stPacket)+DataLen-1);
         p1->data[DataLen+1]=EndSign;
      
         PacketLenth=sizeof(stPacket)+DataLen+1;
@@ -81,7 +81,7 @@
      case cmdPingReply:
         p1->PacketLen=DataLen;
         memcpy(p1->data,pData,DataLen);
         p1->data[DataLen]=BCC(p1,sizeof(stPacket)+DataLen-1);
         p1->data[DataLen]=KBusBCC(p1,sizeof(stPacket)+DataLen-1);
         p1->data[DataLen+1]=EndSign;      
         PacketLenth=sizeof(stPacket)+DataLen+1;      
         break;
@@ -94,35 +94,35 @@
      case cmdWriteReply:
         p1->PacketLen=DataLen;
       if (DataLen !=0 )   memcpy(p1->data,pData,DataLen);
         p1->data[DataLen]=BCC(p1,sizeof(stPacket)+DataLen-1);
         p1->data[DataLen]=KBusBCC(p1,sizeof(stPacket)+DataLen-1);
         p1->data[DataLen+1]=EndSign;
         PacketLenth=sizeof(stPacket)+DataLen+1;               
         break;
      case cmdGetVersion:
         p1->PacketLen=DataLen;
         memcpy(p1->data,pData,DataLen);
         p1->data[DataLen]=BCC(p1,sizeof(stPacket)+DataLen-1);
         p1->data[DataLen]=KBusBCC(p1,sizeof(stPacket)+DataLen-1);
         p1->data[DataLen+1]=EndSign;
         PacketLenth=sizeof(stPacket)+DataLen+1;         
         break;
      case cmdVerInfo:
         p1->PacketLen=DataLen;
         memcpy(p1->data,pData,DataLen);
         p1->data[DataLen]=BCC(p1,sizeof(stPacket)+DataLen-1);
         p1->data[DataLen]=KBusBCC(p1,sizeof(stPacket)+DataLen-1);
         p1->data[DataLen+1]=EndSign;
         PacketLenth=sizeof(stPacket)+DataLen+1;         
         break;
      case cmdExChgData:
         p1->PacketLen=DataLen;
         memcpy(p1->data,pData,DataLen);
         p1->data[DataLen]=BCC(p1,sizeof(stPacket)+DataLen-1);
         p1->data[DataLen]=KBusBCC(p1,sizeof(stPacket)+DataLen-1);
         p1->data[DataLen+1]=EndSign;
         PacketLenth=sizeof(stPacket)+DataLen+1;
         break;
      case cmdExChgDataReply:
         p1->PacketLen=DataLen;
         memcpy(p1->data,pData,DataLen);
         p1->data[DataLen]=BCC(p1,sizeof(stPacket)+DataLen-1);
         p1->data[DataLen]=KBusBCC(p1,sizeof(stPacket)+DataLen-1);
         p1->data[DataLen+1]=EndSign;      
         PacketLenth=sizeof(stPacket)+DataLen+1;      
         break;
@@ -130,21 +130,21 @@
      case cmdSyncRead:
         p1->PacketLen=DataLen;
         memcpy(p1->data,pData,DataLen);
         p1->data[DataLen]=BCC(p1,sizeof(stPacket)+DataLen-1);
         p1->data[DataLen]=KBusBCC(p1,sizeof(stPacket)+DataLen-1);
         p1->data[DataLen+1]=EndSign;      
         PacketLenth=sizeof(stPacket)+DataLen+1;      
         break;
      case cmdSyncWrite:
         p1->PacketLen=DataLen;
         memcpy(p1->data,pData,DataLen);
         p1->data[DataLen]=BCC(p1,sizeof(stPacket)+DataLen-1);
         p1->data[DataLen]=KBusBCC(p1,sizeof(stPacket)+DataLen-1);
         p1->data[DataLen+1]=EndSign;      
         PacketLenth=sizeof(stPacket)+DataLen+1;      
         break;
      case cmdSequenRead:
         p1->PacketLen=DataLen;
         memcpy(p1->data,pData,DataLen);
         p1->data[DataLen]=BCC(p1,sizeof(stPacket)+DataLen-1);
         p1->data[DataLen]=KBusBCC(p1,sizeof(stPacket)+DataLen-1);
         p1->data[DataLen+1]=EndSign;      
         PacketLenth=sizeof(stPacket)+DataLen+1;      
         break;      
@@ -152,7 +152,7 @@
      case cmdSyncTime:
         p1->PacketLen=DataLen;
         memcpy(p1->data,pData,DataLen);
         p1->data[DataLen]=BCC(p1,sizeof(stPacket)+DataLen-1);
         p1->data[DataLen]=KBusBCC(p1,sizeof(stPacket)+DataLen-1);
         p1->data[DataLen+1]=EndSign;      
         PacketLenth=sizeof(stPacket)+DataLen+1;      
         break;
@@ -164,7 +164,7 @@
   return PacketLenth;
}
int CheckPacket(int nChn, pPacket p1, int nLen1)
int KBusCheckPacket(int nChn, pPacket p1, int nLen1)
{
   if (p1->Sign != StartSign)
   {
@@ -193,7 +193,7 @@
//      Uart2Stat.LengthErr++;      
//      return -2;
//   }
   unsigned char thisBCC=BCC(p1,sizeof(stPacket)+DataLen-1);
   unsigned char thisBCC=KBusBCC(p1,sizeof(stPacket)+DataLen-1);
   if (thisBCC != p1->data[DataLen]) 
   {//BCC Error;
      Uart2Stat.BCCerr++;
@@ -203,7 +203,7 @@
   return 0;
}
int SlaveCheckPacket(int nChn, pPacket p1, int nLen1)
int KBusSlaveCheckPacket(int nChn, pPacket p1, int nLen1)
{
   if (p1->Sign != StartSign)
   {
@@ -232,7 +232,7 @@
//      Uart2Stat.LengthErr++;      
//      return -2;
//   }
   unsigned char thisBCC=BCC(p1,sizeof(stPacket)+DataLen-1);
   unsigned char thisBCC=KBusBCC(p1,sizeof(stPacket)+DataLen-1);
   if (thisBCC != p1->data[DataLen]) 
   {//BCC Error;
      Uart2Stat.BCCerr++;
@@ -242,7 +242,7 @@
   return 0;
}
int MasterParsePacket(int nChn, pPacket p1, int Len1)
int KBusMasterParsePacket(int nChn, pPacket p1, int Len1)
{
      int DataLen=p1->PacketLen;
@@ -259,7 +259,7 @@
            break;
         case cmdPing:
            BufferIn[ChildId]=p1->data[0];
            PacketLen=MakePacket(p2,0,nCurPollId,cmdPingReply,p1->nSEQ,DataLen,p1->data);
            PacketLen=KBusMakePacket(p2,0,nCurPollId,cmdPingReply,p1->nSEQ,DataLen,p1->data);
            SendPacket(nChn, p2, PacketLen);
            break;
         case cmdPingReply:
@@ -294,7 +294,7 @@
            //PutOutput(outputvalue);
            //memcpy(DispBuf,p1->data+2,8);
            p1->data[0]=BufferOut[0];
            PacketLen=MakePacket(p2,nAddr,0,cmdExChgDataReply,p1->nSEQ,DataLen,p1->data);
            PacketLen=KBusMakePacket(p2,nAddr,0,cmdExChgDataReply,p1->nSEQ,DataLen,p1->data);
            SendPacket(nChn, p2, PacketLen);
            break;
         case cmdExChgDataReply:
@@ -343,7 +343,7 @@
   return 0;
}
unsigned char nClientDataIndex=0;
int SlaveParsePacket(int nChn, pPacket p1, int Len1)
int KBusSlaveParsePacket(int nChn, pPacket p1, int Len1)
{
   Uart2Stat.OKPacket++;            
   int DataLen=p1->PacketLen;   
@@ -375,7 +375,7 @@
            //memcpy(DispBuf,p1->data+2,8);
            p1->data[0]=BufferOut[0];
            RecvTimeuS=ThisuS;
            PacketLen=MakePacket(p2,nAddr,0,cmdPingReply,p1->nSEQ,DataLen,p1->data);
            PacketLen=KBusMakePacket(p2,nAddr,0,cmdPingReply,p1->nSEQ,DataLen,p1->data);
            ChnStats[0].ClientSendPkts++;
            SendPacket(nChn, p2, PacketLen);
            break;
@@ -387,7 +387,7 @@
            break;
         case cmdWrite:
            //memcpy(DispBuf,p1->data,DataLen);
            PacketLen=MakePacket(p2,1,0,cmdWriteReply,p1->nSEQ,0,0);
            PacketLen=KBusMakePacket(p2,1,0,cmdWriteReply,p1->nSEQ,0,0);
            ChnStats[0].ClientSendPkts++;
            SendPacket(nChn, p2, PacketLen);               
            break;
@@ -425,7 +425,7 @@
            p1->data[7]=ChnStats[0].ClientDatas[nIndex]>>24;
            nClientDataIndex++;
            if (nClientDataIndex >= 10) { nClientDataIndex=0;}
            PacketLen=MakePacket(p2,nAddr,0,cmdExChgDataReply,p1->nSEQ,DataLen,p1->data);
            PacketLen=KBusMakePacket(p2,nAddr,0,cmdExChgDataReply,p1->nSEQ,DataLen,p1->data);
            ChnStats[0].ClientSendPkts++;
            SendPacket(nChn, p2, PacketLen);
            break;
@@ -448,32 +448,32 @@
   }   
   return 0;
}
int ParsePacket(int nChn, pPacket p1, int Len1)
int KBusParsePacket(int nChn, pPacket p1, int Len1)
{
   ThisuS=GetuS();
   int Result=0;
   if (bKBusMaster)
   {
         MasterRecved=1;
         Result=CheckPacket(nChn, p1, Len1);
         Result=KBusCheckPacket(nChn, p1, Len1);
         if (Result != S_OK)
         {
            return Result;
         }
         MasterRecvOK=1;
         Result=MasterParsePacket(nChn, p1, Len1);
         Result=KBusMasterParsePacket(nChn, p1, Len1);
         return Result;
   }
   if (bKBusSlave)
   {
         ChnStats[0].ClientRecvPkts++;
         Result=SlaveCheckPacket(nChn, p1, Len1);
         Result=KBusSlaveCheckPacket(nChn, p1, Len1);
         if (Result != S_OK)
         {
            return Result;
         }
         ChnStats[0].ClientTimeOutErr=KMem.RunStat;
         Result=SlaveParsePacket(nChn, p1, Len1);
         Result=KBusSlaveParsePacket(nChn, p1, Len1);
         return Result;
   }
   //int len1=p1->PacketLen;
@@ -483,7 +483,7 @@
   return Result;
}
/*
int InitMachine(stMachineConfig * pConfig)
{
   return S_OK;
@@ -523,7 +523,7 @@
{
   return S_OK;
}
*/
int KBusRepeaterFunc(int nChn)
{
      KMem.WY[0]=KMem.WX[0];
@@ -607,7 +607,7 @@
         Datas[7]=(tick1>>24)&0xff;
         
         SendTimeuS=thisuS;            
         len1=MakePacket((pPacket)PacketBuf1,0,nCurPollId,cmdExChgData,nSeq,8,Datas);
         len1=KBusMakePacket((pPacket)PacketBuf1,0,nCurPollId,cmdExChgData,nSeq,8,Datas);
         SendPacket(nChn, (pPacket)PacketBuf1, len1);
         ChnStats[nCurPollId].SendPackets++;
         ChnStats[nCurPollId].SendTimeInterval=SendTimeuS-ChnStats[nCurPollId].LastSentTimeuS;