uses pushing box to publish to google spreadsheets with a state machine instead of a while loop
Fork of GSM_PUSHING_BOX_STATE_MACHINE by
Diff: GSMLibrary.cpp
- Revision:
- 34:5345174bfb30
- Parent:
- 33:2ae9a4eb6433
--- 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()