Counter

Dependencies:   EthernetInterface NTPClient SDFileSystem TextLCD WebSocketClient mbed-rtos mbed Socket lwip-eth lwip-sys lwip FATFileSystem

Uplink/uplink.h

Committer:
Tuxitheone
Date:
2016-02-29
Revision:
0:ecaf3e593122

File content as of revision 0:ecaf3e593122:


#ifndef _TapTraqUplink_H
#define _TapTraqUplink_H

#include "Websocket.h"
#include "mbed.h"
#include <string>

#define MAX_NUMBER 10
#define SetupStrSize 100
#define MaxCtrl 10 //max antal ctrl der hænger på en gateway


class TapTraqUplink
{
public:
    typedef struct {//Der er en setuprec for hver hane
        uint16_t ID,           //Hane ID
                 TabType,      //Hane type om det er sodavand eller øl hanne
                 EscTryk,      //mulighed for at hvis man tryker en ekstra gang, vil den stoppe med det samme
                 FlowEnable,   //Hvis der er flowmåler
                 FlowMode,     //0: stop ved flow, 1 fritløb sender ved timeout 2: festival mode sender hvert 10 s
                 IntervalUpload, //sekunder mellem hver upload
                 //SmartTab
                 XLOn, XLPause, XLTopup,
                 LOn, LPause, LTopup,
                 MOn, MPause, MTopup,
                 SOn, SPause, STopup;
    } SetupRec; //længde = 43byte

    typedef struct {//Der er en
        char EUID[17];//uniq 64 identify
        char ID;      //id internt
    } PanIdRec;

//er hvor meget der er kommet igennem hver enkelt hane
    /**
    *   Constructor
    *
    * @param id Name of the client on the network
    * @param ws All communication between clients will be established over this websocket
    */


    TapTraqUplink(Websocket *webs) : webs(webs), index(0), index_proc(0) {
        std::string path = webs->getPath();
        std::string token = "/";
        size_t found;
        found = path.find(token);
        if (found != std::string::npos)
            found = path.find(token, found + 1);
        if (found != std::string::npos)
            path = path.substr(found + 1, std::string::npos);
        for (char ID=0; ID<MAX_NUMBER; ID++) {
            strcpy(PanId[ID].EUID,"0000000000000000");
            PanId[ID].ID=0;
        }
//       strcpy(my_id, path.c_str());
    };
//socket del
    //sender en flowfram fra en counter til database
    void FlowFrame (char *ID,uint8_t TapID, uint32_t Flow, uint32_t Spild, uint16_t Temp, uint16_t Key1,uint16_t Key2,uint16_t Key3,uint16_t Key4);
    //Sender et givet setup record til database
    void setuprec (char ID, char *node);
    //Frame til tank måler
    void TankFlowFrame (char *ID, float latitude, float longitude, uint32_t Flow, float Temp);    
    //Sender gateways ID    
    void alive(char *p);

    //sender ID for en counter tilkoblet gateway
    void panlist(char *gateway, char id);

    //chekcer for indgående beskeder fra WS
    int work();
    char RxStr;
    //Modtager setuprecord om gemmer dem på SDkort
    void Rxsetuprec();
    //dekode setup record modtaget fra ctrl. Denne sendes i to dele derfor denne opdeling
    void RxSetuprec1(char *p,char CtrlNr);
    void RxSetuprec2(char *p,char CtrlNr);

//Logger/gemme del
    //læser alle setup record ind i hukommelse
    void ReadConfig();
    //skriver en default setup for alle
    void WriteDefault(void);
    //gemmer setuprecords fra hukommelse til SD kort
    void SaveConfig();
    //åbner på, hvis ikke den kan finde en opsætning skriver den en default
    void iniopen(void);

    void SavePanID();
    void ReadPanID();

    SetupRec SetupArr[MAX_NUMBER*MaxCtrl];
    PanIdRec PanId[MaxCtrl]; //10 stik 64 bit Paid
    int CheckPan(char *p);
    bool AddPan(char *p);

    char json_recv[100]; //modtaget data
private:
    Websocket * webs;
    int index;
    int index_proc;
    char my_id[20];

    char Confrec[MAX_NUMBER][SetupStrSize];
};




#endif