Counter
Dependencies: EthernetInterface NTPClient SDFileSystem TextLCD WebSocketClient mbed-rtos mbed Socket lwip-eth lwip-sys lwip FATFileSystem
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 }
Generated on Tue Jul 12 2022 14:08:00 by 1.7.2