20190816

Dependencies:   mbed

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