20190816

Dependencies:   mbed

Committer:
VASKO
Date:
Sun Aug 04 18:01:47 2019 +0000
Revision:
16:459ad1bd82fd
Parent:
15:30e45bd5902e
Child:
17:d180adbbd61f
Redefinitions. Bug with "memcpy" parameters in "CopyArr_InitTx" fixed. (Struct and so on) packing problem solved.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
VASKO 11:6519744c77f9 1 #include "PrjDefs.h"
VASKO 11:6519744c77f9 2
VASKO 11:6519744c77f9 3 Serial pc(pcTx,pcRx);
VASKO 11:6519744c77f9 4
VASKO 11:6519744c77f9 5 uint8_t ArrTx[ArrTxSize] = ArrTxInitializer;
VASKO 11:6519744c77f9 6 uint8_t ArrRx[ArrRxSize] = ArrRxInitializer;
VASKO 15:30e45bd5902e 7 MsgType RxBuff;
VASKO 15:30e45bd5902e 8 MsgType TxBuff;
VASKO 11:6519744c77f9 9 uint8_t *pArrTx = &ArrTx[0];
VASKO 11:6519744c77f9 10 uint8_t *pArrRx = &ArrRx[0];
VASKO 13:b9e066badefa 11 bool RxBuffFull = 0;
VASKO 11:6519744c77f9 12 bool ArrTxBusy = 0;
VASKO 11:6519744c77f9 13 bool TxBuffFull = 0;
VASKO 11:6519744c77f9 14
VASKO 15:30e45bd5902e 15 uint8_t GetCheckSum(uint8_t *p){
VASKO 15:30e45bd5902e 16 uint8_t cs = 0;
VASKO 16:459ad1bd82fd 17 for(int i = 0; i < (sizeof(MsgType)-1); i++){
VASKO 15:30e45bd5902e 18 cs = cs + *(p++);
VASKO 15:30e45bd5902e 19 cs = cs + 1;
VASKO 15:30e45bd5902e 20 }
VASKO 15:30e45bd5902e 21 return cs;
VASKO 15:30e45bd5902e 22 }
VASKO 15:30e45bd5902e 23
VASKO 14:b113f676ef42 24 void IntrTx();
VASKO 14:b113f676ef42 25
VASKO 14:b113f676ef42 26 void CopyArr_InitTx(uint8_t *parr){
VASKO 16:459ad1bd82fd 27 memcpy(&ArrTx[HeaderLength], parr, sizeof(TxBuff));
VASKO 14:b113f676ef42 28 pArrTx = &ArrTx[0];
VASKO 14:b113f676ef42 29 pc.putc(*pArrTx);
VASKO 14:b113f676ef42 30 if(!ArrTxBusy) {
VASKO 14:b113f676ef42 31 ArrTxBusy = 1;
VASKO 14:b113f676ef42 32 pc.attach(IntrTx, Serial::TxIrq);
VASKO 14:b113f676ef42 33 }
VASKO 14:b113f676ef42 34 TxBuffFull = 0;
VASKO 14:b113f676ef42 35 }
VASKO 14:b113f676ef42 36
VASKO 11:6519744c77f9 37 void IntrTx() {
VASKO 11:6519744c77f9 38 if ( ++pArrTx <= &ArrTx[ArrTxSize-1] ) pc.putc(*pArrTx);
VASKO 11:6519744c77f9 39 else {
VASKO 15:30e45bd5902e 40 if(TxBuffFull) CopyArr_InitTx(&TxBuff.cmd);
VASKO 14:b113f676ef42 41 else {
VASKO 14:b113f676ef42 42 pc.attach(NULL, Serial::TxIrq);
VASKO 14:b113f676ef42 43 ArrTxBusy = 0;
VASKO 14:b113f676ef42 44 }
VASKO 11:6519744c77f9 45 }
VASKO 11:6519744c77f9 46 }//IntrTx
VASKO 11:6519744c77f9 47
VASKO 14:b113f676ef42 48 StartTxStates StartTx(uint8_t *parr){
VASKO 14:b113f676ef42 49 if(TxBuffFull){ return TxBusy; }
VASKO 16:459ad1bd82fd 50 *(parr + (sizeof(MsgType)-1)) = GetCheckSum(parr);
VASKO 16:459ad1bd82fd 51 if(ArrTxBusy) { //ВНИМАНИЕ!!! IntrTx последнего байта пакета!!! НЕАТОМАРНЫЙ КУСОК КОДА!!!
VASKO 16:459ad1bd82fd 52 memcpy(&TxBuff.cmd, parr, sizeof(TxBuff)); //ВНИМАНИЕ!!! IntrTx последнего байта пакета!!! НЕАТОМАРНЫЙ КУСОК КОДА!!!
VASKO 16:459ad1bd82fd 53 TxBuffFull=1; //ВНИМАНИЕ!!! IntrTx последнего байта пакета!!! НЕАТОМАРНЫЙ КУСОК КОДА!!!
VASKO 16:459ad1bd82fd 54 if(!ArrTxBusy) CopyArr_InitTx(&TxBuff.cmd);//ВНИМАНИЕ!!! IntrTx последнего байта пакета!!! НЕАТОМАРНЫЙ КУСОК КОДА!!!
VASKO 14:b113f676ef42 55 } else CopyArr_InitTx(parr);
VASKO 14:b113f676ef42 56 return StartOK;
VASKO 11:6519744c77f9 57 }//StartTx
VASKO 11:6519744c77f9 58
VASKO 11:6519744c77f9 59 void IntrRx() {
VASKO 11:6519744c77f9 60 *pArrRx = pc.getc();
VASKO 11:6519744c77f9 61 if ( pArrRx++ >= &ArrRx[ArrRxSize-1] ) {
VASKO 11:6519744c77f9 62 pArrRx = &ArrRx[0];
VASKO 13:b9e066badefa 63 RxBuffFull = 1;
VASKO 15:30e45bd5902e 64 memcpy(&RxBuff.cmd, &ArrRx[HeaderLength], sizeof(RxBuff));
VASKO 11:6519744c77f9 65 }
VASKO 11:6519744c77f9 66 }//IntrRx
VASKO 11:6519744c77f9 67
VASKO 11:6519744c77f9 68 void TxRxServiceInit(){
VASKO 14:b113f676ef42 69 pc.attach(IntrRx, Serial::RxIrq);
VASKO 11:6519744c77f9 70 pc.attach(NULL, Serial::TxIrq);//я УПЁРТЫЙ дебил
VASKO 16:459ad1bd82fd 71 }