![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
20190816
Diff: TxRxService.cpp
- Revision:
- 24:fba9a58e6fbd
- Parent:
- 23:39d96e160cf1
- Child:
- 27:21b821ead49c
--- a/TxRxService.cpp Thu Aug 08 13:24:28 2019 +0000 +++ b/TxRxService.cpp Thu Aug 08 17:10:26 2019 +0000 @@ -3,11 +3,11 @@ Serial pc(WorkTx,WorkRx); uint8_t ArrTx[ArrTxSize] = ArrTxInitializer; -uint8_t ArrRx[ArrRxSize] = ArrRxInitializer; +MsgType ArrRx; MsgType RxBuff; MsgType TxBuff; uint8_t *pArrTx = &ArrTx[0]; -uint8_t *pArrRx = &ArrRx[HeaderLength]; +uint8_t *pArrRx = &ArrRx.cmd; bool RxBuffFull = 0; bool ArrTxBusy = 0; bool TxBuffFull = 0; @@ -48,15 +48,15 @@ } }//IntrTx -StartTxStates StartTx(uint8_t *parr){ - if(TxBuffFull){ return TxBusy; } +TxRxStates SendMsg(uint8_t *parr){ + if(TxBuffFull){ return TxBuffBusy; } *(parr + (sizeof(MsgType)-1)) = GetCheckSum(parr); if(ArrTxBusy) { //ВНИМАНИЕ!!! IntrTx последнего байта пакета!!! НЕАТОМАРНЫЙ КУСОК КОДА!!! memcpy(&TxBuff.cmd, parr, sizeof(TxBuff)); //ВНИМАНИЕ!!! IntrTx последнего байта пакета!!! НЕАТОМАРНЫЙ КУСОК КОДА!!! TxBuffFull=1; //ВНИМАНИЕ!!! IntrTx последнего байта пакета!!! НЕАТОМАРНЫЙ КУСОК КОДА!!! if(!ArrTxBusy) CopyArr_InitTx(&TxBuff.cmd);//ВНИМАНИЕ!!! IntrTx последнего байта пакета!!! НЕАТОМАРНЫЙ КУСОК КОДА!!! } else CopyArr_InitTx(parr); - return StartOK; + return TxOK; }//StartTx void IntrRx() { @@ -64,7 +64,7 @@ if(_ch == HeaderByte){ if((++HBctr) >= HeaderLength){ HdrRcvd = 1; - pArrRx = &ArrRx[HeaderLength]; + pArrRx = &ArrRx.cmd; MsgEnabled = 0; } }else{ @@ -73,10 +73,10 @@ } if(MsgEnabled){ *pArrRx = _ch; - if ( pArrRx++ >= &ArrRx[ArrRxSize-1] ){ - pArrRx = &ArrRx[HeaderLength]; + if ( pArrRx++ >= &ArrRx.cs ){ + pArrRx = &ArrRx.cmd; + memcpy(&RxBuff.cmd, &ArrRx.cmd, sizeof(RxBuff)); RxBuffFull = 1; - memcpy(&RxBuff.cmd, &ArrRx[HeaderLength], sizeof(RxBuff)); MsgEnabled = 0; } }//if(MsgEnabled) @@ -88,4 +88,14 @@ #endif pc.attach(IntrRx, Serial::RxIrq); pc.attach(NULL, Serial::TxIrq);//я УПЁРТЫЙ дебил - } \ No newline at end of file + } + +TxRxStates GetMsg(uint8_t *parr){ + if(!RxBuffFull) return RxBuffEmpty; + else{ + memcpy(parr, &RxBuff.cmd, sizeof(RxBuff)); + RxBuffFull = 0; + if(GetCheckSum(&RxBuff.cmd) == RxBuff.cs) return RxRcvd; + else return RxCS_Err; + } + }//GetMsg \ No newline at end of file