Hernán Maya
/
Tarea_GSM_GPS
Rastreador satelital por mensajes de texto SMS
main.cpp@0:e48cba9116f6, 2016-05-25 (annotated)
- Committer:
- satelite
- Date:
- Wed May 25 23:20:17 2016 +0000
- Revision:
- 0:e48cba9116f6
Rastreador satelital por mensajes de texto SMS
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
satelite | 0:e48cba9116f6 | 1 | /*Tarea_GSM_GPS |
satelite | 0:e48cba9116f6 | 2 | Sistema de ubicacion basado en un receptor GPS y un celular siemens a56 |
satelite | 0:e48cba9116f6 | 3 | como modem GSM. |
satelite | 0:e48cba9116f6 | 4 | El sistema recibe un mensaje de texto, lo procesa y si el mensaje recibido corresponde |
satelite | 0:e48cba9116f6 | 5 | con el codigo almacenado en el microcontrolador, este procede a enviar un mensaje de texto |
satelite | 0:e48cba9116f6 | 6 | con la ubicacion actual. |
satelite | 0:e48cba9116f6 | 7 | */ |
satelite | 0:e48cba9116f6 | 8 | |
satelite | 0:e48cba9116f6 | 9 | #include "mbed.h" |
satelite | 0:e48cba9116f6 | 10 | #include "iostream" |
satelite | 0:e48cba9116f6 | 11 | #include "GPS.h" |
satelite | 0:e48cba9116f6 | 12 | |
satelite | 0:e48cba9116f6 | 13 | // Configuracion de los puertos del microcontrolador |
satelite | 0:e48cba9116f6 | 14 | Serial gsm(PTE0, PTE1); // puerto serie para la comunicacíón GSM |
satelite | 0:e48cba9116f6 | 15 | Serial pc(USBTX, USBRX); // puerto serie para debug |
satelite | 0:e48cba9116f6 | 16 | GPS gps(PTD7, PTD6); // puerto para comunicacion GPS |
satelite | 0:e48cba9116f6 | 17 | |
satelite | 0:e48cba9116f6 | 18 | // Declaracion de variables globales |
satelite | 0:e48cba9116f6 | 19 | char buffer[200], pdu[] = "", vector1[] = "", vector2[] = "", dE[255], dS[255], dEs[255], dSs[255], Ctamanosms[1], Ctiposmsc[1], Csmscnumber[12], Cdeliver[1], Ctamanoaddress[1], Ctipoaddress[1], Cnumero[11], Cprotocolo[1], Cencoding[1], Ctime[14], Ctamano[1], Cdato[30], Xnumero[10]; // Variables para almacenar las cadenas de caracteres |
satelite | 0:e48cba9116f6 | 20 | int i, k, c, w, r, ta, tam, lenOUT, lenIN; // variables auxiliares |
satelite | 0:e48cba9116f6 | 21 | float lon, lat; // variables para almacenar coordenadas |
satelite | 0:e48cba9116f6 | 22 | char link[]= {"http://maps.google.com/?q="}; // inicio trama mensaje |
satelite | 0:e48cba9116f6 | 23 | |
satelite | 0:e48cba9116f6 | 24 | // Rutina principal |
satelite | 0:e48cba9116f6 | 25 | int main() |
satelite | 0:e48cba9116f6 | 26 | { |
satelite | 0:e48cba9116f6 | 27 | pc.printf("######################### INICIO DEL PROGRAMA #########################"); // mensaje de bienvenida debug |
satelite | 0:e48cba9116f6 | 28 | // Establecimiento de la comunicacion con el modem del telefono movil |
satelite | 0:e48cba9116f6 | 29 | pc.printf("\r\n>>>>>>>>>>>>>>>>>>>>>> Configurando SIEMENS A56i <<<<<<<<<<<<<<<<<<<<<<\r\n"); // mensaje debug |
satelite | 0:e48cba9116f6 | 30 | gsm.baud(9600); |
satelite | 0:e48cba9116f6 | 31 | gsm.format(8,Serial::None,1); |
satelite | 0:e48cba9116f6 | 32 | std::string strOK ("OK"); |
satelite | 0:e48cba9116f6 | 33 | pc.printf("\r\n Enviamos AT \r\n"); // prueba comunicacion con el movil |
satelite | 0:e48cba9116f6 | 34 | gsm.printf("AT\r\n"); |
satelite | 0:e48cba9116f6 | 35 | gsm.scanf("%s",buffer); |
satelite | 0:e48cba9116f6 | 36 | gsm.scanf("%s",buffer); |
satelite | 0:e48cba9116f6 | 37 | pc.printf("%s\n",buffer); |
satelite | 0:e48cba9116f6 | 38 | |
satelite | 0:e48cba9116f6 | 39 | if(strOK.compare(buffer) != 0) { |
satelite | 0:e48cba9116f6 | 40 | pc.printf("\r\nModem GSM no responde\r\n"); |
satelite | 0:e48cba9116f6 | 41 | } |
satelite | 0:e48cba9116f6 | 42 | |
satelite | 0:e48cba9116f6 | 43 | gsm.printf("\n AT+CNMI=1,1\r\n"); // Selecciona la memoria de la simcard |
satelite | 0:e48cba9116f6 | 44 | pc.printf("AT+CNMI=1,1\r\n"); |
satelite | 0:e48cba9116f6 | 45 | gsm.scanf("%s",buffer); |
satelite | 0:e48cba9116f6 | 46 | gsm.scanf("%s",buffer); |
satelite | 0:e48cba9116f6 | 47 | pc.printf(">%s\n",buffer); |
satelite | 0:e48cba9116f6 | 48 | if(strOK.compare(buffer) != 0) { |
satelite | 0:e48cba9116f6 | 49 | pc.printf("\r\nModem GSM no responde\r\n"); |
satelite | 0:e48cba9116f6 | 50 | } |
satelite | 0:e48cba9116f6 | 51 | |
satelite | 0:e48cba9116f6 | 52 | gsm.printf("\n AT+CPMS= \"SM\",\"SM\",\"SM\"\r\n"); // |
satelite | 0:e48cba9116f6 | 53 | pc.printf("AT+CPMS= \"SM\",\"SM\",\"SM\"\n"); |
satelite | 0:e48cba9116f6 | 54 | gsm.scanf("%s",buffer); |
satelite | 0:e48cba9116f6 | 55 | gsm.scanf("%s",buffer); |
satelite | 0:e48cba9116f6 | 56 | gsm.scanf("%s",buffer); |
satelite | 0:e48cba9116f6 | 57 | pc.printf(">%s\n",buffer); |
satelite | 0:e48cba9116f6 | 58 | wait(1); |
satelite | 0:e48cba9116f6 | 59 | |
satelite | 0:e48cba9116f6 | 60 | gsm.printf("\n AT+CMGF=0\r\n"); // Configura modo PDU |
satelite | 0:e48cba9116f6 | 61 | pc.printf("AT+CMGF=0\r\n"); |
satelite | 0:e48cba9116f6 | 62 | gsm.scanf("%s",buffer); |
satelite | 0:e48cba9116f6 | 63 | gsm.scanf("%s",buffer); |
satelite | 0:e48cba9116f6 | 64 | pc.printf(">%s\n",buffer); |
satelite | 0:e48cba9116f6 | 65 | |
satelite | 0:e48cba9116f6 | 66 | if(strOK.compare(buffer) != 0) { |
satelite | 0:e48cba9116f6 | 67 | pc.printf("\r\nModem GSM no responde\r\n"); |
satelite | 0:e48cba9116f6 | 68 | } |
satelite | 0:e48cba9116f6 | 69 | |
satelite | 0:e48cba9116f6 | 70 | pc.printf("\n CBST=0,0,1\r\n"); |
satelite | 0:e48cba9116f6 | 71 | gsm.printf("CBST=0,0,1\r\n"); // en espera de mensajes entrantes |
satelite | 0:e48cba9116f6 | 72 | |
satelite | 0:e48cba9116f6 | 73 | if(gps.sample()) { |
satelite | 0:e48cba9116f6 | 74 | pc.printf("Estamos en %f, %f\r\n", gps.latitude, gps.longitude+50); // muestro la ubicacion actual, para saber si el GPS esta recibiendo |
satelite | 0:e48cba9116f6 | 75 | } else { |
satelite | 0:e48cba9116f6 | 76 | pc.printf("no se donde!:(\r\n"); |
satelite | 0:e48cba9116f6 | 77 | } |
satelite | 0:e48cba9116f6 | 78 | |
satelite | 0:e48cba9116f6 | 79 | // Ciclo infinito |
satelite | 0:e48cba9116f6 | 80 | while(1) { |
satelite | 0:e48cba9116f6 | 81 | |
satelite | 0:e48cba9116f6 | 82 | pc.printf("\r\n>>>>>>>>>>>>>>>>>> Esperando nuevo mensaje de texto <<<<<<<<<<<<<<<<<<<\r\n"); |
satelite | 0:e48cba9116f6 | 83 | gsm.scanf("%s",buffer); |
satelite | 0:e48cba9116f6 | 84 | pc.printf("%s",buffer); |
satelite | 0:e48cba9116f6 | 85 | i = strlen(buffer); |
satelite | 0:e48cba9116f6 | 86 | |
satelite | 0:e48cba9116f6 | 87 | if(i>3) { // si reciba un mensaje |
satelite | 0:e48cba9116f6 | 88 | pc.printf("\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>> Nuevo mensaje <<<<<<<<<<<<<<<<<<<<<<<<<<<<\r\n"); |
satelite | 0:e48cba9116f6 | 89 | gsm.printf("AT+CMGR=1\r\n"); // lee menjsae en la primera posicion de memoria |
satelite | 0:e48cba9116f6 | 90 | gsm.scanf("%s",buffer); |
satelite | 0:e48cba9116f6 | 91 | gsm.scanf("%s",buffer); |
satelite | 0:e48cba9116f6 | 92 | gsm.scanf("%s",buffer); |
satelite | 0:e48cba9116f6 | 93 | gsm.scanf("%s",buffer); |
satelite | 0:e48cba9116f6 | 94 | pc.printf(">%s \r\n",buffer); // imprime la cadena PDU del mensaje |
satelite | 0:e48cba9116f6 | 95 | tam = strlen(buffer); // longitud del mensaje leido |
satelite | 0:e48cba9116f6 | 96 | pc.printf("\r\nLectura de la trama PDU: %d\r\n", tam); // separa la trama pdu para extraer informacion necesaria |
satelite | 0:e48cba9116f6 | 97 | Ctamanosms[0] = buffer[0]; // tamaño en septetos de toda la trama pdu |
satelite | 0:e48cba9116f6 | 98 | Ctamanosms[1] = buffer[1]; |
satelite | 0:e48cba9116f6 | 99 | pc.printf("\r\nLongitud del mensaje en septetos %c%c en septetos \n", Ctamanosms[0], Ctamanosms[1]); |
satelite | 0:e48cba9116f6 | 100 | Ctiposmsc[0] = buffer[2]; |
satelite | 0:e48cba9116f6 | 101 | Ctiposmsc[1] = buffer[3]; |
satelite | 0:e48cba9116f6 | 102 | pc.printf("\r\nTipo de direccion SMSC %c%c \r\n", Ctiposmsc[0], Ctiposmsc[1]); |
satelite | 0:e48cba9116f6 | 103 | Csmscnumber[0] = buffer[4]; |
satelite | 0:e48cba9116f6 | 104 | Csmscnumber[1] = buffer[5]; |
satelite | 0:e48cba9116f6 | 105 | Csmscnumber[2] = buffer[6]; |
satelite | 0:e48cba9116f6 | 106 | Csmscnumber[3] = buffer[7]; |
satelite | 0:e48cba9116f6 | 107 | Csmscnumber[4] = buffer[8]; |
satelite | 0:e48cba9116f6 | 108 | Csmscnumber[5] = buffer[9]; |
satelite | 0:e48cba9116f6 | 109 | Csmscnumber[6] = buffer[10]; |
satelite | 0:e48cba9116f6 | 110 | Csmscnumber[7] = buffer[11]; |
satelite | 0:e48cba9116f6 | 111 | Csmscnumber[8] = buffer[12]; |
satelite | 0:e48cba9116f6 | 112 | Csmscnumber[9] = buffer[13]; |
satelite | 0:e48cba9116f6 | 113 | Csmscnumber[10] = buffer[14]; |
satelite | 0:e48cba9116f6 | 114 | Csmscnumber[11] = buffer[15]; |
satelite | 0:e48cba9116f6 | 115 | pc.printf("\r\nNumero del SMSC %s \r\n", Csmscnumber); |
satelite | 0:e48cba9116f6 | 116 | Cdeliver[0] = buffer[16]; |
satelite | 0:e48cba9116f6 | 117 | Cdeliver[1] = buffer[17]; |
satelite | 0:e48cba9116f6 | 118 | Ctamanoaddress[0] = buffer[18]; |
satelite | 0:e48cba9116f6 | 119 | Ctamanoaddress[1] = buffer[19]; |
satelite | 0:e48cba9116f6 | 120 | Ctipoaddress[0] = buffer[20]; |
satelite | 0:e48cba9116f6 | 121 | Ctipoaddress[1] = buffer[21]; |
satelite | 0:e48cba9116f6 | 122 | Cnumero[0] = buffer[22]; // Numero del usuario |
satelite | 0:e48cba9116f6 | 123 | Cnumero[1] = buffer[23]; |
satelite | 0:e48cba9116f6 | 124 | Cnumero[2] = buffer[24]; |
satelite | 0:e48cba9116f6 | 125 | Cnumero[3] = buffer[25]; |
satelite | 0:e48cba9116f6 | 126 | Cnumero[4] = buffer[26]; |
satelite | 0:e48cba9116f6 | 127 | Cnumero[5] = buffer[27]; |
satelite | 0:e48cba9116f6 | 128 | Cnumero[6] = buffer[28]; |
satelite | 0:e48cba9116f6 | 129 | Cnumero[7] = buffer[29]; |
satelite | 0:e48cba9116f6 | 130 | Cnumero[8] = buffer[30]; |
satelite | 0:e48cba9116f6 | 131 | Cnumero[9] = buffer[31]; |
satelite | 0:e48cba9116f6 | 132 | Cnumero[10] = buffer[32]; |
satelite | 0:e48cba9116f6 | 133 | Cnumero[11] = buffer[33]; |
satelite | 0:e48cba9116f6 | 134 | Xnumero[0] = buffer[23]; |
satelite | 0:e48cba9116f6 | 135 | Xnumero[1] = buffer[22]; |
satelite | 0:e48cba9116f6 | 136 | Xnumero[2] = buffer[25]; |
satelite | 0:e48cba9116f6 | 137 | Xnumero[3] = buffer[24]; |
satelite | 0:e48cba9116f6 | 138 | Xnumero[4] = buffer[27]; |
satelite | 0:e48cba9116f6 | 139 | Xnumero[5] = buffer[26]; |
satelite | 0:e48cba9116f6 | 140 | Xnumero[6] = buffer[29]; |
satelite | 0:e48cba9116f6 | 141 | Xnumero[7] = buffer[28]; |
satelite | 0:e48cba9116f6 | 142 | Xnumero[8] = buffer[31]; |
satelite | 0:e48cba9116f6 | 143 | Xnumero[9] = buffer[30]; |
satelite | 0:e48cba9116f6 | 144 | pc.printf("\r\nNumero del usuario %s \r\n", Xnumero); |
satelite | 0:e48cba9116f6 | 145 | Cprotocolo[0] = buffer[34]; // protocolo |
satelite | 0:e48cba9116f6 | 146 | Cprotocolo[1] = buffer[35]; |
satelite | 0:e48cba9116f6 | 147 | Cencoding[0] = buffer[36]; // cifrado |
satelite | 0:e48cba9116f6 | 148 | Cencoding[1] = buffer[37]; |
satelite | 0:e48cba9116f6 | 149 | Ctime[0] = buffer[38]; // Tiempo envio mensaje |
satelite | 0:e48cba9116f6 | 150 | Ctime[1] = buffer[39]; |
satelite | 0:e48cba9116f6 | 151 | Ctime[2] = buffer[40]; |
satelite | 0:e48cba9116f6 | 152 | Ctime[3] = buffer[41]; |
satelite | 0:e48cba9116f6 | 153 | Ctime[4] = buffer[42]; |
satelite | 0:e48cba9116f6 | 154 | Ctime[5] = buffer[43]; |
satelite | 0:e48cba9116f6 | 155 | Ctime[6] = buffer[44]; |
satelite | 0:e48cba9116f6 | 156 | Ctime[7] = buffer[45]; |
satelite | 0:e48cba9116f6 | 157 | Ctime[8] = buffer[46]; |
satelite | 0:e48cba9116f6 | 158 | Ctime[9] = buffer[47]; |
satelite | 0:e48cba9116f6 | 159 | Ctime[10] = buffer[48]; |
satelite | 0:e48cba9116f6 | 160 | Ctime[11] = buffer[49]; |
satelite | 0:e48cba9116f6 | 161 | Ctime[12] = buffer[50]; |
satelite | 0:e48cba9116f6 | 162 | Ctime[13] = buffer[51]; |
satelite | 0:e48cba9116f6 | 163 | Ctamano[0]= buffer[50]; // longitud de la parte legible |
satelite | 0:e48cba9116f6 | 164 | Ctamano[1]= buffer[51]; |
satelite | 0:e48cba9116f6 | 165 | ta = (Ctamano[0]-48)*16+(Ctamano[1]-48); |
satelite | 0:e48cba9116f6 | 166 | pc.printf("\r\nNumero de caracteres del mensaje entrante %d \r\n", ta); |
satelite | 0:e48cba9116f6 | 167 | pc.printf("\r\nPosicion de los datos en el mensaje PDU %d \r\n", tam-2*ta); // posicion de los datos en la trama pdu |
satelite | 0:e48cba9116f6 | 168 | for(i = 0; i < 2*ta; i++) { //Toma de los datos o mensaje |
satelite | 0:e48cba9116f6 | 169 | Cdato[i] = buffer[52+i]; |
satelite | 0:e48cba9116f6 | 170 | } |
satelite | 0:e48cba9116f6 | 171 | // Inicia la convercion de PDU a Texto |
satelite | 0:e48cba9116f6 | 172 | pc.printf("\r\n>>>>>>>>>>>>>>>>>>>>> Convirtiendo de PDU a texto <<<<<<<<<<<<<<<<<<<<<\r\n"); |
satelite | 0:e48cba9116f6 | 173 | lenIN = strlen(Cdato)/2; |
satelite | 0:e48cba9116f6 | 174 | w = 0; |
satelite | 0:e48cba9116f6 | 175 | pc.printf("\r\nTamano de los datos %d \r\n", strlen(Cdato)); |
satelite | 0:e48cba9116f6 | 176 | for(i = 0; i <= strlen(Cdato); i++) { |
satelite | 0:e48cba9116f6 | 177 | if(i%2==0) { |
satelite | 0:e48cba9116f6 | 178 | if(Cdato[i]>47 & Cdato[i]<58) { // primero se asigna el valor numerico de cada caracter en caso de ser 0-9 se le resta 48 en caso de ser letra se le resta 55 |
satelite | 0:e48cba9116f6 | 179 | Cdato[i] = Cdato[i]-48; |
satelite | 0:e48cba9116f6 | 180 | } |
satelite | 0:e48cba9116f6 | 181 | |
satelite | 0:e48cba9116f6 | 182 | if(Cdato[i]>65 & Cdato[i]<71) { |
satelite | 0:e48cba9116f6 | 183 | Cdato[i] = Cdato[i]-55; |
satelite | 0:e48cba9116f6 | 184 | |
satelite | 0:e48cba9116f6 | 185 | } |
satelite | 0:e48cba9116f6 | 186 | |
satelite | 0:e48cba9116f6 | 187 | } else { |
satelite | 0:e48cba9116f6 | 188 | if(Cdato[i]>47 & Cdato[i]<58) { |
satelite | 0:e48cba9116f6 | 189 | Cdato[i] = Cdato[i]-48; |
satelite | 0:e48cba9116f6 | 190 | } |
satelite | 0:e48cba9116f6 | 191 | |
satelite | 0:e48cba9116f6 | 192 | if(Cdato[i]>65 & Cdato[i]<71) { |
satelite | 0:e48cba9116f6 | 193 | Cdato[i] = Cdato[i]-55; |
satelite | 0:e48cba9116f6 | 194 | |
satelite | 0:e48cba9116f6 | 195 | } |
satelite | 0:e48cba9116f6 | 196 | |
satelite | 0:e48cba9116f6 | 197 | dE[w] = Cdato[i-1]*16+Cdato[i]; |
satelite | 0:e48cba9116f6 | 198 | pc.printf("\r\nDatos en hexagesimal DE[%d] %2X \r\n", w, dE[w]); // Se guarda la dupla en el vector dE |
satelite | 0:e48cba9116f6 | 199 | w++; |
satelite | 0:e48cba9116f6 | 200 | } |
satelite | 0:e48cba9116f6 | 201 | } |
satelite | 0:e48cba9116f6 | 202 | lenOUT = lenIN*8/7; |
satelite | 0:e48cba9116f6 | 203 | k = 7; |
satelite | 0:e48cba9116f6 | 204 | c = 0; |
satelite | 0:e48cba9116f6 | 205 | dS[0] = dE[0] & 0x7F; |
satelite | 0:e48cba9116f6 | 206 | pc.printf("%2X,%d,%d\r\n",dS[0],i,k); |
satelite | 0:e48cba9116f6 | 207 | for (i = 1; i < lenOUT; i++) { // inicia el algoritmo |
satelite | 0:e48cba9116f6 | 208 | dS[i] = (dE[i-1-c]>>k | dE[i-c]<<(8-k))& 0x7F; |
satelite | 0:e48cba9116f6 | 209 | pc.printf("%2X,%d,%d\r\n",dS[i],i,k); |
satelite | 0:e48cba9116f6 | 210 | if (k==0) { |
satelite | 0:e48cba9116f6 | 211 | k = 8; |
satelite | 0:e48cba9116f6 | 212 | c++; |
satelite | 0:e48cba9116f6 | 213 | } |
satelite | 0:e48cba9116f6 | 214 | k--; |
satelite | 0:e48cba9116f6 | 215 | } |
satelite | 0:e48cba9116f6 | 216 | pc.printf("\r\nMensaje entrante: "); |
satelite | 0:e48cba9116f6 | 217 | for (i = 0; i < lenOUT; i++) { |
satelite | 0:e48cba9116f6 | 218 | pc.printf("%c",dS[i]); |
satelite | 0:e48cba9116f6 | 219 | } |
satelite | 0:e48cba9116f6 | 220 | pc.printf("\r\n>>>>>>>>>>> Termina convercion de los datos de PDU a texto <<<<<<<<<<<<\r\n"); |
satelite | 0:e48cba9116f6 | 221 | } |
satelite | 0:e48cba9116f6 | 222 | |
satelite | 0:e48cba9116f6 | 223 | std::string strC ("Coordenada"); // cadenas para comparar el mensaje recibido |
satelite | 0:e48cba9116f6 | 224 | |
satelite | 0:e48cba9116f6 | 225 | if(strC.compare(dS) == 0) { // En caso de que se pidan las coordenadas |
satelite | 0:e48cba9116f6 | 226 | pc.printf("\r\n>>>>>>>>>>>>>>>>>>>>>>>> Recibido: Coordenada <<<<<<<<<<<<<<<<<<<<<<<<<\n"); |
satelite | 0:e48cba9116f6 | 227 | pc.printf("\r\nEsperando GPS \r\n"); |
satelite | 0:e48cba9116f6 | 228 | |
satelite | 0:e48cba9116f6 | 229 | while(1) { |
satelite | 0:e48cba9116f6 | 230 | i = 0; |
satelite | 0:e48cba9116f6 | 231 | if(gps.sample() && i == 0) { |
satelite | 0:e48cba9116f6 | 232 | pc.printf("\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Leyendo GPS <<<<<<<<<<<<<<<<<<<<<<<<<<<<<\r\n"); |
satelite | 0:e48cba9116f6 | 233 | //Toma de datos del gps y concatenacion para armar los datos. |
satelite | 0:e48cba9116f6 | 234 | lon = gps.longitude+50; |
satelite | 0:e48cba9116f6 | 235 | lat = gps.latitude; |
satelite | 0:e48cba9116f6 | 236 | sprintf(vector1, "%f", lat); |
satelite | 0:e48cba9116f6 | 237 | strcat(link,vector1); |
satelite | 0:e48cba9116f6 | 238 | strcat(link,","); |
satelite | 0:e48cba9116f6 | 239 | sprintf(vector2, "%f", lon); |
satelite | 0:e48cba9116f6 | 240 | strcat(link,vector2); |
satelite | 0:e48cba9116f6 | 241 | strcat(dEs,link); |
satelite | 0:e48cba9116f6 | 242 | pc.printf("%s\n",link); |
satelite | 0:e48cba9116f6 | 243 | // Conversion de los datos "link" a formato PDU |
satelite | 0:e48cba9116f6 | 244 | lenIN = strlen(dEs); |
satelite | 0:e48cba9116f6 | 245 | k = 0; |
satelite | 0:e48cba9116f6 | 246 | c = 0; |
satelite | 0:e48cba9116f6 | 247 | for (i = 0; i < lenIN; i++) { |
satelite | 0:e48cba9116f6 | 248 | dSs[i] = dEs[i+c]>>k | dEs[i+c+1]<<(7-k); |
satelite | 0:e48cba9116f6 | 249 | if (dSs[i]==0x00) { |
satelite | 0:e48cba9116f6 | 250 | lenOUT = i; |
satelite | 0:e48cba9116f6 | 251 | goto salir; |
satelite | 0:e48cba9116f6 | 252 | } |
satelite | 0:e48cba9116f6 | 253 | k++; |
satelite | 0:e48cba9116f6 | 254 | if (k==7) { |
satelite | 0:e48cba9116f6 | 255 | k = 0; |
satelite | 0:e48cba9116f6 | 256 | c++; |
satelite | 0:e48cba9116f6 | 257 | } |
satelite | 0:e48cba9116f6 | 258 | } |
satelite | 0:e48cba9116f6 | 259 | |
satelite | 0:e48cba9116f6 | 260 | salir: |
satelite | 0:e48cba9116f6 | 261 | pc.printf("DEs\n"); |
satelite | 0:e48cba9116f6 | 262 | for (i = 0; i < lenIN; i++) { |
satelite | 0:e48cba9116f6 | 263 | pc.printf("%X",dEs[i]); |
satelite | 0:e48cba9116f6 | 264 | } |
satelite | 0:e48cba9116f6 | 265 | pc.printf("\n DSs \n"); |
satelite | 0:e48cba9116f6 | 266 | for (i = 0; i<lenOUT; i++) { |
satelite | 0:e48cba9116f6 | 267 | pc.printf("%02X",dSs[i]&0x000000FF); |
satelite | 0:e48cba9116f6 | 268 | } |
satelite | 0:e48cba9116f6 | 269 | |
satelite | 0:e48cba9116f6 | 270 | pc.printf("\n lenOUT:%d,lenIN:%d\r\n",lenOUT,strlen(dEs)); |
satelite | 0:e48cba9116f6 | 271 | pc.printf("\r\n>>>>>>>>>>>>>>>>> Comienza el envio del mensaje SMS <<<<<<<<<<<<<<<<<<\r\n"); |
satelite | 0:e48cba9116f6 | 272 | |
satelite | 0:e48cba9116f6 | 273 | if(lenOUT%2==0) { |
satelite | 0:e48cba9116f6 | 274 | w = 27; |
satelite | 0:e48cba9116f6 | 275 | } else { |
satelite | 0:e48cba9116f6 | 276 | w = 26; |
satelite | 0:e48cba9116f6 | 277 | } |
satelite | 0:e48cba9116f6 | 278 | gsm.printf("AT+CMGS=%d\r\n", ((2*lenOUT)+w)/2); // Inicia envio del mensaje |
satelite | 0:e48cba9116f6 | 279 | pc.printf("\n AT+CMGS=%d\r\n", ((2*lenOUT)+w)/2); |
satelite | 0:e48cba9116f6 | 280 | wait(0.5); |
satelite | 0:e48cba9116f6 | 281 | |
satelite | 0:e48cba9116f6 | 282 | gsm.printf("0011000A91"); // relleno inicial |
satelite | 0:e48cba9116f6 | 283 | pc.printf("0011000A91"); |
satelite | 0:e48cba9116f6 | 284 | |
satelite | 0:e48cba9116f6 | 285 | |
satelite | 0:e48cba9116f6 | 286 | for(i = 0; i < 11; i++) { // numero de destino |
satelite | 0:e48cba9116f6 | 287 | gsm.printf("%c", Cnumero[i]); |
satelite | 0:e48cba9116f6 | 288 | pc.printf("%c", Cnumero[i]); |
satelite | 0:e48cba9116f6 | 289 | |
satelite | 0:e48cba9116f6 | 290 | } |
satelite | 0:e48cba9116f6 | 291 | |
satelite | 0:e48cba9116f6 | 292 | gsm.printf("000AA"); // segundo relleno |
satelite | 0:e48cba9116f6 | 293 | pc.printf("000AA"); |
satelite | 0:e48cba9116f6 | 294 | |
satelite | 0:e48cba9116f6 | 295 | gsm.printf("%2X",lenIN); // longitud de los datos |
satelite | 0:e48cba9116f6 | 296 | pc.printf("%2X",lenIN); |
satelite | 0:e48cba9116f6 | 297 | |
satelite | 0:e48cba9116f6 | 298 | |
satelite | 0:e48cba9116f6 | 299 | for (i = 0; i < lenOUT; i++) { |
satelite | 0:e48cba9116f6 | 300 | gsm.printf("%02X",dSs[i]&0x000000FF); |
satelite | 0:e48cba9116f6 | 301 | pc.printf("%02X",dSs[i]&0x000000FF); |
satelite | 0:e48cba9116f6 | 302 | wait(0.1); |
satelite | 0:e48cba9116f6 | 303 | } |
satelite | 0:e48cba9116f6 | 304 | gsm.putc((char)0x1A); |
satelite | 0:e48cba9116f6 | 305 | gsm.scanf("%s",buffer); // lectura respuesta del modem |
satelite | 0:e48cba9116f6 | 306 | gsm.scanf("%s",buffer); |
satelite | 0:e48cba9116f6 | 307 | pc.printf("\r\nRespuesta movil: %s \r\n",buffer); |
satelite | 0:e48cba9116f6 | 308 | i = 1; |
satelite | 0:e48cba9116f6 | 309 | gsm.printf("AT+CMGD=1\r\n"); |
satelite | 0:e48cba9116f6 | 310 | |
satelite | 0:e48cba9116f6 | 311 | for(i = 26; i <= strlen(link); i++) { |
satelite | 0:e48cba9116f6 | 312 | link[i] = NULL; |
satelite | 0:e48cba9116f6 | 313 | |
satelite | 0:e48cba9116f6 | 314 | } |
satelite | 0:e48cba9116f6 | 315 | |
satelite | 0:e48cba9116f6 | 316 | for(i = 0; i <= 255; i++) { |
satelite | 0:e48cba9116f6 | 317 | dSs[i] = NULL; |
satelite | 0:e48cba9116f6 | 318 | dEs[i] = NULL; |
satelite | 0:e48cba9116f6 | 319 | } |
satelite | 0:e48cba9116f6 | 320 | |
satelite | 0:e48cba9116f6 | 321 | pc.printf("\r\n Se sale de while para la lectura de gps \r\n "); |
satelite | 0:e48cba9116f6 | 322 | gsm.scanf("%s",buffer); |
satelite | 0:e48cba9116f6 | 323 | pc.printf(">%s",buffer); |
satelite | 0:e48cba9116f6 | 324 | goto xt; |
satelite | 0:e48cba9116f6 | 325 | } |
satelite | 0:e48cba9116f6 | 326 | } |
satelite | 0:e48cba9116f6 | 327 | } |
satelite | 0:e48cba9116f6 | 328 | |
satelite | 0:e48cba9116f6 | 329 | if(strC.compare(dS) != 0) { |
satelite | 0:e48cba9116f6 | 330 | pc.printf("\r\nMensaje no valido\r\n"); |
satelite | 0:e48cba9116f6 | 331 | gsm.printf("AT+CMGD=1\r\n"); // Borrar el mensaje |
satelite | 0:e48cba9116f6 | 332 | gsm.scanf("%s",buffer); |
satelite | 0:e48cba9116f6 | 333 | pc.printf("\n%s\n",buffer); |
satelite | 0:e48cba9116f6 | 334 | } |
satelite | 0:e48cba9116f6 | 335 | |
satelite | 0:e48cba9116f6 | 336 | xt: |
satelite | 0:e48cba9116f6 | 337 | gsm.scanf("%s",buffer); |
satelite | 0:e48cba9116f6 | 338 | pc.printf("%s",buffer); |
satelite | 0:e48cba9116f6 | 339 | } |
satelite | 0:e48cba9116f6 | 340 | } |