uses pushing box to publish to google spreadsheets with a state machine instead of a while loop

Dependents:   DCS_FINAL_CODE

Fork of GSM_PUSHING_BOX_STATE_MACHINE by DCS_TEAM

Revision:
34:5345174bfb30
Parent:
33:2ae9a4eb6433
diff -r 2ae9a4eb6433 -r 5345174bfb30 GSMLibrary.cpp
--- a/GSMLibrary.cpp	Fri Nov 06 20:49:23 2015 +0000
+++ b/GSMLibrary.cpp	Sat Dec 19 21:47:23 2015 +0000
@@ -1,17 +1,14 @@
 //Libraries
 #include "GSMLibrary.h"
-//#include "gsmqueue.h"
 #include <string.h>
 #include "GPRSInterface.h"
-#include "gsmqueue.h"
+
 //Global defines
-#define TIMEOUTLIMIT (SECONDS_TIMEOUT / 1) //Defines how many "ticks" of the GSM will constitute "timeout" of our "watchdog timer"
 #define NUM_SIZE 500
 
 //External variables
 extern Serial pc;   //To print output to computer
-//extern Serial gsm;  //To communicate with GSM
-extern uint8_t buffer[BUFFER_LENGTH];   //DMA queue
+
 GPRSInterface eth(D1,D0, 19200, "ndo","","");
 /**************************************************
  **          GPRS                                 **
@@ -28,7 +25,6 @@
 
 //Internal variables
 gsm_states gsm_current_state = GSM_INITIALIZE;
-int timeout_count = 0;
 char state_chars[] = "iSJICS";  //For debugging - 1 char to represent each state: init, ok, signalstrength, network, turn off notifications, messagemode, read, phone, writesms, del
 char* serverIP;
 TCPSocketConnection sock;
@@ -60,17 +56,6 @@
     pc.printf("S:%c;", state_chars[gsm_current_state]);
 }
  
-//Advance timeout counter; if timeout, return true
-bool gsm_timeOut()
-{
-    if(++timeout_count >= TIMEOUTLIMIT){
-        timeout_count = 0; 
-        gsm_reset();
-        return true;
-    }
-    else
-        return false;     
-}
 
 //Have the GSM send data - L = long, S = short, hh/mm/ss for time, "lat ns" for latitute, "lon we" for longitude
 void gsm_send_data(float L, float Lref, int hh, int mm, int ss, float lat, char ns, float lon, char we)
@@ -121,7 +106,7 @@
     //header information
     
     //begin get request
-    snprintf(num, NUM_SIZE, "%s", "\r\nGET /index.html?");
+    snprintf(num, NUM_SIZE, "%s", "GET /index.html?");
     strcat(gsm_header, num);
     
     //add query parameters
@@ -136,7 +121,6 @@
     snprintf(num, NUM_SIZE, "%s","Connection: Keep-Alive\r\n\r\n");
     strcat(gsm_header, num);
     
-    
     send = true;
 }
  
@@ -152,7 +136,6 @@
 void gsm_reset()
 {
     gsm_current_state = GSM_INITIALIZE;
-    send = false;
 }
  
 //Next state logic -----------------------------------------------------
@@ -165,8 +148,7 @@
     switch(gsm_current_state)
     {
         case GSM_INITIALIZE:
-            timeout_count = 0;  //No AT commands have been sent: this will send the first one
-            printf(">>>INIT\r\n");
+            //printf(">>>INIT\r\n");
             if (eth.init() != NULL) {
                 printf(">>> Could not initialise. Halting!\n");
                 exit(0);
@@ -174,13 +156,13 @@
             gsm_current_state = GSM_CHECK_SIM;
             break;
         case GSM_CHECK_SIM:
-            printf(">>>CHECK SIM\r\n");
+            //printf(">>>CHECK SIM\r\n");
             if (eth.preInit() == true){
                 gsm_current_state = GSM_JOIN;
             }
             break;
         case GSM_JOIN:
-            printf(">>>JOIN\r\n");
+            //printf(">>>JOIN\r\n");
             int join = eth.connect();
             if (join == false || join < 0){
                 //stay here
@@ -193,7 +175,7 @@
             }
             break;
         case GSM_SERVER_IP:
-            printf(">>>SERVER IP\r\n");
+           // printf(">>>SERVER IP\r\n");
             serverIP = "23.251.149.114";
             if(serverIP != NULL)
             {
@@ -204,7 +186,7 @@
             } 
             break;
         case GSM_CONNECT:
-            printf("\r\n>>>CONNECT TO: %s\r\n", serverIP);
+            //printf("\r\n>>>CONNECT TO: %s\r\n", serverIP);
                 if(sock.connect(serverIP,80)){
                     printf("Connected\r\n");
                     gsm_current_state = GSM_SEND;
@@ -214,19 +196,19 @@
                 } 
             break;  
         case GSM_SEND:
-            printf(">>>READY TO SEND\r\n");
-            waitTicks = 6;
-            if(sock.send_all(gsm_header, contentLength)){
-                printf("Data succesfully sent to server\r\n");
-                gsm_current_state = GSM_WAIT;
+            //printf(">>>READY TO SEND\r\n");
+            if(send){
+                if(sock.send_all(gsm_header, contentLength)){
+                    printf("Data succesfully sent to server\r\n");
+                    gsm_current_state = GSM_SEND;
+                    send = false;
+                }
+                else{
+                    printf("Reconnecting to Server...\r\n");
+                    gsm_current_state = GSM_CONNECT;
+                }
             }
-            else{
-                printf("Reconnecting to Server...\r\n");
-                gsm_current_state = GSM_CONNECT;
-            }
-            
-            
-            //gsm_current_state = GSM_SEND;               
+                         
             break;
         case GSM_WAIT:
             //WAIT BETWEEN CONSECUTIVE SENDS
@@ -241,58 +223,6 @@
             pc.printf("This is a state error\r\n");
     }
 }
-
-//Initialize the GSM
-void gsm_initialize(){ 
-     wait(2.3); //Wait for the GSM to turn on properly before doing this initialization
-      SIM_SCGC6 |= SIM_SCGC6_DMAMUX_MASK; //enabling dmamux clock
-      SIM_SCGC7 |= SIM_SCGC7_DMA_MASK;  // enebaling dma clock
-      //pc.printf("initializing DMA...\r\n");
-     // control register mux, enabling uart3 receive
-     DMAMUX_CHCFG0 |= DMAMUX_CHCFG_ENBL_MASK|DMAMUX_CHCFG_SOURCE(8); 
-     
-     // Enable request signal for channel 0 
-     DMA_ERQ = DMA_ERQ_ERQ0_MASK;
-     
-      // select round-robin arbitration priority
-     DMA_CR |= DMA_CR_ERCA_MASK;
-     
-     //enable error interrupt for DMA0 (commented out because we won't use interrupts for our implementation)
-     //DMA_EEI = DMA_EEI_EEI0_MASK;
-     
-     //Address for buffer
-     DMA_TCD0_SADDR = (uint32_t) &UART_D_REG(UART3_BASE_PTR);
-     DMA_TCD0_DADDR = (uint32_t) buffer;
-     // Set an offset for source and destination address
-     DMA_TCD0_SOFF = 0x00; 
-     DMA_TCD0_DOFF = 0x01; // Destination address offset of 1 byte per transaction
-     
-     // Set source and destination data transfer size
-     DMA_TCD0_ATTR = DMA_ATTR_SSIZE(0) | DMA_ATTR_DSIZE(0);
-     
-     // Number of bytes to be transfered in each service request of the channel
-     DMA_TCD0_NBYTES_MLNO = 0x01;
-     // Current major iteration count
-    //DMA_TCD0_CITER_ELINKNO = DMA_CITER_ELINKNO_CITER(BUFFER_LENGTH);
-    //DMA_TCD0_BITER_ELINKNO = DMA_BITER_ELINKNO_BITER(BUFFER_LENGTH);
-    // Adjustment value used to restore the source and destiny address to the initial value
-    // After reading 'len' number of times, the DMA goes back to the beginning by subtracting len*2 from the address (going back to the original address)
-    DMA_TCD0_SLAST = 0;   // Source address adjustment
-    //DMA_TCD0_DLASTSGA = -BUFFER_LENGTH;  // Destination address adjustment   
-    // Setup control and status register
-    DMA_TCD0_CSR = 0;
-       
-    // enable interrupt call at end of major loop
-    DMA_TCD0_CSR |= DMA_CSR_INTMAJOR_MASK;
-    
-    //Activate dma transfer rx interrupt
-    UART_C2_REG(UART3) |= UART_C2_RIE_MASK;
-    UART_C5_REG(UART3) |= UART_C5_RDMAS_MASK | UART_C5_ILDMAS_MASK | UART_C5_LBKDDMAS_MASK;
-    //activate p fifo register
-    UART_PFIFO_REG(UART3) |= UART_PFIFO_RXFE_MASK; //RXFE and buffer size of 1 word
-    //queueInit();
-    pc.printf("done...\n\r");
-}
  
 //For debugging: print registers related to DMA and UART setup
 void print_registers()