20190816

Dependencies:   mbed

TxRxService.cpp

Committer:
VASKO
Date:
2019-08-04
Revision:
14:b113f676ef42
Parent:
13:b9e066badefa
Child:
15:30e45bd5902e

File content as of revision 14:b113f676ef42:

#include "PrjDefs.h"

Serial pc(pcTx,pcRx);

uint8_t ArrTx[ArrTxSize] = ArrTxInitializer;
uint8_t ArrRx[ArrRxSize] = ArrRxInitializer;
uint8_t RxBuff[ArrRxSize];
uint8_t TxBuff[ArrTxSize];
uint8_t *pArrTx = &ArrTx[0];
uint8_t *pArrRx = &ArrRx[0];
bool RxBuffFull = 0;
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 {
        if(TxBuffFull) CopyArr_InitTx(TxBuff);
            else {
                pc.attach(NULL, Serial::TxIrq);
                ArrTxBusy = 0;
                }
        }
    }//IntrTx

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() {
    *pArrRx = pc.getc();
    if ( pArrRx++ >= &ArrRx[ArrRxSize-1] ) {
        pArrRx = &ArrRx[0]; 
        RxBuffFull = 1;
        memcpy(RxBuff, ArrRx, ArrTxSize); 
        }
    }//IntrRx

void TxRxServiceInit(){
    pc.attach(IntrRx, Serial::RxIrq);
    pc.attach(NULL, Serial::TxIrq);//я УПЁРТЫЙ дебил
    }