Project to use SF weather shield over cell link

Dependencies:   MPL3115A2_for_weather_shield htu21d_for_weather_shield mbed

Committer:
isaackod
Date:
Thu Oct 20 16:49:21 2016 +0000
Revision:
0:924cb994fc16
First commit. Cell not fully implemented yet

Who changed what in which revision?

UserRevisionLine numberNew contents of line
isaackod 0:924cb994fc16 1
isaackod 0:924cb994fc16 2 #include "cell_ctrl.h"
isaackod 0:924cb994fc16 3
isaackod 0:924cb994fc16 4 //These are functions to connect the modem to a port, and to reset the modem.
isaackod 0:924cb994fc16 5
isaackod 0:924cb994fc16 6 void cell_ctrl_init(Serial* io, Serial pc, char* buffer){
isaackod 0:924cb994fc16 7 // Enable echo
isaackod 0:924cb994fc16 8 io->printf("ATE1\r");
isaackod 0:924cb994fc16 9 collectResponseString(io, buffer, BUFFER_SIZE, TIMEOUT_MS, 0);
isaackod 0:924cb994fc16 10 pc.printf("%s", buffer);
isaackod 0:924cb994fc16 11
isaackod 0:924cb994fc16 12 // Disable the forwarding of +++ to the actual data connection
isaackod 0:924cb994fc16 13 io->printf("AT#SKIPESC=1\r");
isaackod 0:924cb994fc16 14 collectResponseString(io, buffer, BUFFER_SIZE, TIMEOUT_MS, 0);
isaackod 0:924cb994fc16 15 pc.printf("%s", buffer);
isaackod 0:924cb994fc16 16
isaackod 0:924cb994fc16 17 // Flow control (none)
isaackod 0:924cb994fc16 18 //io->printf("AT+IFC=2,2\r");
isaackod 0:924cb994fc16 19 io->printf("AT+IFC=0,0\r");
isaackod 0:924cb994fc16 20 collectResponseString(io, buffer, BUFFER_SIZE, TIMEOUT_MS, 0);
isaackod 0:924cb994fc16 21 pc.printf("%s", buffer);
isaackod 0:924cb994fc16 22
isaackod 0:924cb994fc16 23 io->printf("AT+CSQ\r");
isaackod 0:924cb994fc16 24 collectResponseString(io, buffer, BUFFER_SIZE, TIMEOUT_MS, 0);
isaackod 0:924cb994fc16 25 pc.printf("%s", buffer);
isaackod 0:924cb994fc16 26
isaackod 0:924cb994fc16 27 io->printf("AT+CDV*22899\r");
isaackod 0:924cb994fc16 28 collectResponseString(io, buffer, BUFFER_SIZE, TIMEOUT_MS, 0);
isaackod 0:924cb994fc16 29 pc.printf("%s", buffer);
isaackod 0:924cb994fc16 30
isaackod 0:924cb994fc16 31 // Config socket
isaackod 0:924cb994fc16 32 io->printf("AT#SCFG=1,1,%i,%i,%i,1\r",
isaackod 0:924cb994fc16 33 PACKET_SIZE,
isaackod 0:924cb994fc16 34 int(INACTIVITY_TIMEOUT),
isaackod 0:924cb994fc16 35 int(CONNECTION_TIMEOUT));
isaackod 0:924cb994fc16 36 collectResponseString(io, buffer, BUFFER_SIZE, TIMEOUT_MS, 0);
isaackod 0:924cb994fc16 37 pc.printf("%s", buffer);
isaackod 0:924cb994fc16 38
isaackod 0:924cb994fc16 39 // Set context (ppp?)
isaackod 0:924cb994fc16 40 io->printf("AT#SGACT=1,1\r");
isaackod 0:924cb994fc16 41 collectResponseString(io, buffer, BUFFER_SIZE, 30000, 0);
isaackod 0:924cb994fc16 42 pc.printf("%s", buffer);
isaackod 0:924cb994fc16 43
isaackod 0:924cb994fc16 44 // Connect to TCP server
isaackod 0:924cb994fc16 45 io->printf("AT#SD=1,0,%i,\"%s\",0,1,0\r", PORT, ADDRESS);
isaackod 0:924cb994fc16 46 collectResponseString(io, buffer, BUFFER_SIZE, 30000, '\n');
isaackod 0:924cb994fc16 47 pc.printf("%s", buffer);
isaackod 0:924cb994fc16 48
isaackod 0:924cb994fc16 49 pc.printf("Entering message loop. Now in data mode.\r\n");
isaackod 0:924cb994fc16 50
isaackod 0:924cb994fc16 51 }
isaackod 0:924cb994fc16 52
isaackod 0:924cb994fc16 53 void cell_ctrl_rst(Serial* io, Serial pc, char* buffer){
isaackod 0:924cb994fc16 54 // Send escape sequence
isaackod 0:924cb994fc16 55 wait(1.5);
isaackod 0:924cb994fc16 56 io->printf("+++");
isaackod 0:924cb994fc16 57 wait(1.5);
isaackod 0:924cb994fc16 58 collectResponseString(io, buffer, BUFFER_SIZE, 15000, 0);
isaackod 0:924cb994fc16 59 pc.printf("%s", buffer);
isaackod 0:924cb994fc16 60
isaackod 0:924cb994fc16 61 // Get socket status
isaackod 0:924cb994fc16 62 io->printf("AT#SS\r");
isaackod 0:924cb994fc16 63 collectResponseString(io, buffer, BUFFER_SIZE, 1000, 0);
isaackod 0:924cb994fc16 64 pc.printf("%s", buffer);
isaackod 0:924cb994fc16 65
isaackod 0:924cb994fc16 66 // Reboot the modem
isaackod 0:924cb994fc16 67 pc.printf("Performing hard reset of the modem and waiting 10 seconds. \r\n");
isaackod 0:924cb994fc16 68 io->printf("AT#REBOOT\r");
isaackod 0:924cb994fc16 69 collectResponseString(io, buffer, BUFFER_SIZE, 1000, 0);
isaackod 0:924cb994fc16 70 pc.printf("%s", buffer);
isaackod 0:924cb994fc16 71
isaackod 0:924cb994fc16 72 wait(10.0);
isaackod 0:924cb994fc16 73
isaackod 0:924cb994fc16 74 pc.printf("Restarting the program...\r\n");
isaackod 0:924cb994fc16 75
isaackod 0:924cb994fc16 76 }
isaackod 0:924cb994fc16 77
isaackod 0:924cb994fc16 78 bool collectResponseString(Serial* io, char* buffer, int size, int timeout_ms, char terminator) {
isaackod 0:924cb994fc16 79 mbed::Timer tmr;
isaackod 0:924cb994fc16 80 tmr.start();
isaackod 0:924cb994fc16 81 int i = 0;
isaackod 0:924cb994fc16 82 char byte;
isaackod 0:924cb994fc16 83 bool notimeout = true;
isaackod 0:924cb994fc16 84 while (i < size-1) {
isaackod 0:924cb994fc16 85 if (tmr.read_ms() > timeout_ms) {
isaackod 0:924cb994fc16 86 notimeout = false;
isaackod 0:924cb994fc16 87 break;
isaackod 0:924cb994fc16 88 }
isaackod 0:924cb994fc16 89 if (io->readable()) {
isaackod 0:924cb994fc16 90 byte = io->getc();
isaackod 0:924cb994fc16 91 buffer[i] = byte;
isaackod 0:924cb994fc16 92 i++;
isaackod 0:924cb994fc16 93 if (byte == terminator) {
isaackod 0:924cb994fc16 94 break;
isaackod 0:924cb994fc16 95 }
isaackod 0:924cb994fc16 96 }
isaackod 0:924cb994fc16 97 }
isaackod 0:924cb994fc16 98 buffer[i] = '\0';
isaackod 0:924cb994fc16 99 return notimeout;
isaackod 0:924cb994fc16 100 }