Counter

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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers uplink.cpp Source File

uplink.cpp

00001 #include "uplink.h"
00002 //---------------------------------------------------------------------------------------------------------------------------------------------------------------
00003 //Frames til T2
00004 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)
00005 {
00006     time_t sec = time(NULL);
00007     char tidstr[32];
00008     sec = time(NULL);
00009     strftime(tidstr, 32, "%Y/%m/%d-%H:%M:%S", localtime(&sec));
00010     sprintf(json_recv, "{1,%s,%s,%x,%x,%x,%x,%x,%x,%x,%x}" ,ID,tidstr,TapID,Flow,Spild,Temp,Key1,Key2,Key3,Key4);
00011     webs->send(json_recv);
00012 }
00013 
00014 void TapTraqUplink::setuprec (char ID, char *node)
00015 {
00016     sprintf(json_recv, "{2,%s,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x}",node,
00017             SetupArr[ID].ID, SetupArr[ID].TabType, SetupArr[ID].EscTryk, SetupArr[ID].FlowEnable,
00018             SetupArr[ID].FlowMode, SetupArr[ID].IntervalUpload,
00019             SetupArr[ID].XLOn, SetupArr[ID].XLPause, SetupArr[ID].XLTopup,
00020             SetupArr[ID].LOn,  SetupArr[ID].LPause,  SetupArr[ID].LTopup,
00021             SetupArr[ID].MOn,  SetupArr[ID].MPause,  SetupArr[ID].MTopup,
00022             SetupArr[ID].SOn,  SetupArr[ID].SPause,  SetupArr[ID].STopup);
00023     webs->send(json_recv);
00024 }
00025 
00026 void TapTraqUplink::TankFlowFrame (char *ID, float latitude, float longitude, uint32_t Flow, float Temp)
00027 {
00028     time_t sec = time(NULL);
00029     char tidstr[32];
00030     sec = time(NULL);
00031     strftime(tidstr, 32, "%Y/%m/%d-%H:%M:%S", localtime(&sec));
00032     sprintf(json_recv,"{%s,%s,%.4f,%.4f,%d,%.1f}",
00033               ID,tidstr,latitude,longitude,Flow,Temp);   
00034     webs->send(json_recv);
00035 }
00036 
00037 
00038 void TapTraqUplink::alive(char *p)
00039 {
00040     sprintf(json_recv, "{100,%s}",p); //sender gateway ID
00041     webs->send(json_recv);
00042 }
00043 
00044 void TapTraqUplink::panlist(char *gateway, char id)
00045 {
00046     sprintf(json_recv, "{101,%s,%d,%s}",gateway,id,PanId[id].EUID); //sender gateway ID
00047     webs->send(json_recv);
00048 }
00049 
00050 
00051 //---------------------------------------------------------------------------------------------------------------------------------------------------------------
00052 //Frames fra T2
00053 //dekodning af beskeder
00054 //Setup frames
00055 void TapTraqUplink::Rxsetuprec()
00056 {
00057     SetupRec Setup; //vi er nødt til at ligge det over i et setup inde vi ved hvilke setup der kommet
00058     sscanf(json_recv,"{2,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x}",
00059            &Setup.ID, &Setup.TabType,&Setup.EscTryk,&Setup.FlowEnable,
00060            &Setup.FlowMode, &Setup.IntervalUpload,
00061            &Setup.XLOn, &Setup.XLPause, &Setup.XLTopup,
00062            &Setup.LOn,  &Setup.LPause,  &Setup.LTopup,
00063            &Setup.MOn,  &Setup.MPause,  &Setup.MTopup,
00064            &Setup.SOn,  &Setup.SPause,  &Setup.STopup);
00065     memcpy(&SetupArr[Setup.ID].ID,&Setup.ID,sizeof(Setup)); //kopiere den over
00066     SaveConfig(); //Skriv den til disk
00067 }
00068 //setup frames fra ZB, der skal dekodes og gemmes her
00069 void TapTraqUplink::RxSetuprec1(char *p,char CtrlNr)
00070 {
00071     SetupRec SetupData; //vi er nødt til at ligge det over i et setup inde vi ved hvilke setup der kommet
00072     sscanf(p,"02,%X,%X,%X,%X,%X,%X",
00073            &SetupData.ID, &SetupData.TabType, &SetupData.EscTryk, &SetupData.FlowEnable,
00074            &SetupData.FlowMode, &SetupData.IntervalUpload);
00075     memcpy(&SetupArr[SetupData.ID+(CtrlNr*MaxCtrl)].ID,&SetupData.ID,sizeof(SetupData)); //kopiere den over
00076 }
00077 
00078 void TapTraqUplink::RxSetuprec2(char *p,char CtrlNr )
00079 {
00080     char id;
00081     SetupRec SetupData; //vi er nødt til at ligge det over i et setup inde vi ved hvilke setup der kommet
00082     sscanf(p,"03,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X", &SetupData.ID,
00083            &SetupData.XLOn, &SetupData.XLPause, &SetupData.XLTopup,
00084            &SetupData.LOn, &SetupData.LPause, &SetupData.LTopup,
00085            &SetupData.MOn, &SetupData.MPause, &SetupData.MTopup,
00086            &SetupData.SOn, &SetupData.SPause, &SetupData.STopup);
00087     //SetupData.ID er setup rec numeret for den enkelte ctrl (0..9)
00088     //Derudover skal vi vide hvilke ctrl det er (1..MaxCtrl)       
00089     id=SetupData.ID+(CtrlNr*MaxCtrl);
00090     SetupArr[id].XLOn=SetupData.XLOn;
00091     SetupArr[id].XLPause=SetupData.XLPause;
00092     SetupArr[id].XLTopup=SetupData.XLTopup;
00093     SetupArr[id].LOn=SetupData.LOn;
00094     SetupArr[id].LPause=SetupData.LPause;
00095     SetupArr[id].LTopup=SetupData.LTopup;
00096     SetupArr[id].MOn=SetupData.MOn;
00097     SetupArr[id].MPause=SetupData.MPause;
00098     SetupArr[id].MTopup=SetupData.MTopup;
00099     SetupArr[id].SOn=SetupData.SOn;
00100     SetupArr[id].SPause=SetupData.SPause;
00101     SetupArr[id].STopup=SetupData.STopup;    
00102     SaveConfig(); //Skriv den til disk
00103 }
00104 //Det var nok om setup records, tilbage til T2
00105 
00106 //T vil gerne se hvordan setup er for en given counter
00107 
00108 //T vil gerne se en liste over hvilke counter der er online
00109 
00110 
00111 
00112 //---------------------------------------------------------------------------------------------------------------------------------------------------------------
00113 int TapTraqUplink::work()
00114 {
00115     if (webs->read(json_recv)) return 1;
00116     else return 0;
00117 }
00118 //--------------------------Pan liste-------------------------------------------------------
00119 //gem liste over PANID, som vi kan se
00120 void TapTraqUplink::SavePanID()
00121 {
00122     char str[200];
00123     FILE *fp = fopen("/sd/taptraq/PanId.sys", "w"); //
00124     sprintf(str, "{%s,%s,%s,%s,%s,%s,%s,%s,%s,%s}\r\n",
00125             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);
00126     fputs(str, fp);
00127     sprintf(str, "{%x,%x,%x,%x,%x,%x,%x,%x,%x,%x}\r\n",
00128             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);
00129     fputs(str, fp);
00130     fclose(fp);
00131 }
00132 
00133 void TapTraqUplink::ReadPanID()
00134 {
00135     char str[200];
00136     char *p_items;
00137     FILE *fp = fopen("/sd/taptraq/PanId.sys", "r"); //
00138     p_items = fgets(str, SetupStrSize, fp); //
00139     strtok(str, "\n\0");  // change \n to \0 method
00140     strtok(str, "\r\0");  // change \n to \0 method
00141     sscanf(str, "{%s,%s,%s,%s,%s,%s,%s,%s,%s,%s}",
00142            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);
00143     p_items = fgets(str, SetupStrSize, fp); //
00144     strtok(str, "\n\0");  // change \n to \0 method
00145     strtok(str, "\r\0");  // change \n to \0 method
00146     sscanf(str, "{%x,%x,%x,%x,%x,%x,%x,%x,%x,%x}",
00147            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);
00148     fclose(fp);
00149 }
00150 
00151 bool TapTraqUplink::AddPan(char *p)
00152 {
00153     char i=0;
00154     while ((PanId[i].ID!=0) & (i<MaxCtrl)) i++;
00155     if (i<MaxCtrl) {
00156         strncpy(PanId[i].EUID,p,16);
00157         PanId[i].ID=i+1;
00158         SavePanID(); //Skriver den til SD-kortet
00159         return true;
00160     } else {
00161         return false;
00162     }
00163 }
00164 
00165 int TapTraqUplink::CheckPan(char *p)
00166 //finder hvad ctrl nummeret er ud fra pan id.
00167 //ctrl nummeret er mellem 0..MaxCtrl
00168 {
00169     char i=0;
00170     int fundet=-1;
00171     char TmpEUID[17];
00172     strcpy(TmpEUID,p);
00173     while ((PanId[i].ID!=0) & (i<MaxCtrl)) {
00174         if (strcmp(PanId[i].EUID, TmpEUID) == 0) fundet=i;
00175         i++;
00176     }
00177     return fundet;
00178 }
00179 
00180 //------------------Ini file----------------------------------------------------------------
00181 //Vi gemmer setup records på SDkort i Ascii format, således at vi senere kan rette i dem
00182 //Read læser dem alle ind i hukommelsen
00183 //Save skriver dem tilbage på SD kortet
00184 
00185 void TapTraqUplink::ReadConfig()
00186 {
00187     //læser det hele igennem for at finde setup record for den pågældende ctrl
00188     char str[SetupStrSize];
00189     char *p_items;
00190     char dummy;
00191     FILE *fp = fopen("/sd/taptraq/config.sys", "r");
00192     if (fp != NULL) {
00193         for (int ID=0; ID<MAX_NUMBER*MaxCtrl; ID++) {
00194             p_items = fgets(str, SetupStrSize, fp); //
00195             strtok(str, "\n\0");  // change \n to \0 method
00196             strtok(str, "\r\0");  // change \n to \0 method
00197             if (p_items == NULL)  break;
00198             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
00199                    &SetupArr[ID].ID, &SetupArr[ID].TabType, &SetupArr[ID].EscTryk, &SetupArr[ID].FlowEnable,
00200                    &SetupArr[ID].FlowMode, &SetupArr[ID].IntervalUpload,
00201                    &SetupArr[ID].XLOn, &SetupArr[ID].XLPause, &SetupArr[ID].XLTopup,
00202                    &SetupArr[ID].LOn,  &SetupArr[ID].LPause,  &SetupArr[ID].LTopup,
00203                    &SetupArr[ID].MOn,  &SetupArr[ID].MPause,  &SetupArr[ID].MTopup,
00204                    &SetupArr[ID].SOn,  &SetupArr[ID].SPause,  &SetupArr[ID].STopup);
00205         }
00206     }
00207 }
00208 
00209 void TapTraqUplink::WriteDefault(void)
00210 {
00211     for (char i=0; i<MAX_NUMBER*MaxCtrl; i++) {
00212         SetupArr[i].ID=i%MaxCtrl;
00213         SetupArr[i].TabType=0;
00214         SetupArr[i].EscTryk=1;
00215         SetupArr[i].FlowEnable=0;
00216         SetupArr[i].FlowMode=0;
00217         SetupArr[i].IntervalUpload=600;
00218         SetupArr[i].XLOn=0;
00219         SetupArr[i].XLPause=0;
00220         SetupArr[i].XLTopup=0;
00221         SetupArr[i].LOn=0;
00222         SetupArr[i].LPause=0;
00223         SetupArr[i].LTopup=0;
00224         SetupArr[i].MOn=0;
00225         SetupArr[i].MPause=0;
00226         SetupArr[i].MTopup=0;
00227         SetupArr[i].SOn=0;
00228         SetupArr[i].SPause=0;
00229         SetupArr[i].STopup=0;
00230     }
00231     SaveConfig();
00232 }
00233 
00234 
00235 void TapTraqUplink::SaveConfig()   //writes config to sdcard
00236 {
00237     char str[SetupStrSize];
00238     FILE *fp = fopen("/sd/taptraq/config.sys", "w"); //
00239     for (int ID=0; ID<MAX_NUMBER*MaxCtrl; ID++) {
00240         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,
00241                 SetupArr[ID].ID, SetupArr[ID].TabType, SetupArr[ID].EscTryk, SetupArr[ID].FlowEnable,
00242                 SetupArr[ID].FlowMode, SetupArr[ID].IntervalUpload,
00243                 SetupArr[ID].XLOn, SetupArr[ID].XLPause, SetupArr[ID].XLTopup,
00244                 SetupArr[ID].LOn,  SetupArr[ID].LPause,  SetupArr[ID].LTopup,
00245                 SetupArr[ID].MOn,  SetupArr[ID].MPause,  SetupArr[ID].MTopup,
00246                 SetupArr[ID].SOn,  SetupArr[ID].SPause,  SetupArr[ID].STopup);
00247 
00248         fputs(str, fp);
00249 //        printf(str);
00250     }
00251     fclose(fp);
00252 }
00253 
00254 void TapTraqUplink::iniopen(void)
00255 {
00256     FILE *fp = fopen("/sd/taptraq/config.sys", "r");
00257     if (fp == NULL) { //For at være sikker på at der er nogle data
00258         fclose(fp);
00259         printf("Failure to read a configuration file.\n");
00260         WriteDefault();
00261     } else fclose(fp);
00262     ReadConfig();
00263 }