projet3_temperature/lib/PayloadFormatter/PayloadFormatter.h
2020-05-14 16:15:09 +02:00

125 lines
5.0 KiB
C++

/*! \mainpage Guide de démarrage rapide
*
* \section intro_sec Introduction
*
* Cette bibliothèque inclue une seule classe : PayloadFormatter.@n
* Elle permet de construire une trame contenant : le nombre total de trames à transmettre, le numéro de la trame transmise, le nombre de lignes de températures, le nombre de colonnes de températures, la date et l'heure,@n
* la température extérieure, les températures de la matrice aux nombre de lignes * colonnes.@n
* Cette trame peut ensuite être décodée via le décodeur de trame écrit en javascript disponible <a href="http://www.web-directories.tk/git/Th3maz1ng/projet3_temperature/src/branch/master/src/decodeur_trame_TTN/decodeur.js" target="_blank">ici</a>.@n
* Le décodeur peut être intégré à TTN.@n@n
* Attention, il faut préalablement installer la bibliothèque RTClib-master dans le dossier Documents\\Arduino\\libraries téléchargeable <a href="http://www.web-directories.tk/git/Th3maz1ng/ESP8266_swiss_army_board/src/branch/master/src/libs" target="_blank">ici</a>.@n
* Elle est nécessaire car elle définit l'objet DateTime.
*
* Voici un code d'exemple de l'utilisation de l'objet PayloadFormatter :
*
*
* \code{.cpp}
* #include <PayloadFormatter.h>
*
* //Programme d'exemple d'utilisation de la bibliothèque PayloadFormatter
* //Création de l'objet pour 4 températures internes (2 lignes par 2 colonnes)
* PayloadFormatter formatter(2,2);
*
* double temperatureExterne = 28.58;
* double temperatureInternes[2][4] = {{15.21,16.18,12.45,18.42},{18.58,11.49,22.38,9.73}};
* DateTime dt(2020, 5, 14, 12,39); //14/05/2020 à 12h39
*
* uint8_t *buffer(NULL);
* uint16_t size(0);
*
* void setup()
* {
* Serial.begin(115200);
* Serial.println("Démarrage d'une session de construction de 2 trames");
*
* formatter.startSession(2);
* size = formatter.buildPayload(&buffer, &dt, temperatureExterne, temperatureInternes[0]);
*
* Serial.print("Trame construite : ");
* for(int i(0); i < size; i++)
* {
* buffer[i] <= 0x0F ? Serial.print("0") : Serial.print(""); Serial.print(buffer[i], HEX); Serial.print(" ");
* }
* Serial.printf(" de taille : %u\n Session terminee ? %s\n", size, formatter.endSession() ? "OUI" : "NON");
*
* size = formatter.buildPayload(&buffer, &dt, temperatureExterne, temperatureInternes[1]);
*
* Serial.print("Trame construite : ");
* for(int i(0); i < size; i++)
* {
* buffer[i] <= 0x0F ? Serial.print("0") : Serial.print(""); Serial.print(buffer[i], HEX); Serial.print(" ");
* }
* Serial.printf(" de taille : %u\n Session terminee ? %s\n", size, formatter.endSession() ? "OUI" : "NON");
*
* Serial.println("Fin de l'exemple");
* }
*
* void loop()
* {
*
* }
* \endcode
*
* \author Anatole SCHRAMM-HENRY
* \date 15 Jan 2020
* \copyright All Right Reserved
*/
#ifndef PAYLOADFORMATTER_H
#define PAYLOADFORMATTER_H
#include <math.h>
#include <RTClib.h> //Nécessaire afin d'utiliser l'objet DateTime
/*!
* @brief La classe PayloadFormatter permet de construire une trame formatée.
*
*/
class PayloadFormatter
{
public:
/*!
* Le constructeur de la classe prend en paramètres :
* @param numOfRow : correspond au nombre de lignes de températures. Maximum 15.
* @param numOfCol : correspond au nombre de colonnes de températures. Maximum 15.
* @warning : une allocation dynamique est effectuée, attention avec les microcontrôleurs ayant une faible quantité de RAM.
*/
PayloadFormatter(uint8_t numOfRow, uint8_t numOfColumn);
/*!
* Le destructeur libère la mémoire dynamiquement allouée :
*/
~PayloadFormatter();
/*!
* Construit une trame à l'aide des informations passées en paramètre.
* @param buffer : l'adresse du buffer de type uint8_t contenant la trame formatée. Voir le code d'exemple pour plus d'information.
* @param dateTime : l'objet contenant la date et l'heure.
* @param externTemp : la température externe.
* @param tempArray : le tableau de double contenant l'ensemble des températures internes.
* @param numOfRow : non utilisé dans cette version.
* @param numOfColumn : non utilisé dans cette version.
* @return uint16_t : la taille en octet de la trame construite.
*/
int16_t buildPayload(uint8_t **buffer, DateTime *dateTime, double externTemp, double *tempArray, uint8_t numOfRow = -1, uint8_t numOfColumn = -1);
/*!
* Indique le démarrage d'une session de construction de trames.
* @param totalPackets : le nombre total de trames qui vont être construites lors de la session. Maximum 15.
*/
void startSession(uint8_t totalPackets);
/*!
* Permet de fermer une session de construction.
* @return boolean : indiquant si la session a été fermée correctement, ie si le nombre de trame indiqué dans startSession() a bien été construit.
*/
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