Counter
Dependencies: EthernetInterface NTPClient SDFileSystem TextLCD WebSocketClient mbed-rtos mbed Socket lwip-eth lwip-sys lwip FATFileSystem
Uplink/uplink.cpp
- Committer:
- Tuxitheone
- Date:
- 2016-02-29
- Revision:
- 0:ecaf3e593122
File content as of revision 0:ecaf3e593122:
#include "uplink.h" //--------------------------------------------------------------------------------------------------------------------------------------------------------------- //Frames til T2 void TapTraqUplink::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) { time_t sec = time(NULL); char tidstr[32]; sec = time(NULL); strftime(tidstr, 32, "%Y/%m/%d-%H:%M:%S", localtime(&sec)); sprintf(json_recv, "{1,%s,%s,%x,%x,%x,%x,%x,%x,%x,%x}" ,ID,tidstr,TapID,Flow,Spild,Temp,Key1,Key2,Key3,Key4); webs->send(json_recv); } void TapTraqUplink::setuprec (char ID, char *node) { sprintf(json_recv, "{2,%s,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x}",node, SetupArr[ID].ID, SetupArr[ID].TabType, SetupArr[ID].EscTryk, SetupArr[ID].FlowEnable, SetupArr[ID].FlowMode, SetupArr[ID].IntervalUpload, SetupArr[ID].XLOn, SetupArr[ID].XLPause, SetupArr[ID].XLTopup, SetupArr[ID].LOn, SetupArr[ID].LPause, SetupArr[ID].LTopup, SetupArr[ID].MOn, SetupArr[ID].MPause, SetupArr[ID].MTopup, SetupArr[ID].SOn, SetupArr[ID].SPause, SetupArr[ID].STopup); webs->send(json_recv); } void TapTraqUplink::TankFlowFrame (char *ID, float latitude, float longitude, uint32_t Flow, float Temp) { time_t sec = time(NULL); char tidstr[32]; sec = time(NULL); strftime(tidstr, 32, "%Y/%m/%d-%H:%M:%S", localtime(&sec)); sprintf(json_recv,"{%s,%s,%.4f,%.4f,%d,%.1f}", ID,tidstr,latitude,longitude,Flow,Temp); webs->send(json_recv); } void TapTraqUplink::alive(char *p) { sprintf(json_recv, "{100,%s}",p); //sender gateway ID webs->send(json_recv); } void TapTraqUplink::panlist(char *gateway, char id) { sprintf(json_recv, "{101,%s,%d,%s}",gateway,id,PanId[id].EUID); //sender gateway ID webs->send(json_recv); } //--------------------------------------------------------------------------------------------------------------------------------------------------------------- //Frames fra T2 //dekodning af beskeder //Setup frames void TapTraqUplink::Rxsetuprec() { SetupRec Setup; //vi er nødt til at ligge det over i et setup inde vi ved hvilke setup der kommet sscanf(json_recv,"{2,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x}", &Setup.ID, &Setup.TabType,&Setup.EscTryk,&Setup.FlowEnable, &Setup.FlowMode, &Setup.IntervalUpload, &Setup.XLOn, &Setup.XLPause, &Setup.XLTopup, &Setup.LOn, &Setup.LPause, &Setup.LTopup, &Setup.MOn, &Setup.MPause, &Setup.MTopup, &Setup.SOn, &Setup.SPause, &Setup.STopup); memcpy(&SetupArr[Setup.ID].ID,&Setup.ID,sizeof(Setup)); //kopiere den over SaveConfig(); //Skriv den til disk } //setup frames fra ZB, der skal dekodes og gemmes her void TapTraqUplink::RxSetuprec1(char *p,char CtrlNr) { SetupRec SetupData; //vi er nødt til at ligge det over i et setup inde vi ved hvilke setup der kommet sscanf(p,"02,%X,%X,%X,%X,%X,%X", &SetupData.ID, &SetupData.TabType, &SetupData.EscTryk, &SetupData.FlowEnable, &SetupData.FlowMode, &SetupData.IntervalUpload); memcpy(&SetupArr[SetupData.ID+(CtrlNr*MaxCtrl)].ID,&SetupData.ID,sizeof(SetupData)); //kopiere den over } void TapTraqUplink::RxSetuprec2(char *p,char CtrlNr ) { char id; SetupRec SetupData; //vi er nødt til at ligge det over i et setup inde vi ved hvilke setup der kommet sscanf(p,"03,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X", &SetupData.ID, &SetupData.XLOn, &SetupData.XLPause, &SetupData.XLTopup, &SetupData.LOn, &SetupData.LPause, &SetupData.LTopup, &SetupData.MOn, &SetupData.MPause, &SetupData.MTopup, &SetupData.SOn, &SetupData.SPause, &SetupData.STopup); //SetupData.ID er setup rec numeret for den enkelte ctrl (0..9) //Derudover skal vi vide hvilke ctrl det er (1..MaxCtrl) id=SetupData.ID+(CtrlNr*MaxCtrl); SetupArr[id].XLOn=SetupData.XLOn; SetupArr[id].XLPause=SetupData.XLPause; SetupArr[id].XLTopup=SetupData.XLTopup; SetupArr[id].LOn=SetupData.LOn; SetupArr[id].LPause=SetupData.LPause; SetupArr[id].LTopup=SetupData.LTopup; SetupArr[id].MOn=SetupData.MOn; SetupArr[id].MPause=SetupData.MPause; SetupArr[id].MTopup=SetupData.MTopup; SetupArr[id].SOn=SetupData.SOn; SetupArr[id].SPause=SetupData.SPause; SetupArr[id].STopup=SetupData.STopup; SaveConfig(); //Skriv den til disk } //Det var nok om setup records, tilbage til T2 //T vil gerne se hvordan setup er for en given counter //T vil gerne se en liste over hvilke counter der er online //--------------------------------------------------------------------------------------------------------------------------------------------------------------- int TapTraqUplink::work() { if (webs->read(json_recv)) return 1; else return 0; } //--------------------------Pan liste------------------------------------------------------- //gem liste over PANID, som vi kan se void TapTraqUplink::SavePanID() { char str[200]; FILE *fp = fopen("/sd/taptraq/PanId.sys", "w"); // sprintf(str, "{%s,%s,%s,%s,%s,%s,%s,%s,%s,%s}\r\n", PanId[0].EUID,PanId[1].EUID,PanId[2].EUID,PanId[3].EUID,PanId[4].EUID,PanId[5].EUID,PanId[6].EUID,PanId[7].EUID,PanId[8].EUID,PanId[9].EUID); fputs(str, fp); sprintf(str, "{%x,%x,%x,%x,%x,%x,%x,%x,%x,%x}\r\n", PanId[0].ID,PanId[1].ID,PanId[2].ID,PanId[3].ID,PanId[4].ID,PanId[5].ID,PanId[6].ID,PanId[7].ID,PanId[8].ID,PanId[9].ID); fputs(str, fp); fclose(fp); } void TapTraqUplink::ReadPanID() { char str[200]; char *p_items; FILE *fp = fopen("/sd/taptraq/PanId.sys", "r"); // p_items = fgets(str, SetupStrSize, fp); // strtok(str, "\n\0"); // change \n to \0 method strtok(str, "\r\0"); // change \n to \0 method sscanf(str, "{%s,%s,%s,%s,%s,%s,%s,%s,%s,%s}", PanId[0].EUID,PanId[1].EUID,PanId[2].EUID,PanId[3].EUID,PanId[4].EUID,PanId[5].EUID,PanId[6].EUID,PanId[7].EUID,PanId[8].EUID,PanId[9].EUID); p_items = fgets(str, SetupStrSize, fp); // strtok(str, "\n\0"); // change \n to \0 method strtok(str, "\r\0"); // change \n to \0 method sscanf(str, "{%x,%x,%x,%x,%x,%x,%x,%x,%x,%x}", PanId[0].ID,PanId[1].ID,PanId[2].ID,PanId[3].ID,PanId[4].ID,PanId[5].ID,PanId[6].ID,PanId[7].ID,PanId[8].ID,PanId[9].ID); fclose(fp); } bool TapTraqUplink::AddPan(char *p) { char i=0; while ((PanId[i].ID!=0) & (i<MaxCtrl)) i++; if (i<MaxCtrl) { strncpy(PanId[i].EUID,p,16); PanId[i].ID=i+1; SavePanID(); //Skriver den til SD-kortet return true; } else { return false; } } int TapTraqUplink::CheckPan(char *p) //finder hvad ctrl nummeret er ud fra pan id. //ctrl nummeret er mellem 0..MaxCtrl { char i=0; int fundet=-1; char TmpEUID[17]; strcpy(TmpEUID,p); while ((PanId[i].ID!=0) & (i<MaxCtrl)) { if (strcmp(PanId[i].EUID, TmpEUID) == 0) fundet=i; i++; } return fundet; } //------------------Ini file---------------------------------------------------------------- //Vi gemmer setup records på SDkort i Ascii format, således at vi senere kan rette i dem //Read læser dem alle ind i hukommelsen //Save skriver dem tilbage på SD kortet void TapTraqUplink::ReadConfig() { //læser det hele igennem for at finde setup record for den pågældende ctrl char str[SetupStrSize]; char *p_items; char dummy; FILE *fp = fopen("/sd/taptraq/config.sys", "r"); if (fp != NULL) { for (int ID=0; ID<MAX_NUMBER*MaxCtrl; ID++) { p_items = fgets(str, SetupStrSize, fp); // strtok(str, "\n\0"); // change \n to \0 method strtok(str, "\r\0"); // change \n to \0 method if (p_items == NULL) break; sscanf(str,"{%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x}",dummy, //dummy fordi vi ved det er den ctrl &SetupArr[ID].ID, &SetupArr[ID].TabType, &SetupArr[ID].EscTryk, &SetupArr[ID].FlowEnable, &SetupArr[ID].FlowMode, &SetupArr[ID].IntervalUpload, &SetupArr[ID].XLOn, &SetupArr[ID].XLPause, &SetupArr[ID].XLTopup, &SetupArr[ID].LOn, &SetupArr[ID].LPause, &SetupArr[ID].LTopup, &SetupArr[ID].MOn, &SetupArr[ID].MPause, &SetupArr[ID].MTopup, &SetupArr[ID].SOn, &SetupArr[ID].SPause, &SetupArr[ID].STopup); } } } void TapTraqUplink::WriteDefault(void) { for (char i=0; i<MAX_NUMBER*MaxCtrl; i++) { SetupArr[i].ID=i%MaxCtrl; SetupArr[i].TabType=0; SetupArr[i].EscTryk=1; SetupArr[i].FlowEnable=0; SetupArr[i].FlowMode=0; SetupArr[i].IntervalUpload=600; SetupArr[i].XLOn=0; SetupArr[i].XLPause=0; SetupArr[i].XLTopup=0; SetupArr[i].LOn=0; SetupArr[i].LPause=0; SetupArr[i].LTopup=0; SetupArr[i].MOn=0; SetupArr[i].MPause=0; SetupArr[i].MTopup=0; SetupArr[i].SOn=0; SetupArr[i].SPause=0; SetupArr[i].STopup=0; } SaveConfig(); } void TapTraqUplink::SaveConfig() //writes config to sdcard { char str[SetupStrSize]; FILE *fp = fopen("/sd/taptraq/config.sys", "w"); // for (int ID=0; ID<MAX_NUMBER*MaxCtrl; ID++) { sprintf(str, "{%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x}\r\n", ID+1, SetupArr[ID].ID, SetupArr[ID].TabType, SetupArr[ID].EscTryk, SetupArr[ID].FlowEnable, SetupArr[ID].FlowMode, SetupArr[ID].IntervalUpload, SetupArr[ID].XLOn, SetupArr[ID].XLPause, SetupArr[ID].XLTopup, SetupArr[ID].LOn, SetupArr[ID].LPause, SetupArr[ID].LTopup, SetupArr[ID].MOn, SetupArr[ID].MPause, SetupArr[ID].MTopup, SetupArr[ID].SOn, SetupArr[ID].SPause, SetupArr[ID].STopup); fputs(str, fp); // printf(str); } fclose(fp); } void TapTraqUplink::iniopen(void) { FILE *fp = fopen("/sd/taptraq/config.sys", "r"); if (fp == NULL) { //For at være sikker på at der er nogle data fclose(fp); printf("Failure to read a configuration file.\n"); WriteDefault(); } else fclose(fp); ReadConfig(); }