code

Dependencies:   MPU6050_SIM5320_TEST SDFileSystem WakeUp

Fork of Nucleo_L476RG_SDCard_WorkingSample by M J.

Committer:
suads
Date:
Wed Sep 13 16:07:18 2017 +0000
Revision:
2:f745f2656606
Parent:
1:d5774258d18b
first commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
suads 1:d5774258d18b 1 #include "SIM5320.h"
suads 1:d5774258d18b 2 #include <string>
suads 1:d5774258d18b 3
suads 1:d5774258d18b 4 SIM5320::SIM5320() : SIM5320Serial(PA_9, PA_10), debugSerial(USBTX, USBRX)
suads 1:d5774258d18b 5 {
suads 1:d5774258d18b 6 SIM5320Serial.baud(115200);
suads 1:d5774258d18b 7 debugSerial.baud(115200);
suads 1:d5774258d18b 8 SIM5320Serial.attach(callback(this,&SIM5320::rxInterrupt),Serial::RxIrq);
suads 1:d5774258d18b 9 flushBuffer();
suads 1:d5774258d18b 10 rx_in=0;
suads 1:d5774258d18b 11 }
suads 1:d5774258d18b 12
suads 1:d5774258d18b 13 SIM5320::SIM5320(PinName tx, PinName rx, bool debug) : SIM5320Serial(tx, rx), debugSerial(USBTX, USBRX)
suads 1:d5774258d18b 14 {
suads 1:d5774258d18b 15 SIM5320Serial.baud(115200);
suads 1:d5774258d18b 16 debugSerial.baud(115200);
suads 1:d5774258d18b 17 SIM5320Serial.attach(callback(this,&SIM5320::rxInterrupt),Serial::RxIrq);
suads 1:d5774258d18b 18 flushBuffer();
suads 1:d5774258d18b 19 rx_in=0;
suads 1:d5774258d18b 20 }
suads 1:d5774258d18b 21
suads 1:d5774258d18b 22 string SIM5320::sendCommand(const char *command, uint8_t timeout)
suads 1:d5774258d18b 23 {
suads 1:d5774258d18b 24 //printDebug(command);
suads 1:d5774258d18b 25 SIM5320Serial.printf("%s\r\n", command);
suads 1:d5774258d18b 26 wait(timeout);
suads 1:d5774258d18b 27 string ret = readBuffer();
suads 1:d5774258d18b 28 const char* debugResponse = rx_buffer;
suads 1:d5774258d18b 29 printDebug(debugResponse);
suads 1:d5774258d18b 30 flushBuffer();
suads 1:d5774258d18b 31 return ret;
suads 1:d5774258d18b 32
suads 1:d5774258d18b 33
suads 1:d5774258d18b 34 }
suads 1:d5774258d18b 35
suads 1:d5774258d18b 36 uint8_t SIM5320::sendCommandAndCheck(const char *command, const char *response, uint8_t timeout)
suads 1:d5774258d18b 37 {
suads 1:d5774258d18b 38 string answer = sendCommand(command, timeout);
suads 1:d5774258d18b 39
suads 1:d5774258d18b 40 string resp(response);
suads 1:d5774258d18b 41 if (answer.find(resp) != string::npos) {
suads 1:d5774258d18b 42 return 1;
suads 1:d5774258d18b 43 }
suads 1:d5774258d18b 44 return 0;
suads 1:d5774258d18b 45 }
suads 1:d5774258d18b 46 void SIM5320::printDebug(const char *line)
suads 1:d5774258d18b 47 {
suads 1:d5774258d18b 48 debugSerial.printf("%s\n",line);
suads 1:d5774258d18b 49 }
suads 1:d5774258d18b 50 bool SIM5320::connect(const char *apn, const char *userName, const char *passPhrase)
suads 1:d5774258d18b 51 {
suads 1:d5774258d18b 52 sendCommand("AT",2);
suads 1:d5774258d18b 53 sendCommand("AT+CSQ",2);
suads 1:d5774258d18b 54 sendCommand("AT+CREG?",2);
suads 1:d5774258d18b 55 sendCommand("AT+CPSI?",2);
suads 1:d5774258d18b 56 sendCommand("AT+CGREG?",2);
suads 1:d5774258d18b 57 sendCommand(concatChars("AT+CGSOCKCONT=1,\"IP\",\"",apn,"\""),3);
suads 1:d5774258d18b 58 sendCommand("AT+CSOCKSETPN=1",2);
suads 1:d5774258d18b 59 sendCommand("AT+CIPMODE=0",2);
suads 1:d5774258d18b 60 sendCommand("AT+NETOPEN",10);
suads 1:d5774258d18b 61 return sendCommandAndCheck("AT+IPADDR","IPADDR",3);
suads 1:d5774258d18b 62 }
suads 1:d5774258d18b 63 bool SIM5320::disconnect()
suads 1:d5774258d18b 64 {
suads 1:d5774258d18b 65 sendCommand("AT+NETCLOSE",2);
suads 1:d5774258d18b 66 return sendCommandAndCheck("AT+IPADDR","IP ERROR",2);
suads 1:d5774258d18b 67 }
suads 1:d5774258d18b 68 bool SIM5320::enableGPS(bool isEnabled)
suads 1:d5774258d18b 69 {
suads 1:d5774258d18b 70 char x='0';
suads 1:d5774258d18b 71 if(isEnabled) {
suads 1:d5774258d18b 72 x='1';
suads 1:d5774258d18b 73 } else {
suads 1:d5774258d18b 74 x='0';
suads 1:d5774258d18b 75 }
suads 1:d5774258d18b 76 return sendCommandAndCheck("AT+CGPS=1","OK",3);
suads 1:d5774258d18b 77 }
suads 1:d5774258d18b 78 void SIM5320::rxInterrupt()
suads 1:d5774258d18b 79 {
suads 1:d5774258d18b 80 while(SIM5320Serial.readable()) {
suads 1:d5774258d18b 81 char c = SIM5320Serial.getc();
suads 1:d5774258d18b 82 rx_buffer[rx_in] = c;
suads 1:d5774258d18b 83 rx_in++;
suads 1:d5774258d18b 84 if(rx_in==BUFFER_SIZE)
suads 1:d5774258d18b 85 rx_in=0;
suads 1:d5774258d18b 86 }
suads 1:d5774258d18b 87 return;
suads 1:d5774258d18b 88 }
suads 1:d5774258d18b 89
suads 1:d5774258d18b 90 string SIM5320::readBuffer()
suads 1:d5774258d18b 91 {
suads 1:d5774258d18b 92
suads 1:d5774258d18b 93 return string(rx_buffer);
suads 1:d5774258d18b 94 }
suads 1:d5774258d18b 95
suads 1:d5774258d18b 96 void SIM5320::flushBuffer()
suads 1:d5774258d18b 97 {
suads 1:d5774258d18b 98 for(int i=0; i<BUFFER_SIZE; i++)
suads 1:d5774258d18b 99 rx_buffer[i]=0;
suads 1:d5774258d18b 100 rx_in=0;
suads 1:d5774258d18b 101 }
suads 1:d5774258d18b 102
suads 1:d5774258d18b 103 char* SIM5320::concatChars(const char* in1, const char* in2, const char* in3)
suads 1:d5774258d18b 104 {
suads 1:d5774258d18b 105 char* out1 = (char *) malloc(1+strlen(in1)+strlen(in2));
suads 1:d5774258d18b 106 char* out2 = (char *) malloc(1+strlen(out1)+strlen(in3));
suads 1:d5774258d18b 107 strcpy(out1, in1);
suads 1:d5774258d18b 108 strcat(out1, in2);
suads 1:d5774258d18b 109
suads 1:d5774258d18b 110 strcpy(out2, out1);
suads 1:d5774258d18b 111 strcat(out2, in3);
suads 1:d5774258d18b 112
suads 1:d5774258d18b 113 return out2;
suads 1:d5774258d18b 114
suads 2:f745f2656606 115 }