20190816

Dependencies:   mbed

Revision:
14:b113f676ef42
Parent:
13:b9e066badefa
Child:
15:30e45bd5902e
--- a/TxRxService.cpp	Sun Aug 04 09:56:54 2019 +0000
+++ b/TxRxService.cpp	Sun Aug 04 14:09:35 2019 +0000
@@ -12,20 +12,38 @@
 bool ArrTxBusy = 0;
 bool TxBuffFull = 0;
 
+void IntrTx(); 
+
+void CopyArr_InitTx(uint8_t *parr){
+    memcpy(ArrTx, parr, ArrTxSize);
+    pArrTx = &ArrTx[0];
+    pc.putc(*pArrTx);
+    if(!ArrTxBusy) {
+        ArrTxBusy = 1;
+        pc.attach(IntrTx, Serial::TxIrq);
+        }
+    TxBuffFull = 0;
+    }
+
 void IntrTx() {
     if ( ++pArrTx <= &ArrTx[ArrTxSize-1] ) pc.putc(*pArrTx);
     else {
-        pc.attach(NULL, Serial::TxIrq);
-        ArrTxBusy = 0;
+        if(TxBuffFull) CopyArr_InitTx(TxBuff);
+            else {
+                pc.attach(NULL, Serial::TxIrq);
+                ArrTxBusy = 0;
+                }
         }
     }//IntrTx
 
-void StartTx(){
-        memcpy(&ArrTx, &TxBuff, ArrTxSize);
-        pArrTx = &ArrTx[0];
-        pc.putc(*pArrTx);
-        pc.attach(&IntrTx, Serial::TxIrq);
-        ArrTxBusy = 1;
+StartTxStates StartTx(uint8_t *parr){
+        if(TxBuffFull){ return TxBusy; }
+        if(ArrTxBusy) {
+            memcpy(TxBuff, parr, ArrTxSize);
+            TxBuffFull=1;
+            if(!ArrTxBusy) CopyArr_InitTx(TxBuff);
+            } else CopyArr_InitTx(parr);
+        return StartOK;
     }//StartTx
 
 void IntrRx() {
@@ -33,12 +51,12 @@
     if ( pArrRx++ >= &ArrRx[ArrRxSize-1] ) {
         pArrRx = &ArrRx[0]; 
         RxBuffFull = 1;
-        memcpy(&RxBuff, &ArrRx, ArrTxSize); 
+        memcpy(RxBuff, ArrRx, ArrTxSize); 
         }
     }//IntrRx
 
 void TxRxServiceInit(){
-    pc.attach(&IntrRx, Serial::RxIrq);
+    pc.attach(IntrRx, Serial::RxIrq);
     pc.attach(NULL, Serial::TxIrq);//я УПЁРТЫЙ дебил
     }