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
Parent:
34:5ed86c867c08
temporary snapshot

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tpadovani 25:2c578b923ea9 1 #include "announce.h"
tpadovani 25:2c578b923ea9 2
tpadovani 25:2c578b923ea9 3 Announce::Announce(){
tpadovani 25:2c578b923ea9 4 announceDelayAngCoef = 1;
tpadovani 25:2c578b923ea9 5 announceDelayLinCoef = 0;
tpadovani 25:2c578b923ea9 6 announceIntervalSec = 600;
tpadovani 25:2c578b923ea9 7 silenceIntervalSec = 2;
tpadovani 25:2c578b923ea9 8 sendNow = false;
tpadovani 25:2c578b923ea9 9 }
tpadovani 25:2c578b923ea9 10
tpadovani 25:2c578b923ea9 11 void Announce::setDelayCoefs(int delayAngCoef, int delayLinCoef){
tpadovani 25:2c578b923ea9 12 announceDelayAngCoef = delayAngCoef;
tpadovani 25:2c578b923ea9 13 announceDelayLinCoef = delayLinCoef;
tpadovani 25:2c578b923ea9 14 }
tpadovani 25:2c578b923ea9 15
tpadovani 25:2c578b923ea9 16 void Announce::setIntervals(int announce, int silence){
tpadovani 25:2c578b923ea9 17 announceIntervalSec = announce;
tpadovani 25:2c578b923ea9 18 silenceIntervalSec = silence;
tpadovani 25:2c578b923ea9 19 }
tpadovani 25:2c578b923ea9 20
tpadovani 25:2c578b923ea9 21 void Announce::startAnnounceTimer(){
tpadovani 25:2c578b923ea9 22 announceBuffer[0] = PREAMBULO1;
tpadovani 25:2c578b923ea9 23 announceBuffer[1] = PREAMBULO2;
tpadovani 25:2c578b923ea9 24 announceBuffer[2] = TAMANHO_ENDERECO + TAMANHO_ENDERECO + 2 + MEDIDOR_LENGTH; // 25
tpadovani 25:2c578b923ea9 25
tpadovani 25:2c578b923ea9 26 for(int i=0; i < TAMANHO_ENDERECO; i++){
tpadovani 25:2c578b923ea9 27 announceBuffer[i+3] = ((sn.get()[2*i+9] & 0x0f) << 4) | (sn.get()[2*i+10] & 0x0f);
tpadovani 25:2c578b923ea9 28 }
tpadovani 25:2c578b923ea9 29
tpadovani 25:2c578b923ea9 30 for(int i=0; i < 8; i++){
tpadovani 25:2c578b923ea9 31 announceBuffer[i+11] = 0xff;
tpadovani 25:2c578b923ea9 32 }
tpadovani 25:2c578b923ea9 33 announceBuffer[19] = 0x00; // Numero de sequencia
tpadovani 25:2c578b923ea9 34 announceBuffer[20] = CMD_BUSCAR_CONCENTRADOR;
tpadovani 25:2c578b923ea9 35
tpadovani 25:2c578b923ea9 36 delay = announceDelayAngCoef * (((sn.get()[23] & 0x0f)*10) + (sn.get()[24] & 0x0f)) + announceDelayLinCoef; // Delay variavel de acordo com o numero de serie do modulo
tpadovani 25:2c578b923ea9 37 DEBUG(printf("[GGS] Sending announce in %d ms...\r\n", delay));
tpadovani 25:2c578b923ea9 38
tpadovani 25:2c578b923ea9 39 announceTimeout.attach_us(this, &Announce::triggerAnnounceSending, delay*1000);
tpadovani 25:2c578b923ea9 40 }
tpadovani 25:2c578b923ea9 41
tpadovani 25:2c578b923ea9 42 void Announce::stopAnnounceTimer(){
tpadovani 25:2c578b923ea9 43 announceTimeout.detach();
tpadovani 25:2c578b923ea9 44 }
tpadovani 25:2c578b923ea9 45
tpadovani 25:2c578b923ea9 46 void Announce::triggerAnnounceSending(){
tpadovani 25:2c578b923ea9 47 sendNow = true;
tpadovani 25:2c578b923ea9 48 }
tpadovani 25:2c578b923ea9 49
tpadovani 25:2c578b923ea9 50 void Announce::handleAnnounceSending(){
tpadovani 25:2c578b923ea9 51 if(!sendNow){
tpadovani 25:2c578b923ea9 52 return;
tpadovani 25:2c578b923ea9 53 }
tpadovani 25:2c578b923ea9 54 sendNow = false;
tpadovani 25:2c578b923ea9 55
tpadovani 25:2c578b923ea9 56 if(exec.getTimerGGS() < (float)silenceIntervalSec){
tpadovani 25:2c578b923ea9 57 DEBUG(printf("[GGS] Network busy. Sending announce in %d ms...\r\n", delay));
tpadovani 25:2c578b923ea9 58 announceTimeout.attach_us(this, &Announce::triggerAnnounceSending, delay*1000);
tpadovani 25:2c578b923ea9 59 return;
tpadovani 25:2c578b923ea9 60 }
tpadovani 25:2c578b923ea9 61
fprado 34:5ed86c867c08 62 announceBuffer[19]++;
fprado 34:5ed86c867c08 63 announceBuffer[19] %= 256;
fprado 26:03c9ca836c79 64 #ifdef RAMAL
fprado 26:03c9ca836c79 65 memcpy(announceBuffer+21, MEDIDOR_DEFAULT_SN, MEDIDOR_LENGTH);
fprado 26:03c9ca836c79 66 #else
tpadovani 25:2c578b923ea9 67 memcpy(announceBuffer+21, pima.getMeterNumber(), MEDIDOR_LENGTH);
fprado 26:03c9ca836c79 68 #endif
tpadovani 25:2c578b923ea9 69 unsigned short int crc = getCRC(announceBuffer, 2, announceBuffer[2] + 1);
tpadovani 25:2c578b923ea9 70 announceBuffer[28] = crc%256; // CRC1
tpadovani 25:2c578b923ea9 71 announceBuffer[29] = crc/256; // CRC2
tpadovani 25:2c578b923ea9 72 enviaRespostaGGS(announceBuffer, 30);
tpadovani 25:2c578b923ea9 73
tpadovani 25:2c578b923ea9 74 DEBUG(printf("[GGS] Sending new announce in %d s\r\n", announceIntervalSec + delay/1000));
tpadovani 25:2c578b923ea9 75 announceTimeout.attach_us(this, &Announce::triggerAnnounceSending, announceIntervalSec*1000*1000 + delay*1000);
tpadovani 25:2c578b923ea9 76 }