Dependents:   SoufflerieSP1-vers2

Files at this revision

API Documentation at this revision

Comitter:
petit
Date:
Tue Jun 08 10:37:18 2021 +0000
Commit message:
SP1 vers 3

Changed in this revision

wifiesp8266.cpp Show annotated file Show diff for this revision Revisions of this file
wifiesp8266.h Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 58ef0c4fba67 wifiesp8266.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wifiesp8266.cpp	Tue Jun 08 10:37:18 2021 +0000
@@ -0,0 +1,73 @@
+#include "mbed.h"
+#include "wifiesp8266.h"
+
+WifiEsp8266::WifiEsp8266(PinName Txd, PinName Rxd, float TimeOut) : RawSerial(Txd,Rxd)
+{
+    baud(Baud);
+    _TimeOut = TimeOut;
+    _DataPtr = 0;
+    _DataReady = false;
+    _Canal1Ok = false;
+    _Canal2Ok = false;
+    attach(this,&WifiEsp8266::receive, RawSerial::RxIrq);
+    if (_TimeOut != NULL) TGarde.attach(this,&WifiEsp8266::Tevent,_TimeOut);  // pour chien de garde
+}
+void WifiEsp8266::Tevent(void)  // chien de garde
+{
+    if (!_Canal1Ok) printf("$Y\r\n");
+    if (!_Canal2Ok) printf("$y\r\n");
+    _Canal1Ok = false;
+    _Canal2Ok = false;
+}
+char * WifiEsp8266::read(void)
+{
+    _DataReady = false;
+    return _Data;
+}
+
+bool WifiEsp8266::dataready(void)
+{
+    return _DataReady;
+}
+
+// reception phrase de type '$' "....' "\r\n"
+void WifiEsp8266::receive(void)
+{
+    bool _PhraseComplete = false;
+    char inChar;
+    while (readable() && (_PhraseComplete == false)) {
+        inChar = getc();
+        switch (inChar) {
+            case '$' :
+                _DataPtr = 0;
+                _DataTmp[_DataPtr++] = inChar;
+                _DataTmp[_DataPtr] = 0;
+                break;
+            case '\n' :
+                if (_DataPtr > 1) {
+                    strcpy(_Data,_DataTmp);
+                    _PhraseComplete = true;
+                    if (_TimeOut!=NULL) {
+                        if ((_Data[1] >> 5)==2)     _Canal1Ok = true;
+                        if ((_Data[1] >> 5)==3)     _Canal2Ok = true;
+                    }
+                }
+                _DataTmp[0] = 0;
+                _DataPtr = 0;
+                break;
+            case '\r' :
+                break;
+            default :
+                if (_DataPtr > 0) {
+                    _DataTmp[_DataPtr++] = inChar;
+                    _DataTmp[_DataPtr] = 0;
+                }
+        }
+        if (_DataPtr >= maxdata) {  // si phrase trop longue vide phrase
+            _DataTmp[0] = 0;
+            _DataPtr = 0;
+            _PhraseComplete = false;
+        }
+    }
+    _DataReady = _PhraseComplete;
+}
\ No newline at end of file
diff -r 000000000000 -r 58ef0c4fba67 wifiesp8266.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wifiesp8266.h	Tue Jun 08 10:37:18 2021 +0000
@@ -0,0 +1,25 @@
+#ifndef _WifiEsp8266_
+#define _WifiEsp8266_
+// taille maximum d'une phrase recue
+#define maxdata 100
+#define Baud 921600
+class WifiEsp8266 : public RawSerial
+{
+public:
+    WifiEsp8266(PinName Txd, PinName Rxd,float _TimeOut=NULL);      // _TimeOute pour chien de garde en s
+    void receive();  //recoit les data gps et les stocks puis produit les donnees en cas de reception
+    bool dataready(void);
+    char * read(void);
+private:
+// reception phrase Serial
+    char _DataTmp[maxdata + 1]; // tableau de donnees pour stocker pendant reception
+    char _Data[maxdata + 1]; // tableau de donnees lorsque toutes les donnees sont recues
+    int _DataPtr = 0; // position de stockage de la prochaine donnee a recevoir
+    bool _Canal1Ok = false;
+    bool _Canal2Ok = false;
+    Ticker TGarde;
+    bool _DataReady = false;
+    float _TimeOut;
+    void Tevent(void);
+};
+#endif
\ No newline at end of file