send FEP

Committer:
THtakahiro702286
Date:
Fri Oct 08 07:19:00 2021 +0000
Revision:
0:2e91feb397cf
new

Who changed what in which revision?

UserRevisionLine numberNew contents of line
THtakahiro702286 0:2e91feb397cf 1 #include "FEP.h"
THtakahiro702286 0:2e91feb397cf 2
THtakahiro702286 0:2e91feb397cf 3 FEP::FEP(PinName tx, PinName rx, uint8_t addr, int baud) :
THtakahiro702286 0:2e91feb397cf 4 RawSerial(tx, rx, baud)
THtakahiro702286 0:2e91feb397cf 5 {
THtakahiro702286 0:2e91feb397cf 6 _address = addr;
THtakahiro702286 0:2e91feb397cf 7 }
THtakahiro702286 0:2e91feb397cf 8
THtakahiro702286 0:2e91feb397cf 9 void FEP::startReceive(uint16_t dataSize)
THtakahiro702286 0:2e91feb397cf 10 {
THtakahiro702286 0:2e91feb397cf 11 bufferSize = dataSize + 15;
THtakahiro702286 0:2e91feb397cf 12 bufferPoint = 0;
THtakahiro702286 0:2e91feb397cf 13 receivedBytes = 0;
THtakahiro702286 0:2e91feb397cf 14 buffer = new uint8_t[bufferSize];
THtakahiro702286 0:2e91feb397cf 15 data = new uint8_t[dataSize];
THtakahiro702286 0:2e91feb397cf 16 attach(callback(this, &FEP::receiveByte));
THtakahiro702286 0:2e91feb397cf 17 }
THtakahiro702286 0:2e91feb397cf 18
THtakahiro702286 0:2e91feb397cf 19 void FEP::getData(uint8_t data_[])
THtakahiro702286 0:2e91feb397cf 20 {
THtakahiro702286 0:2e91feb397cf 21 for(int i = 0; i < bufferSize - 15; i++) {
THtakahiro702286 0:2e91feb397cf 22 data_[i] = data[i];
THtakahiro702286 0:2e91feb397cf 23 }
THtakahiro702286 0:2e91feb397cf 24 }
THtakahiro702286 0:2e91feb397cf 25
THtakahiro702286 0:2e91feb397cf 26 void FEP::sendData(uint8_t data_[], uint8_t length)
THtakahiro702286 0:2e91feb397cf 27 {
THtakahiro702286 0:2e91feb397cf 28 uint8_t checksum = 0x00;
THtakahiro702286 0:2e91feb397cf 29
THtakahiro702286 0:2e91feb397cf 30 printf("@TBN%03d%03d", _address, length + 1);
THtakahiro702286 0:2e91feb397cf 31 for (int j = 0; j < length; j++) {
THtakahiro702286 0:2e91feb397cf 32 checksum += data_[j];
THtakahiro702286 0:2e91feb397cf 33 putc(data_[j]);
THtakahiro702286 0:2e91feb397cf 34 }
THtakahiro702286 0:2e91feb397cf 35 putc(checksum);
THtakahiro702286 0:2e91feb397cf 36 putc('\r');
THtakahiro702286 0:2e91feb397cf 37 putc('\n');
THtakahiro702286 0:2e91feb397cf 38 }
THtakahiro702286 0:2e91feb397cf 39
THtakahiro702286 0:2e91feb397cf 40 void FEP::receiveByte()
THtakahiro702286 0:2e91feb397cf 41 {
THtakahiro702286 0:2e91feb397cf 42 buffer[bufferPoint % bufferSize] = getc();
THtakahiro702286 0:2e91feb397cf 43
THtakahiro702286 0:2e91feb397cf 44 if(bufferPoint != 0xff) {
THtakahiro702286 0:2e91feb397cf 45 ++bufferPoint;
THtakahiro702286 0:2e91feb397cf 46 } else {
THtakahiro702286 0:2e91feb397cf 47 bufferPoint = (255%bufferSize)+1;
THtakahiro702286 0:2e91feb397cf 48 }
THtakahiro702286 0:2e91feb397cf 49
THtakahiro702286 0:2e91feb397cf 50 ++receivedBytes;
THtakahiro702286 0:2e91feb397cf 51
THtakahiro702286 0:2e91feb397cf 52 if(receivedBytes >= bufferSize) checkData();
THtakahiro702286 0:2e91feb397cf 53 }
THtakahiro702286 0:2e91feb397cf 54
THtakahiro702286 0:2e91feb397cf 55 void FEP::checkData()
THtakahiro702286 0:2e91feb397cf 56 {
THtakahiro702286 0:2e91feb397cf 57 for(int i = 0; i < bufferSize; i++) {
THtakahiro702286 0:2e91feb397cf 58 if(buffer[i % bufferSize] == FEP_HEADER0 && buffer[(i + 1) % bufferSize] == FEP_HEADER1 && buffer[(i + 2) % bufferSize] == FEP_HEADER2) {
THtakahiro702286 0:2e91feb397cf 59 uint8_t checksum = 0x00;
THtakahiro702286 0:2e91feb397cf 60 for(int j = 9; j < bufferSize - 6; j++) {
THtakahiro702286 0:2e91feb397cf 61 checksum += buffer[(i + j)% bufferSize];
THtakahiro702286 0:2e91feb397cf 62 }
THtakahiro702286 0:2e91feb397cf 63 if(checksum == buffer[(i + bufferSize - 6)% bufferSize]) {
THtakahiro702286 0:2e91feb397cf 64 for(int j = 9; j < bufferSize - 6; j++) {
THtakahiro702286 0:2e91feb397cf 65 data[j - 9] = buffer[(i + j) % bufferSize];
THtakahiro702286 0:2e91feb397cf 66 }
THtakahiro702286 0:2e91feb397cf 67 receivedBytes = 0;
THtakahiro702286 0:2e91feb397cf 68 return;
THtakahiro702286 0:2e91feb397cf 69 }
THtakahiro702286 0:2e91feb397cf 70 }
THtakahiro702286 0:2e91feb397cf 71 }
THtakahiro702286 0:2e91feb397cf 72 }