Lib SIM5320 avec SMS

Dependents:   0-sim5320e-L432KC-relais-0

Revision:
1:8eff8b2b35e8
Parent:
0:d63231e47571
--- a/sim800l.cpp	Sun May 01 06:28:05 2022 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,193 +0,0 @@
-
-#include "mbed.h"
-#include "sim800l.h"
-/*
-char _DataTmp[maxdata + 1]; // tableau de donnees pour stocker pendant reception
-char _Data[maxdata + 1]; // tableau de donnees lorsque toutes les donnees sont recues
-char _DataSms[maxdata + 1]; // tableau de donnees lorsque toutes les donnees sont recues
-char _Phrase[maxdata + 1]; // pour convertir en phrase avant envoi
-*/
-Sim800l::Sim800l(PinName tx, PinName rx, PinName resetpin,int baudrate):serial(tx,rx), reset (resetpin)
-{
-    reset.write(0);  //reset
-/*    _DataTmp = new char[maxdata + 1]; // tableau de donnees pour stocker pendant reception
-    _Data = new char[maxdata + 1]; // tableau de donnees lorsque toutes les donnees sont recues
-    _DataSms = new char[maxdata + 1]; // tableau de donnees lorsque toutes les donnees sont recues
-    _Phrase = new char[maxdata + 1]; // pour convertir en phrase avant envoi  
-    */  
-    _DataTmp[0] = 0;
-    _Data[0] = 0;
-    _DataPtr = 0;
-    _DataReady = false;
-    _SmsReady = false;
-    _IndexSms = 0;
-    serial.baud(baudrate);  // configure data baud
-}
-// retourne incdex du sms recu
-int Sim800l::IndexSmsRecu(void)
-{
-    return _IndexSms;
-}
-// return true si une phrase a ete recue
-bool Sim800l::dataready(void)
-{
-    return _DataReady;
-}
-// return phrase recu
-char * Sim800l::read(void)
-{
-    _DataReady = false;
-    return _Data;
-}
-// recoit les caractere serie et les stocke en tache de fond
-void Sim800l::receive()
-{
-    char inChar;
-    if (serial.readable()) {
-        inChar = serial.getc();
-        pc.putc(inChar);  // pour echo
-        switch (inChar) {
-            case '\n' :
-                if (_DataPtr > 1) {
-//                    pc.printf("-%s/\r\n",_DataTmp);
-                    if (strncmp(_DataTmp,"+CMTI:",6)==NULL) { // recoit sms +CMTI: "SM",3
-                        if (sscanf(_DataTmp,"+CMTI: \"SM\",%d",&_IndexSms)==1) _SmsReady = true;
-                    } else {  // cmde
-                        strcpy(_Data,_DataTmp);
-                        _DataReady = true;
-                    }
-                }
-                _DataTmp[0] = 0;
-                _DataPtr = 0;
-                break;
-            case 0 :
-                break;
-            case '\r' :
-                break;
-            case ' ' :
-                if (_DataPtr==1) {
-                    if ( _DataTmp[0]=='>') {
-                        strcpy(_Data,_DataTmp);
-                        _DataReady = true;
-                        _DataTmp[0] = 0;
-                        _DataPtr = 0;
-                        break;
-                    }
-                }
-            default :
-                _DataTmp[_DataPtr] = inChar;
-                _DataPtr = _DataPtr + 1;
-                _DataTmp[_DataPtr] = 0;
-        }
-        if (_DataPtr >= maxdata) {  // si phrase trop longue vide phrase
-            _DataTmp[0] = 0;
-            _DataPtr = 0;
-        }
-    }
-}
-// fonction appele en fin timerout
-void Sim800l::Ftimeout()
-{
-    FinTimeOut = true;
-}
-// defini time out et le lance
-void Sim800l::SetTimeout(float delay)
-{
-    FinTimeOut = false;
-    _timeout.attach(callback(this,&Sim800l::Ftimeout),delay);
-//  timeout.attach(callback(this, &Sonar::trigger_toggle), 10.0e-6);
-}
-// attente reponse dans *reponse jusqua timeout
-bool Sim800l::waitreponse(const char *reponse,float timeout)
-{
-    SetTimeout(timeout);
-    while (FinTimeOut==false) { // attente Ok
-        if (dataready()) {
-            if (strcmp(read(),reponse)==0) return true;
-        }
-    }
-    return false; // timeout ecoule donc erreur
-}
-// envoi commande et attend reponse
-bool Sim800l::writecmdandwaitreponse(const char *data, const char *reponse,float timeout)
-{
-    serial.printf("%s",data);
-    return waitreponse(reponse,timeout);
-}
-// initialise SIM800L en mode SMS Texte
-// configure baud
-// Renvoi
-// - true tout s'est bien passé
-// - false erreur
-// cmdecho = true --> copie donne de reponse sim800l vers pc
-bool Sim800l::init()
-{
-    bool resultat = true;
-    _DataTmp[0] = 0;
-    _Data[0] = 0;
-    _DataPtr = 0;
-    _DataReady = false;
-    _SmsReady = false;
-    _IndexSms = 0;
-    reset.write(0);  //reset
-    thread_sleep_for(200);
-    reset.write(1);
-    serial.attach(callback(this, &Sim800l::receive), RawSerial::RxIrq); // affecte interruption sur Rx
-    thread_sleep_for(1000);
-    int i=0;
-    while (!writecmdandwaitreponse("AT\n","OK",timeoutdefaut)) { // on attend 10 x pas plus
-        if (i++>10) return false;
-    }
-    if (!waitreponse("Call Ready",timewaitCallready)) return false;
-    if (!waitreponse("SMS Ready",timewaitSmsready)) return false;
-    return writecmdandwaitreponse("AT+CMGF=1\n","OK",timeoutdefaut);  // Passe sms mode texte
-}
-bool Sim800l::smsclearall(void)
-{
-    return writecmdandwaitreponse("AT+CMGDA=\"DEL ALL\"\n","OK",timewaitSmsallclear);  // efface sms
-
-}
-bool Sim800l::smsready(void)
-{
-    bool _SmsReadytemp = _SmsReady;
-    _SmsReady = false;
-    return _SmsReadytemp;
-}
-bool Sim800l::sendsms(const char *phonenumber,const char *data)
-{
-    if (!writecmdandwaitreponse("AT+CMGF=1\n","OK",timeoutdefaut)) return false;  // Passe sms mode texte
-    sprintf(_Phrase,"AT+CMGS=\"%s\"\n",phonenumber);
-    if (!writecmdandwaitreponse(_Phrase,">",timeoutsendsms)) return false;  // ouvre sms
-    sprintf(_Phrase,"%s%c\n",data,26);
-    return writecmdandwaitreponse(_Phrase,"OK",timeoutsendsms); // envoi message
-}
-// attente r eponse dans *reponse
-bool Sim800l::waitsmsreponse(const char *reponse,float timeout)
-{
-    char DataSmsOk = 0;
-    _DataSms[0] = 0;
-    SetTimeout(timeout);
-    while (FinTimeOut==false) { // attente Ok
-        if (dataready()) {
-//            pc.printf("-%s --> %d:%s/\r\n",_Data,DataSmsOk,_DataSms);
-            if (strcmp(read(),reponse)==0) return true;
-            if (strncmp(_Data,"+CMGR:",6)==NULL) DataSmsOk = 1;
-            else if (DataSmsOk!=0) {
-                if (DataSmsOk > 1)  strcat(_DataSms,",");
-                strcat(_DataSms,_Data);
-                DataSmsOk = 2;
-            }
-//            pc.printf("-%s --> %d:%s/\r\n",_Data,DataSmsOk,_DataSms);
-        }
-    }
-    return false; // timeout ecoule donc erreur
-}
-char *Sim800l::readtextesms()
-{
-    return _DataSms;
-}
-bool Sim800l::readsms(int index)
-{
-    serial.printf("AT+CMGR=%d,0\n",index);
-    return waitsmsreponse("OK",timeoutreadsms);
-}
\ No newline at end of file