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:
Thu Jun 16 18:55:57 2016 +0000
Revision:
35:78614a27b9e6
temporary snapshot

Who changed what in which revision?

UserRevisionLine numberNew 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 ) )