Project to use SF weather shield over cell link
Dependencies: MPL3115A2_for_weather_shield htu21d_for_weather_shield mbed
CELL_CTRL/cell_ctrl.cpp@0:924cb994fc16, 2016-10-20 (annotated)
- 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?
User | Revision | Line number | New 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 | } |