From 842bb64195f958b050867c50db66fc0aa413dafb Mon Sep 17 00:00:00 2001 From: QuakeGod <quakegod@sina.com> Date: 星期六, 27 七月 2024 10:42:56 +0800 Subject: [PATCH] KBus upgrade --- Ext_FPx/Src/FPx.c | 63 +++++++++++++++++++++---------- 1 files changed, 43 insertions(+), 20 deletions(-) diff --git a/Ext_FPx/Src/FPx.c b/Ext_FPx/Src/FPx.c index a4e15fe..33353b2 100644 --- a/Ext_FPx/Src/FPx.c +++ b/Ext_FPx/Src/FPx.c @@ -39,8 +39,6 @@ stFPxStat FPxStat; stFPxMem FPxMem; - - uint8_t FPx_Init(int nChilds) { bSPI1Sending=0; @@ -53,7 +51,7 @@ FPxStat.nOutputBytes=2; } else { - FPxStat.nInputBytes=nChilds+1; //鏍规嵁瀛愭満鏁伴噺锛屾姤鍛婃墿灞曞閲� + FPxStat.nInputBytes=nChilds; //鏍规嵁瀛愭満鏁伴噺锛屾姤鍛婃墿灞曞閲� FPxStat.nOutputBytes=nChilds; } SetACKPin_0(); @@ -72,10 +70,10 @@ return 0; } -int FPxSetCallBackFunc(FPxCBFuncDef func1) +int FPxSetCallBackFunc(FPxEvCBFuncDef func1) { - FPxStat.FPxCBFunc = func1; - FPxStat.bFPxCallBackFuncSet = 1; + FPxStat.FPxEvCBFunc = func1; +// FPxStat.bFPxCallBackFuncSet = 1; return 0; } @@ -90,43 +88,60 @@ // KMem.WY[5]=CurSEL; // KMem.WY[6]=CurSYN; // KMem.WY[7]=CurACK; - if (CurOE) { + if (CurOE) { // disable output for (int j=0;j<FPxStat.nOutputBytes;j++) { FPxMem.WLYB[j]=0; } - if (FPxStat.bFPxCallBackFuncSet) FPxStat.FPxCBFunc(evFPxStateChange,0,0); - if (FPxStat.bFPxCallBackFuncSet) FPxStat.FPxCBFunc(evFPxDataUpdate,0,0); + if (FPxStat.FPxEvCBFunc) FPxStat.FPxEvCBFunc(evFPxStateChange,0,0); + if (FPxStat.FPxEvCBFunc) FPxStat.FPxEvCBFunc(evFPxDataUpdate,0,0); } - if (!CurRST) {FPxStat.RSTCount0=GetuS();} + if (!CurRST) { // in reset + FPxStat.RSTCount0=GetuS(); + SetACKPin_0(); + FPxStat.bFirstReq=0; + LL_SPI_Disable(SPI2); + FPxStat.bConfiged = 0; + nSPI1RecvPos=0; + + } if (!FPxStat.bFirstReq && CurRST) - { + { // after Reset; int RSTCount = GetuS() - FPxStat.RSTCount0 ; - if (RSTCount>=10000) + if (RSTCount>=1000) { + logData(0x11); + SetACKPin_1(); FPxStat.bFirstReq=1; // RSTCount=0; // bSPI1Recving=1; // KMem.WX[7]=RSTCount/1000; + LL_SPI_Disable(SPI2); + LL_SPI_Enable(SPI2); + nSPI1RecvPos=0; } } if (CurSYN ==0 && FPxStat.oldSYN != 0) { KMem.WDT[121] = KMem.WDT[122]; KMem.WDT[122]=0; + nSPI1RecvPos=0; + logData(0x12); } if (CurSEL && CurSYN !=0 && FPxStat.oldSYN == 0){ bSPI1Recving=1; - nSPI1RecvPos=0; + // nSPI1RecvPos=0; LL_SPI_Disable(SPI2); - nSPI1RecvPos=0; + // nSPI1RecvPos=0; LL_SPI_Enable(SPI2); + logData(0x13); } if (CurSEL && CurSYN && !bSPI1Sending && !bSPI1Recving) { bSPI1Recving=1; nSPI1RecvPos=0; + logData(0x14); } if (CurSYN == 0){ @@ -146,7 +161,7 @@ return 0; } -uint8_t FPxCalBCC(uint8_t* pBuf, uint8_t len1) +uint8_t FPxBCC(uint8_t* pBuf, uint8_t len1) { uint8_t BCC=0; for (int i=0;i<len1;i++) @@ -180,20 +195,28 @@ if (!FPxStat.bConfiged || (FPxStat.bConfiged && nStationID == FPxStat.nConfigStationId)) { KMem.WDT[8]++; + + KMem.WDT[0]= nST; + KMem.WDT[1]= len1; + KMem.WDT[2] = FPxStat.nConfigStationId; + + KMem.WDT[4]= FPxStat.nInputBytes; + KMem.WDT[5]= FPxStat.nOutputBytes; + pFPxQuRplyPkt p1 = (pFPxQuRplyPkt)PktBuf2; p1->Hdr1=nST; p1->nInputBytes=0x30|FPxStat.nInputBytes; p1->nOutputBytes=0x30|FPxStat.nOutputBytes; p1->nParam1=0x30|0x05; - p1->nBCC= 0x30|FPxCalBCC(PktBuf2,4); + p1->nBCC= 0x30|FPxBCC(PktBuf2,4); p1->End1=0x0d; - logData(0x11); + logData(0x22); FPxSendPkt(PktBuf2,sizeof(stFPxQuRplyPkt)); FPxStat.nConfigStationId=nStationID; FPxStat.bConfiged=1; - if (FPxStat.bFPxCallBackFuncSet) FPxStat.FPxCBFunc(evFPxStateChange,0,0); + if (FPxStat.FPxEvCBFunc) FPxStat.FPxEvCBFunc(evFPxStateChange,0,0); } bSPI1Recving=1; break; @@ -223,7 +246,7 @@ KMem.WYB[j]=(0xff); } // */ - if (FPxStat.bFPxCallBackFuncSet) FPxStat.FPxCBFunc(evFPxDataUpdate,0,0); + if (FPxStat.FPxEvCBFunc) FPxStat.FPxEvCBFunc(evFPxDataUpdate,0,0); // KMem.WDT[2]=((pBuf[1]&0xf)<<4) + ((pBuf[2]&0xf)<<0) + ((pBuf[3]&0xf)<<12) + ((pBuf[4]&0xf)<<8); pFPxEXGRplyPkt p1 = (pFPxEXGRplyPkt)PktBuf2; @@ -239,7 +262,7 @@ //p1->nInputBytes[3]=0x30|LoHofB(HiBofW(KMem.DT[0])); //((KMem.DT[0]>>8)&0x0f); //p1->nInputBytes[4]=0x30|((KMem.DT[1]>>4)&0x0f); //p1->nInputBytes[5]=0x30|((KMem.DT[1]>>0)&0x0f); - PktBuf2[FPxStat.nInputBytes*2 + 1 ]=0x30|FPxCalBCC(PktBuf2,FPxStat.nInputBytes*2+1); // p1->nBCC= 0x30|CalBCC(PktBuf2,7); + PktBuf2[FPxStat.nInputBytes*2 + 1 ]=0x30|FPxBCC(PktBuf2,FPxStat.nInputBytes*2+1); // p1->nBCC= 0x30|CalBCC(PktBuf2,7); PktBuf2[FPxStat.nInputBytes*2 + 2 ]=0x0d; // p1->End1=0x0d; FPxSendPkt(PktBuf2,FPxStat.nInputBytes*2 + 3); } -- Gitblit v1.9.1