001package org.vishia.guiViewCfg; 002 003import java.io.File; 004 005import org.vishia.byteData.ByteDataSymbolicAccessReadConfig; 006import org.vishia.byteData.RawDataAccess; 007import org.vishia.mainCmd.Report; 008import org.vishia.util.FileSystem; 009 010 011public class OamOutFileReader 012{ 013 /**Index (fast access) of all variable which are contained in the cfg-file. */ 014 private final ByteDataSymbolicAccessReadConfig accessOamVariable; 015 016 /**Associated class which shows the values */ 017 //private final OamShowValues showValues; 018 019 boolean dataValid = false; 020 021 //private final Map<String, String> indexUnknownVariable = new TreeMap<String, String>(); 022 023 024 025 final Report log; 026 027 private final File fileOam; 028 029 /**To detect whether the file is new. */ 030 private long lastTimeFile = 0; 031 032 /**To detect timeout while file waiting. */ 033 private long lastTimeAccess = System.currentTimeMillis(); 034 035 private int timeDiffCheckAccess = 3000; 036 037 /**To detect whether a new curve point should show. */ 038 private long lastTimeCurve = 0; 039 040 /**The distance between curve points in milliseconds. */ 041 private long timeUnitCurve = 1000; 042 043 044 int checkWithoutNewdata; 045 046 047 private RawDataAccess dataAccess = new RawDataAccess(); 048 049 byte[] binData = new byte[1024]; 050 051 private RawDataAccess dataAccessUcell = new RawDataAccess(); 052 053 byte[] binDataUcell = new byte[1152]; 054 055 public OamOutFileReader( 056 String sFileOamValues 057 , String sFileOamUcell 058 , Report log 059 , OamShowValues showValues 060 ) 061 { this.log = log; 062 //this.showValues = showValues; 063 accessOamVariable = new ByteDataSymbolicAccessReadConfig(log); 064 dataAccess.assignClear(binData); 065 dataAccess.setBigEndian(true); 066 dataAccessUcell.assignClear(binDataUcell); 067 dataAccessUcell.setBigEndian(true); 068 fileOam = new File(sFileOamValues); 069 070 } 071 072 073 public void readVariableCfg() 074 { int nrofVariable = accessOamVariable.readVariableCfg("GUI/oamVar.cfg"); 075 if( nrofVariable>0){ 076 log.writeInfoln("success read " + nrofVariable + " variables from file \"GUI/oamVar.cfg\"."); 077 } 078 } 079 080 081 082 083 /**checks whether new data are received. 084 * This routine is called in {@link ViewCfg#execute()} in the main thread. 085 */ 086 public void checkData() 087 { 088 long fileTime = fileOam.lastModified(); 089 @SuppressWarnings("unused") 090 int nrofBytes; 091 if(fileTime != lastTimeFile){ 092 lastTimeFile = fileTime; 093 if((nrofBytes = FileSystem.readBinFile(fileOam, binData)) >0){ 094 ////showValues.show(binData); 095 } 096 timeDiffCheckAccess = 3000; //timeout set to 3 seconds. 097 checkWithoutNewdata = 0; 098 lastTimeAccess = System.currentTimeMillis(); 099 } else { 100 checkWithoutNewdata +=1; 101 if((System.currentTimeMillis() - lastTimeAccess) > timeDiffCheckAccess){ 102 //5 seconds delay: 103 log.writeError("no data found, checked " + checkWithoutNewdata + "times. Tested file:" 104 + fileOam.getAbsolutePath() 105 + (fileOam.exists() ? " - exists, timestamp = " + fileTime : " - not found.")); 106 lastTimeAccess = System.currentTimeMillis(); 107 checkWithoutNewdata = 0; 108 timeDiffCheckAccess = 20000; //new message after 20 seconds only. 109 } 110 } 111 112 long currentTime = System.currentTimeMillis(); 113 if(currentTime - lastTimeCurve >= timeUnitCurve){ 114 if(lastTimeCurve == 0){ 115 lastTimeCurve = currentTime; //the first time. 116 } else { 117 lastTimeCurve += timeUnitCurve; 118 } 119 //writeCurveRoutine.run(); 120 } 121 } 122 123 124 void stop(){} 125 126}