_Slave_Prototipo

Dependencies:   mbed Queue-slave

Committer:
pabloandres2906
Date:
Thu Nov 28 16:11:20 2019 +0000
Revision:
1:525f26ef832b
Parent:
0:c025e4fdbffb
.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
williequesada 0:c025e4fdbffb 1 #include "mbed.h"
williequesada 0:c025e4fdbffb 2 #include "Queue.h"
williequesada 0:c025e4fdbffb 3
williequesada 0:c025e4fdbffb 4 #define COMMAND_ON 0X70
williequesada 0:c025e4fdbffb 5 #define COMMAND_INIT 0X71
williequesada 0:c025e4fdbffb 6 #define COMMAND_GPRS 0X72
williequesada 0:c025e4fdbffb 7 #define COMMAND_DATA 0X73
williequesada 0:c025e4fdbffb 8 #define COMMAND_POST 0X74
williequesada 0:c025e4fdbffb 9 #define COMMAND_ANSWER 0X75
williequesada 0:c025e4fdbffb 10 #define COMMAND_SIGNAL 0X76
williequesada 0:c025e4fdbffb 11 #define COMMAND_CONNECT 0X77
williequesada 0:c025e4fdbffb 12 #define COMMAND_OFF 0X78
williequesada 0:c025e4fdbffb 13 #define HOSTING_STEP1 0x79
williequesada 0:c025e4fdbffb 14 #define HOSTING_STEP2 0x7A
williequesada 0:c025e4fdbffb 15 #define HOSTING_STEP3 0x7B
williequesada 0:c025e4fdbffb 16 #define HOSTING_STEP4 0x7C
williequesada 0:c025e4fdbffb 17 #define HOSTING_STEP5 0x7D
williequesada 0:c025e4fdbffb 18 #define HOSTING_STEP6 0x7E
williequesada 0:c025e4fdbffb 19 #define HOSTING_STEP7 0x7F
williequesada 0:c025e4fdbffb 20 #define HOSTING_STEP8 0x80
williequesada 0:c025e4fdbffb 21 #define HOSTING_STEP9 0x81
williequesada 0:c025e4fdbffb 22 #define HOSTING_STEP10 0x82
williequesada 0:c025e4fdbffb 23 #define HOSTING_STEP11 0x83
williequesada 0:c025e4fdbffb 24 #define HOSTING_OFF 0x84
williequesada 0:c025e4fdbffb 25 #define NEXT_STEP 0x85
williequesada 0:c025e4fdbffb 26 #define NEXT_SLEEP 0x86
williequesada 0:c025e4fdbffb 27 #define NO_DATA 0x87
williequesada 0:c025e4fdbffb 28 #define COMMAND_END 0X88
williequesada 0:c025e4fdbffb 29
williequesada 0:c025e4fdbffb 30 RawSerial Computer(SERIAL_TX, SERIAL_RX,9600); // tx, rx
williequesada 0:c025e4fdbffb 31 RawSerial Master(PC_1, PC_0,9600);
williequesada 0:c025e4fdbffb 32 RawSerial Gsm(PA_0,PA_1,19200);
williequesada 0:c025e4fdbffb 33
williequesada 0:c025e4fdbffb 34 DigitalOut EnableSIM900(PB_0);
williequesada 0:c025e4fdbffb 35 DigitalOut ResetSIM900(PA_10);
williequesada 0:c025e4fdbffb 36 DigitalOut Led(LED2);
williequesada 0:c025e4fdbffb 37 DigitalIn Button(USER_BUTTON);
williequesada 0:c025e4fdbffb 38
williequesada 0:c025e4fdbffb 39 Timer BaseClock;
williequesada 0:c025e4fdbffb 40 QUEUE MasterCommand;
williequesada 0:c025e4fdbffb 41
williequesada 0:c025e4fdbffb 42 char Command;
williequesada 0:c025e4fdbffb 43 int Sim900_Counter=0;
williequesada 0:c025e4fdbffb 44 char Sim900_Buffer[1000];
williequesada 0:c025e4fdbffb 45 unsigned long Inicio, Fin, Transcurrido;
williequesada 0:c025e4fdbffb 46 char HostingData[]="{\"municipio\":\"San Jose\",\"id\":\"1068\",\"alerts\":\"AAAAAA\"}\r\n";//"municipio":"San Jose","id":1068, "alerts":"AAAAAA"}
williequesada 0:c025e4fdbffb 47 char HostingAnswer[]="OK+000+00:00";
williequesada 0:c025e4fdbffb 48 char Encrypt[174];
williequesada 0:c025e4fdbffb 49
williequesada 0:c025e4fdbffb 50 void Interrupt_Sim900()
williequesada 0:c025e4fdbffb 51 {
williequesada 0:c025e4fdbffb 52 if(Gsm.readable()) {
williequesada 0:c025e4fdbffb 53 Sim900_Buffer[Sim900_Counter]=Gsm.getc();
williequesada 0:c025e4fdbffb 54 Sim900_Counter++;
williequesada 0:c025e4fdbffb 55 }
williequesada 0:c025e4fdbffb 56 }
williequesada 0:c025e4fdbffb 57
williequesada 0:c025e4fdbffb 58 void Interrupt_Master()
williequesada 0:c025e4fdbffb 59 {
williequesada 0:c025e4fdbffb 60 if(Master.readable()) {
williequesada 0:c025e4fdbffb 61 MasterCommand.Put(Master.getc());
williequesada 0:c025e4fdbffb 62 }
williequesada 0:c025e4fdbffb 63 }
williequesada 0:c025e4fdbffb 64
williequesada 0:c025e4fdbffb 65 void PrintSerialRepeat(char Command[],char Answer[],uint32_t Espera,uint32_t Delay)//
williequesada 0:c025e4fdbffb 66 {
williequesada 0:c025e4fdbffb 67 if(Gsm.writeable()) {
williequesada 0:c025e4fdbffb 68 Gsm.printf("%s",Command);
williequesada 0:c025e4fdbffb 69 }
williequesada 0:c025e4fdbffb 70 Sim900_Counter=0;
williequesada 0:c025e4fdbffb 71 bool TimeOut=0;
williequesada 0:c025e4fdbffb 72 bool RightAnswer1=0;
williequesada 0:c025e4fdbffb 73 bool RightAnswer2=0;
williequesada 0:c025e4fdbffb 74 Inicio=BaseClock.read_ms();
williequesada 0:c025e4fdbffb 75
williequesada 0:c025e4fdbffb 76 while(true) { // Esta funcion detiene el programa y espera una respuesta
williequesada 0:c025e4fdbffb 77 Fin=BaseClock.read_ms();
williequesada 0:c025e4fdbffb 78 Transcurrido=Fin-Inicio;
williequesada 0:c025e4fdbffb 79 if(Sim900_Counter>5) {
williequesada 0:c025e4fdbffb 80 TimeOut=1;
williequesada 0:c025e4fdbffb 81 break;
williequesada 0:c025e4fdbffb 82 }
williequesada 0:c025e4fdbffb 83 if(Transcurrido>Espera) {
williequesada 0:c025e4fdbffb 84 TimeOut=0;
williequesada 0:c025e4fdbffb 85 break;
williequesada 0:c025e4fdbffb 86 }
williequesada 0:c025e4fdbffb 87 }
williequesada 0:c025e4fdbffb 88 wait_ms(Delay);
williequesada 0:c025e4fdbffb 89 if(TimeOut) {
williequesada 0:c025e4fdbffb 90 for(int i=0; i<Sim900_Counter; i++) {
williequesada 0:c025e4fdbffb 91 Computer.putc(Sim900_Buffer[i]);
williequesada 0:c025e4fdbffb 92 if(Sim900_Buffer[i]==Answer[0]) {
williequesada 0:c025e4fdbffb 93 RightAnswer1=1;
williequesada 0:c025e4fdbffb 94 }
williequesada 0:c025e4fdbffb 95 if(Sim900_Buffer[i]==Answer[1]) {
williequesada 0:c025e4fdbffb 96 RightAnswer2=1;
williequesada 0:c025e4fdbffb 97 }
williequesada 0:c025e4fdbffb 98 }
williequesada 0:c025e4fdbffb 99 if(RightAnswer1 && RightAnswer2) {
williequesada 0:c025e4fdbffb 100 Computer.printf("OK-> Respuesta correcta\n");
williequesada 0:c025e4fdbffb 101 } else {
williequesada 0:c025e4fdbffb 102 Computer.printf("ERROR-> Respuesta incorrecta\n");
williequesada 0:c025e4fdbffb 103 wait_ms(2000);
williequesada 0:c025e4fdbffb 104
williequesada 0:c025e4fdbffb 105 Gsm.printf("%s",Command);
williequesada 0:c025e4fdbffb 106 Sim900_Counter=0;
williequesada 0:c025e4fdbffb 107 TimeOut=0;
williequesada 0:c025e4fdbffb 108 RightAnswer1=0;
williequesada 0:c025e4fdbffb 109 RightAnswer2=0;
williequesada 0:c025e4fdbffb 110 Inicio=BaseClock.read_ms();
williequesada 0:c025e4fdbffb 111
williequesada 0:c025e4fdbffb 112 while(true) { // Esta funcion detiene el programa y espera una respuesta
williequesada 0:c025e4fdbffb 113 Fin=BaseClock.read_ms();
williequesada 0:c025e4fdbffb 114 Transcurrido=Fin-Inicio;
williequesada 0:c025e4fdbffb 115 if(Sim900_Counter>0) {
williequesada 0:c025e4fdbffb 116 TimeOut=1;
williequesada 0:c025e4fdbffb 117 break;
williequesada 0:c025e4fdbffb 118 }
williequesada 0:c025e4fdbffb 119 if(Transcurrido>Espera) {
williequesada 0:c025e4fdbffb 120 TimeOut=0;
williequesada 0:c025e4fdbffb 121 break;
williequesada 0:c025e4fdbffb 122 }
williequesada 0:c025e4fdbffb 123 }
williequesada 0:c025e4fdbffb 124 wait_ms(Delay);
williequesada 0:c025e4fdbffb 125 if(TimeOut) {
williequesada 0:c025e4fdbffb 126 for(int i=0; i<Sim900_Counter; i++) {
williequesada 0:c025e4fdbffb 127 Computer.putc(Sim900_Buffer[i]);
williequesada 0:c025e4fdbffb 128 if(Sim900_Buffer[i]==Answer[0]) {
williequesada 0:c025e4fdbffb 129 RightAnswer1=1;
williequesada 0:c025e4fdbffb 130 }
williequesada 0:c025e4fdbffb 131 if(Sim900_Buffer[i]==Answer[1]) {
williequesada 0:c025e4fdbffb 132 RightAnswer2=1;
williequesada 0:c025e4fdbffb 133 }
williequesada 0:c025e4fdbffb 134 }
williequesada 0:c025e4fdbffb 135 if(RightAnswer1 && RightAnswer2) {
williequesada 0:c025e4fdbffb 136 Computer.printf("OK-> Respuesta correcta\n");
williequesada 0:c025e4fdbffb 137 } else {
williequesada 0:c025e4fdbffb 138 Computer.printf("ERROR-> Respuesta incorrecta\n");
williequesada 0:c025e4fdbffb 139 }
williequesada 0:c025e4fdbffb 140 } else {
williequesada 0:c025e4fdbffb 141 Computer.printf("ERROR-> Sin respuesta\n");
williequesada 0:c025e4fdbffb 142 }
williequesada 0:c025e4fdbffb 143 }
williequesada 0:c025e4fdbffb 144 } else {
williequesada 0:c025e4fdbffb 145 Computer.printf("ERROR-> Sin respuesta\n");
williequesada 0:c025e4fdbffb 146 }
williequesada 0:c025e4fdbffb 147 }
williequesada 0:c025e4fdbffb 148
williequesada 0:c025e4fdbffb 149 void EncenderSIM900()
williequesada 0:c025e4fdbffb 150 {
williequesada 0:c025e4fdbffb 151 Sim900_Counter=0;
williequesada 0:c025e4fdbffb 152 if(Gsm.writeable()) {
williequesada 0:c025e4fdbffb 153 Gsm.printf("AT\r\n");
williequesada 0:c025e4fdbffb 154 }
williequesada 0:c025e4fdbffb 155 wait_ms(100);
williequesada 0:c025e4fdbffb 156
williequesada 0:c025e4fdbffb 157 if(Sim900_Counter==0) {
williequesada 0:c025e4fdbffb 158 Sim900_Counter=0;
williequesada 0:c025e4fdbffb 159 EnableSIM900 = 1;
williequesada 0:c025e4fdbffb 160 wait_ms(600);
williequesada 0:c025e4fdbffb 161 EnableSIM900 = 0;
williequesada 0:c025e4fdbffb 162 wait_ms(1000);
williequesada 0:c025e4fdbffb 163
williequesada 0:c025e4fdbffb 164 bool TimeOut=0;
williequesada 0:c025e4fdbffb 165 bool RightAnswer1=0;
williequesada 0:c025e4fdbffb 166 bool RightAnswer2=0;
williequesada 0:c025e4fdbffb 167 bool WrongAnswer1=0;
williequesada 0:c025e4fdbffb 168 bool WrongAnswer2=0;
williequesada 0:c025e4fdbffb 169 Inicio=BaseClock.read_ms();
williequesada 0:c025e4fdbffb 170
williequesada 0:c025e4fdbffb 171 while(true) { // Esta funcion detiene el programa y espera una respuesta
williequesada 0:c025e4fdbffb 172 Fin=BaseClock.read_ms();
williequesada 0:c025e4fdbffb 173 Transcurrido=Fin-Inicio;
williequesada 0:c025e4fdbffb 174 if(Sim900_Counter>5) {
williequesada 0:c025e4fdbffb 175 TimeOut=1;
williequesada 0:c025e4fdbffb 176 break;
williequesada 0:c025e4fdbffb 177 }
williequesada 0:c025e4fdbffb 178 if(Transcurrido>1000) {
williequesada 0:c025e4fdbffb 179 TimeOut=0;
williequesada 0:c025e4fdbffb 180 break;
williequesada 0:c025e4fdbffb 181 }
williequesada 0:c025e4fdbffb 182 }
williequesada 0:c025e4fdbffb 183 wait_ms(500);
williequesada 0:c025e4fdbffb 184 if(TimeOut) {
williequesada 0:c025e4fdbffb 185 for(int i=0; i<Sim900_Counter; i++) {
williequesada 0:c025e4fdbffb 186 Computer.putc(Sim900_Buffer[i]);
williequesada 0:c025e4fdbffb 187 if(Sim900_Buffer[i]=='F') {
williequesada 0:c025e4fdbffb 188 RightAnswer1=1;
williequesada 0:c025e4fdbffb 189 }
williequesada 0:c025e4fdbffb 190 if(Sim900_Buffer[i]=='I') {
williequesada 0:c025e4fdbffb 191 RightAnswer2=1;
williequesada 0:c025e4fdbffb 192 }
williequesada 0:c025e4fdbffb 193 if(Sim900_Buffer[i]=='O') {
williequesada 0:c025e4fdbffb 194 WrongAnswer1=1;
williequesada 0:c025e4fdbffb 195 }
williequesada 0:c025e4fdbffb 196 if(Sim900_Buffer[i]=='W') {
williequesada 0:c025e4fdbffb 197 WrongAnswer2=1;
williequesada 0:c025e4fdbffb 198 }
williequesada 0:c025e4fdbffb 199 }
williequesada 0:c025e4fdbffb 200 if(RightAnswer1 && RightAnswer2) {
williequesada 0:c025e4fdbffb 201 Computer.printf("OK-> Encendido correctamente\n");
williequesada 0:c025e4fdbffb 202 wait_ms(3500);
williequesada 0:c025e4fdbffb 203 } else {
williequesada 0:c025e4fdbffb 204 if(WrongAnswer1 && WrongAnswer2) {
williequesada 0:c025e4fdbffb 205 Computer.printf("OK-> Apagado error\n");
williequesada 0:c025e4fdbffb 206 wait_ms(4000);
williequesada 0:c025e4fdbffb 207 Sim900_Counter=0;
williequesada 0:c025e4fdbffb 208 EnableSIM900 = 1;
williequesada 0:c025e4fdbffb 209 wait_ms(600);
williequesada 0:c025e4fdbffb 210 EnableSIM900 = 0;
williequesada 0:c025e4fdbffb 211 wait_ms(5000);
williequesada 0:c025e4fdbffb 212 }
williequesada 0:c025e4fdbffb 213 }
williequesada 0:c025e4fdbffb 214 }
williequesada 0:c025e4fdbffb 215 } else {
williequesada 0:c025e4fdbffb 216 for(int i=0; i<=Sim900_Counter; i++) {
williequesada 0:c025e4fdbffb 217 Computer.putc(Sim900_Buffer[i]);
williequesada 0:c025e4fdbffb 218 }
williequesada 0:c025e4fdbffb 219 }
williequesada 0:c025e4fdbffb 220
williequesada 0:c025e4fdbffb 221 }
williequesada 0:c025e4fdbffb 222
williequesada 0:c025e4fdbffb 223 void IniciarSIM900()
williequesada 0:c025e4fdbffb 224 {
williequesada 0:c025e4fdbffb 225 PrintSerialRepeat("AT+CPIN?\r\n","OK",500,75); // Respuesta +CPIN: READY\n\nOK
williequesada 0:c025e4fdbffb 226 PrintSerialRepeat("AT+CSQ\r\n","OK",500,100); // Respuesta +Señal Disponible OK
williequesada 0:c025e4fdbffb 227 PrintSerialRepeat("AT+CREG=1\r\n","OK",500,250); // Peticion de conexion GPRS OK
williequesada 0:c025e4fdbffb 228 wait(2);
williequesada 0:c025e4fdbffb 229 }
williequesada 0:c025e4fdbffb 230
williequesada 0:c025e4fdbffb 231 void ConexionGPRS()
williequesada 0:c025e4fdbffb 232 {
williequesada 0:c025e4fdbffb 233 PrintSerialRepeat("AT+CGATT=1\r\n","OK",2000,1000);
williequesada 0:c025e4fdbffb 234 PrintSerialRepeat("AT+SAPBR=1,1\r\n","OK",500,1000);
williequesada 0:c025e4fdbffb 235 if(Master.writeable()) {
williequesada 0:c025e4fdbffb 236 Master.putc(NEXT_STEP);
williequesada 0:c025e4fdbffb 237 }
williequesada 0:c025e4fdbffb 238 }
williequesada 0:c025e4fdbffb 239
williequesada 0:c025e4fdbffb 240 void ApagarSIM900()
williequesada 0:c025e4fdbffb 241 {
williequesada 0:c025e4fdbffb 242 PrintSerialRepeat("AT+CPOWD=1\r\n","WD",500,500);
williequesada 0:c025e4fdbffb 243 wait_ms(1000);
williequesada 0:c025e4fdbffb 244
williequesada 0:c025e4fdbffb 245 Sim900_Counter=0;
williequesada 0:c025e4fdbffb 246 if(Gsm.writeable()) {
williequesada 0:c025e4fdbffb 247 Gsm.printf("AT\r\n");
williequesada 0:c025e4fdbffb 248 }
williequesada 0:c025e4fdbffb 249 wait_ms(100);
williequesada 0:c025e4fdbffb 250
williequesada 0:c025e4fdbffb 251 if(Sim900_Counter>5) {
williequesada 0:c025e4fdbffb 252 EnableSIM900 = 1;
williequesada 0:c025e4fdbffb 253 wait_ms(600);
williequesada 0:c025e4fdbffb 254 EnableSIM900 = 0;
williequesada 0:c025e4fdbffb 255 }
williequesada 0:c025e4fdbffb 256 }
williequesada 0:c025e4fdbffb 257
williequesada 0:c025e4fdbffb 258 void PostEncryptHTTP()
williequesada 0:c025e4fdbffb 259 {
williequesada 0:c025e4fdbffb 260 PrintSerialRepeat("AT+HTTPINIT\r\n","OK",500,50); // Iniciar servicio HTTP, Respuesta OK
williequesada 0:c025e4fdbffb 261 //PrintSerialRepeat("AT+HTTPPARA=\"CID\",1\r\n","OK",500,50);
williequesada 0:c025e4fdbffb 262 PrintSerialRepeat("AT+HTTPPARA=\"URL\",\"http://52.39.146.172:8181/AIGRest/AIGService/parkPQ\"\r\n","OK",1500,140); // AT+HTTPPARA="URL","http://34.211.174.1:8080/AIGRest/AIGService/parkPQ"
williequesada 0:c025e4fdbffb 263 //PrintSerialRepeat("AT+HTTPPARA=\"URL\",\"http://34.211.174.1:8080/AIGRest/AIGService/parkPQ\"\r\n","OK",1500,140);
williequesada 0:c025e4fdbffb 264 //PrintSerialData("AT+HTTPPARA=\"URL\",\"https://www.e-park.cr/AIGRest/AIGService/parkPQ\"\r\n","OK",1500,140); // AT+HTTPPARA="URL","http://34.211.174.1:8080/AIGRest/AIGService/parkPQ"
williequesada 0:c025e4fdbffb 265 PrintSerialRepeat("AT+HTTPPARA=\"CONTENT\",\"application/json\"\r\n","OK",500,75); // AT+HTTPPARA="CONTENT","application/json"
williequesada 0:c025e4fdbffb 266 char Len[24];
williequesada 0:c025e4fdbffb 267 sprintf(Len,"AT+HTTPDATA=%i,10000\r\n",(strlen(Encrypt)));
williequesada 0:c025e4fdbffb 268 if(Gsm.writeable()) {
williequesada 0:c025e4fdbffb 269 Gsm.printf("%s",Len);
williequesada 0:c025e4fdbffb 270 } // Envio de parametros de la informacion, Respuesta DOWNLOAD OK
williequesada 0:c025e4fdbffb 271 wait_ms(200);
williequesada 0:c025e4fdbffb 272 if(Gsm.writeable()) {
williequesada 0:c025e4fdbffb 273 for(int i=0; i<174; i++) {
williequesada 0:c025e4fdbffb 274 Gsm.putc(Encrypt[i]);
williequesada 0:c025e4fdbffb 275 }
williequesada 0:c025e4fdbffb 276 } // Envio de informacion al web servicio
williequesada 0:c025e4fdbffb 277 wait_ms(500);
williequesada 0:c025e4fdbffb 278 for(int i=0; i<=Sim900_Counter; i++) {
williequesada 0:c025e4fdbffb 279 Computer.putc(Sim900_Buffer[i]);
williequesada 0:c025e4fdbffb 280 }
williequesada 0:c025e4fdbffb 281 wait_ms(500);
williequesada 0:c025e4fdbffb 282 PrintSerialRepeat("AT+HTTPACTION=1\r\n","OK",8000,1800); // Respuesta OK +HTTPACTION:1,200,7
williequesada 0:c025e4fdbffb 283 }
williequesada 0:c025e4fdbffb 284
williequesada 0:c025e4fdbffb 285 void PrintEncryption()
williequesada 0:c025e4fdbffb 286 {
williequesada 0:c025e4fdbffb 287 Computer.printf("Mensaje: ");
williequesada 0:c025e4fdbffb 288 for(int i=0; i<173; i++) {
williequesada 0:c025e4fdbffb 289 Computer.putc(Encrypt[i]);
williequesada 0:c025e4fdbffb 290 }
williequesada 0:c025e4fdbffb 291 }
williequesada 0:c025e4fdbffb 292
williequesada 0:c025e4fdbffb 293 void RespuestaHTTP()
williequesada 0:c025e4fdbffb 294 {
williequesada 0:c025e4fdbffb 295 PrintSerialRepeat("AT+HTTPREAD=0,9000\r\n","OK",500,150);
williequesada 0:c025e4fdbffb 296 Sim900_Counter=0;
williequesada 0:c025e4fdbffb 297 Inicio=BaseClock.read_ms();
williequesada 0:c025e4fdbffb 298 while(true) { // Esta funcion detiene el programa y espera una respuesta
williequesada 0:c025e4fdbffb 299 Fin=BaseClock.read_ms();
williequesada 0:c025e4fdbffb 300 Transcurrido=Fin-Inicio;
williequesada 0:c025e4fdbffb 301 if(Sim900_Counter>10) {
williequesada 0:c025e4fdbffb 302 break;
williequesada 0:c025e4fdbffb 303 }
williequesada 0:c025e4fdbffb 304 if(Transcurrido>20000) {
williequesada 0:c025e4fdbffb 305 break;
williequesada 0:c025e4fdbffb 306 }
williequesada 0:c025e4fdbffb 307 }
williequesada 0:c025e4fdbffb 308 wait_ms(150);
williequesada 0:c025e4fdbffb 309 Sim900_Counter=0; // +HTTPREAD:7 OKAlpha, OK+310325+10:29+2018-04-10
williequesada 0:c025e4fdbffb 310 bool RightAnswer1=0;
williequesada 0:c025e4fdbffb 311 bool RightAnswer2=0;
williequesada 0:c025e4fdbffb 312 bool RightAnswer3=0;
williequesada 0:c025e4fdbffb 313 int RightAnswer4=0;
williequesada 0:c025e4fdbffb 314 bool WrongAnswer1=0;
williequesada 0:c025e4fdbffb 315 int WrongAnswer2=0;
williequesada 0:c025e4fdbffb 316
williequesada 0:c025e4fdbffb 317
williequesada 0:c025e4fdbffb 318 if(Gsm.writeable()) {
williequesada 0:c025e4fdbffb 319 Gsm.printf("AT+HTTPREAD=0,9000\r\n");
williequesada 0:c025e4fdbffb 320 }
williequesada 0:c025e4fdbffb 321 wait_ms(250);
williequesada 0:c025e4fdbffb 322 for(int i=0; i<Sim900_Counter; i++) {
williequesada 0:c025e4fdbffb 323 Computer.printf("%c",Sim900_Buffer[i]);
williequesada 0:c025e4fdbffb 324 if(Sim900_Buffer[i]=='O') {
williequesada 0:c025e4fdbffb 325 RightAnswer1=1;
williequesada 0:c025e4fdbffb 326 }
williequesada 0:c025e4fdbffb 327 if(Sim900_Buffer[i]=='K') {
williequesada 0:c025e4fdbffb 328 RightAnswer2=1;
williequesada 0:c025e4fdbffb 329 }
williequesada 0:c025e4fdbffb 330 if(Sim900_Buffer[i]=='-') {
williequesada 0:c025e4fdbffb 331 RightAnswer3=1;
williequesada 0:c025e4fdbffb 332 }
williequesada 0:c025e4fdbffb 333 if(Sim900_Buffer[i]=='E') {
williequesada 0:c025e4fdbffb 334 WrongAnswer1=1;
williequesada 0:c025e4fdbffb 335 }
williequesada 0:c025e4fdbffb 336 if(Sim900_Buffer[i]=='R') {
williequesada 0:c025e4fdbffb 337 WrongAnswer2++;
williequesada 0:c025e4fdbffb 338 }
williequesada 0:c025e4fdbffb 339 if(Sim900_Buffer[i]=='+') {
williequesada 0:c025e4fdbffb 340 RightAnswer4++;
williequesada 0:c025e4fdbffb 341 }
williequesada 0:c025e4fdbffb 342 }
williequesada 0:c025e4fdbffb 343
williequesada 0:c025e4fdbffb 344 if(RightAnswer4==1&&WrongAnswer2==1) {
williequesada 0:c025e4fdbffb 345 Computer.printf("Respuesta incompleta %s\n",RightAnswer4 );
williequesada 0:c025e4fdbffb 346 PrintSerialRepeat("AT+HTTPREAD=0,9000\r\n","OK",500,150);
williequesada 0:c025e4fdbffb 347 Sim900_Counter=0;
williequesada 0:c025e4fdbffb 348 Computer.printf("Esperando respuesta\n");
williequesada 0:c025e4fdbffb 349 Inicio=BaseClock.read_ms();
williequesada 0:c025e4fdbffb 350 while(true) { // Esta funcion detiene el programa y espera una respuesta
williequesada 0:c025e4fdbffb 351 Fin=BaseClock.read_ms();
williequesada 0:c025e4fdbffb 352 Transcurrido=Fin-Inicio;
williequesada 0:c025e4fdbffb 353 if(Sim900_Counter>10) {
williequesada 0:c025e4fdbffb 354 break;
williequesada 0:c025e4fdbffb 355 }
williequesada 0:c025e4fdbffb 356 if(Transcurrido>20000) {
williequesada 0:c025e4fdbffb 357 break;
williequesada 0:c025e4fdbffb 358 }
williequesada 0:c025e4fdbffb 359 }
williequesada 0:c025e4fdbffb 360 wait_ms(250); // +HTTPREAD:7 OKAlpha, OK+310325+10:29+2018-04-10
williequesada 0:c025e4fdbffb 361 RightAnswer1=0;
williequesada 0:c025e4fdbffb 362 RightAnswer2=0;
williequesada 0:c025e4fdbffb 363 RightAnswer3=0;
williequesada 0:c025e4fdbffb 364 RightAnswer4=0;
williequesada 0:c025e4fdbffb 365
williequesada 0:c025e4fdbffb 366 PrintSerialRepeat("AT+HTTPREAD=0,9000\r\n","OK",500,250);
williequesada 0:c025e4fdbffb 367 for(int i=0; i<Sim900_Counter; i++) {
williequesada 0:c025e4fdbffb 368 Computer.printf("%c",Sim900_Buffer[i]);
williequesada 0:c025e4fdbffb 369 if(Sim900_Buffer[i]=='O') {
williequesada 0:c025e4fdbffb 370 RightAnswer1=1;
williequesada 0:c025e4fdbffb 371 }
williequesada 0:c025e4fdbffb 372 if(Sim900_Buffer[i]=='K') {
williequesada 0:c025e4fdbffb 373 RightAnswer2=1;
williequesada 0:c025e4fdbffb 374 }
williequesada 0:c025e4fdbffb 375 if(Sim900_Buffer[i]=='-') {
williequesada 0:c025e4fdbffb 376 RightAnswer3=1;
williequesada 0:c025e4fdbffb 377 }
williequesada 0:c025e4fdbffb 378 if(Sim900_Buffer[i]=='+') {
williequesada 0:c025e4fdbffb 379 RightAnswer4++;
williequesada 0:c025e4fdbffb 380 }
williequesada 0:c025e4fdbffb 381 }
williequesada 0:c025e4fdbffb 382 }
williequesada 0:c025e4fdbffb 383
williequesada 0:c025e4fdbffb 384 if(RightAnswer3&&RightAnswer2&&RightAnswer1) {
williequesada 0:c025e4fdbffb 385 Computer.printf("Aceptada\n");
williequesada 0:c025e4fdbffb 386 if(Master.writeable()) {
williequesada 0:c025e4fdbffb 387 Computer.printf("<--");
williequesada 0:c025e4fdbffb 388 for(int i=37; i<=(Sim900_Counter-6); i++) {
williequesada 0:c025e4fdbffb 389 Master.putc(Sim900_Buffer[i]);
williequesada 0:c025e4fdbffb 390 Computer.putc(Sim900_Buffer[i]);
williequesada 0:c025e4fdbffb 391 }
williequesada 0:c025e4fdbffb 392 Master.putc('A');
williequesada 0:c025e4fdbffb 393 Computer.printf("-->");
williequesada 0:c025e4fdbffb 394 }
williequesada 0:c025e4fdbffb 395 } else if(WrongAnswer1&&(WrongAnswer2>1)) {
williequesada 0:c025e4fdbffb 396 Computer.printf("Rechazada\n");
williequesada 0:c025e4fdbffb 397 if(Master.writeable()) {
williequesada 0:c025e4fdbffb 398 Master.printf("Rechazada");
williequesada 0:c025e4fdbffb 399 Master.putc('R');
williequesada 0:c025e4fdbffb 400 }
williequesada 0:c025e4fdbffb 401 } else {
williequesada 0:c025e4fdbffb 402 Computer.printf("Sin respuesta\n");
williequesada 0:c025e4fdbffb 403 if(Master.writeable()) {
williequesada 0:c025e4fdbffb 404 Master.printf("Rechazada");
williequesada 0:c025e4fdbffb 405 Master.putc('R');
williequesada 0:c025e4fdbffb 406 }
williequesada 0:c025e4fdbffb 407 }
williequesada 0:c025e4fdbffb 408 PrintSerialRepeat("AT+HTTPTERM\r\n","OK",500,50);
williequesada 0:c025e4fdbffb 409 PrintSerialRepeat("AT+SAPBR=0,1\r\n","OK",500,50);
williequesada 0:c025e4fdbffb 410 }
williequesada 0:c025e4fdbffb 411
williequesada 0:c025e4fdbffb 412
williequesada 0:c025e4fdbffb 413 void FinalizarComunicacion()
williequesada 0:c025e4fdbffb 414 {
williequesada 0:c025e4fdbffb 415 PrintSerialRepeat("AT+SAPBR=0,1\r\n","OK",500,50);
williequesada 0:c025e4fdbffb 416 }
williequesada 0:c025e4fdbffb 417
williequesada 0:c025e4fdbffb 418 void ReadUsuario()
williequesada 0:c025e4fdbffb 419 {
williequesada 0:c025e4fdbffb 420 Computer.printf("Read Usuario\n");
williequesada 0:c025e4fdbffb 421 wait_ms(1000);
williequesada 0:c025e4fdbffb 422 for(int i=0; i<172; i++) {
williequesada 0:c025e4fdbffb 423 Encrypt[i]=MasterCommand.Get();
williequesada 0:c025e4fdbffb 424 Computer.printf("-%c-",Encrypt[i]);
williequesada 0:c025e4fdbffb 425 }
williequesada 0:c025e4fdbffb 426 Encrypt[173]='\r';
williequesada 0:c025e4fdbffb 427 if(Master.writeable()) {
williequesada 0:c025e4fdbffb 428 Master.putc(NEXT_STEP);
williequesada 0:c025e4fdbffb 429 }
williequesada 0:c025e4fdbffb 430 }
williequesada 0:c025e4fdbffb 431
williequesada 0:c025e4fdbffb 432 void ConexionSIM900()
williequesada 0:c025e4fdbffb 433 {
williequesada 0:c025e4fdbffb 434 Sim900_Counter=0;
williequesada 0:c025e4fdbffb 435 EnableSIM900 = 1;
williequesada 0:c025e4fdbffb 436 wait_ms(600);
williequesada 0:c025e4fdbffb 437 EnableSIM900 = 0;
williequesada 0:c025e4fdbffb 438 char ConectionEnable;
williequesada 0:c025e4fdbffb 439 Inicio=BaseClock.read_ms();
williequesada 0:c025e4fdbffb 440 while (true) {
williequesada 0:c025e4fdbffb 441 Fin=BaseClock.read_ms();
williequesada 0:c025e4fdbffb 442 Transcurrido=Fin-Inicio;
williequesada 0:c025e4fdbffb 443 if(Sim900_Counter>0) {
williequesada 0:c025e4fdbffb 444 Computer.printf("Conectado\n");
williequesada 0:c025e4fdbffb 445 ConectionEnable='A';
williequesada 0:c025e4fdbffb 446 break;
williequesada 0:c025e4fdbffb 447 }
williequesada 0:c025e4fdbffb 448 if(Transcurrido>5000) {
williequesada 0:c025e4fdbffb 449 Computer.printf("Desconectado\n");
williequesada 0:c025e4fdbffb 450 ConectionEnable='E';
williequesada 0:c025e4fdbffb 451 break;
williequesada 0:c025e4fdbffb 452 }
williequesada 0:c025e4fdbffb 453 }
williequesada 0:c025e4fdbffb 454 if(Master.writeable()) {
williequesada 0:c025e4fdbffb 455 Master.putc(ConectionEnable);
williequesada 0:c025e4fdbffb 456 }
williequesada 0:c025e4fdbffb 457 wait(5);
williequesada 0:c025e4fdbffb 458 ApagarSIM900();
williequesada 0:c025e4fdbffb 459 }
williequesada 0:c025e4fdbffb 460
williequesada 0:c025e4fdbffb 461 void CoberturaSIM900()
williequesada 0:c025e4fdbffb 462 {
williequesada 0:c025e4fdbffb 463 Sim900_Counter=0;
williequesada 0:c025e4fdbffb 464 EnableSIM900 = 1;
williequesada 0:c025e4fdbffb 465 wait_ms(600);
williequesada 0:c025e4fdbffb 466 EnableSIM900 = 0;
williequesada 0:c025e4fdbffb 467 wait_ms(6000);
williequesada 0:c025e4fdbffb 468 Sim900_Counter=0;
williequesada 0:c025e4fdbffb 469
williequesada 0:c025e4fdbffb 470 if(Gsm.writeable()) {
williequesada 0:c025e4fdbffb 471 Gsm.printf("AT+CSQ\r\n");
williequesada 0:c025e4fdbffb 472 }
williequesada 0:c025e4fdbffb 473
williequesada 0:c025e4fdbffb 474 Inicio=BaseClock.read_ms();
williequesada 0:c025e4fdbffb 475 while (true) {
williequesada 0:c025e4fdbffb 476 Fin=BaseClock.read_ms();
williequesada 0:c025e4fdbffb 477 Transcurrido=Fin-Inicio;
williequesada 0:c025e4fdbffb 478 if(Sim900_Counter>0) {
williequesada 0:c025e4fdbffb 479 wait_ms(75);
williequesada 0:c025e4fdbffb 480 break;
williequesada 0:c025e4fdbffb 481 }
williequesada 0:c025e4fdbffb 482 if(Transcurrido>1000) {
williequesada 0:c025e4fdbffb 483 break;
williequesada 0:c025e4fdbffb 484 }
williequesada 0:c025e4fdbffb 485 }
williequesada 0:c025e4fdbffb 486 if(Sim900_Counter>0) {
williequesada 0:c025e4fdbffb 487 for(int i=0; i<Sim900_Counter; i++) {
williequesada 0:c025e4fdbffb 488 Computer.printf("%c",Sim900_Buffer[i]);
williequesada 0:c025e4fdbffb 489 if(((uint8_t)Sim900_Buffer[i]>=0x30)&&((uint8_t)Sim900_Buffer[i]<0x3A)) {
williequesada 0:c025e4fdbffb 490 if(Master.writeable()) {
williequesada 0:c025e4fdbffb 491 Master.putc(Sim900_Buffer[i]);
williequesada 0:c025e4fdbffb 492 }
williequesada 0:c025e4fdbffb 493 }
williequesada 0:c025e4fdbffb 494 Computer.putc(Sim900_Buffer[i]);
williequesada 0:c025e4fdbffb 495 }
williequesada 0:c025e4fdbffb 496 if(Master.writeable()) {
williequesada 0:c025e4fdbffb 497 Master.putc('A');
williequesada 0:c025e4fdbffb 498 }
williequesada 0:c025e4fdbffb 499 } else {
williequesada 0:c025e4fdbffb 500 if(Master.writeable()) {
williequesada 0:c025e4fdbffb 501 Master.putc('E');
williequesada 0:c025e4fdbffb 502 }
williequesada 0:c025e4fdbffb 503 }
williequesada 0:c025e4fdbffb 504 ApagarSIM900();
williequesada 0:c025e4fdbffb 505 wait_ms(3900);
williequesada 0:c025e4fdbffb 506 }
williequesada 0:c025e4fdbffb 507 void Step1()
williequesada 0:c025e4fdbffb 508 {
williequesada 0:c025e4fdbffb 509 Computer.printf("Encender\n");
williequesada 0:c025e4fdbffb 510 EncenderSIM900();
williequesada 0:c025e4fdbffb 511 wait(5);
williequesada 0:c025e4fdbffb 512 if(Master.writeable()) {
williequesada 0:c025e4fdbffb 513 Master.putc(NEXT_STEP);
williequesada 0:c025e4fdbffb 514 }
williequesada 0:c025e4fdbffb 515 }
williequesada 0:c025e4fdbffb 516
williequesada 0:c025e4fdbffb 517 void Step2(){
williequesada 0:c025e4fdbffb 518 PrintSerialRepeat("AT+CPIN?\r\n","OK",500,75); // Respuesta +CPIN: READY\n\nOK
williequesada 0:c025e4fdbffb 519 PrintSerialRepeat("AT+CSQ\r\n","OK",500,100);
williequesada 0:c025e4fdbffb 520 PrintSerialRepeat("AT+CREG=1\r\n","OK",500,250);
williequesada 0:c025e4fdbffb 521 PrintSerialRepeat("AT+CIPSHUT\r\n","OK",500,150); // Respuesta OK
williequesada 0:c025e4fdbffb 522
williequesada 0:c025e4fdbffb 523 if(Master.writeable()) {
williequesada 0:c025e4fdbffb 524 Master.putc(NEXT_STEP);
williequesada 0:c025e4fdbffb 525 }
williequesada 0:c025e4fdbffb 526 }
williequesada 0:c025e4fdbffb 527
williequesada 0:c025e4fdbffb 528 void Step3()
williequesada 0:c025e4fdbffb 529 {
williequesada 0:c025e4fdbffb 530 PrintSerialRepeat("AT+CIPSTATUS\r\n","OK",500,100); // Respuesta OK STATE: IP INITIAL
williequesada 0:c025e4fdbffb 531 PrintSerialRepeat("AT+CIPMUX=0\r\n","OK",500,100); // Respuesta OK
williequesada 0:c025e4fdbffb 532 wait(4);
williequesada 0:c025e4fdbffb 533 PrintSerialRepeat("AT+CGATT=1\r\n","OK",2000,3000);
williequesada 0:c025e4fdbffb 534 if(Master.writeable()) {
williequesada 0:c025e4fdbffb 535 Master.putc(NEXT_STEP);
williequesada 0:c025e4fdbffb 536 }
williequesada 0:c025e4fdbffb 537 }
williequesada 0:c025e4fdbffb 538
williequesada 0:c025e4fdbffb 539 void Step4()
williequesada 0:c025e4fdbffb 540 {
williequesada 0:c025e4fdbffb 541 wait(3);
williequesada 0:c025e4fdbffb 542 if(Master.writeable()) {
williequesada 0:c025e4fdbffb 543 Master.putc(NEXT_STEP);
williequesada 0:c025e4fdbffb 544 }
williequesada 0:c025e4fdbffb 545 }
williequesada 0:c025e4fdbffb 546
williequesada 0:c025e4fdbffb 547 void Step5()
williequesada 0:c025e4fdbffb 548 {
williequesada 0:c025e4fdbffb 549 //PrintSerialRepeat("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"\r\n","OK",500,100); // Respuesta OK
williequesada 0:c025e4fdbffb 550 //PrintSerialRepeat("AT+SAPBR=3,1,\"APN\",\"\"\r\n","OK",500,100); // Respuesta OK, AT+SAPBR=3,1,"APN",""
williequesada 0:c025e4fdbffb 551 wait(3);
williequesada 0:c025e4fdbffb 552 if(Master.writeable()) {
williequesada 0:c025e4fdbffb 553 Master.putc(NEXT_STEP);
williequesada 0:c025e4fdbffb 554 }
williequesada 0:c025e4fdbffb 555 }
williequesada 0:c025e4fdbffb 556 void Step6()
williequesada 0:c025e4fdbffb 557 {
williequesada 0:c025e4fdbffb 558 PrintSerialRepeat("AT+SAPBR=1,1\r\n","OK",500,1000); // Respuesta OK
williequesada 0:c025e4fdbffb 559 //PrintSerialRepeat("AT+SAPBR=2,1\r\n","OK",500,1000);
williequesada 0:c025e4fdbffb 560 if(Master.writeable()) {
williequesada 0:c025e4fdbffb 561 Master.putc(NEXT_STEP);
williequesada 0:c025e4fdbffb 562 }
williequesada 0:c025e4fdbffb 563 }
williequesada 0:c025e4fdbffb 564
williequesada 0:c025e4fdbffb 565 void Step7()
williequesada 0:c025e4fdbffb 566 {
williequesada 0:c025e4fdbffb 567 PrintSerialRepeat("AT+HTTPINIT\r\n","OK",500,50);
williequesada 0:c025e4fdbffb 568 //PrintSerialRepeat("AT+HTTPPARA=\"CID\",1\r\n","OK",500,50);
williequesada 0:c025e4fdbffb 569 //PrintSerialRepeat("AT+HTTPPARA=\"REDIR\",1\r\n","OK",1500,140);
williequesada 0:c025e4fdbffb 570 PrintSerialRepeat("AT+HTTPPARA=\"URL\",\"http://52.39.146.172:8181/AIGRest/AIGService/alertPQ\"\r\n","OK",1500,140);
williequesada 0:c025e4fdbffb 571 //PrintSerialRepeat("AT+HTTPPARA=\"URL\",\"http://34.211.174.1:8080/AIGRest/AIGService/alertPQ\"\r\n","OK",1500,140);
williequesada 0:c025e4fdbffb 572 if(Master.writeable()) {
williequesada 0:c025e4fdbffb 573 Master.putc(NEXT_STEP);
williequesada 0:c025e4fdbffb 574 }
williequesada 0:c025e4fdbffb 575 }
williequesada 0:c025e4fdbffb 576
williequesada 0:c025e4fdbffb 577 void Step8()
williequesada 0:c025e4fdbffb 578 {
williequesada 0:c025e4fdbffb 579 //char HostingData[]="{\"municipio\":\"Santa Ana\",\"id\":0000, \"alerts\":\"000000\"}\r\n";
williequesada 0:c025e4fdbffb 580 Computer.printf("%s\n",HostingData);
williequesada 0:c025e4fdbffb 581 wait_ms(100);
williequesada 0:c025e4fdbffb 582 // Municipio
williequesada 0:c025e4fdbffb 583 HostingData[14]=MasterCommand.Get();
williequesada 0:c025e4fdbffb 584 HostingData[15]=MasterCommand.Get();
williequesada 0:c025e4fdbffb 585 HostingData[16]=MasterCommand.Get();
williequesada 0:c025e4fdbffb 586 HostingData[17]=MasterCommand.Get();
williequesada 0:c025e4fdbffb 587 HostingData[18]=MasterCommand.Get();
williequesada 0:c025e4fdbffb 588 HostingData[19]=MasterCommand.Get();
williequesada 0:c025e4fdbffb 589 HostingData[20]=MasterCommand.Get();
williequesada 0:c025e4fdbffb 590 HostingData[21]=MasterCommand.Get();
williequesada 0:c025e4fdbffb 591 // Alarmas
williequesada 0:c025e4fdbffb 592 HostingData[46]=MasterCommand.Get();
williequesada 0:c025e4fdbffb 593 HostingData[47]=MasterCommand.Get();
williequesada 0:c025e4fdbffb 594 HostingData[48]=MasterCommand.Get();
williequesada 0:c025e4fdbffb 595 HostingData[49]=MasterCommand.Get();
williequesada 0:c025e4fdbffb 596 HostingData[50]=MasterCommand.Get();
williequesada 0:c025e4fdbffb 597 HostingData[51]=MasterCommand.Get();
williequesada 0:c025e4fdbffb 598 // Identificador
williequesada 0:c025e4fdbffb 599 HostingData[30]=MasterCommand.Get();
williequesada 0:c025e4fdbffb 600 HostingData[31]=MasterCommand.Get();
williequesada 0:c025e4fdbffb 601 HostingData[32]=MasterCommand.Get();
williequesada 0:c025e4fdbffb 602 HostingData[33]=MasterCommand.Get();
williequesada 0:c025e4fdbffb 603 Computer.printf("%s\n",HostingData);
williequesada 0:c025e4fdbffb 604 PrintSerialRepeat("AT+HTTPPARA=\"CONTENT\",\"application/json\"\r\n","OK",500,75); // AT+HTTPPARA="CONTENT","application/json"
williequesada 0:c025e4fdbffb 605 if(Master.writeable()) {
williequesada 0:c025e4fdbffb 606 Master.putc(NEXT_STEP);
williequesada 0:c025e4fdbffb 607 }
williequesada 0:c025e4fdbffb 608 }
williequesada 0:c025e4fdbffb 609
williequesada 0:c025e4fdbffb 610 void Step9()
williequesada 0:c025e4fdbffb 611 {
williequesada 0:c025e4fdbffb 612 Computer.printf("-1-\n");
williequesada 0:c025e4fdbffb 613 char Len[23];
williequesada 0:c025e4fdbffb 614 Sim900_Counter=0;
williequesada 0:c025e4fdbffb 615 sprintf(Len,"AT+HTTPDATA=%i,10000\r\n",(strlen(HostingData)));
williequesada 0:c025e4fdbffb 616 if(Gsm.writeable()) {
williequesada 0:c025e4fdbffb 617 Gsm.printf("%s",Len);
williequesada 0:c025e4fdbffb 618 } // Envio de parametros de la informacion, Respuesta DOWNLOAD OK
williequesada 0:c025e4fdbffb 619 Computer.printf("-2-\n");
williequesada 0:c025e4fdbffb 620 wait_ms(200);
williequesada 0:c025e4fdbffb 621 if(Gsm.writeable()) {
williequesada 0:c025e4fdbffb 622 Gsm.printf("%s",HostingData);
williequesada 0:c025e4fdbffb 623 } // Envio de informacion al web servicio
williequesada 0:c025e4fdbffb 624 wait_ms(200);
williequesada 0:c025e4fdbffb 625 for(int i=0; i<=Sim900_Counter; i++) {
williequesada 0:c025e4fdbffb 626 Computer.putc(Sim900_Buffer[i]);
williequesada 0:c025e4fdbffb 627 }
williequesada 0:c025e4fdbffb 628 Computer.printf("-3-\n");
williequesada 0:c025e4fdbffb 629 //PrintSerialRepeat("AT+HTTPSCONT?\r\n","OK",8000,1800);
williequesada 0:c025e4fdbffb 630 PrintSerialRepeat("AT+HTTPACTION=1\r\n","OK",8000,1800);
williequesada 0:c025e4fdbffb 631 if(Master.writeable()) {
williequesada 0:c025e4fdbffb 632 Master.putc(NEXT_STEP);
williequesada 0:c025e4fdbffb 633 }
williequesada 0:c025e4fdbffb 634 Computer.printf("-4-\n");
williequesada 0:c025e4fdbffb 635 }
williequesada 0:c025e4fdbffb 636
williequesada 0:c025e4fdbffb 637 void Step10()
williequesada 0:c025e4fdbffb 638 {
williequesada 0:c025e4fdbffb 639 PrintSerialRepeat("AT+HTTPREAD=0,9000\r\n","OK",150,50);
williequesada 0:c025e4fdbffb 640 Sim900_Counter=0;
williequesada 0:c025e4fdbffb 641 Computer.printf("Esperando respuesta\n");
williequesada 0:c025e4fdbffb 642 Inicio=BaseClock.read_ms();
williequesada 0:c025e4fdbffb 643 while(true) { // Esta funcion detiene el programa y espera una respuesta
williequesada 0:c025e4fdbffb 644 Fin=BaseClock.read_ms();
williequesada 0:c025e4fdbffb 645 Transcurrido=Fin-Inicio;
williequesada 0:c025e4fdbffb 646 if(Sim900_Counter>10) {
williequesada 0:c025e4fdbffb 647 Computer.printf("Recibido\n");
williequesada 0:c025e4fdbffb 648 break;
williequesada 0:c025e4fdbffb 649 }
williequesada 0:c025e4fdbffb 650 if(Transcurrido>9000) {
williequesada 0:c025e4fdbffb 651 Computer.printf("Tiempo\n");
williequesada 0:c025e4fdbffb 652 break;
williequesada 0:c025e4fdbffb 653 }
williequesada 0:c025e4fdbffb 654 }
williequesada 0:c025e4fdbffb 655 wait_ms(50);
williequesada 0:c025e4fdbffb 656
williequesada 0:c025e4fdbffb 657 bool RightAnswer1=0;
williequesada 0:c025e4fdbffb 658 bool RightAnswer2=0;
williequesada 0:c025e4fdbffb 659 bool RightAnswer3=0;
williequesada 0:c025e4fdbffb 660 Sim900_Counter=0;
williequesada 0:c025e4fdbffb 661 if(Gsm.writeable()) {
williequesada 0:c025e4fdbffb 662 Gsm.printf("AT+HTTPREAD=0,9000\r\n");
williequesada 0:c025e4fdbffb 663 }
williequesada 0:c025e4fdbffb 664 wait_ms(100);
williequesada 0:c025e4fdbffb 665
williequesada 0:c025e4fdbffb 666 for(int i=0; i<Sim900_Counter; i++) {
williequesada 0:c025e4fdbffb 667 Computer.putc(Sim900_Buffer[i]);
williequesada 0:c025e4fdbffb 668 if(Sim900_Buffer[i]=='O') {
williequesada 0:c025e4fdbffb 669 RightAnswer1=1;
williequesada 0:c025e4fdbffb 670 }
williequesada 0:c025e4fdbffb 671 if(Sim900_Buffer[i]=='K') {
williequesada 0:c025e4fdbffb 672 RightAnswer2=1;
williequesada 0:c025e4fdbffb 673 }
williequesada 0:c025e4fdbffb 674 if(Sim900_Buffer[i]=='+') {
williequesada 0:c025e4fdbffb 675 RightAnswer3=1;
williequesada 0:c025e4fdbffb 676 }
williequesada 0:c025e4fdbffb 677 }
williequesada 0:c025e4fdbffb 678 if(RightAnswer3&&RightAnswer2&&RightAnswer1) {
williequesada 0:c025e4fdbffb 679 HostingAnswer[0]=Sim900_Buffer[36];
williequesada 0:c025e4fdbffb 680 HostingAnswer[1]=Sim900_Buffer[37];
williequesada 0:c025e4fdbffb 681 HostingAnswer[2]=Sim900_Buffer[38];
williequesada 0:c025e4fdbffb 682 HostingAnswer[3]=Sim900_Buffer[39];
williequesada 0:c025e4fdbffb 683 HostingAnswer[4]=Sim900_Buffer[40];
williequesada 0:c025e4fdbffb 684 HostingAnswer[5]=Sim900_Buffer[41];
williequesada 0:c025e4fdbffb 685 HostingAnswer[6]=Sim900_Buffer[42];
williequesada 0:c025e4fdbffb 686 HostingAnswer[7]=Sim900_Buffer[43];
williequesada 0:c025e4fdbffb 687 HostingAnswer[8]=Sim900_Buffer[44];
williequesada 0:c025e4fdbffb 688 HostingAnswer[9]=Sim900_Buffer[45];
williequesada 0:c025e4fdbffb 689 HostingAnswer[10]=Sim900_Buffer[46];
williequesada 0:c025e4fdbffb 690 HostingAnswer[11]=Sim900_Buffer[47];
williequesada 0:c025e4fdbffb 691 Computer.printf("Aceptada\n");
williequesada 0:c025e4fdbffb 692 Computer.printf("<--%s-->\n",HostingAnswer);
williequesada 0:c025e4fdbffb 693 } else {
williequesada 0:c025e4fdbffb 694 Computer.printf("Rechazada\n");
williequesada 0:c025e4fdbffb 695 }
williequesada 0:c025e4fdbffb 696 if(Master.writeable()) {
williequesada 0:c025e4fdbffb 697 Master.putc(NEXT_STEP);
williequesada 0:c025e4fdbffb 698 }
williequesada 0:c025e4fdbffb 699 }
williequesada 0:c025e4fdbffb 700
williequesada 0:c025e4fdbffb 701 void Step11()
williequesada 0:c025e4fdbffb 702 {
williequesada 0:c025e4fdbffb 703 if(Master.writeable()) {
williequesada 0:c025e4fdbffb 704 Master.printf("%s",HostingAnswer);
williequesada 0:c025e4fdbffb 705 Computer.printf("<--%s-->",HostingAnswer);
williequesada 0:c025e4fdbffb 706 }
williequesada 0:c025e4fdbffb 707 //PrintSerialRepeat("AT+HTTPSCONT?\r\n","OK",2000,2000);
williequesada 0:c025e4fdbffb 708 //PrintSerialRepeat("AT+HTTPPARA?\r\n","OK",2000,2000);
williequesada 0:c025e4fdbffb 709 //PrintSerialRepeat("AT+SAPBR=4,1\r\n","OK",500,50);
williequesada 0:c025e4fdbffb 710 PrintSerialRepeat("AT+HTTPTERM\r\n","OK",500,50);
williequesada 0:c025e4fdbffb 711 PrintSerialRepeat("AT+SAPBR=0,1\r\n","OK",500,50);
williequesada 0:c025e4fdbffb 712 if(Master.writeable()) {
williequesada 0:c025e4fdbffb 713 Master.putc(NEXT_STEP);
williequesada 0:c025e4fdbffb 714 }
williequesada 0:c025e4fdbffb 715 HostingAnswer[0]='0';
williequesada 0:c025e4fdbffb 716 HostingAnswer[1]='0';
williequesada 0:c025e4fdbffb 717 HostingAnswer[2]='0';
williequesada 0:c025e4fdbffb 718 HostingAnswer[3]='0';
williequesada 0:c025e4fdbffb 719 HostingAnswer[4]='0';
williequesada 0:c025e4fdbffb 720 HostingAnswer[5]='0';
williequesada 0:c025e4fdbffb 721 wait_ms(3900);
williequesada 0:c025e4fdbffb 722 }
williequesada 0:c025e4fdbffb 723
williequesada 0:c025e4fdbffb 724 int main()
williequesada 0:c025e4fdbffb 725 {
williequesada 0:c025e4fdbffb 726 Gsm.attach(&Interrupt_Sim900);
williequesada 0:c025e4fdbffb 727 Master.attach(&Interrupt_Master);
williequesada 0:c025e4fdbffb 728 BaseClock.start();
williequesada 0:c025e4fdbffb 729 Computer.printf("Paquimetro 1067 Produccion\n");
williequesada 0:c025e4fdbffb 730 Led=0;
williequesada 0:c025e4fdbffb 731 ResetSIM900=0;
williequesada 0:c025e4fdbffb 732 while(1) {
williequesada 0:c025e4fdbffb 733 if(Button==0) {
williequesada 0:c025e4fdbffb 734 Led=1;
williequesada 0:c025e4fdbffb 735 BaseClock.start();
williequesada 0:c025e4fdbffb 736 BaseClock.reset();
williequesada 0:c025e4fdbffb 737 Computer.printf("Button\n");
williequesada 0:c025e4fdbffb 738 EncenderSIM900();
williequesada 0:c025e4fdbffb 739 BaseClock.stop();
williequesada 0:c025e4fdbffb 740 Led=0;
williequesada 0:c025e4fdbffb 741 }
williequesada 0:c025e4fdbffb 742 while(MasterCommand.Available()>0) {
williequesada 0:c025e4fdbffb 743 Command=MasterCommand.Get();
williequesada 0:c025e4fdbffb 744 switch (Command) {
williequesada 0:c025e4fdbffb 745 case COMMAND_ON:
williequesada 0:c025e4fdbffb 746 Computer.printf("-> -> Encender\n");
williequesada 0:c025e4fdbffb 747 BaseClock.start();
williequesada 0:c025e4fdbffb 748 BaseClock.reset();
williequesada 0:c025e4fdbffb 749 EncenderSIM900();
williequesada 0:c025e4fdbffb 750 break;
williequesada 0:c025e4fdbffb 751
williequesada 0:c025e4fdbffb 752 case COMMAND_INIT:
williequesada 0:c025e4fdbffb 753 Computer.printf("-> -> Iniciar\n");
williequesada 0:c025e4fdbffb 754 IniciarSIM900();
williequesada 0:c025e4fdbffb 755 break;
williequesada 0:c025e4fdbffb 756
williequesada 0:c025e4fdbffb 757 case COMMAND_GPRS:
williequesada 0:c025e4fdbffb 758 Computer.printf("-> -> GPRS\n");
williequesada 0:c025e4fdbffb 759 ConexionGPRS();
williequesada 0:c025e4fdbffb 760 break;
williequesada 0:c025e4fdbffb 761
williequesada 0:c025e4fdbffb 762 case COMMAND_DATA:
williequesada 0:c025e4fdbffb 763 Computer.printf("-> -> Datos\n");
williequesada 0:c025e4fdbffb 764 ReadUsuario();
williequesada 0:c025e4fdbffb 765 break;
williequesada 0:c025e4fdbffb 766
williequesada 0:c025e4fdbffb 767 case COMMAND_POST:
williequesada 0:c025e4fdbffb 768 Computer.printf("-> -> Post HTTP\n");
williequesada 0:c025e4fdbffb 769 PostEncryptHTTP();
williequesada 0:c025e4fdbffb 770 break;
williequesada 0:c025e4fdbffb 771
williequesada 0:c025e4fdbffb 772 case COMMAND_ANSWER:
williequesada 0:c025e4fdbffb 773 Computer.printf("-> -> Respuesta\n");
williequesada 0:c025e4fdbffb 774 RespuestaHTTP();
williequesada 0:c025e4fdbffb 775 break;
williequesada 0:c025e4fdbffb 776
williequesada 0:c025e4fdbffb 777 case COMMAND_END :
williequesada 0:c025e4fdbffb 778 Computer.printf("-> -> finalizar tiempo\n");
williequesada 0:c025e4fdbffb 779 FinalizarComunicacion();
williequesada 0:c025e4fdbffb 780 break;
williequesada 0:c025e4fdbffb 781
williequesada 0:c025e4fdbffb 782 case COMMAND_SIGNAL:
williequesada 0:c025e4fdbffb 783 Computer.printf("Cobertura Sim900\n");
williequesada 0:c025e4fdbffb 784 BaseClock.start();
williequesada 0:c025e4fdbffb 785 BaseClock.reset();
williequesada 0:c025e4fdbffb 786 CoberturaSIM900();
williequesada 0:c025e4fdbffb 787 BaseClock.stop();
williequesada 0:c025e4fdbffb 788 break;
williequesada 0:c025e4fdbffb 789
williequesada 0:c025e4fdbffb 790 case COMMAND_CONNECT:
williequesada 0:c025e4fdbffb 791 Computer.printf("Conexion Sim900\n");
williequesada 0:c025e4fdbffb 792 BaseClock.start();
williequesada 0:c025e4fdbffb 793 BaseClock.reset();
williequesada 0:c025e4fdbffb 794 ConexionSIM900();
williequesada 0:c025e4fdbffb 795 BaseClock.stop();
williequesada 0:c025e4fdbffb 796 break;
williequesada 0:c025e4fdbffb 797
williequesada 0:c025e4fdbffb 798 case COMMAND_OFF:
williequesada 0:c025e4fdbffb 799 Computer.printf("-> -> Apagar\n");
williequesada 0:c025e4fdbffb 800 MasterCommand.Flush();
williequesada 0:c025e4fdbffb 801 ApagarSIM900();
williequesada 0:c025e4fdbffb 802 wait_ms(4000);
williequesada 0:c025e4fdbffb 803 BaseClock.stop();
williequesada 0:c025e4fdbffb 804 break;
williequesada 0:c025e4fdbffb 805
williequesada 0:c025e4fdbffb 806 case HOSTING_STEP1:
williequesada 0:c025e4fdbffb 807 Computer.printf("Paso 1\n");
williequesada 0:c025e4fdbffb 808 BaseClock.start();
williequesada 0:c025e4fdbffb 809 BaseClock.reset();
williequesada 0:c025e4fdbffb 810 Step1();
williequesada 0:c025e4fdbffb 811 break;
williequesada 0:c025e4fdbffb 812
williequesada 0:c025e4fdbffb 813 case HOSTING_STEP2:
williequesada 0:c025e4fdbffb 814 Computer.printf("Paso 2\n"); // Respuesta SHUT OK
williequesada 0:c025e4fdbffb 815 Step2();
williequesada 0:c025e4fdbffb 816 break;
williequesada 0:c025e4fdbffb 817
williequesada 0:c025e4fdbffb 818 case HOSTING_STEP3:
williequesada 0:c025e4fdbffb 819 Computer.printf("Paso 3\n");
williequesada 0:c025e4fdbffb 820 Step3();
williequesada 0:c025e4fdbffb 821 break;
williequesada 0:c025e4fdbffb 822
williequesada 0:c025e4fdbffb 823 case HOSTING_STEP4:
williequesada 0:c025e4fdbffb 824 Computer.printf("Paso 4\n");
williequesada 0:c025e4fdbffb 825 Step4(); // Respuesta OK
williequesada 0:c025e4fdbffb 826 break;
williequesada 0:c025e4fdbffb 827
williequesada 0:c025e4fdbffb 828 case HOSTING_STEP5:
williequesada 0:c025e4fdbffb 829 Computer.printf("Paso 5\n");
williequesada 0:c025e4fdbffb 830 Step5();
williequesada 0:c025e4fdbffb 831 break;
williequesada 0:c025e4fdbffb 832
williequesada 0:c025e4fdbffb 833 case HOSTING_STEP6:
williequesada 0:c025e4fdbffb 834 Computer.printf("Paso 6\n");
williequesada 0:c025e4fdbffb 835 Step6();
williequesada 0:c025e4fdbffb 836 break;
williequesada 0:c025e4fdbffb 837
williequesada 0:c025e4fdbffb 838 case HOSTING_STEP7:
williequesada 0:c025e4fdbffb 839 Computer.printf("Paso 7\n");
williequesada 0:c025e4fdbffb 840 Step7();
williequesada 0:c025e4fdbffb 841 break;
williequesada 0:c025e4fdbffb 842
williequesada 0:c025e4fdbffb 843 case HOSTING_STEP8:
williequesada 0:c025e4fdbffb 844 Computer.printf("Paso 8\n");
williequesada 0:c025e4fdbffb 845 Step8();
williequesada 0:c025e4fdbffb 846 break;
williequesada 0:c025e4fdbffb 847
williequesada 0:c025e4fdbffb 848 case HOSTING_STEP9:
williequesada 0:c025e4fdbffb 849 Computer.printf("Paso 9\n");
williequesada 0:c025e4fdbffb 850 Step9();
williequesada 0:c025e4fdbffb 851 break;
williequesada 0:c025e4fdbffb 852
williequesada 0:c025e4fdbffb 853 case HOSTING_STEP10:
williequesada 0:c025e4fdbffb 854 Computer.printf("Paso 10\n");
williequesada 0:c025e4fdbffb 855 Step10();
williequesada 0:c025e4fdbffb 856 break;
williequesada 0:c025e4fdbffb 857
williequesada 0:c025e4fdbffb 858 case HOSTING_STEP11:
williequesada 0:c025e4fdbffb 859 Computer.printf("Paso 11\n");
williequesada 0:c025e4fdbffb 860 MasterCommand.Flush();
williequesada 0:c025e4fdbffb 861 Step11();
williequesada 0:c025e4fdbffb 862 BaseClock.stop();
williequesada 0:c025e4fdbffb 863 break;
williequesada 0:c025e4fdbffb 864
williequesada 0:c025e4fdbffb 865 case HOSTING_OFF:
williequesada 0:c025e4fdbffb 866 Computer.printf("Paso salida\n");
williequesada 0:c025e4fdbffb 867 PrintSerialRepeat("AT+HTTPTERM\r\n","OK",500,50);
williequesada 0:c025e4fdbffb 868 break;
williequesada 0:c025e4fdbffb 869 }
williequesada 0:c025e4fdbffb 870 }
williequesada 0:c025e4fdbffb 871 }
williequesada 0:c025e4fdbffb 872 }
williequesada 0:c025e4fdbffb 873 // Proceso Usuario, lista de comandos que se deben enviar:
williequesada 0:c025e4fdbffb 874 // 1.COMMAND_ON ---> Encerder el modulo.
williequesada 0:c025e4fdbffb 875 // 2.COMMAND_INIT ---> Cargar configuracion del modulo.
williequesada 0:c025e4fdbffb 876 // 3.COMMAND_GPRS ---> Iniciar conexion GPRS.
williequesada 0:c025e4fdbffb 877 // 4.COMMAND_DATA ---> Enviar datos [Tiempo,Identificador,Espacio] y se espera confirmacion.
williequesada 0:c025e4fdbffb 878 // 5.COMMAND_POST ---> Realizar post HTTP.
williequesada 0:c025e4fdbffb 879 // 6.COMMAND_ANSWER ---> Recibir respuesta del servicio.
williequesada 0:c025e4fdbffb 880 // 7.COMMAND_OFF ---> Apagar el modulo.
williequesada 0:c025e4fdbffb 881
williequesada 0:c025e4fdbffb 882 // Proceso Hosting, lista de comando que se deben enviar:
williequesada 0:c025e4fdbffb 883 // 1.HOSTING_STEP1 ---> Encerder el modulo.
williequesada 0:c025e4fdbffb 884 // 2.HOSTING_STEP2 ---> Comandos CREG Y CIPSHUT.
williequesada 0:c025e4fdbffb 885 // 3.HOSTING_STEP3 ---> Comandos CIPSTATUS Y CIPMUX.
williequesada 0:c025e4fdbffb 886 // 4.HOSTING_STEP4 ---> Comando CGATT.
williequesada 0:c025e4fdbffb 887 // 5.HOSTING_STEP5 ---> Comandos SAPBR GPRS y APN.
williequesada 0:c025e4fdbffb 888 // 6.HOSTING_STEP6 ---> Comando SAPBR 1,1.
williequesada 0:c025e4fdbffb 889 // 7.HOSTING_STEP7 ---> Comandos HTTPINIT y HTTPPARA.
williequesada 0:c025e4fdbffb 890 // 8.HOSTING_STEP8 ---> Se envian los datos [Indentificador, Alarmas] y HTTPPARA JSON.
williequesada 0:c025e4fdbffb 891 // 9.HOSTING_STEP9 ---> Comandos HTTPDATA y HTTPACTION.
williequesada 0:c025e4fdbffb 892 // 10.HOSTING_STEP10 ---> Comando HTTPREAD y se espera respuesta.
williequesada 0:c025e4fdbffb 893 // 11.HOSTING_STEP11 ---> Comandos HTTPTERM y se enviar respuesta, y se apaga modulo.
williequesada 0:c025e4fdbffb 894 // 12.HOSTING_OFF ---> Comando HTTPTERM en caso de choque con usuario.