teste de publish

Dependencies:   DS1820 HighSpeedAnalogIn devices mbed

Committer:
brunofgc
Date:
Tue Jun 05 15:29:01 2018 +0000
Revision:
35:11a51a36c494
Parent:
34:348991c54ff3
Child:
36:fd239680e427
Ultima vers?o 02/06/2018

Who changed what in which revision?

UserRevisionLine numberNew contents of line
brunofgc 0:1c0a769988ee 1 #include "mbed.h" //API mBed com diversos drivers para os periféricos LPC1768
brunofgc 0:1c0a769988ee 2 #include "stdio.h"
brunofgc 0:1c0a769988ee 3 #include "cmsis_os.h" //Nucleo do Real Time Operational System
brunofgc 0:1c0a769988ee 4 #include "main.h" //Inicializações de maquina e demais ajustes de hardware
brunofgc 0:1c0a769988ee 5 #include "funcoesSDCard.h" //Funções para manipulação do SDCard que incluem rotinas de inicialização, setar pastas e arquivos e demais usos
brunofgc 0:1c0a769988ee 6 #include "RTC.h" //API de uso das interrupções do Real Time Clock
brunofgc 0:1c0a769988ee 7 #include "serialPC.h" //Funções de comunicação entre RAD e PC via usb
brunofgc 0:1c0a769988ee 8 #include "modbusMaster1.h"
brunofgc 13:b9183b4bc049 9 //#include "lpc17xx_nvic.h"
brunofgc 13:b9183b4bc049 10
brunofgc 0:1c0a769988ee 11
brunofgc 7:ae9c47f62946 12 //Definições de Hardware acessíveis em qualquer modulo
brunofgc 7:ae9c47f62946 13 /*LEDs de informação visual*/
brunofgc 7:ae9c47f62946 14 DigitalOut ledLigado(P1_0);
brunofgc 7:ae9c47f62946 15 DigitalOut ledEmComunicacao(P1_1);
brunofgc 7:ae9c47f62946 16 DigitalOut ledConectadoInternet(P1_4);
brunofgc 7:ae9c47f62946 17 DigitalOut ledUsoGeral(P1_8);
brunofgc 7:ae9c47f62946 18 /*LEDs de informação visual*/
brunofgc 7:ae9c47f62946 19
brunofgc 7:ae9c47f62946 20 /*Pinos de controle do modulo WiFi*/
brunofgc 0:1c0a769988ee 21 DigitalOut ESP_CH_PD(P0_6);
brunofgc 0:1c0a769988ee 22 DigitalOut ESP_RESET(P0_0);
brunofgc 0:1c0a769988ee 23 DigitalOut ESP_ESPGPIO_2(P0_1);
brunofgc 7:ae9c47f62946 24 /*Pinos de controle do modulo WiFi*/
brunofgc 0:1c0a769988ee 25
brunofgc 7:ae9c47f62946 26 /*Interrupções externas para contagem de pulsos rapidos*/
brunofgc 6:d4ebbaaba295 27 InterruptIn eInt1(P2_11);
brunofgc 6:d4ebbaaba295 28 InterruptIn eInt2(P2_12);
brunofgc 6:d4ebbaaba295 29 InterruptIn eInt3(P2_13);
brunofgc 7:ae9c47f62946 30 /*Interrupções externas para contagem de pulsos rapidos*/
brunofgc 6:d4ebbaaba295 31
brunofgc 21:b9315cdd9275 32 /*Leituras analógicas*/
brunofgc 21:b9315cdd9275 33 /*AnalogIn ain1(p17);
brunofgc 21:b9315cdd9275 34 AnalogIn ain2(p18);
brunofgc 21:b9315cdd9275 35 AnalogIn ain3(p19);
brunofgc 21:b9315cdd9275 36 AnalogIn ain4(p20);*/
brunofgc 21:b9315cdd9275 37 /*Leituras analógicas*/
brunofgc 21:b9315cdd9275 38
brunofgc 7:ae9c47f62946 39 //Função para reset do ARM
brunofgc 0:1c0a769988ee 40 extern "C" void mbed_reset();
brunofgc 0:1c0a769988ee 41
brunofgc 30:8a06a85d8807 42 //Devices
brunofgc 0:1c0a769988ee 43 uint8_t devices=0;
brunofgc 30:8a06a85d8807 44 uint16_t alarmes=0;
brunofgc 30:8a06a85d8807 45 uint16_t leituras=0;
brunofgc 30:8a06a85d8807 46 uint16_t qtdSchedules=0;
brunofgc 30:8a06a85d8807 47 uint16_t qtdScheduleExceptions=0;
brunofgc 0:1c0a769988ee 48 //Devices
brunofgc 0:1c0a769988ee 49
brunofgc 0:1c0a769988ee 50 //Variáveis para envio de arquivo em qualquer lugar do código
brunofgc 0:1c0a769988ee 51 extern arquivoSD *arquivoEnvioPointer = NULL;
brunofgc 0:1c0a769988ee 52
brunofgc 7:ae9c47f62946 53 uint32_t act;
brunofgc 7:ae9c47f62946 54 bool boolExecAct;
brunofgc 7:ae9c47f62946 55 bool inicializaModemBool;
brunofgc 21:b9315cdd9275 56 char debug = false;
brunofgc 30:8a06a85d8807 57 char xeretaModem = false;
brunofgc 0:1c0a769988ee 58 bool hardwareReset = false;
brunofgc 30:8a06a85d8807 59 char firmVersion[20];
brunofgc 33:a60abda630f7 60 char resetCauses[30];
brunofgc 0:1c0a769988ee 61
brunofgc 0:1c0a769988ee 62
brunofgc 0:1c0a769988ee 63 MediaMovel FiltroAI4(5);
brunofgc 0:1c0a769988ee 64 MediaMovel FiltroAI3(5);
brunofgc 0:1c0a769988ee 65 MediaMovel FiltroAI2(5);
brunofgc 0:1c0a769988ee 66 MediaMovel FiltroAI1(5);
brunofgc 0:1c0a769988ee 67
brunofgc 0:1c0a769988ee 68 uint16_t aiFiltrada[4];
brunofgc 0:1c0a769988ee 69 bool entradasDigitais[9];
brunofgc 0:1c0a769988ee 70
brunofgc 30:8a06a85d8807 71 CircularBuffer bufModem(maxBufInModem);// __attribute__ ((section("AHBSRAM0")));
brunofgc 0:1c0a769988ee 72 CircularBuffer bufPC(128);
brunofgc 2:55b7b466e742 73 CircularBuffer sdCardBuf(1024);
brunofgc 0:1c0a769988ee 74
brunofgc 0:1c0a769988ee 75 uint8_t enviaDadosPorAlarme = 255;
brunofgc 2:55b7b466e742 76 //bool reportaMudancaAoServer;
brunofgc 0:1c0a769988ee 77 bool executaComandoServer;
brunofgc 7:ae9c47f62946 78
brunofgc 0:1c0a769988ee 79 //typeConfig flashConfig;
brunofgc 0:1c0a769988ee 80
brunofgc 7:ae9c47f62946 81 //Instancia das portas Seriais do ARM
brunofgc 0:1c0a769988ee 82 Serial pc(USBTX, USBRX); //Instancia de recurso Serial uart pc
brunofgc 7:ae9c47f62946 83 Serial modem(P0_10,P0_11); //Instancia de recurso Serial uart Modem
brunofgc 0:1c0a769988ee 84 DigitalOut max_de(P2_7); //Pino de habilitação max485 para porta Energy Metering ModBus
brunofgc 0:1c0a769988ee 85 Serial modBusMaster1Serial(P2_0,P2_1); //Recurso serial para porta Energy Metering ModBus
brunofgc 0:1c0a769988ee 86
brunofgc 0:1c0a769988ee 87 /*
brunofgc 0:1c0a769988ee 88 //Interrupções externas e botões
brunofgc 0:1c0a769988ee 89 InterruptIn int_wh(P2_11);
brunofgc 0:1c0a769988ee 90 InterruptIn int_varh(P2_12);
brunofgc 0:1c0a769988ee 91
brunofgc 0:1c0a769988ee 92 void whCount(void){
brunofgc 0:1c0a769988ee 93 whled=1;
brunofgc 0:1c0a769988ee 94 wait(0.2);
brunofgc 0:1c0a769988ee 95 whled=0;
brunofgc 0:1c0a769988ee 96 }
brunofgc 0:1c0a769988ee 97
brunofgc 0:1c0a769988ee 98 void varhCount(void){
brunofgc 0:1c0a769988ee 99 varhled=1;
brunofgc 0:1c0a769988ee 100 wait(0.2);
brunofgc 0:1c0a769988ee 101 varhled=0;
brunofgc 0:1c0a769988ee 102 }*/
brunofgc 0:1c0a769988ee 103 //Definições de Hardware acessíveis em qualquer modulo
brunofgc 0:1c0a769988ee 104
brunofgc 0:1c0a769988ee 105 /*
brunofgc 0:1c0a769988ee 106 void loadStandardConfig(){
brunofgc 0:1c0a769988ee 107 strcpy(flashConfig.apnList[0],"claro.com.br");
brunofgc 0:1c0a769988ee 108 strcpy(flashConfig.apnList[1],"zap.vivo.com.br");
brunofgc 0:1c0a769988ee 109 strcpy(flashConfig.apnList[2],"tim.br");
brunofgc 0:1c0a769988ee 110 strcpy(flashConfig.apnList[3],"generica.oi.com.br");
brunofgc 0:1c0a769988ee 111
brunofgc 0:1c0a769988ee 112 strcpy(flashConfig.login[0],"claro");
brunofgc 0:1c0a769988ee 113 strcpy(flashConfig.login[1],"vivo");
brunofgc 0:1c0a769988ee 114 strcpy(flashConfig.login[2],"tim");
brunofgc 0:1c0a769988ee 115 strcpy(flashConfig.login[3],"oi");
brunofgc 0:1c0a769988ee 116
brunofgc 0:1c0a769988ee 117 strcpy(flashConfig.senha[0],"claro");
brunofgc 0:1c0a769988ee 118 strcpy(flashConfig.senha[1],"vivo");
brunofgc 0:1c0a769988ee 119 strcpy(flashConfig.senha[2],"tim");
brunofgc 0:1c0a769988ee 120 strcpy(flashConfig.senha[3],"oi");
brunofgc 0:1c0a769988ee 121
brunofgc 2:55b7b466e742 122 strcpy(flashConfig.serverAddress,serverAddress);
brunofgc 0:1c0a769988ee 123
brunofgc 0:1c0a769988ee 124 strcpy(flashConfig.serverPort,"80");
brunofgc 0:1c0a769988ee 125
brunofgc 0:1c0a769988ee 126 flashConfig.periodoDeEnvioDeDadosMinutos=15; //Padrão 15 minutos
brunofgc 0:1c0a769988ee 127 flashConfig.ultimoEstadoLigadoDesligado=0; //Padrão de fábrica desligado
brunofgc 0:1c0a769988ee 128 }
brunofgc 0:1c0a769988ee 129 */
brunofgc 0:1c0a769988ee 130
brunofgc 0:1c0a769988ee 131 void leiturasDigitais(){
brunofgc 0:1c0a769988ee 132 entradasDigitais[0] = ED1;
brunofgc 0:1c0a769988ee 133 entradasDigitais[1] = ED2;
brunofgc 0:1c0a769988ee 134 entradasDigitais[2] = ED3;
brunofgc 0:1c0a769988ee 135 entradasDigitais[3] = ED4;
brunofgc 0:1c0a769988ee 136 entradasDigitais[4] = ED5;
brunofgc 0:1c0a769988ee 137 entradasDigitais[5] = ED6;
brunofgc 0:1c0a769988ee 138 entradasDigitais[6] = ED7;
brunofgc 0:1c0a769988ee 139 entradasDigitais[7] = ED8;
brunofgc 0:1c0a769988ee 140 entradasDigitais[8] = ED9;
brunofgc 0:1c0a769988ee 141 }
brunofgc 0:1c0a769988ee 142
brunofgc 21:b9315cdd9275 143 HighSpeedAnalogIn ain(p17, p18, p19, p20);
brunofgc 0:1c0a769988ee 144
brunofgc 0:1c0a769988ee 145 void leiturasAnalogicas(){
brunofgc 21:b9315cdd9275 146 static uint8_t leituraAtual;
brunofgc 21:b9315cdd9275 147 switch(leituraAtual){
brunofgc 21:b9315cdd9275 148 case 0:
brunofgc 21:b9315cdd9275 149 aiFiltrada[0] = FiltroAI1.get(ain.read_u16(p17));
brunofgc 21:b9315cdd9275 150 break;
brunofgc 21:b9315cdd9275 151 case 1:
brunofgc 21:b9315cdd9275 152 aiFiltrada[1] = FiltroAI2.get(ain.read_u16(p18));
brunofgc 21:b9315cdd9275 153 break;
brunofgc 21:b9315cdd9275 154 case 2:
brunofgc 21:b9315cdd9275 155 aiFiltrada[2] = FiltroAI3.get(ain.read_u16(p19));
brunofgc 21:b9315cdd9275 156 break;
brunofgc 21:b9315cdd9275 157 case 3:
brunofgc 21:b9315cdd9275 158 aiFiltrada[3] = FiltroAI4.get(ain.read_u16(p20));
brunofgc 21:b9315cdd9275 159 break;
brunofgc 0:1c0a769988ee 160 }
brunofgc 21:b9315cdd9275 161 if(leituraAtual<3){leituraAtual++;}
brunofgc 21:b9315cdd9275 162 else{leituraAtual=0;}
brunofgc 0:1c0a769988ee 163 }
brunofgc 0:1c0a769988ee 164
brunofgc 21:b9315cdd9275 165 void verificaSaidasDigitais(){
brunofgc 21:b9315cdd9275 166 SD_OE_R = 1;
brunofgc 21:b9315cdd9275 167 /*if(SD_FAULT){
brunofgc 30:8a06a85d8807 168 if(debug)pc.printf("Fault\r\n");
brunofgc 21:b9315cdd9275 169 }else{
brunofgc 30:8a06a85d8807 170 if(debug)pc.printf("No Fault\r\n");
brunofgc 21:b9315cdd9275 171 }*/
brunofgc 21:b9315cdd9275 172 }
brunofgc 4:13ff9c81dc10 173
brunofgc 0:1c0a769988ee 174 //Thread timers é utilizada para dar start nos timers de dentro das ISRs de comunicação serial porque não é permitido inicializar osTimers de dentro de ISRs.
brunofgc 0:1c0a769988ee 175 osThreadId idThreadTimers;
brunofgc 0:1c0a769988ee 176 void threadTimers(void const *args){
brunofgc 0:1c0a769988ee 177 while(true){
brunofgc 30:8a06a85d8807 178 osSignalWait(0x1,1000); //Executo compulsoriamente mesmo que não haja sinal num periodo de 1 segundo
brunofgc 30:8a06a85d8807 179 //if(enviaDadosPorAlarme==255){//debug
brunofgc 30:8a06a85d8807 180 if(serialPC::startTimer_pacote){
brunofgc 30:8a06a85d8807 181 serialPC::startTimer_pacote = false;
brunofgc 30:8a06a85d8807 182 osTimerStart(serialPC::timer_pacote,100);
brunofgc 30:8a06a85d8807 183 }
brunofgc 30:8a06a85d8807 184 if(serialModem::startTimer_pacote){
brunofgc 30:8a06a85d8807 185 serialModem::startTimer_pacote = false;
brunofgc 30:8a06a85d8807 186 osTimerStart(serialModem::timer_pacote,modemCom::timeOutModem);
brunofgc 30:8a06a85d8807 187 }
brunofgc 30:8a06a85d8807 188 //}
brunofgc 0:1c0a769988ee 189 if(modBusMaster1::startThreadModBusMaster){
brunofgc 0:1c0a769988ee 190 modBusMaster1::startThreadModBusMaster = false;
brunofgc 0:1c0a769988ee 191 osTimerStart(modBusMaster1::timer_pacote,4);
brunofgc 4:13ff9c81dc10 192 }
brunofgc 0:1c0a769988ee 193 }
brunofgc 0:1c0a769988ee 194 }
brunofgc 9:cf406384efd9 195 osThreadDef(threadTimers, osPriorityNormal, 128);
brunofgc 29:823a9da3696b 196
brunofgc 0:1c0a769988ee 197
brunofgc 0:1c0a769988ee 198 osThreadId idThreadProcessaPacote;
brunofgc 0:1c0a769988ee 199 void threadProcessaPacote(void const *args){
brunofgc 0:1c0a769988ee 200 while(true){
brunofgc 29:823a9da3696b 201 osSignalWait(0x1,100); //Executo compulsoriamente mesmo que não haja sinal num periodo de 1 segundo
brunofgc 4:13ff9c81dc10 202 if(serialModem::processarPacote){
brunofgc 4:13ff9c81dc10 203 serialModem::processarPacote = false;
brunofgc 4:13ff9c81dc10 204 modemCom::processaPacote(NULL);
brunofgc 21:b9315cdd9275 205 }
brunofgc 4:13ff9c81dc10 206 }
brunofgc 0:1c0a769988ee 207 }
brunofgc 23:f3c87afb6548 208 osThreadDef(threadProcessaPacote, osPriorityNormal, DEFAULT_STACK_SIZE);
brunofgc 0:1c0a769988ee 209
brunofgc 0:1c0a769988ee 210
brunofgc 7:ae9c47f62946 211
brunofgc 2:55b7b466e742 212 //Thread que gerencia as comunicacoes (DROME - SERVER)
brunofgc 0:1c0a769988ee 213 osThreadId idThreadComunicacoes;
brunofgc 0:1c0a769988ee 214 void threadComunicacoes(void const *args){
brunofgc 0:1c0a769988ee 215 //Esta thread faz todo o tratamento de comunicação.
brunofgc 0:1c0a769988ee 216
brunofgc 7:ae9c47f62946 217 //char aux[30];
brunofgc 7:ae9c47f62946 218 while(true){
brunofgc 29:823a9da3696b 219 osSignalWait(0x1,1000); //Libero processamento e executo compulsoriamente mesmo que não haja sinal num periodo de um segundo
brunofgc 29:823a9da3696b 220 if(inicializaModemBool){
brunofgc 29:823a9da3696b 221 inicializaModemBool = false;
brunofgc 29:823a9da3696b 222 modemCom::conectaWiFi();
brunofgc 29:823a9da3696b 223 }
brunofgc 29:823a9da3696b 224 if(hardwareReset){
brunofgc 29:823a9da3696b 225 //Resetando
brunofgc 32:7cf1fb8a8bf3 226 printf("hardwareReset = true.\r\n");
brunofgc 33:a60abda630f7 227 osDelay(50); //Para dar tempo de enviar todo o printf.
brunofgc 33:a60abda630f7 228 //diversos::wdt.kick(0.1);
brunofgc 33:a60abda630f7 229 NVIC_SystemReset();
brunofgc 29:823a9da3696b 230 while(true);
brunofgc 29:823a9da3696b 231 }
brunofgc 29:823a9da3696b 232 if(eventosRTC::rotinaEnvioDeDados){
brunofgc 30:8a06a85d8807 233 //Faço aqui o que for devido.
brunofgc 30:8a06a85d8807 234 if((!modemCom::status.recebendoArquivoDoServer)&&(enviaDadosPorAlarme==255)){
brunofgc 33:a60abda630f7 235 if(!modemCom::timeOutEnvioDados){
brunofgc 33:a60abda630f7 236 modemCom::timeOutEnvioDados=maxTimeEnvioDados;
brunofgc 33:a60abda630f7 237 }
brunofgc 30:8a06a85d8807 238 if(debug){pc.printf("Enviando dados de hora completa ao server.\n");}
brunofgc 30:8a06a85d8807 239 modemCom::status.emComunicacao = true;
brunofgc 29:823a9da3696b 240 eventosRTC::rotinaEnvioDeDados--;
brunofgc 29:823a9da3696b 241 modemCom::status.periodo = 900;
brunofgc 35:11a51a36c494 242 diversos::wdt.kick(180);
brunofgc 29:823a9da3696b 243 if(modemCom::verificaConexao()){
brunofgc 33:a60abda630f7 244 //Estou conectado
brunofgc 29:823a9da3696b 245 if(modemCom::enviaDados()){
brunofgc 29:823a9da3696b 246 eventosRTC::rotinaEnvioDeDados=0;
brunofgc 33:a60abda630f7 247 modemCom::timeOutEnvioDados=0;
brunofgc 29:823a9da3696b 248 modemCom::status.periodo = modemCom::status.periodoConfiguracao; //Restaurando o período configurado no sistema
brunofgc 25:a6da63ed025b 249 }
brunofgc 29:823a9da3696b 250 }
brunofgc 30:8a06a85d8807 251 modemCom::status.emComunicacao = false;
brunofgc 25:a6da63ed025b 252 }
brunofgc 30:8a06a85d8807 253
brunofgc 29:823a9da3696b 254 }
brunofgc 29:823a9da3696b 255
brunofgc 29:823a9da3696b 256 if(arquivoEnvioPointer!=NULL){
brunofgc 30:8a06a85d8807 257 if(debug){pc.printf("Enviando o arquivo <%s> ao server.\n",arquivoEnvioPointer->nome);}
brunofgc 29:823a9da3696b 258 if(modemCom::postFileCommandMode(modemCom::status.serverIP,modemCom::status.host,"/drome/parser/index.php",arquivoEnvioPointer)){
brunofgc 29:823a9da3696b 259 //if(modemCom::postFileCommandMode(modemCom::status.serverIP,modemCom::status.host,"/sistema/Parser/index.php",arquivoEnvioPointer)){
brunofgc 30:8a06a85d8807 260 if(debug){pc.printf("Enviado o arquivo <%s>.\n",arquivoEnvioPointer->nome);}
brunofgc 29:823a9da3696b 261 arquivoEnvioPointer = NULL;
brunofgc 29:823a9da3696b 262 }else{
brunofgc 30:8a06a85d8807 263 if(debug){pc.printf("Erro enviando o arquivo <%s>.\n",arquivoEnvioPointer->nome);}
brunofgc 29:823a9da3696b 264 }
brunofgc 7:ae9c47f62946 265 }
brunofgc 29:823a9da3696b 266
brunofgc 29:823a9da3696b 267 if(modemCom::status.SRINGsockEntrante){
brunofgc 29:823a9da3696b 268 modemCom::status.SRINGsockEntrante=false;
brunofgc 29:823a9da3696b 269 modemCom::atendeSRING(modemCom::status.connIDServerCommand);
brunofgc 29:823a9da3696b 270 }
brunofgc 29:823a9da3696b 271 modemCom::timeOutModem = 30;
brunofgc 29:823a9da3696b 272 }
brunofgc 0:1c0a769988ee 273 }
brunofgc 29:823a9da3696b 274 //osThreadDef(threadComunicacoes, osPriorityNormal, 3072);
brunofgc 29:823a9da3696b 275 osThreadDef(threadComunicacoes, osPriorityNormal, (DEFAULT_STACK_SIZE*2));
brunofgc 0:1c0a769988ee 276
brunofgc 0:1c0a769988ee 277 void RTC_POR_SEGUNDO(void){
brunofgc 0:1c0a769988ee 278 time_t seconds;
brunofgc 0:1c0a769988ee 279 seconds = time(NULL);
brunofgc 29:823a9da3696b 280 //osSignalSet(idThreadComunicacoes, 0x1);
brunofgc 0:1c0a769988ee 281 eventosRTC::rotina1segundo=true;
brunofgc 0:1c0a769988ee 282
brunofgc 7:ae9c47f62946 283 if(((seconds+5)%10)==0){
brunofgc 19:5559f7570e6f 284 eventosRTC::rotina10Segundos = true;
brunofgc 0:1c0a769988ee 285 }
brunofgc 0:1c0a769988ee 286
brunofgc 0:1c0a769988ee 287 if((seconds%60)==0){
brunofgc 0:1c0a769988ee 288 eventosRTC::minutos = true;
brunofgc 0:1c0a769988ee 289 }
brunofgc 0:1c0a769988ee 290
brunofgc 33:a60abda630f7 291 if(((seconds-15)%modemCom::status.periodo)==0){
brunofgc 9:cf406384efd9 292 //if((seconds%300)==0){
brunofgc 21:b9315cdd9275 293 eventosRTC::rotinaEnvioDeDados = maxTentativasEnvioDados;
brunofgc 29:823a9da3696b 294 osSignalSet(idThreadComunicacoes, 0x1);
brunofgc 29:823a9da3696b 295 }
brunofgc 0:1c0a769988ee 296 }
brunofgc 0:1c0a769988ee 297
brunofgc 0:1c0a769988ee 298 void loadDevices(){
brunofgc 0:1c0a769988ee 299 if(sdCard::abreArquivo(&sdCard::devices,"r")){
brunofgc 0:1c0a769988ee 300 criaDevices(sdCard::devices.fp);
brunofgc 0:1c0a769988ee 301 if(devices){
brunofgc 0:1c0a769988ee 302 configuraDevices(sdCard::devices.fp);
brunofgc 2:55b7b466e742 303 printf("Dispositivos configurados.\n");
brunofgc 0:1c0a769988ee 304 }
brunofgc 21:b9315cdd9275 305 sdCard::fechaArquivo(&sdCard::devices);
brunofgc 2:55b7b466e742 306 if(devices){testaTudoDevices();}
brunofgc 0:1c0a769988ee 307 }
brunofgc 0:1c0a769988ee 308 }
brunofgc 0:1c0a769988ee 309
brunofgc 0:1c0a769988ee 310 void inicializaMaquina(){
brunofgc 33:a60abda630f7 311
brunofgc 33:a60abda630f7 312
brunofgc 33:a60abda630f7 313 //Resetei pq?
brunofgc 33:a60abda630f7 314
brunofgc 33:a60abda630f7 315 sprintf(resetCauses,"POR");
brunofgc 33:a60abda630f7 316 if((LPC_WDT->WDMOD >> 2) & 1){
brunofgc 33:a60abda630f7 317 strcat(resetCauses,",WDT");
brunofgc 33:a60abda630f7 318 }
brunofgc 33:a60abda630f7 319
brunofgc 33:a60abda630f7 320 diversos::wdt.kick(90.0);
brunofgc 33:a60abda630f7 321
brunofgc 14:c0162ab2a951 322 pwmPeriod = 100000;
brunofgc 0:1c0a769988ee 323 SD1.period_us(pwmPeriod);
brunofgc 0:1c0a769988ee 324 modemCom::atendendoWebServer = false;
brunofgc 34:348991c54ff3 325
brunofgc 30:8a06a85d8807 326 printf("Versao: %s.\r\n",firmVersion);
brunofgc 33:a60abda630f7 327 printf("Reset Causes: %s.\r\n",resetCauses);
brunofgc 0:1c0a769988ee 328 modemCom::timeOutModem = 30;
brunofgc 14:c0162ab2a951 329 serialModem::serial_init();
brunofgc 14:c0162ab2a951 330 numeroDeBytesPorEnvio = 768;
brunofgc 14:c0162ab2a951 331 modBusMaster1::modBusMaster(&modBusMaster1Serial,19200,&max_de);
brunofgc 14:c0162ab2a951 332 inicializaSensoresTemperatura();
brunofgc 0:1c0a769988ee 333
brunofgc 0:1c0a769988ee 334 if(sdCard::init()){
brunofgc 30:8a06a85d8807 335 printf("SD Card inicializado com sucesso.\n");
brunofgc 0:1c0a769988ee 336 //Carregando a lista de dispositivos
brunofgc 0:1c0a769988ee 337 loadDevices();
brunofgc 0:1c0a769988ee 338 }else{
brunofgc 30:8a06a85d8807 339 printf("Nao foi possivel inicializar o SD Card.\n");
brunofgc 13:b9183b4bc049 340 }
brunofgc 13:b9183b4bc049 341
brunofgc 13:b9183b4bc049 342
brunofgc 7:ae9c47f62946 343 //Tick Timer por segundo
brunofgc 0:1c0a769988ee 344 RTC::attach(&RTC_POR_SEGUNDO, RTC::Second);
brunofgc 7:ae9c47f62946 345
brunofgc 7:ae9c47f62946 346 /*Chamada de threads*/
brunofgc 7:ae9c47f62946 347
brunofgc 7:ae9c47f62946 348 //Thread timers
brunofgc 0:1c0a769988ee 349 idThreadTimers = osThreadCreate(osThread(threadTimers), NULL);
brunofgc 7:ae9c47f62946 350 //Thread comunicacoes
brunofgc 0:1c0a769988ee 351 idThreadComunicacoes = osThreadCreate(osThread(threadComunicacoes), NULL);
brunofgc 7:ae9c47f62946 352 //Thread processaPacote
brunofgc 0:1c0a769988ee 353 idThreadProcessaPacote = osThreadCreate(osThread(threadProcessaPacote), NULL);
brunofgc 7:ae9c47f62946 354
brunofgc 33:a60abda630f7 355 /*Chamada de threads*/
brunofgc 33:a60abda630f7 356 modemCom::status.connIDServerCommand = 255;
brunofgc 33:a60abda630f7 357 modemCom::status.connIDWebServer = 255;
brunofgc 33:a60abda630f7 358 modemCom::status.connIDSendData = 255;
brunofgc 0:1c0a769988ee 359 }
brunofgc 0:1c0a769988ee 360
brunofgc 0:1c0a769988ee 361 //Inicio do programa;
brunofgc 34:348991c54ff3 362 int main() {
brunofgc 34:348991c54ff3 363 flashPrepare();
brunofgc 34:348991c54ff3 364 firmDescToRam();
brunofgc 34:348991c54ff3 365 serialPC::serialPC_init();
brunofgc 34:348991c54ff3 366 pc.printf("firmDesc: nome <%s> tamFirmware = %lu executaBootLoader = %u.\r\n",(char*)&memBufConfigBootLoader[5],tamFirmware,executaBootLoader);
brunofgc 34:348991c54ff3 367
brunofgc 34:348991c54ff3 368 if(executaBootLoader==1){
brunofgc 34:348991c54ff3 369 executaBootLoader=0;
brunofgc 34:348991c54ff3 370 pc.printf("Chamando o bootloader logo apos dar reset.\r\n");
brunofgc 34:348991c54ff3 371 while( ((LPC_UART0->LSR >> 6) &0x1) == 0 );
brunofgc 34:348991c54ff3 372 //__disable_irq();
brunofgc 34:348991c54ff3 373 SysTick->CTRL &= ~0x00000002; // disable SysTick interrupt
brunofgc 34:348991c54ff3 374 NVIC_DeInit();
brunofgc 34:348991c54ff3 375 firmDescToFlash();
brunofgc 34:348991c54ff3 376 bootLoader();
brunofgc 34:348991c54ff3 377 }
brunofgc 34:348991c54ff3 378
brunofgc 35:11a51a36c494 379 sprintf(firmVersion,"02/06/18(BL)");
brunofgc 30:8a06a85d8807 380
brunofgc 33:a60abda630f7 381
brunofgc 6:d4ebbaaba295 382 eInt1.rise(&diversos::processaPulsosEDs);
brunofgc 6:d4ebbaaba295 383 eInt2.rise(&diversos::processaPulsosEDs);
brunofgc 33:a60abda630f7 384 eInt3.rise(&diversos::processaPulsosEDs);
brunofgc 0:1c0a769988ee 385
brunofgc 0:1c0a769988ee 386 modem.baud(76800);
brunofgc 0:1c0a769988ee 387 ESP_CH_PD = 1;
brunofgc 0:1c0a769988ee 388 ESP_ESPGPIO_2 = 1;
brunofgc 0:1c0a769988ee 389 ESP_RESET = 1;
brunofgc 0:1c0a769988ee 390
brunofgc 33:a60abda630f7 391 wait(10);
brunofgc 33:a60abda630f7 392
brunofgc 33:a60abda630f7 393 inicializaMaquina();
brunofgc 0:1c0a769988ee 394 modemCom::inicializaModem();
brunofgc 33:a60abda630f7 395 /*if(!modemCom::verificaConexao()){
brunofgc 21:b9315cdd9275 396 modemCom::conectaWiFi();
brunofgc 33:a60abda630f7 397 }*/
brunofgc 33:a60abda630f7 398
brunofgc 33:a60abda630f7 399 //Agendando primeiro envio de cara.
brunofgc 33:a60abda630f7 400 eventosRTC::rotinaEnvioDeDados=maxTentativasEnvioDados;
brunofgc 33:a60abda630f7 401 osSignalSet(idThreadComunicacoes, 0x1);
brunofgc 33:a60abda630f7 402
brunofgc 34:348991c54ff3 403
brunofgc 21:b9315cdd9275 404
brunofgc 29:823a9da3696b 405 while(true){
brunofgc 29:823a9da3696b 406 osDelay(100);
brunofgc 13:b9183b4bc049 407 if(callBootLoader){
brunofgc 35:11a51a36c494 408 diversos::wdt.kick(180.0);
brunofgc 13:b9183b4bc049 409 SysTick->CTRL &= ~0x00000002; // disable SysTick interrupt
brunofgc 34:348991c54ff3 410 NVIC_DeInit();
brunofgc 33:a60abda630f7 411
brunofgc 33:a60abda630f7 412 //Bloco novo
brunofgc 33:a60abda630f7 413 //SysTick->CTRL = 0;
brunofgc 33:a60abda630f7 414 //SysTick->LOAD = 0;
brunofgc 33:a60abda630f7 415 //SysTick->VAL = 0;
brunofgc 33:a60abda630f7 416
brunofgc 33:a60abda630f7 417 /**
brunofgc 33:a60abda630f7 418 * Step: Disable all interrupts
brunofgc 33:a60abda630f7 419 */
brunofgc 33:a60abda630f7 420 //__disable_irq();
brunofgc 33:a60abda630f7 421
brunofgc 33:a60abda630f7 422 /* ARM Cortex-M Programming Guide to Memory Barrier Instructions.*/
brunofgc 33:a60abda630f7 423 //__DSB();
brunofgc 33:a60abda630f7 424 //Bloco novo
brunofgc 13:b9183b4bc049 425 //__disable_irq();
brunofgc 34:348991c54ff3 426 //__disable_irq();
brunofgc 13:b9183b4bc049 427 bootloader_fillUpFlash(&sdCard::newFirmware);
brunofgc 34:348991c54ff3 428 pc.printf("Logo depois de fillUpFlash firmDesc: nome <%s> tamFirmware = %lu\r\n",(char*)&memBufConfigBootLoader[5],tamFirmware);
brunofgc 34:348991c54ff3 429
brunofgc 34:348991c54ff3 430
brunofgc 34:348991c54ff3 431 NVIC_SystemReset();
brunofgc 34:348991c54ff3 432 /*while( ((LPC_UART0->LSR >> 6) &0x1) == 0 );
brunofgc 13:b9183b4bc049 433 //__enable_irq();
brunofgc 34:348991c54ff3 434 bootLoader();*/
brunofgc 13:b9183b4bc049 435 }
brunofgc 29:823a9da3696b 436
brunofgc 33:a60abda630f7 437 /*---------------------Bloco de prevenção de bloqueio-------------------------------*/
brunofgc 29:823a9da3696b 438 if((!modemCom::status.recebendoArquivoDoServer)&&(!modemCom::status.emComunicacao)){
brunofgc 35:11a51a36c494 439 diversos::wdt.kick(180.0);
brunofgc 33:a60abda630f7 440 }else{
brunofgc 33:a60abda630f7 441 /*-----------------Bloco temporizador de recepção de arquivo--------------*/
brunofgc 29:823a9da3696b 442 if(modemCom::status.recebendoArquivoDoServer){
brunofgc 33:a60abda630f7 443 if(modemCom::status.recebendoArquivoDoServer==1){
brunofgc 33:a60abda630f7 444 modemCom::closeConnection(&modemCom::status.connIDServerCommand);
brunofgc 33:a60abda630f7 445 //Insere erro no arquivo.
brunofgc 33:a60abda630f7 446 }
brunofgc 33:a60abda630f7 447 modemCom::status.recebendoArquivoDoServer--;
brunofgc 33:a60abda630f7 448 if(xeretaModem){pc.printf("recebendoArquivoDoServer = %lu.\r\n",modemCom::status.recebendoArquivoDoServer);}
brunofgc 33:a60abda630f7 449 }
brunofgc 33:a60abda630f7 450 /*-----------------Bloco temporizador de recepção de arquivo--------------*/
brunofgc 33:a60abda630f7 451
brunofgc 33:a60abda630f7 452 /*-----------------Bloco temporizador de recepção de envio de dados-------*/
brunofgc 33:a60abda630f7 453 if(modemCom::status.emComunicacao){
brunofgc 33:a60abda630f7 454 if(modemCom::timeOutEnvioDados==1){
brunofgc 33:a60abda630f7 455 modemCom::status.emComunicacao=0;
brunofgc 33:a60abda630f7 456 modemCom::closeConnection(&modemCom::status.connIDServerCommand);
brunofgc 33:a60abda630f7 457 modemCom::closeConnection(&modemCom::status.connIDWebServer);
brunofgc 33:a60abda630f7 458 modemCom::closeConnection(&modemCom::status.connIDSendData);
brunofgc 33:a60abda630f7 459 //Insere erro no arquivo.
brunofgc 29:823a9da3696b 460 }
brunofgc 33:a60abda630f7 461 modemCom::timeOutEnvioDados--;
brunofgc 33:a60abda630f7 462 if(xeretaModem){pc.printf("timeOutEnvioDados = %lu.\r\n",modemCom::timeOutEnvioDados);}
brunofgc 29:823a9da3696b 463 }
brunofgc 33:a60abda630f7 464 /*-----------------Bloco temporizador de recepção de envio de dados-------*/
brunofgc 29:823a9da3696b 465 }
brunofgc 33:a60abda630f7 466 /*---------------------Bloco de prevenção de bloqueio-------------------------------*/
brunofgc 29:823a9da3696b 467
brunofgc 33:a60abda630f7 468 if(executaComandoServer){
brunofgc 33:a60abda630f7 469 executaComandoServer = false;
brunofgc 33:a60abda630f7 470
brunofgc 33:a60abda630f7 471 commands::exec(modemCom::status.connIDServerCommand);
brunofgc 33:a60abda630f7 472 if(!modemCom::status.recebendoArquivoDoServer){
brunofgc 33:a60abda630f7 473 if(debug){pc.printf("Fechando socket chave 4.\r\n");}
brunofgc 33:a60abda630f7 474 modemCom::closeConnection(&modemCom::status.connIDServerCommand);
brunofgc 33:a60abda630f7 475 }
brunofgc 33:a60abda630f7 476 }
brunofgc 33:a60abda630f7 477
brunofgc 33:a60abda630f7 478 if(sdCard::deleteSentFiles){
brunofgc 33:a60abda630f7 479 printf("Recebido comando para deletar arquivos enviados.\n");
brunofgc 33:a60abda630f7 480 sdCard::deleteBanks(sdCard::currentBankSending);
brunofgc 33:a60abda630f7 481 if(sdCard::modificaCurrentBank(sdCard::currentBank,!sdCard::currentBankSending)){
brunofgc 33:a60abda630f7 482 sdCard::deleteSentFiles=false;
brunofgc 33:a60abda630f7 483 }
brunofgc 33:a60abda630f7 484 }
brunofgc 33:a60abda630f7 485
brunofgc 33:a60abda630f7 486 if(modemCom::atendendoWebServer){
brunofgc 33:a60abda630f7 487 modemCom::atendendoWebServer = false;
brunofgc 33:a60abda630f7 488 if(debug){pc.printf("Atendendo webServer na conexao %u.\r\n",modemCom::status.connIDWebServer);}
brunofgc 33:a60abda630f7 489 modemCom::status.emComunicacao=true;
brunofgc 33:a60abda630f7 490 modemCom::webServer(modemCom::status.connIDWebServer);
brunofgc 33:a60abda630f7 491 modemCom::status.emComunicacao=false;
brunofgc 33:a60abda630f7 492 }
brunofgc 33:a60abda630f7 493
brunofgc 33:a60abda630f7 494 if(boolExecAct){
brunofgc 33:a60abda630f7 495 execAct(act);
brunofgc 33:a60abda630f7 496 boolExecAct = false;
brunofgc 33:a60abda630f7 497 }
brunofgc 30:8a06a85d8807 498
brunofgc 30:8a06a85d8807 499 if((!modemCom::status.recebendoArquivoDoServer)&&(!modemCom::status.emComunicacao)){
brunofgc 2:55b7b466e742 500 if(eventosRTC::rotina1segundo){
brunofgc 29:823a9da3696b 501 eventosRTC::rotina1segundo = false;
brunofgc 2:55b7b466e742 502 if(enviaDadosPorAlarme!=255){
brunofgc 2:55b7b466e742 503 enviaDadosPorAlarme--;
brunofgc 2:55b7b466e742 504 if(enviaDadosPorAlarme==0){
brunofgc 18:1eefda1f7736 505 eventosRTC::rotinaEnvioDeDados=maxTentativasEnvioDados;
brunofgc 30:8a06a85d8807 506 enviaDadosPorAlarme=255;
brunofgc 2:55b7b466e742 507 }
brunofgc 29:823a9da3696b 508 }
brunofgc 21:b9315cdd9275 509 leiturasAnalogicas();
brunofgc 21:b9315cdd9275 510 verificaSaidasDigitais();
brunofgc 26:c246eacf6815 511 leiturasDigitais();
brunofgc 30:8a06a85d8807 512
brunofgc 21:b9315cdd9275 513 if(debug){
brunofgc 21:b9315cdd9275 514 pc.printf("\nMemoria RAM disponivel = %lu\n",diversos::memAvailable());
brunofgc 21:b9315cdd9275 515 pc.printf("\nEntrada 4 = %lu.\nEntrada 3 = %lu.\nEntrada 2 = %lu.\nEntrada 1 = %lu.\r\n",aiFiltrada[3],aiFiltrada[2],aiFiltrada[1],aiFiltrada[0]);
brunofgc 21:b9315cdd9275 516 pc.printf("Pulsos <%lu><%lu><%lu>.\r\n",pulsosEDs[0],pulsosEDs[1],pulsosEDs[2]);
brunofgc 30:8a06a85d8807 517
brunofgc 21:b9315cdd9275 518 for(debug=0;debug<9;debug++){
brunofgc 30:8a06a85d8807 519 printf("EntradaDigital[%u]=%u.\r\n",debug,(entradasDigitais[debug]>1));
brunofgc 21:b9315cdd9275 520 }
brunofgc 33:a60abda630f7 521 }
brunofgc 2:55b7b466e742 522 time_t seconds = time(NULL);
brunofgc 30:8a06a85d8807 523 printf("Drome %s, Hora-> %s\n",firmVersion,ctime(&seconds));
brunofgc 33:a60abda630f7 524 }
brunofgc 2:55b7b466e742 525
brunofgc 2:55b7b466e742 526 if(eventosRTC::rotina10Segundos){
brunofgc 25:a6da63ed025b 527 //Executo abaixo a rotina de 10 segundos
brunofgc 26:c246eacf6815 528 eventosRTC::rotina10Segundos = false;
brunofgc 25:a6da63ed025b 529 verifySchedules();
brunofgc 29:823a9da3696b 530 verifyAlarms();
brunofgc 7:ae9c47f62946 531 }
brunofgc 33:a60abda630f7 532
brunofgc 33:a60abda630f7 533 if((eventosRTC::minutos)&&(!modemCom::status.recebendoArquivoDoServer)){
brunofgc 33:a60abda630f7 534 //Executo abaixo a rotina de 1 minuto
brunofgc 33:a60abda630f7 535 eventosRTC::minutos = false;
brunofgc 33:a60abda630f7 536 refreshSensoresTemperatura();
brunofgc 33:a60abda630f7 537 writeReadingsToSD();
brunofgc 11:631bea162800 538 }
brunofgc 2:55b7b466e742 539 }
brunofgc 0:1c0a769988ee 540 }
brunofgc 0:1c0a769988ee 541 }