EZR

Dependencies:   CRC16 FreescaleIAP FreescaleWatchdog GGSProtocol LM75B PIMA Parameters PersistentCircularQueue SerialNumberV2COM mbed-dev-watchdog_2016_03_04

Fork of smartRamalKW by Equipe Firmware V2COM

Committer:
fprado
Date:
Wed Feb 24 14:31:25 2016 +0000
Revision:
31:ef0e073126a1
Parent:
29:fec8fdf25d87
Child:
32:dee631435a62
- Diretiva DIRECT_COM substitu?da por USE_PINO para manter compatibilidade da Classe GGSProtocol com usos anteriores.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tpadovani 0:999112ad27f0 1 #include "main.h"
tpadovani 0:999112ad27f0 2
fprado 29:fec8fdf25d87 3 //////////////////////////////////////////////////////////////
fprado 29:fec8fdf25d87 4 // Global Variables
tpadovani 1:6ac7168763b6 5 static Watchdog wd;
tpadovani 1:6ac7168763b6 6 static Ticker tickerWd;
tpadovani 5:1bc98277c257 7 SerialNumber sn;
tpadovani 10:7a1d1abb5172 8 Parameters param ((char *)&APP_PARAMETERS, sizeof(APP_PARAMETERS));
tpadovani 10:7a1d1abb5172 9 CommandExecutor exec;
tpadovani 10:7a1d1abb5172 10 MemoriaMassa mm;
tpadovani 13:eed9484a89bc 11 Alarm alarm;
fprado 26:03c9ca836c79 12 #ifndef RAMAL // objetos só existem se o equipamento é um smart breaker
tpadovani 19:1f623070b9dd 13 BoxAlarm boxAlarm;
tpadovani 19:1f623070b9dd 14 Pima pima;
fprado 26:03c9ca836c79 15 #endif
tpadovani 25:2c578b923ea9 16 Announce announce;
tpadovani 0:999112ad27f0 17
fprado 29:fec8fdf25d87 18 //////////////////////////////////////////////////////////////
fprado 29:fec8fdf25d87 19 // External vars
fprado 29:fec8fdf25d87 20
fprado 29:fec8fdf25d87 21 #ifdef MBED_COMPILER
fprado 29:fec8fdf25d87 22 static const uint32_t _NodeAddress = DEFAULT_NODE_ADDRESS;
fprado 29:fec8fdf25d87 23 static const uint32_t _NetworkAddress = DEFAULT_NETWORK_ADDRESS;
fprado 29:fec8fdf25d87 24 static const uint32_t _NetworkChannel = DEFAULT_NETWORK_CHANNEL;
fprado 29:fec8fdf25d87 25 static const uint32_t _NodeRole = DEFAULT_NODE_ROLE;
fprado 29:fec8fdf25d87 26 static const uint32_t _SrcEndpoint = DEFAULT_SOURCE_ENDPOINT;
fprado 29:fec8fdf25d87 27 static const uint32_t _DestNode = DEFAULT_DESTINATION_NODE;
fprado 29:fec8fdf25d87 28 static const uint32_t _DestEndpoint = DEFAULT_DESTINATION_ENDPOINT;
fprado 29:fec8fdf25d87 29 static const uint32_t _DynamicDest = DEFAULT_DYNAMIC_DESTINATION;
fprado 29:fec8fdf25d87 30 static const uint32_t _AccessCycle = DEFAULT_ACCESS_CYCLE;
fprado 29:fec8fdf25d87 31 static const uint8_t _AppConfigDataPayload[APP_CONFIG_DATA_SIZE] = {
fprado 29:fec8fdf25d87 32 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
fprado 29:fec8fdf25d87 33 };
fprado 29:fec8fdf25d87 34 #else
fprado 29:fec8fdf25d87 35 extern volatile uint32_t _NodeAddress;
fprado 29:fec8fdf25d87 36 extern volatile uint32_t _NetworkAddress;
fprado 29:fec8fdf25d87 37 extern volatile uint32_t _NetworkChannel;
fprado 29:fec8fdf25d87 38 extern volatile uint32_t _NodeRole;
fprado 29:fec8fdf25d87 39 extern volatile uint32_t _SrcEndpoint;
fprado 29:fec8fdf25d87 40 extern volatile uint32_t _DestNode;
fprado 29:fec8fdf25d87 41 extern volatile uint32_t _DestEndpoint;
fprado 29:fec8fdf25d87 42 extern volatile uint32_t _DynamicDest;
fprado 29:fec8fdf25d87 43 extern volatile uint32_t _AccessCycle;
fprado 29:fec8fdf25d87 44 extern volatile uint8_t _AppConfigData;
fprado 29:fec8fdf25d87 45 const uint8_t * _AppConfigDataPayload = const_cast< const uint8_t * >( &_AppConfigData );
fprado 29:fec8fdf25d87 46 #endif
fprado 29:fec8fdf25d87 47
fprado 29:fec8fdf25d87 48 //////////////////////////////////////////////////////////////
fprado 29:fec8fdf25d87 49 // Main
fprado 29:fec8fdf25d87 50
tpadovani 0:999112ad27f0 51 int main()
tpadovani 0:999112ad27f0 52 {
fprado 29:fec8fdf25d87 53 #ifdef WATCHDOG_ENABLED
tpadovani 1:6ac7168763b6 54 iniciaWd();
fprado 29:fec8fdf25d87 55 #endif
tpadovani 19:1f623070b9dd 56 blinkLeds();
tpadovani 0:999112ad27f0 57
tpadovani 22:b66e36356dd4 58 DEBUG(printf("##### %s #####\r\n", version));
tpadovani 22:b66e36356dd4 59 DEBUG(printSerialNumber());
tpadovani 1:6ac7168763b6 60
tpadovani 3:21598044a47f 61 param.loadParameters();
tpadovani 22:b66e36356dd4 62 DEBUG(printParameters());
tpadovani 22:b66e36356dd4 63
tpadovani 22:b66e36356dd4 64 isopowerDisable = 0; // Habilita regulador (PIMA + Alarme Caixa)
fprado 29:fec8fdf25d87 65
fprado 26:03c9ca836c79 66 #ifndef RAMAL
tpadovani 19:1f623070b9dd 67 boxAlarm.init();
fprado 26:03c9ca836c79 68 #endif
tpadovani 13:eed9484a89bc 69 alarm.loadQueue(APP_PARAMETERS.ALARMS_QUEUE_SIZE, 3);
tpadovani 22:b66e36356dd4 70 mm.iniciaLeituras(APP_PARAMETERS.INTERVALO_MM_S, APP_PARAMETERS.MM_SIZE, 4, 5, 6);
tpadovani 10:7a1d1abb5172 71
fprado 26:03c9ca836c79 72 #ifndef RAMAL
tpadovani 19:1f623070b9dd 73 pima.setExpirationTimeout(APP_PARAMETERS.PIMA_VALIDADE_MEDIDOR_S, APP_PARAMETERS.PIMA_VALIDADE_ENERGIA_ATIVA_S, APP_PARAMETERS.PIMA_VALIDADE_ENERGIA_REATIVA_INDUTIVA_S, APP_PARAMETERS.PIMA_VALIDADE_ENERGIA_REATIVA_CAPACITIVA_S);
tpadovani 19:1f623070b9dd 74 if(APP_PARAMETERS.PROTOCOLO_MEDIDOR == PROTOCOLO_PIMINHA){
tpadovani 19:1f623070b9dd 75 pima.iniciaLeituraPiminha(APP_PARAMETERS.PIMA_AUTOBAUD_ENABLE, APP_PARAMETERS.PIMA_AUTOBAUD_TIMEOUT_S, APP_PARAMETERS.INTERVALO_WD_METER_S, APP_PARAMETERS.PIMA_TIMEOUT_PACOTE_S);
tpadovani 19:1f623070b9dd 76 } else{
tpadovani 19:1f623070b9dd 77 pima.iniciaLeituraPima(APP_PARAMETERS.PIMA_AUTOBAUD_ENABLE, APP_PARAMETERS.PIMA_AUTOBAUD_TIMEOUT_S, APP_PARAMETERS.INTERVALO_WD_METER_S);
tpadovani 19:1f623070b9dd 78 }
fprado 26:03c9ca836c79 79 #endif
tpadovani 19:1f623070b9dd 80
fprado 31:ef0e073126a1 81 // initializes serial
fprado 31:ef0e073126a1 82 #ifdef USE_PINO
fprado 31:ef0e073126a1 83 pinoSerial.baud( APP_PARAMETERS.RADIO_BAUDRATE_BPS );
fprado 31:ef0e073126a1 84 #ifdef UART_8N2
fprado 31:ef0e073126a1 85 pinoSerial.format( 8, Serial::None, 2 );
fprado 31:ef0e073126a1 86 #endif
fprado 31:ef0e073126a1 87 #else
fprado 29:fec8fdf25d87 88 ggsStream.baud( APP_PARAMETERS.RADIO_BAUDRATE_BPS );
fprado 29:fec8fdf25d87 89 #ifdef UART_8N2
fprado 29:fec8fdf25d87 90 ggsStream.format( 8, Serial::None, 2 );
fprado 29:fec8fdf25d87 91 #endif
fprado 29:fec8fdf25d87 92 #endif
fprado 29:fec8fdf25d87 93
tpadovani 3:21598044a47f 94 exec.carregaEndereco(sn.get());
tpadovani 10:7a1d1abb5172 95 exec.iniciaExecutorComandos(APP_PARAMETERS.INTERVALO_WD_NETWORK_S, APP_PARAMETERS.INTERVALO_SILENCIO_S);
tpadovani 25:2c578b923ea9 96 announce.setDelayCoefs(APP_PARAMETERS.DISCOVERY_DELAY_ANG_COEF_MS, APP_PARAMETERS.DISCOVERY_DELAY_LIN_COEF_MS);
tpadovani 25:2c578b923ea9 97 announce.setIntervals(APP_PARAMETERS.ANNOUNCE_INTERVAL_S, APP_PARAMETERS.INTERVALO_SILENCIO_S);
tpadovani 10:7a1d1abb5172 98
fprado 29:fec8fdf25d87 99
fprado 31:ef0e073126a1 100 #ifdef USE_PINO
fprado 29:fec8fdf25d87 101 // configures Pino stack
fprado 29:fec8fdf25d87 102 ggsStream.init( _SrcEndpoint, _DestNode, _DestEndpoint, _DynamicDest );
fprado 29:fec8fdf25d87 103 PinoCfgStr pinoCfg = {
fprado 29:fec8fdf25d87 104 .nodeAddress = _NodeAddress,
fprado 29:fec8fdf25d87 105 .networkAddress = _NetworkAddress,
fprado 29:fec8fdf25d87 106 .networkChannel = static_cast< uint8_t >( _NetworkChannel ),
fprado 29:fec8fdf25d87 107 .nodeRole = static_cast< uint8_t >( _NodeRole )
fprado 29:fec8fdf25d87 108 };
fprado 29:fec8fdf25d87 109 ggsStream.checkCfg( pinoCfg, DEFAULT_PINO_CFG_ATTEMPTS );
fprado 29:fec8fdf25d87 110
fprado 29:fec8fdf25d87 111 // configures access cycle
fprado 29:fec8fdf25d87 112 uint16_t newCycle = static_cast< uint16_t >( _AccessCycle );
fprado 29:fec8fdf25d87 113 ggsStream.checkCycle( newCycle, newCycle, DEFAULT_PINO_CFG_ATTEMPTS );
fprado 29:fec8fdf25d87 114
fprado 29:fec8fdf25d87 115 // waits for the stack to start
fprado 29:fec8fdf25d87 116 ggsStream.checkStop( DEFAULT_PINO_START_ATTEMPTS, _AppConfigDataPayload );
fprado 29:fec8fdf25d87 117 ggsStream.setPerPoll( 2000 );
fprado 29:fec8fdf25d87 118
fprado 29:fec8fdf25d87 119 //AppConfigData cfg;
fprado 29:fec8fdf25d87 120 //ggsStream.readMsapAppDataConfiguration( cfg );
fprado 29:fec8fdf25d87 121 //printf( "%u", cfg.seqNumber );
fprado 29:fec8fdf25d87 122
fprado 29:fec8fdf25d87 123 #endif
fprado 29:fec8fdf25d87 124
tpadovani 3:21598044a47f 125 while(1){
fprado 31:ef0e073126a1 126 #ifdef USE_PINO
fprado 29:fec8fdf25d87 127 ggsStream.handleFrames();
fprado 29:fec8fdf25d87 128 ggsStream.handleStream();
fprado 29:fec8fdf25d87 129 #endif
tpadovani 3:21598044a47f 130 exec.trataPacoteGGS();
fprado 26:03c9ca836c79 131 #ifndef RAMAL
tpadovani 19:1f623070b9dd 132 pima.trataPacotePiminha();
tpadovani 25:2c578b923ea9 133 if(pima.hasMeterChanged()){
tpadovani 25:2c578b923ea9 134 announce.startAnnounceTimer();
tpadovani 25:2c578b923ea9 135 }
fprado 26:03c9ca836c79 136 #endif
tpadovani 10:7a1d1abb5172 137 mm.executaLeitura();
fprado 26:03c9ca836c79 138 #ifndef RAMAL
tpadovani 19:1f623070b9dd 139 boxAlarm.checkState();
fprado 26:03c9ca836c79 140 #endif
tpadovani 25:2c578b923ea9 141 announce.handleAnnounceSending();
tpadovani 3:21598044a47f 142 }
tpadovani 0:999112ad27f0 143
tpadovani 0:999112ad27f0 144 }
tpadovani 1:6ac7168763b6 145 void iniciaWd(){
tpadovani 1:6ac7168763b6 146 wd.Configure();
tpadovani 1:6ac7168763b6 147 tickerWd.attach(&feedWd, WATCHDOG_INTERVAL);
tpadovani 1:6ac7168763b6 148 }
tpadovani 1:6ac7168763b6 149
tpadovani 1:6ac7168763b6 150 void feedWd(){
tpadovani 1:6ac7168763b6 151 wd.Service();
tpadovani 1:6ac7168763b6 152 }
tpadovani 1:6ac7168763b6 153
tpadovani 3:21598044a47f 154 void softReset(){
tpadovani 22:b66e36356dd4 155 DEBUG(printf("[main] SoftReset\r\n"));
tpadovani 3:21598044a47f 156 tickerWd.detach();
tpadovani 3:21598044a47f 157 }
tpadovani 3:21598044a47f 158
tpadovani 19:1f623070b9dd 159 void blinkLeds(){
tpadovani 23:85202a52482d 160 ledPowerON = LED_ON;
tpadovani 19:1f623070b9dd 161 ledNetwork = LED_OFF;
tpadovani 19:1f623070b9dd 162 ledMeter = LED_OFF;
tpadovani 23:85202a52482d 163 ledLoad = LED_OFF;
tpadovani 19:1f623070b9dd 164 ledBox = LED_OFF;
tpadovani 19:1f623070b9dd 165
tpadovani 19:1f623070b9dd 166 wait_ms(200);
tpadovani 19:1f623070b9dd 167 ledNetwork = LED_ON;
tpadovani 19:1f623070b9dd 168 wait_ms(200);
tpadovani 19:1f623070b9dd 169 ledNetwork = LED_OFF;
tpadovani 19:1f623070b9dd 170 ledMeter = LED_ON;
tpadovani 19:1f623070b9dd 171 wait_ms(200);
tpadovani 19:1f623070b9dd 172 ledMeter = LED_OFF;
tpadovani 23:85202a52482d 173 ledLoad = LED_ON;
tpadovani 23:85202a52482d 174 wait_ms(200);
tpadovani 23:85202a52482d 175 ledLoad = LED_OFF;
tpadovani 19:1f623070b9dd 176 ledBox = LED_ON;
tpadovani 19:1f623070b9dd 177 wait_ms(200);
tpadovani 19:1f623070b9dd 178 ledBox = LED_OFF;
tpadovani 19:1f623070b9dd 179 }
tpadovani 19:1f623070b9dd 180
tpadovani 3:21598044a47f 181 void printSerialNumber(){
tpadovani 12:0f549dfba86c 182 printf("[main] SN: ");
tpadovani 3:21598044a47f 183 for(int i=0; i < SERIAL_LENGTH; i++){
tpadovani 3:21598044a47f 184 printf("%c", sn.get()[i]);
tpadovani 3:21598044a47f 185 }
tpadovani 3:21598044a47f 186 printf("\r\n");
tpadovani 3:21598044a47f 187 }
tpadovani 9:e501499af4ef 188
tpadovani 9:e501499af4ef 189 void printParameters(){
tpadovani 12:0f549dfba86c 190 printf("[main] Parameters:");
tpadovani 9:e501499af4ef 191 for(int i=0; i < sizeof(APP_PARAMETERS); i++){
tpadovani 10:7a1d1abb5172 192 printf(" %02x", ((char *)&APP_PARAMETERS)[i]);
tpadovani 9:e501499af4ef 193 }
tpadovani 9:e501499af4ef 194 printf("\r\n");
tpadovani 9:e501499af4ef 195 }