diff --git a/lib/PayloadFormatter/PayloadFormatter.cpp b/lib/PayloadFormatter/PayloadFormatter.cpp new file mode 100644 index 0000000..e41f6e0 --- /dev/null +++ b/lib/PayloadFormatter/PayloadFormatter.cpp @@ -0,0 +1,68 @@ +#include "PayloadFormatter.h" + +PayloadFormatter::PayloadFormatter(uint8_t numOfRow, uint8_t numOfColumn) : _totalPayloads(0), _currentPayload(0), _numOfRow(numOfRow), _numOfColumn(numOfColumn), _payload(NULL), _length(0) +{ + _length = numOfRow * numOfColumn * 2 + 7 + 1; + _payload = (uint8_t *) calloc(_length, sizeof(uint8_t)); +} +PayloadFormatter::~PayloadFormatter() +{ + free(_payload); +} + +void PayloadFormatter::startSession(uint8_t totalPayloads) +{ + _totalPayloads = totalPayloads; + _currentPayload = 0; +} + +boolean PayloadFormatter::endSession() +{ + boolean ret = _currentPayload == _totalPayloads; + if(ret)_totalPayloads = 0; + + return ret; +} + +int16_t PayloadFormatter::buildPayload(uint8_t **buffer, DateTime *dateTime, double *tempArray) +{ + *buffer = _payload; + if(_currentPayload == _totalPayloads || !_totalPayloads) + { + *_payload = '\0'; + return 0; + } + + _currentPayload++; + + //Octet avec nombre de trames et numero de la trame + _payload[0] = _totalPayloads; + _payload[0] &= 0x0F;//Permet de mettre à 0 les overflow + _payload[0] |= _currentPayload << 4; + + //Octet avec nombre de ligne et nombre de colonne de capteurs + _payload[1] = _numOfRow; + _payload[1] &= 0x0F;//Permet de mettre à 0 les overflow + _payload[1] |= _numOfColumn << 4; + + //5 octets de dates + _payload[2] = dateTime->year() - 2000; + _payload[3] = dateTime->month(); + _payload[4] = dateTime->day(); + _payload[5] = dateTime->hour(); + _payload[6] = dateTime->minute(); + + //Partie temperature + for(int i(7),j(0); j < (_numOfRow * _numOfColumn); i+=2, j++) + { + //Format Q10.6 + int16_t q10_6 = round(tempArray[j] * pow(2,6)); + + _payload[i] = q10_6 >> 8; + _payload[i+1] = q10_6; + + } + + _payload[_length-1] = '\0'; + return _length - 1; +} diff --git a/lib/PayloadFormatter/PayloadFormatter.h b/lib/PayloadFormatter/PayloadFormatter.h new file mode 100644 index 0000000..b7032a7 --- /dev/null +++ b/lib/PayloadFormatter/PayloadFormatter.h @@ -0,0 +1,27 @@ +#ifndef PAYLOADFORMATTER_H +#define PAYLOADFORMATTER_H +#include +#include "RTClib.h" //Nécessaire afin d'utiliser l'object DateTime + +class PayloadFormatter +{ + public: + PayloadFormatter(uint8_t numOfRow, uint8_t numOfColumn); + ~PayloadFormatter(); + + int16_t buildPayload(uint8_t **buffer, DateTime *dateTime, double *tempArray); + void startSession(uint8_t totalPackets); + boolean endSession(); + + protected: + private: + + uint8_t _totalPayloads; + uint8_t _currentPayload; + uint8_t _numOfRow; + uint8_t _numOfColumn; + uint8_t *_payload; + uint8_t _length; +}; + +#endif //PAYLOADFOMATTER_H diff --git a/lib/PayloadFormatter/PayloadFormatter.ino b/lib/PayloadFormatter/PayloadFormatter.ino new file mode 100644 index 0000000..95c2b6e --- /dev/null +++ b/lib/PayloadFormatter/PayloadFormatter.ino @@ -0,0 +1,9 @@ +void setup() { + // put your setup code here, to run once: + +} + +void loop() { + // put your main code here, to run repeatedly: + +}