Serial pour utiliser avec module ESP10 en mode pont

Dependents:   souflerie-sp3-wifi-F411re-2 souflerie-sp2-wifi-F411re-2 souflerie-sp1-wifi-F411re-2 Programme_Final_V6

wifiesp8266.cpp

Committer:
schnf30
Date:
2021-06-06
Revision:
4:55ab98f52d77

File content as of revision 4:55ab98f52d77:

#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;
}