📄 logic.java
字号:
return; } if (Status.direction == Gps.DIR_FORWARD) { // going from left to rigth. while (p!=null && !p.station) { p = p.getPrev(); } } else { while (p!=null && !p.station) { p = p.getNext(); } } if (p==null) { Display.write("Bei dieser Position", "keine Meldung", "m鰃lich!"); waitEnter(5); return; } Display.write("Ankunftsmeldung bei", p.stationLine1, "(Absenden mit [E])"); if (!waitEnter()) return; Display.write("Ankunftsmeldung OK", p.stationLine1, ""); tim = Timer.getTimeoutSec(5); Status.ankunftOk = false; Comm.melnrCmd(Cmd.ANK, Status.strNr, p.melnr); // and wait for a reply from FDL while (loop()) { if (Status.ankunftOk && Timer.timeout(tim)) { return; } } } private void verlassen() { int tim;// System.out.println("AnkVerl"); if (Status.melNr<=0 || Status.melNrStart<=0 || Status.melNrZiel<=0 || Status.direction == Gps.DIR_UNKNOWN) { Display.write("Bei dieser Position", "keine Meldung", "m鰃lich!"); waitEnter(5); return; } Flash.Point p = Flash.getPoint(Status.melNr); if (p==null || !p.verlassen) { Display.write("Bei dieser Position", "keine Meldung", "m鰃lich!"); waitEnter(5); return; } if (Status.direction == Gps.DIR_FORWARD) { // going from left to rigth. while (p!=null && !p.station) { p = p.getPrev(); } } else { while (p!=null && !p.station) { p = p.getNext(); } } if (p==null) { Display.write("Bei dieser Position", "keine Meldung", "m鰃lich!"); waitEnter(5); return; } Display.write("Verl.meldung nach", p.stationLine1, "(Absenden mit [E])"); if (!waitEnter()) return; Display.write("Verl.meldung OK", p.stationLine1, ""); tim = Timer.getTimeoutSec(5); Status.verlassenOk = false; Comm.melnrCmd(Cmd.VERL, Status.strNr, p.melnr); // and wait for a reply from FDL while (loop()) { if (Status.verlassenOk && Timer.timeout(tim)) { return; } } } private void download() { int dlType = -1; int percent = -1; int cnt = 0;// System.out.println("Download"); Display.write("躡ertragung", "", ""); for (;;) { loop(); // there is no exit from download state! if (Status.dlType!=dlType) { dlType = Status.dlType; if (dlType==0) { Display.write("躡ertragung", " Streckendaten", ""); } else { Display.write("躡ertragung", " Programm", ""); } } if (percent != Status.dlPercent) { percent = Status.dlPercent; cnt = (cnt+1) & 0x01; Display.write(20, bsyIndication.charAt(cnt)); if (percent==101) { Display.write(40, "fertig"); } else if (percent>0 && percent<101) { int i = percent*19/100; for (int j=0; j<i; ++j) { Display.write(40+j, '#'); } } } } } private void info() { int i, j;// System.out.println("Infobtrieb"); Display.write("Infobetrieb", "", ""); checkMelnr = false; if (Status.connOk) { Comm.charlyStatus(Cmd.INFO_MODE, 1); } // wait for Enter or 'C' while (loop()) { i = Keyboard.rd(); if (i==Keyboard.E || i==Keyboard.C) { Comm.charlyStatus(Cmd.INFO_MODE, 0); reset(); } tmpStr.setLength(0); tmpStr.append(Gps.nearestPointDistance); tmpStr.append("m zu "); tmpStr.append(Gps.nearestPoint); tmpStr.append(' '); tmpStr.append(Gps.speed); tmpStr.append(" km/h"); Display.write(0, tmpStr); tmpStr.setLength(0); i = Gps.speedCalc; if (i<0) i = 0; tmpStr.append(Gps.speedCalc); tmpStr.append(" km/h"); if (i<1000) tmpStr.append(' '); if (i<100) tmpStr.append(' '); tmpStr.append("MNr: "); Display.write(20, tmpStr, Status.melNr); Display.write(40, Gps.text); } } private void lern() { int i, val;// System.out.println("Lern"); Display.write("Lerne", "Strecke",""); checkMelnr = false; Status.strNr = getNumber(8, 3); if (Status.strNr == -1) return; Flash.loadStr(Status.strNr); int melnr = Flash.getFirst(Status.strNr); if (melnr==-1) { Display.write("Strecke", "nicht gefunden", ""); waitEnterAndInit(); return; } Flash.loadStrNames(Status.strNr, 0, 0); startConn(); // Conn changes to FLD_CONN Status.state = Status.LERN; Comm.charlyStatus(Cmd.ST_LERN, 1); while (loop()) { Display.write(0, "Lernbetrieb ", melnr); Flash.Point p = Flash.getPoint(melnr); Display.write(20, p.stationLine1); Display.write(40, Gps.text); val = Keyboard.rd(); if (val==-1) { continue; } if (val==Keyboard.C) { Comm.charlyStatus(Cmd.ST_LERN, 0); reset(); } if (val==Keyboard.DOWN) { i = Flash.getPrev(melnr); if (i!=-1) melnr = i; } if (val==Keyboard.UP) { i = Flash.getNext(melnr); if (i!=-1) melnr = i; } if (val==Keyboard.E) { measure(melnr); } } } private void measure(int melnr) {// System.out.println("Measure"); Display.write("Mittelung ", melnr, "", ""); Gps.startAvg(); while (loop()) { Display.intVal(16, Gps.avgCnt); Display.intVal(20, Gps.getLatAvg()); Display.intVal(30, Gps.getLonAvg()); Display.intVal(40, Gps.last_lat); Display.intVal(50, Gps.last_lon); int val = Keyboard.rd(); if (val==-1) { continue; } if (val==Keyboard.C) { return; } if (val==Keyboard.E) { Gps.stopAvg(); Display.write("Wert wird", "gesendet", ""); Status.lernOk = false; Comm.lern(Status.strNr, melnr, Gps.getLatAvg(), Gps.getLonAvg()); // and wait for a reply from FDL while (loop()) { if (Status.lernOk) { return; } } } } } /** * Menu command to change to ES mode * */ private void es221() { Display.write("Wechsel zu", "ES221 Betrieb", ""); // we will keep the connection up Comm.alarm(Status.strNr, Status.melNr, Cmd.ALARM_ES221); System.out.println("esInit"); Status.esMode = true; // question: when shall be do the esStr()? // is it necessary to do esStr() on ES Strecken befor findStr()? synchronized(this) { Flash.esStr(); Status.melNr = -1; // disable till Gps finds the new Melnr for the // changed Strecke checkMelnr = false; } int melnr = Flash.getFirst(Status.strNr); Flash.Point p = Flash.getPoint(melnr); if (p==null) { Display.write("Keine ES-mode", "Streckendaten", ""); while (loop()) { ; } return; } Status.state = Status.ES_RDY; for (;;) { if (Status.melNr>0) { // now we can check for a change of Melnr checkMelnr = true; Status.melNrStart = Status.melNr; Status.melNrZiel = Status.melNr; break; } loop(); } int tim = Timer.getTimeoutSec(2); while (loop()) { if (Timer.timeout(tim)) { return; } } } /** * ES mode: wait for entering a destination * */ private void esRdy() { int val = 0; int i = 0; System.out.println("ES Rdy"); int melnr = Flash.getFirst(Status.strNr); Flash.Point p = Flash.getPoint(melnr); for (;;) { i = Flash.getNext(melnr); i = Flash.getNext(i); if (i!=-1) { melnr = i; if (melnr>=Status.melNr) { p = Flash.getPoint(melnr); break; } } else { i = 0; break; } } while (loop()) { // check for going back to 'Bereit' if (Gps.changeToBereit) { reset(); } Display.write("Haltepunkt ausw.:", p.stationLine1, p.stationLine2); val = Keyboard.rd(); if (val==-1) { continue; } if (val==Keyboard.B) { Keyboard.unread(val); return; } // display only the left point text if (val==Keyboard.UP) { i = Flash.getNext(melnr); i = Flash.getNext(i); if (i!=-1) { melnr = i; p = Flash.getPoint(melnr); } } if (val==Keyboard.DOWN) { i = Flash.getPrev(melnr); i = Flash.getPrev(i); if (i!=-1) { melnr = i; p = Flash.getPoint(melnr); } } if (val==Keyboard.E) { // The left point is the station // smaller melnr is start Status.melNrStart = Status.melNr; Status.melNrZiel = melnr; Status.state = Status.ERLAUBNIS; Status.art = Status.ZUG_NORMAL; Status.direction = Gps.DIR_UNKNOWN; setGpsData(); tmpStr.append("Fahrt von "); tmpStr.append(Status.melNrStart); tmpStr.append(" nach "); tmpStr.append(Status.melNrZiel); tmpStr.append("\n"); Flash.log(tmpStr); return; } } } /** * */ private void setGpsData() { tmpStr.setLength(0); synchronized (Gps.lastGGA) { tmpStr.append(Gps.lastGGA); } synchronized (Gps.lastRMC) { tmpStr.append(Gps.lastRMC); } tmpStr.append("Strecke "); tmpStr.append(Status.strNr); tmpStr.append(" - "); } private void esVerschub() { Display.write("ES Verschub", "", ""); setGpsData(); tmpStr.append("Verschub: "); tmpStr.append(Status.melNr); tmpStr.append("\n"); Flash.log(tmpStr); Status.state = Status.ES_VERSCHUB; checkMelnr = false; while (loop()) { Status.melNrStart = Status.melNr; Status.melNrZiel = Status.melNr; } checkMelnr = true; } /** * Wait for Enter and set state to INIT. */ private void waitEnterAndInit() { while (loop()) { if (Keyboard.rd()==Keyboard.E) { Status.state = Status.INIT; Status.strNr = 0; Status.melNr = 0; Status.melNrSent = 0; return; } } } /** * wait for Enter only, no unread on 'B'. * no break out with loop() */ private void waitEnterOnly() { for (;;) { loop(); if (Keyboard.rd()==Keyboard.E) return; } } /** * wait for any key press (Ziel in ES-mode) */ private boolean waitAnyKey() { int val; int state = Status.state; while (loop()) { val = Keyboard.rd(); if (val!=-1) { return true; } // some State has changed! // dont wait anymore if (state!=Status.state) { return false; } } return false; } /** * return false if 'C' */ private boolean waitEnter() { int val; int state = Status.state; while (loop()) { val = Keyboard.rd(); if (val==Keyboard.E) { return true; } else if (val==Keyboard.B) { Keyboard.unread(val); return false; } else if (val==Keyboard.C) { return false; } // some State has changed! // dont wait anymore if (state!=Status.state) { return false; } } return false; } /** * return false if 'C' */ private boolean waitEnter(int timeout) { int val; int tim; tim = Timer.getTimeoutSec(5); int state = Status.state; while (loop()) { val = Keyboard.rd(); if (val==Keyboard.E) { return true; } else if (val==Keyboard.B) { Keyboard.unread(val); return false; } else if (val==Keyboard.C) { return false; } // some State has changed! // dont wait anymore if (state!=Status.state) { return false; } // timout expired if (Timer.timeout(tim)) { return false; } } return false; } /** * read a number with display update at pos. * 'E' is Enter * 'C' is Backspace * 'B' cancels input (call menu) */ private int getNumber(int pos, int size) { int cnt; if (size>BUF_LEN) size = BUF_LEN; for (cnt=0; cnt<size; ++cnt) { buf[cnt] = 0; } cnt = 0; while (loop()) { Display.write(20+pos+cnt, '_'); int val = Keyboard.rd(); if (val==Keyboard.C) { Display.write(20+pos+cnt, ' '); if (cnt>0) { --cnt; } else { return -1; } } if (val==Keyboard.E || cnt==size) { val = 0; Display.write(20+pos+cnt, ' '); for (int i=0; i<cnt; ++i) { val *= 10; val += buf[i]; } return val; } if (val==Keyboard.B) { Keyboard.unread(val); continue; } val = Keyboard.num(val); if (val!=-1) { buf[cnt] = val; Display.write(20+pos+cnt, '0'+val); ++cnt; } } return -1; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -