![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
20190816
Diff: TxRxService.cpp
- 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);//я УПЁРТЫЙ дебил }