Julia DESMAZES / Mbed 2 deprecated Hexapode

Dependencies:   mbed BLE_API X_NUCLEO_IDB0XA1 MODSERIAL

Committer:
Essenceia
Date:
Sat Aug 20 18:24:21 2016 +0000
Revision:
3:13bd725bd47b
Parent:
2:ca6d8d1f77d4
traitement de events en cours;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Essenceia 1:8bab9152933e 1 #include "LOGGER.h"
Essenceia 1:8bab9152933e 2 #include <stdio.h>
Essenceia 1:8bab9152933e 3 #include <cmath>
Essenceia 1:8bab9152933e 4 #include <cstdlib>
Essenceia 3:13bd725bd47b 5 #include "Event.h"
Essenceia 2:ca6d8d1f77d4 6 #define BUFFER_LENGTH 32
Essenceia 3:13bd725bd47b 7
Essenceia 3:13bd725bd47b 8 static event *Ev = event::Instance();
Essenceia 3:13bd725bd47b 9
Essenceia 1:8bab9152933e 10 Logger* Logger::_instance = NULL;
Essenceia 1:8bab9152933e 11
Essenceia 3:13bd725bd47b 12 Logger::Logger()
Essenceia 3:13bd725bd47b 13 {
Essenceia 3:13bd725bd47b 14 serial = new MODSERIAL(SERIAL_TX, SERIAL_RX, BUFFER_LENGTH); //32 bitd long
Essenceia 2:ca6d8d1f77d4 15 serial->attach(&rxCallback, MODSERIAL::RxIrq);
Essenceia 2:ca6d8d1f77d4 16 buffer_index = 0 ;
Essenceia 2:ca6d8d1f77d4 17 buffer = new std::queue<char>;
Essenceia 3:13bd725bd47b 18 new_event=false;
Essenceia 3:13bd725bd47b 19 event_detected = false;
Essenceia 2:ca6d8d1f77d4 20 }
Essenceia 3:13bd725bd47b 21 void Logger::rxCallback(MODSERIAL_IRQ_INFO *q)
Essenceia 3:13bd725bd47b 22 {
Essenceia 2:ca6d8d1f77d4 23 char c =serial->getc();
Essenceia 3:13bd725bd47b 24 if(event_detected) {
Essenceia 3:13bd725bd47b 25 if(c != FIN_TRAME) {
Essenceia 3:13bd725bd47b 26 if(buffer_index < MAX_SIZE_BUFFER) {
Essenceia 3:13bd725bd47b 27 buffer_index++;
Essenceia 3:13bd725bd47b 28 buffer.push(c);
Essenceia 3:13bd725bd47b 29 }
Essenceia 3:13bd725bd47b 30 else { // une erreur c'est produite et ont n'a pas recu la fin du message
Essenceia 3:13bd725bd47b 31 flush_buffer();
Essenceia 3:13bd725bd47b 32 log("Logger::rxCallback Erreur dépassement de la taille maximale du buffer sans recevoire la fin de la trame");
Essenceia 3:13bd725bd47b 33 event_detected = false;
Essenceia 3:13bd725bd47b 34 }
Essenceia 3:13bd725bd47b 35 }
Essenceia 3:13bd725bd47b 36 else {
Essenceia 3:13bd725bd47b 37 //on a recu la fin de la trame et ont vas reseter et envoyer le message aux gestoinaire d'event
Essenceia 3:13bd725bd47b 38 Ev->give_buffer(&buffer);
Essenceia 3:13bd725bd47b 39 event_detected = false;
Essenceia 3:13bd725bd47b 40 flush_buffer();
Essenceia 3:13bd725bd47b 41 log("Logger::rxCallback On a transferet un buffer au gestionaire d'event aprés reception de signalement de la fin de trame");
Essenceia 3:13bd725bd47b 42 }
Essenceia 3:13bd725bd47b 43 }
Essenceia 3:13bd725bd47b 44 else { //event hesn't been detected yet
Essenceia 3:13bd725bd47b 45 if(c == DEBUT_TRAME ) {
Essenceia 3:13bd725bd47b 46 event_detected =true;
Essenceia 3:13bd725bd47b 47 log("Logger::rxCallback Debut de trame detecter, ont flush le buffer par precausion ");
Essenceia 3:13bd725bd47b 48 flush_buffer();
Essenceia 3:13bd725bd47b 49 }
Essenceia 3:13bd725bd47b 50 else {
Essenceia 3:13bd725bd47b 51 log("Logger::rxCallback Incoherant message pas de debut de trame detecter, recu : ");
Essenceia 3:13bd725bd47b 52 log(c);
Essenceia 3:13bd725bd47b 53 }
Essenceia 3:13bd725bd47b 54
Essenceia 2:ca6d8d1f77d4 55 }
Essenceia 1:8bab9152933e 56 }
Essenceia 1:8bab9152933e 57
Essenceia 3:13bd725bd47b 58 Logger* Logger::Instance()
Essenceia 3:13bd725bd47b 59 {
Essenceia 1:8bab9152933e 60 if (_instance == NULL) _instance = new Logger();
Essenceia 1:8bab9152933e 61 return _instance;
Essenceia 1:8bab9152933e 62 }
Essenceia 3:13bd725bd47b 63
Essenceia 3:13bd725bd47b 64 void Logger::log(std::string s)
Essenceia 3:13bd725bd47b 65 {
Essenceia 1:8bab9152933e 66 this->serial->printf((s).c_str());
Essenceia 1:8bab9152933e 67 this->serial->printf(" ");
Essenceia 1:8bab9152933e 68 }
Essenceia 3:13bd725bd47b 69
Essenceia 3:13bd725bd47b 70 void Logger::logn(std::string s)
Essenceia 3:13bd725bd47b 71 {
Essenceia 1:8bab9152933e 72 this->log((s+"\n\r").c_str());
Essenceia 1:8bab9152933e 73 }
Essenceia 1:8bab9152933e 74
Essenceia 3:13bd725bd47b 75 void Logger::log(double f)
Essenceia 3:13bd725bd47b 76 {
Essenceia 1:8bab9152933e 77 this->serial->printf("%f",f);
Essenceia 1:8bab9152933e 78 this->log("");
Essenceia 1:8bab9152933e 79 }
Essenceia 3:13bd725bd47b 80
Essenceia 3:13bd725bd47b 81 void Logger::logn(double f)
Essenceia 3:13bd725bd47b 82 {
Essenceia 1:8bab9152933e 83 this->log(f);
Essenceia 1:8bab9152933e 84 this->logn("");
Essenceia 1:8bab9152933e 85 }
Essenceia 1:8bab9152933e 86
Essenceia 3:13bd725bd47b 87 void Logger::log(int i)
Essenceia 3:13bd725bd47b 88 {
Essenceia 1:8bab9152933e 89 this->serial->printf("%d",i);
Essenceia 1:8bab9152933e 90 this->log("");
Essenceia 1:8bab9152933e 91 }
Essenceia 3:13bd725bd47b 92
Essenceia 3:13bd725bd47b 93 void Logger::logn(int i)
Essenceia 3:13bd725bd47b 94 {
Essenceia 1:8bab9152933e 95 this->log(i);
Essenceia 1:8bab9152933e 96 this->logn("");
Essenceia 1:8bab9152933e 97 }
Essenceia 1:8bab9152933e 98
Essenceia 3:13bd725bd47b 99 void Logger::log(long i)
Essenceia 3:13bd725bd47b 100 {
Essenceia 1:8bab9152933e 101 this->serial->printf("%ld",i);
Essenceia 1:8bab9152933e 102 this->log("");
Essenceia 1:8bab9152933e 103 }
Essenceia 3:13bd725bd47b 104
Essenceia 3:13bd725bd47b 105 void Logger::logn(long i)
Essenceia 3:13bd725bd47b 106 {
Essenceia 1:8bab9152933e 107 this->log(i);
Essenceia 1:8bab9152933e 108 this->logn("");
Essenceia 1:8bab9152933e 109 }
Essenceia 1:8bab9152933e 110 string Logger::log_itos(int i)
Essenceia 1:8bab9152933e 111 {
Essenceia 3:13bd725bd47b 112 float v= (float) i;
Essenceia 3:13bd725bd47b 113 char *c =(char*) malloc(sizeof(char)*((int)log10(v)+1));
Essenceia 3:13bd725bd47b 114 sprintf(c,"%d",i);
Essenceia 1:8bab9152933e 115 return string(c);
Essenceia 1:8bab9152933e 116 }
Essenceia 2:ca6d8d1f77d4 117 int Logger::get_buffer_index()
Essenceia 3:13bd725bd47b 118 {
Essenceia 3:13bd725bd47b 119 return buffer_index;
Essenceia 2:ca6d8d1f77d4 120 }
Essenceia 2:ca6d8d1f77d4 121 void Logger::flush_buffer()
Essenceia 2:ca6d8d1f77d4 122 {
Essenceia 3:13bd725bd47b 123 if(buffer_index>0) {
Essenceia 3:13bd725bd47b 124 buffer= new std::queue<char>;
Essenceia 3:13bd725bd47b 125 buffer_index=0;
Essenceia 3:13bd725bd47b 126 } else log("Logger::flush_buffer Erreur le buffer est déjà vide");
Essenceia 3:13bd725bd47b 127 }
Essenceia 3:13bd725bd47b 128 }