EZR
Dependencies: CRC16 FreescaleIAP FreescaleWatchdog GGSProtocol LM75B PIMA Parameters PersistentCircularQueue SerialNumberV2COM mbed-dev-watchdog_2016_03_04
Fork of smartRamalKW by
smartbreaker.cpp@35:78614a27b9e6, 2016-06-16 (annotated)
- Committer:
- fprado
- Date:
- Thu Jun 16 18:55:57 2016 +0000
- Revision:
- 35:78614a27b9e6
temporary snapshot
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
fprado | 35:78614a27b9e6 | 1 | #include "smartbreaker.h" |
fprado | 35:78614a27b9e6 | 2 | |
fprado | 35:78614a27b9e6 | 3 | #if ( defined( BREAKER ) || defined( RAMAL ) ) |
fprado | 35:78614a27b9e6 | 4 | |
fprado | 35:78614a27b9e6 | 5 | ////////////////////////////////////////////////////////////// |
fprado | 35:78614a27b9e6 | 6 | // Variables |
fprado | 35:78614a27b9e6 | 7 | |
fprado | 35:78614a27b9e6 | 8 | #ifdef CONFIGURE_PINO_STACK |
fprado | 35:78614a27b9e6 | 9 | static volatile bool initOK; |
fprado | 35:78614a27b9e6 | 10 | #endif |
fprado | 35:78614a27b9e6 | 11 | |
fprado | 35:78614a27b9e6 | 12 | ////////////////////////////////////////////////////////////// |
fprado | 35:78614a27b9e6 | 13 | // Function Prototypes |
fprado | 35:78614a27b9e6 | 14 | |
fprado | 35:78614a27b9e6 | 15 | static void initSmartBreaker(); |
fprado | 35:78614a27b9e6 | 16 | |
fprado | 35:78614a27b9e6 | 17 | |
fprado | 35:78614a27b9e6 | 18 | ////////////////////////////////////////////////////////////// |
fprado | 35:78614a27b9e6 | 19 | // Private Functions |
fprado | 35:78614a27b9e6 | 20 | |
fprado | 35:78614a27b9e6 | 21 | static void initSmartBreaker() { |
fprado | 35:78614a27b9e6 | 22 | #ifdef LED_TESTE |
fprado | 35:78614a27b9e6 | 23 | TestLeds(); |
fprado | 35:78614a27b9e6 | 24 | #else |
fprado | 35:78614a27b9e6 | 25 | blinkLeds(); |
fprado | 35:78614a27b9e6 | 26 | #endif |
fprado | 35:78614a27b9e6 | 27 | |
fprado | 35:78614a27b9e6 | 28 | Alarm::init( APP_PARAMETERS.ENABLE_ALARMS, APP_PARAMETERS.ALARMS_STATES ); |
fprado | 35:78614a27b9e6 | 29 | Alarm::queue.init( APP_PARAMETERS.ALARMS_QUEUE_SIZE, ALARM_PAGE ); |
fprado | 35:78614a27b9e6 | 30 | #ifdef RESET_ALARMS_ON_BOOT |
fprado | 35:78614a27b9e6 | 31 | Alarm::queue.dropQueue(); |
fprado | 35:78614a27b9e6 | 32 | #endif |
fprado | 35:78614a27b9e6 | 33 | Alarm::onUpdate( &updateAlarms ); |
fprado | 35:78614a27b9e6 | 34 | |
fprado | 35:78614a27b9e6 | 35 | #ifdef ED02R3 |
fprado | 35:78614a27b9e6 | 36 | sensors.reset(); |
fprado | 35:78614a27b9e6 | 37 | sensors.init(); |
fprado | 35:78614a27b9e6 | 38 | sensors.setBitValue( ADE7978::VAR_CURRENT, DEFAULT_BIT_INCREMENT_C ); |
fprado | 35:78614a27b9e6 | 39 | sensors.setBitValue( ADE7978::VAR_VOLTAGE, DEFAULT_BIT_INCREMENT_V1 ); |
fprado | 35:78614a27b9e6 | 40 | sensors.setBitValue( ADE7978::VAR_VOLTAGE2P, DEFAULT_BIT_INCREMENT_V2 ); |
fprado | 35:78614a27b9e6 | 41 | for ( int p = 0; p < ADE7978::NUM_PHASES; p++ ) { |
fprado | 35:78614a27b9e6 | 42 | for ( int v = 0; v < ADE7978::NUM_VARS; v++ ) { |
fprado | 35:78614a27b9e6 | 43 | sensors.setGainRegister( static_cast< ADE7978::Phase >( p ), static_cast< ADE7978::Variable >( v ), APP_PARAMETERS.ADE_ANG_COEF[p][v] ); |
fprado | 35:78614a27b9e6 | 44 | sensors.setOffsetRegister( static_cast< ADE7978::Phase >( p ), static_cast< ADE7978::Variable >( v ), APP_PARAMETERS.ADE_LIN_COEF[p][v] ); |
fprado | 35:78614a27b9e6 | 45 | } |
fprado | 35:78614a27b9e6 | 46 | } |
fprado | 35:78614a27b9e6 | 47 | |
fprado | 35:78614a27b9e6 | 48 | #else |
fprado | 35:78614a27b9e6 | 49 | rmsChannel[ IDX_RMS_VOLTAGE_CH0 ].setSumParams( APP_PARAMETERS.SAMPLES, APP_PARAMETERS.SAMPLES_DELAY_US ); |
fprado | 35:78614a27b9e6 | 50 | rmsChannel[ IDX_RMS_VOLTAGE_CH0 ].setCoeficients( APP_PARAMETERS.SAMPLES_VOLTAGE_ANG_COEF.floatValue, APP_PARAMETERS.SAMPLES_VOLTAGE_LIN_COEF.floatValue ); |
fprado | 35:78614a27b9e6 | 51 | rmsChannel[ IDX_RMS_VOLTAGE_CH0 ].attach( &adChannel[ 0 ], &AnalogIn::read ); |
fprado | 35:78614a27b9e6 | 52 | rmsChannel[ IDX_RMS_VOLTAGE_CH1 ].setSumParams( APP_PARAMETERS.SAMPLES, APP_PARAMETERS.SAMPLES_DELAY_US ); |
fprado | 35:78614a27b9e6 | 53 | rmsChannel[ IDX_RMS_VOLTAGE_CH1 ].setCoeficients( APP_PARAMETERS.SAMPLES_VOLTAGE_ANG_COEF.floatValue, APP_PARAMETERS.SAMPLES_VOLTAGE_LIN_COEF.floatValue ); |
fprado | 35:78614a27b9e6 | 54 | rmsChannel[ IDX_RMS_VOLTAGE_CH1 ].attach( &adChannel[ 1 ], &AnalogIn::read ); |
fprado | 35:78614a27b9e6 | 55 | rmsChannel[ IDX_RMS_CURRENT ].setSumParams( APP_PARAMETERS.SAMPLES, APP_PARAMETERS.SAMPLES_DELAY_US ); |
fprado | 35:78614a27b9e6 | 56 | rmsChannel[ IDX_RMS_CURRENT ].setCoeficients( APP_PARAMETERS.SAMPLES_CURRENT_ANG_COEF.floatValue, APP_PARAMETERS.SAMPLES_CURRENT_LIN_COEF.floatValue ); |
fprado | 35:78614a27b9e6 | 57 | rmsChannel[ IDX_RMS_CURRENT ].setLimits( APP_PARAMETERS.LIMITE_CORRENTE_ZERO_A.floatValue ); |
fprado | 35:78614a27b9e6 | 58 | rmsChannel[ IDX_RMS_CURRENT ].attach( &adChannel[ 2 ], &AnalogIn::read ); |
fprado | 35:78614a27b9e6 | 59 | |
fprado | 35:78614a27b9e6 | 60 | if ( APP_PARAMETERS.LOAD_CHANNEL == IDX_RMS_VOLTAGE_CH0 ) { |
fprado | 35:78614a27b9e6 | 61 | powerSensor.attach( &rmsChannel[ IDX_RMS_VOLTAGE_CH1 ], &RMS::sampleData , PowerSensor::LineIrq ); |
fprado | 35:78614a27b9e6 | 62 | powerSensor.attach( &rmsChannel[ IDX_RMS_VOLTAGE_CH0 ], &RMS::sampleData , PowerSensor::LoadIrq ); |
fprado | 35:78614a27b9e6 | 63 | } |
fprado | 35:78614a27b9e6 | 64 | else { |
fprado | 35:78614a27b9e6 | 65 | powerSensor.attach( &rmsChannel[ IDX_RMS_VOLTAGE_CH0 ], &RMS::sampleData , PowerSensor::LineIrq ); |
fprado | 35:78614a27b9e6 | 66 | powerSensor.attach( &rmsChannel[ IDX_RMS_VOLTAGE_CH1 ], &RMS::sampleData , PowerSensor::LoadIrq ); |
fprado | 35:78614a27b9e6 | 67 | } |
fprado | 35:78614a27b9e6 | 68 | powerSensor.setThreshold( APP_PARAMETERS.LIMITE_TENSAO_SENSOR_V ); |
fprado | 35:78614a27b9e6 | 69 | #endif |
fprado | 35:78614a27b9e6 | 70 | |
fprado | 35:78614a27b9e6 | 71 | #ifdef BREAKER |
fprado | 35:78614a27b9e6 | 72 | isopowerDisable = 0; // Habilita regulador (PIMA + Alarme Caixa) |
fprado | 35:78614a27b9e6 | 73 | boxAlarm.init(); |
fprado | 35:78614a27b9e6 | 74 | pima.setExpirationTimeout( APP_PARAMETERS.PIMA_VALIDADE_MEDIDOR_S, |
fprado | 35:78614a27b9e6 | 75 | APP_PARAMETERS.PIMA_VALIDADE_ENERGIA_ATIVA_S, |
fprado | 35:78614a27b9e6 | 76 | APP_PARAMETERS.PIMA_VALIDADE_ENERGIA_REATIVA_INDUTIVA_S, |
fprado | 35:78614a27b9e6 | 77 | APP_PARAMETERS.PIMA_VALIDADE_ENERGIA_REATIVA_CAPACITIVA_S ); |
fprado | 35:78614a27b9e6 | 78 | pima.attachTout( &softReset ); |
fprado | 35:78614a27b9e6 | 79 | if( APP_PARAMETERS.PROTOCOLO_MEDIDOR == PROTOCOLO_PIMINHA ) { |
fprado | 35:78614a27b9e6 | 80 | pima.iniciaLeituraPiminha( APP_PARAMETERS.PIMA_AUTOBAUD_ENABLE, |
fprado | 35:78614a27b9e6 | 81 | APP_PARAMETERS.PIMA_AUTOBAUD_TIMEOUT_S, |
fprado | 35:78614a27b9e6 | 82 | APP_PARAMETERS.INTERVALO_WD_METER_S, |
fprado | 35:78614a27b9e6 | 83 | APP_PARAMETERS.PIMA_TIMEOUT_PACOTE_S ); |
fprado | 35:78614a27b9e6 | 84 | } |
fprado | 35:78614a27b9e6 | 85 | else |
fprado | 35:78614a27b9e6 | 86 | pima.iniciaLeituraPima( APP_PARAMETERS.PIMA_AUTOBAUD_ENABLE, |
fprado | 35:78614a27b9e6 | 87 | APP_PARAMETERS.PIMA_AUTOBAUD_TIMEOUT_S, |
fprado | 35:78614a27b9e6 | 88 | APP_PARAMETERS.INTERVALO_WD_METER_S); |
fprado | 35:78614a27b9e6 | 89 | #endif |
fprado | 35:78614a27b9e6 | 90 | |
fprado | 35:78614a27b9e6 | 91 | /* |
fprado | 35:78614a27b9e6 | 92 | const LimitsMM lmm = { |
fprado | 35:78614a27b9e6 | 93 | .loadChannel = APP_PARAMETERS.LOAD_CHANNEL, |
fprado | 35:78614a27b9e6 | 94 | .limiteTensaoZeroCh0 = APP_PARAMETERS.LIMITE_TENSAO_ZERO_CH0_V, |
fprado | 35:78614a27b9e6 | 95 | .limiteTensaoZeroCh1 = APP_PARAMETERS.LIMITE_TENSAO_ZERO_CH1_V, |
fprado | 35:78614a27b9e6 | 96 | .limiteTensaoSensorV = APP_PARAMETERS.LIMITE_TENSAO_SENSOR_V, |
fprado | 35:78614a27b9e6 | 97 | .limiteTensaoMinimaLinhaV = APP_PARAMETERS.LIMITE_TENSAO_MINIMA_LINHA_V, |
fprado | 35:78614a27b9e6 | 98 | .limiteTensaoMaximaLinhaV = APP_PARAMETERS.LIMITE_TENSAO_MAXIMA_LINHA_V, |
fprado | 35:78614a27b9e6 | 99 | .limiteTensaoMinimaCargaV = APP_PARAMETERS.LIMITE_TENSAO_MINIMA_CARGA_V, |
fprado | 35:78614a27b9e6 | 100 | .limiteTensaoMaximaCargaV = APP_PARAMETERS.LIMITE_TENSAO_MAXIMA_CARGA_V, |
fprado | 35:78614a27b9e6 | 101 | .limiteCorrenteZeroA = APP_PARAMETERS.LIMITE_CORRENTE_ZERO_A.floatValue, |
fprado | 35:78614a27b9e6 | 102 | .limiteCorrenteMinimaA = APP_PARAMETERS.LIMITE_CORRENTE_MINIMA_A.floatValue, |
fprado | 35:78614a27b9e6 | 103 | .limiteCorrenteMaximaA = APP_PARAMETERS.LIMITE_CORRENTE_MAXIMA_A.floatValue |
fprado | 35:78614a27b9e6 | 104 | }; |
fprado | 35:78614a27b9e6 | 105 | MemoriaMassa::setLimits( lmm ); |
fprado | 35:78614a27b9e6 | 106 | for ( int i = 0; i < NUMBER_OF_MM_AREAS; i++ ) { |
fprado | 35:78614a27b9e6 | 107 | mm[i].setLoadProfile( APP_PARAMETERS.ENABLE_LOAD_PROFILE ); |
fprado | 35:78614a27b9e6 | 108 | mm[i].iniciaLeituras( APP_PARAMETERS.INTERVALO_MM_S, |
fprado | 35:78614a27b9e6 | 109 | APP_PARAMETERS.MM_SIZE, |
fprado | 35:78614a27b9e6 | 110 | MM_FIRST_PAGE + i, |
fprado | 35:78614a27b9e6 | 111 | i ); |
fprado | 35:78614a27b9e6 | 112 | #ifdef RESET_MM_ON_BOOT |
fprado | 35:78614a27b9e6 | 113 | mm[i].dropQueue(); |
fprado | 35:78614a27b9e6 | 114 | #endif |
fprado | 35:78614a27b9e6 | 115 | } |
fprado | 35:78614a27b9e6 | 116 | */ |
fprado | 35:78614a27b9e6 | 117 | // initializes serial |
fprado | 35:78614a27b9e6 | 118 | #ifdef USE_PINO |
fprado | 35:78614a27b9e6 | 119 | ggsStream.baud( APP_PARAMETERS.RADIO_BAUDRATE_BPS ); |
fprado | 35:78614a27b9e6 | 120 | #ifdef UART_8N2 |
fprado | 35:78614a27b9e6 | 121 | ggsStream.format( 8, Serial::None, 2 ); |
fprado | 35:78614a27b9e6 | 122 | #endif |
fprado | 35:78614a27b9e6 | 123 | #else |
fprado | 35:78614a27b9e6 | 124 | ggsStream.baud( APP_PARAMETERS.RADIO_BAUDRATE_BPS ); |
fprado | 35:78614a27b9e6 | 125 | #ifdef UART_8N2 |
fprado | 35:78614a27b9e6 | 126 | ggsStream.format( 8, Serial::None, 2 ); |
fprado | 35:78614a27b9e6 | 127 | #endif |
fprado | 35:78614a27b9e6 | 128 | #endif |
fprado | 35:78614a27b9e6 | 129 | |
fprado | 35:78614a27b9e6 | 130 | #ifdef WAIT_TO_ANSWER |
fprado | 35:78614a27b9e6 | 131 | wait_ms( 1000 ); |
fprado | 35:78614a27b9e6 | 132 | linkLayer.setDelayToSend( 100 ); |
fprado | 35:78614a27b9e6 | 133 | #endif |
fprado | 35:78614a27b9e6 | 134 | |
fprado | 35:78614a27b9e6 | 135 | #ifdef USE_PINO |
fprado | 35:78614a27b9e6 | 136 | linkLayer.bind( &ggsStream, LinkLayer::Pino ); |
fprado | 35:78614a27b9e6 | 137 | #else |
fprado | 35:78614a27b9e6 | 138 | linkLayer.bind( &ggsStream, LinkLayer::Raw ); |
fprado | 35:78614a27b9e6 | 139 | #endif |
fprado | 35:78614a27b9e6 | 140 | exec.bind( &linkLayer ); |
fprado | 35:78614a27b9e6 | 141 | exec.carregaEndereco( sn ); |
fprado | 35:78614a27b9e6 | 142 | exec.attach( &softReset ); |
fprado | 35:78614a27b9e6 | 143 | exec.iniciaExecutorComandos( APP_PARAMETERS.INTERVALO_WD_NETWORK_S, |
fprado | 35:78614a27b9e6 | 144 | APP_PARAMETERS.INTERVALO_SILENCIO_S, |
fprado | 35:78614a27b9e6 | 145 | &executaComando ); |
fprado | 35:78614a27b9e6 | 146 | |
fprado | 35:78614a27b9e6 | 147 | announce.setDelayCoefs( APP_PARAMETERS.DISCOVERY_DELAY_ANG_COEF_MS, |
fprado | 35:78614a27b9e6 | 148 | APP_PARAMETERS.DISCOVERY_DELAY_LIN_COEF_MS ); |
fprado | 35:78614a27b9e6 | 149 | announce.setIntervals( APP_PARAMETERS.ANNOUNCE_INTERVAL_S, |
fprado | 35:78614a27b9e6 | 150 | APP_PARAMETERS.INTERVALO_SILENCIO_S ); |
fprado | 35:78614a27b9e6 | 151 | |
fprado | 35:78614a27b9e6 | 152 | #ifdef USE_PINO |
fprado | 35:78614a27b9e6 | 153 | sn.setDefaultNodeAddress( DEFAULT_NODE_ADDRESS ); |
fprado | 35:78614a27b9e6 | 154 | // configures Pino stack |
fprado | 35:78614a27b9e6 | 155 | ggsStream.init( APP_PARAMETERS.SRC_ENDPOINT, |
fprado | 35:78614a27b9e6 | 156 | APP_PARAMETERS.DEST_NODE, |
fprado | 35:78614a27b9e6 | 157 | APP_PARAMETERS.DEST_ENDPOINT, |
fprado | 35:78614a27b9e6 | 158 | APP_PARAMETERS.DYNAMIC_DEST ); |
fprado | 35:78614a27b9e6 | 159 | |
fprado | 35:78614a27b9e6 | 160 | #ifdef CONFIGURE_PINO_STACK |
fprado | 35:78614a27b9e6 | 161 | initOK = false; |
fprado | 35:78614a27b9e6 | 162 | |
fprado | 35:78614a27b9e6 | 163 | PinoCfgStr pinoCfg = { |
fprado | 35:78614a27b9e6 | 164 | .nodeAddress = sn.getNodeAddress(), |
fprado | 35:78614a27b9e6 | 165 | .networkAddress = APP_PARAMETERS.NETWORK_ADDRESS, |
fprado | 35:78614a27b9e6 | 166 | .networkChannel = static_cast< uint8_t >( APP_PARAMETERS.NETWORK_CHANNEL ), |
fprado | 35:78614a27b9e6 | 167 | .nodeRole = static_cast< uint8_t >( APP_PARAMETERS.NODE_ROLE ) |
fprado | 35:78614a27b9e6 | 168 | }; |
fprado | 35:78614a27b9e6 | 169 | initOK = ggsStream.checkCfg( pinoCfg, DEFAULT_PINO_CFG_ATTEMPTS ); |
fprado | 35:78614a27b9e6 | 170 | |
fprado | 35:78614a27b9e6 | 171 | #ifdef CONFIGURE_ACCESS_CYCLE |
fprado | 35:78614a27b9e6 | 172 | // configures access cycle |
fprado | 35:78614a27b9e6 | 173 | uint16_t newCycle = static_cast< uint16_t >( APP_PARAMETERS.ACCESS_CYCLE ); |
fprado | 35:78614a27b9e6 | 174 | ggsStream.checkCycle( newCycle, newCycle, DEFAULT_PINO_CFG_ATTEMPTS ); |
fprado | 35:78614a27b9e6 | 175 | #endif |
fprado | 35:78614a27b9e6 | 176 | |
fprado | 35:78614a27b9e6 | 177 | // waits for the stack to start |
fprado | 35:78614a27b9e6 | 178 | ggsStream.checkStop( DEFAULT_PINO_START_ATTEMPTS, APP_PARAMETERS.APP_CONFIG_DATA ); |
fprado | 35:78614a27b9e6 | 179 | #endif |
fprado | 35:78614a27b9e6 | 180 | ggsStream.setRequestAttempts( DEFAULT_PINO_TRIES ); |
fprado | 35:78614a27b9e6 | 181 | ggsStream.setRequestTimeout( DEFAULT_PINO_TOUT ); |
fprado | 35:78614a27b9e6 | 182 | ggsStream.setPerPoll( DEFAULT_PINO_PER_POLL ); |
fprado | 35:78614a27b9e6 | 183 | ggsStream.setIRQPin( &pinoInterrupt ); |
fprado | 35:78614a27b9e6 | 184 | #endif |
fprado | 35:78614a27b9e6 | 185 | |
fprado | 35:78614a27b9e6 | 186 | #ifdef BREAKER |
fprado | 35:78614a27b9e6 | 187 | //Alarmes dos sensores de temperatura ( |
fprado | 35:78614a27b9e6 | 188 | // 1 - temperatura normal, |
fprado | 35:78614a27b9e6 | 189 | // 2 - temperatura em excesso ) |
fprado | 35:78614a27b9e6 | 190 | |
fprado | 35:78614a27b9e6 | 191 | /* |
fprado | 35:78614a27b9e6 | 192 | TempAlarm::init( PTB3, PTB2 ); |
fprado | 35:78614a27b9e6 | 193 | if ( APP_PARAMETERS.TEMPERATURE_ALARM_CUT ) { |
fprado | 35:78614a27b9e6 | 194 | TempAlarm::attach( &corta, TempAlarm::CutIrq ); |
fprado | 35:78614a27b9e6 | 195 | TempAlarm::attach( &religa, TempAlarm::RearmIrq ); |
fprado | 35:78614a27b9e6 | 196 | } |
fprado | 35:78614a27b9e6 | 197 | |
fprado | 35:78614a27b9e6 | 198 | tempAlarm[ IDX_TEMP_ALARM_LINE ].setParams( LM75B::ADDRESS_0, |
fprado | 35:78614a27b9e6 | 199 | PTC6, |
fprado | 35:78614a27b9e6 | 200 | APP_PARAMETERS.LINE_TEMPERATURE_ALARM.floatValue, |
fprado | 35:78614a27b9e6 | 201 | APP_PARAMETERS.LINE_TEMPERATURE_HYST.floatValue, |
fprado | 35:78614a27b9e6 | 202 | Alarm::ALARME_TEMP_LINE, false ); |
fprado | 35:78614a27b9e6 | 203 | |
fprado | 35:78614a27b9e6 | 204 | tempAlarm[ IDX_TEMP_ALARM_LOAD ].setParams( LM75B::ADDRESS_1, |
fprado | 35:78614a27b9e6 | 205 | PTD0, |
fprado | 35:78614a27b9e6 | 206 | APP_PARAMETERS.LOAD_TEMPERATURE_ALARM.floatValue, |
fprado | 35:78614a27b9e6 | 207 | APP_PARAMETERS.LOAD_TEMPERATURE_HYST.floatValue, |
fprado | 35:78614a27b9e6 | 208 | Alarm::ALARME_TEMP_LOAD, false ); |
fprado | 35:78614a27b9e6 | 209 | |
fprado | 35:78614a27b9e6 | 210 | tempAlarm[ IDX_TEMP_ALARM_CPU ].setParams( LM75B::ADDRESS_2, |
fprado | 35:78614a27b9e6 | 211 | PTC7, |
fprado | 35:78614a27b9e6 | 212 | APP_PARAMETERS.CPU_TEMPERATURE_ALARM.floatValue, |
fprado | 35:78614a27b9e6 | 213 | APP_PARAMETERS.CPU_TEMPERATURE_HYST.floatValue, |
fprado | 35:78614a27b9e6 | 214 | Alarm::ALARME_TEMP_CPU, false ); |
fprado | 35:78614a27b9e6 | 215 | */ |
fprado | 35:78614a27b9e6 | 216 | |
fprado | 35:78614a27b9e6 | 217 | #elif defined( RAMAL ) |
fprado | 35:78614a27b9e6 | 218 | announce.startAnnounceTimer(); |
fprado | 35:78614a27b9e6 | 219 | #endif |
fprado | 35:78614a27b9e6 | 220 | |
fprado | 35:78614a27b9e6 | 221 | // Flash |
fprado | 35:78614a27b9e6 | 222 | AT25SF041 extFlash( PTD6, PTD7, PTD5, PTD4 ); |
fprado | 35:78614a27b9e6 | 223 | } |
fprado | 35:78614a27b9e6 | 224 | |
fprado | 35:78614a27b9e6 | 225 | ////////////////////////////////////////////////////////////// |
fprado | 35:78614a27b9e6 | 226 | // Public Functions |
fprado | 35:78614a27b9e6 | 227 | |
fprado | 35:78614a27b9e6 | 228 | void resetSmartBreaker() { |
fprado | 35:78614a27b9e6 | 229 | #ifdef WATCHDOG_ENABLED |
fprado | 35:78614a27b9e6 | 230 | wdgFeeder.stopService(); |
fprado | 35:78614a27b9e6 | 231 | #else |
fprado | 35:78614a27b9e6 | 232 | // Set the VTOR to the application vector table address. |
fprado | 35:78614a27b9e6 | 233 | __disable_irq(); |
fprado | 35:78614a27b9e6 | 234 | SCB->VTOR = 0; |
fprado | 35:78614a27b9e6 | 235 | NVIC_SystemReset(); |
fprado | 35:78614a27b9e6 | 236 | #endif |
fprado | 35:78614a27b9e6 | 237 | } |
fprado | 35:78614a27b9e6 | 238 | |
fprado | 35:78614a27b9e6 | 239 | void mainSmartBreaker() { |
fprado | 35:78614a27b9e6 | 240 | initSmartBreaker(); |
fprado | 35:78614a27b9e6 | 241 | for(;;) { |
fprado | 35:78614a27b9e6 | 242 | #ifdef USE_PINO |
fprado | 35:78614a27b9e6 | 243 | ggsStream.handleFrames(); |
fprado | 35:78614a27b9e6 | 244 | ggsStream.handleStream(); |
fprado | 35:78614a27b9e6 | 245 | #endif |
fprado | 35:78614a27b9e6 | 246 | exec.trataPacoteGGS(); |
fprado | 35:78614a27b9e6 | 247 | /* |
fprado | 35:78614a27b9e6 | 248 | for ( int i = 0; i < NUMBER_OF_MM_AREAS; i++ ) |
fprado | 35:78614a27b9e6 | 249 | mm[ i ].executaLeitura(); |
fprado | 35:78614a27b9e6 | 250 | for ( int i = 0; i < NUMBER_OF_TEMP_ALARMS; i++ ) |
fprado | 35:78614a27b9e6 | 251 | tempAlarm[ i ].check(); |
fprado | 35:78614a27b9e6 | 252 | if ( Alarm::check() ) { |
fprado | 35:78614a27b9e6 | 253 | exec.enviaNaoSolicitado( CMD_AVISO_ALARME, false ); |
fprado | 35:78614a27b9e6 | 254 | Alarm::clrNewAlarm(); // debug |
fprado | 35:78614a27b9e6 | 255 | } |
fprado | 35:78614a27b9e6 | 256 | */ |
fprado | 35:78614a27b9e6 | 257 | #ifdef BREAKER |
fprado | 35:78614a27b9e6 | 258 | if ( boxAlarm.checkState() ) |
fprado | 35:78614a27b9e6 | 259 | ledBox = LED_ON; |
fprado | 35:78614a27b9e6 | 260 | else |
fprado | 35:78614a27b9e6 | 261 | ledBox = LED_OFF; |
fprado | 35:78614a27b9e6 | 262 | |
fprado | 35:78614a27b9e6 | 263 | pima.trataPacotePiminha(); |
fprado | 35:78614a27b9e6 | 264 | if ( pima.hasMeter() ) |
fprado | 35:78614a27b9e6 | 265 | ledMeter = LED_ON; |
fprado | 35:78614a27b9e6 | 266 | else |
fprado | 35:78614a27b9e6 | 267 | ledMeter = LED_OFF; |
fprado | 35:78614a27b9e6 | 268 | if ( pima.hasMeterChanged() ){ |
fprado | 35:78614a27b9e6 | 269 | pima.clrMeterChanged(); |
fprado | 35:78614a27b9e6 | 270 | announce.startAnnounceTimer(); |
fprado | 35:78614a27b9e6 | 271 | } |
fprado | 35:78614a27b9e6 | 272 | #endif |
fprado | 35:78614a27b9e6 | 273 | announce.handleAnnounceSending(); |
fprado | 35:78614a27b9e6 | 274 | } |
fprado | 35:78614a27b9e6 | 275 | } |
fprado | 35:78614a27b9e6 | 276 | |
fprado | 35:78614a27b9e6 | 277 | #endif // ( defined( BREAKER ) || defined( RAMAL ) ) |