EZR

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

Fork of smartRamalKW by Equipe Firmware V2COM

cmd/mmTensao.cpp

Committer:
tpadovani
Date:
2015-07-24
Revision:
11:8c93e0de58cd
Parent:
10:7a1d1abb5172

File content as of revision 11:8c93e0de58cd:

#include "appCommands.h"
#include "sensor.h"
#include "memoriaMassa.h"

#define MM_TENSAO_FALHA     1
#define MM_TENSAO_FIM       2

extern MemoriaMassa mm;
char* respMM[2];

void cmdMMTensao(int lineOrLoad, int block){
    int channel;
    if(lineOrLoad == APP_PARAMETERS.LOAD_CHANNEL){
        channel = 0;
    } else{
        channel = 1;
    }
    
    if(block == 0){
        free(respMM[channel]);
        respMM[channel] = mm.getMM(channel);
    }

    if(respMM[channel] == NULL){
        exec.enviaResposta(RESP_MM_TENSAO, MM_TENSAO_FALHA);
    } else{
        int mmSize = APP_PARAMETERS.MM_SIZE;
        if(mmSize < 0 || mmSize > 127){
            mmSize = 100;   // Use default
        }
        int blocks = ceil(mmSize / 25.0);
        if(blocks < 0 || blocks > 6){
            blocks = 4; // Use default of 100 entries
        }
        if(block >= blocks){
            exec.enviaResposta(RESP_MM_TENSAO, MM_TENSAO_FIM);
            free(respMM[channel]);
        } else{
            int size = 8*25;
            if(block == blocks-1){
                size = 8*(APP_PARAMETERS.MM_SIZE % 25);
                if(size == 0){
                    size = 8*25;
                }
            }
            exec.enviaResposta(RESP_MM_TENSAO, respMM[channel]+block*8*25, size);
        }
    }
}