Angelo Carrieri / Mbed 2 deprecated ATCommands

Dependencies:   mbed

Revision:
3:1df7773ae017
Parent:
2:52b0e1971195
Child:
4:87ec8f45cafe
--- a/main.cpp	Wed May 09 11:13:28 2018 +0000
+++ b/main.cpp	Fri May 11 14:22:53 2018 +0000
@@ -6,24 +6,28 @@
 #include "ATCmdParser.h"
 #include "UARTSerial.h"
 
-// Dimensione massima dei vettori MRxB e ARxB
-#define MRxBDIM 400
-#define ARxBDIM 400
+//LocalFileSystem local("local");
+
+// Dimensione massima del vettore MRxB
+#define MRxBDIM 200
 
-// Numero di byte da inviare per l'accensione del led tramite l'interfaccia SPI
+// Dimensione massima del vettore ARxB
+#define ARxBDIM 200
+
+// Numero di byte da inviare per l'accensione del led tramite il protocollo SPI
 #define NumByte 16
 
-// Configurazione della porta seriale del computer
+// Configurazione della porta seriale del PC
 Serial pc(USBTX, USBRX);     
 
-// Dichiarazione per il LED di diagnostica
+// Dichiarazione del LED di diagnostica
 DigitalOut led(LED2);
 
 // Configurazione della porta seriale UART
 UARTSerial serial = UARTSerial(PA_9, PA_10);
 ATCmdParser at = ATCmdParser(&serial, "\r\n");
 
-// Configurazione dei parametri della SPI
+// Configurazione dei parametri del protocollo SPI
 SPI myspi(PA_7, PA_6, PA_5, NC);
      
 // Vettore che conterrà i byte ricevuti in risposta al comando AT inviato
@@ -32,13 +36,13 @@
 // Vettore che conterrà i byte ricevuti in risposta all'invio automatico della sequenza di comandi AT
 char ARxB[ARxBDIM];
 
-// Vettore che conterrà i byte da trasmettere al led tramite l'interfaccia SPI
+// Vettore che conterrà i byte da trasmettere al led tramite il protocollo SPI
 uint8_t Vled[NumByte];
 
 // Dichiarazione del parametro temporale t
 Timer t;
 
-// Dichiarazioni delle variabili locali
+// Variabili globali
 char c;
 int i=0;
 int j=0;
@@ -46,16 +50,19 @@
 int R=0;
 int ER=0;
 int ERR=0;
-int endlis=0;
+int end=0;
+
 volatile char input;
 
-// Funzione per l'emissione di luce verde tramite l'interfaccia SPI
+//char vett[10];
+
+// Funzione per l'emissione di luce verde tramite il protocollo SPI
 void LedGREEN();
 
-// Funzione per l'emissione di luce rossa tramite l'interfaccia SPI
+// Funzione per l'emissione di luce rossa tramite il protocollo SPI
 void LedRED();
 
-// Funzione per lo spegnimento del led tramite l'interfaccia SPI
+// Funzione per lo spegnimento del led tramite il protocollo SPI
 void LedOFF();
 
 // Funzione per la ricerca della parola ERROR nel vettore ricevuto dal modem in risposta al comando digitato
@@ -64,34 +71,43 @@
 // Funzione per la ricerca della parola ERROR nel vettore ricevuto dal modem in risposta alla sequenza prestabilita di comandi
 void ERR2();
 
+// Funzione che legge la risposta del modem
+void ReadModem();
+
+// Funzione che esegue il reset dei vettori MRxB e ARxB
+void Vreset();
+
 
 int main()
 {
-   // FILE *flis;
-    // Configurazione del baud rate per la comunicazione col computer
+    //FILE *flis;
+   
+    // Configurazione del baud rate per la comunicazione col PC
     pc.baud(9600);
     
-    // Configurazione dei parametri per l'interfaccia SPI
+    // Configurazione dei parametri del protocollo SPI
     myspi.format(16, 0);
     myspi.frequency(3333333.3);
     
-    printf("\r\n");
-    printf("              PROGRAMMA PER L'INVIO DI COMANDI AT SU PORTA SERIALE\r\n");
-    printf("________________________________________________________________________________\r\n");
-    printf("\r\n");
-    printf("  ----------------------------------------------------------------------------\r\n");
-    printf(" | Premere il tasto 'm' per inserire un comando AT                            |\r\n");
-    printf(" | Premere il tasto 'a' per l'invio automatico della sequenza di comandi AT   |\r\n");
-    printf(" | Premere il tasto 'e' per uscire dal programma                              |\r\n");
-    printf("  ----------------------------------------------------------------------------\r\n");
-    printf("________________________________________________________________________________\r\n");
-    printf("\r\n");
+    pc.printf("\r\n");
+    pc.printf("              PROGRAMMA PER L'INVIO DI COMANDI AT SU PORTA SERIALE\r\n");
+    pc.printf("________________________________________________________________________________\r\n");
+    pc.printf("\r\n");
+    pc.printf("  ----------------------------------------------------------------------------\r\n");
+    pc.printf(" | Premere il tasto 'm' per inserire un comando                               |\r\n");
+    pc.printf(" | Premere il tasto 'a' per l'invio automatico della sequenza di comandi      |\r\n");
+    pc.printf(" | Premere il tasto 't' per testare il tempo di risposta del modem            |\r\n");
+    pc.printf(" | Premere il tasto 'r' per rinviare l'ultimo comando                         |\r\n");
+    pc.printf(" | Premere il tasto 'e' per uscire dal programma                              |\r\n");
+    pc.printf("  ----------------------------------------------------------------------------\r\n");
+    pc.printf("________________________________________________________________________________\r\n");
+    pc.printf("\r\n");
     
-/*
-    flis=fopen("lista.txt","r");
-    if((flis=fopen("lista.txt","r"))==NULL)
+    /**flis = fopen("/local/lista.txt", "r");
+    if((flis=fopen("/local/lista.txt","r"))==NULL)
     {
         printf("Impossibile aprire il file");
+        exit(0);
     }
     
     while(!feof(flis))
@@ -103,25 +119,16 @@
 
     while(1)
     {
-        
-        // Reset vettore MRxB
-        for(i=0;i<MRxBDIM;i++)
-        {
-            MRxB[i]='\0';
-        }
-    
-        // Reset vettore ARxB
-        for(j=0;j<ARxBDIM;j++)
-        {
-            ARxB[j]='\0';
-        }
+        Vreset();
         
         input=pc.getc();
     
+    
         if((input=='m')||(input=='M'))
         {
-               
-            printf("Inserire il comando:  ");
+            LedOFF();
+            
+            pc.printf("Inserire un comando:  ");
             
             while(1)
             { 
@@ -132,70 +139,139 @@
     
                 if(c=='\r') 
                 {
-                    t.start();
-                    goto esc;
+                    goto esc1;
                 }
             }
         
-            esc:
+            esc1:
             
-            printf("\r\n\r\nRisposta:\r\n");
- 
-            at.read(MRxB, MRxBDIM);   
-            
-            t.stop();
+            pc.printf("\r\n\r\nRisposta:\r\n");
+
+            at.read(MRxB, MRxBDIM); 
             
             for(i=0;i<MRxBDIM;i++)
-            {   
+            {
                 pc.printf("%c",MRxB[i]);
             }
-            
-            pc.printf("\n\rTempo trascorso dall'invio del comando: %f secondi\n\r", t.read());
-            
-            t.reset();  
               
-            printf("______________________________________________________________________________\r\n");
-            printf("\r\n");
+            pc.printf("________________________________________________________________________________\r\n");
+            pc.printf("\r\n");
             
             ERR1();
             
+            Vreset();
+            
         } // End if
          
+         
         if ((input=='a')||(input=='A'))
         {
-            printf("...invio automatico della sequenza di comandi..."); 
-            printf("\r\n");     
-             
+            LedOFF();
+            
+            pc.printf("...invio automatico della sequenza di comandi..."); 
+            pc.printf("\r\n");
+            
+            pc.printf("\r\nRisposta:\r\n\r\n");   
+            
             at.send("AT");
-            at.send("AT+CREG?");
-     
-            t.start();
+            
+            ReadModem();
+            
+            at.send("AT+CSQ=?");
+      
+            ReadModem();
+            
+            at.send("AT+CSQ");
+            
+            ReadModem();
             
-            printf("\r\nRisposta:\r\n");
- 
-            at.read(ARxB, ARxBDIM);
+            at.send("AT+CREG=?");
+            
+            ReadModem();
             
-            t.stop();
+            at.send("AT+GMI");
+            
+            ReadModem();
+            
+            pc.printf("________________________________________________________________________________\r\n");
+            pc.printf("\r\n");
         
-            for(i=0;i<ARxBDIM;i++)
-            {
-                pc.printf("%c",ARxB[i]);
-            }
+         } // End if
+         
+         if ((input=='r')||(input=='R'))
+         {
+            LedOFF();
             
-            pc.printf("\n\rTempo trascorso dall'invio della sequenza di comandi: %f secondi\n\r", t.read());
+            pc.printf("...rinvio dell'ultimo comando..."); 
+            pc.printf("\r\n");
             
-            t.reset();  
-        
-            printf("______________________________________________________________________________\r\n");
-            printf("\r\n");
-        
-            ERR2();
+            pc.printf("\r\nRisposta:\r\n\r\n");   
+            
+            at.send("AT#/");
+            
+            ReadModem();
+            
+            pc.printf("________________________________________________________________________________\r\n");
+            pc.printf("\r\n");
         
          } // End if
          
+         
+         if ((input=='t')||(input=='T'))
+         {
+             LedOFF();
+             
+             pc.printf("Inserire un comando per testare il tempo di risposta del modem: "); 
+            
+             while(1)
+             { 
+                char c = pc.getc();
+                pc.putc(c);
+            
+                at.write(&c,1);
+    
+                if(c=='\r') 
+                {
+                    t.reset();
+                    t.start();
+                    goto esc2;
+                }
+             }
+        
+            esc2:
+            
+            printf("\r\n\r\n");
+            
+            if  (at.recv("AT")==true)
+            {
+                t.stop();
+            }
+    
+            at.read(ARxB, ARxBDIM); 
+        
+            Vreset();
+            
+            pc.printf("Tempo di risposta: %f secondi\r\n", t.read());    
+                 
+            if (t.read()<1)
+            {
+                LedGREEN();
+            }
+            else
+            {
+                pc.printf("\r\nATTENZIONE: Tempo di risposta superiore ad 1 secondo\r\n");
+                LedRED();
+            }
+            
+            pc.printf("________________________________________________________________________________\r\n");
+            pc.printf("\r\n");
+            
+         } // End if
+         
+         
          if ((input=='e')||(input=='E'))
          {
-             printf("Il programma e' stato chiuso\n\r\n\r");
+             pc.printf("Il programma e' stato chiuso\n\r\n\r");
              LedOFF();
     
              exit(0);
@@ -205,17 +281,35 @@
 
 }    
 
+void ReadModem()
+{
+        
+        at.read(ARxB, ARxBDIM); 
+            
+        for(i=0;i<ARxBDIM;i++)
+        {
+            pc.printf("%c",ARxB[i]);
+        }
+        
+        printf("\r\n");
+        
+        ERR2();
+        
+        Vreset();
+          
+}
+ 
 void ERR1()
 {
             
-            endlis=0;
+            end=0;
             
             E=0;
             R=0;
             ER=0;
             ERR=0;
             
-            // Ciclo per la ricerca della parola ERROR nel vettore ricevuto dal modem in risposta al comando digitato
+            // Ciclo per la ricerca della parola ERROR nel vettore ricevuto dal modem in risposta al comando inviato
             for(i=0;i<MRxBDIM;i++)
             {
                 if(ERR==0)
@@ -226,7 +320,7 @@
                     { 
                         if ((MRxB[i])=='E')
                         {
-                            endlis++;
+                            end++;
                             E=1;
                             goto jump1;
                         }
@@ -237,7 +331,7 @@
                         {
                             if((MRxB[i])=='R') 
                             {
-                                endlis++;
+                                end++;
                                 R=1;
                                 ER=1;
                                 goto jump1;
@@ -245,7 +339,7 @@
                             else
                             {
                                 E=0;
-                                endlis=0;
+                                end=0;
                                 goto jump1;
                             }
                         }
@@ -254,13 +348,13 @@
                     {
                         if((MRxB[i])=='R')
                         {
-                            endlis++;
+                            end++;
                             ERR=1;
                             goto jump1;
                         }
                         else
                         {
-                            endlis=0;
+                            end=0;
                             E=0;
                             R=0;
                             ER=0;
@@ -275,7 +369,7 @@
                       
             } // End ciclo for
             
-            if(endlis==3) 
+            if(end==3) 
             {
                 LedRED();
             }
@@ -288,8 +382,8 @@
 
 void ERR2()
 {
-            
-            endlis=0;
+              
+            end=0;
             
             E=0;
             R=0;
@@ -307,7 +401,7 @@
                     { 
                         if ((ARxB[i])=='E')
                         {
-                            endlis++;
+                            end++;
                             E=1;
                             goto jump2;
                         }
@@ -318,7 +412,7 @@
                         {
                             if((ARxB[i])=='R') 
                             {
-                                endlis++;
+                                end++;
                                 R=1;
                                 ER=1;
                                 goto jump2;
@@ -326,7 +420,7 @@
                             else
                             {
                                 E=0;
-                                endlis=0;
+                                end=0;
                                 goto jump2;
                             }
                         }
@@ -335,13 +429,13 @@
                     {
                         if((ARxB[i])=='R')
                         {
-                            endlis++;
+                            end++;
                             ERR=1;
                             goto jump2;
                         }
                         else
                         {
-                            endlis=0;
+                            end=0;
                             E=0;
                             R=0;
                             ER=0;
@@ -356,7 +450,7 @@
                               
             } // End ciclo for
             
-            if(endlis==3) 
+            if(end==3) 
             {
                 LedRED();
             }
@@ -367,6 +461,23 @@
 
 }
 
+void Vreset()
+{
+        
+        // Reset del vettore MRxB
+        for(i=0;i<MRxBDIM;i++)
+        {
+            MRxB[i]='\0';
+        }
+    
+        // Reset del vettore ARxB
+        for(j=0;j<ARxBDIM;j++)
+        {
+            ARxB[j]='\0';
+        }
+           
+}      
+
 void LedGREEN()
 {
                        
@@ -433,13 +544,7 @@
 
 }
 
-    
-    
-   
- 
-    
-    
-    
+