📄 logic.java
字号:
Display.write("Betriebsbereit", "Strecke ", Status.strNr, ""); } else { Display.write("Betriebsbereit", "",""); } if (Status.strNr<=0 && Status.selectStr) { enterStrNr(); } if (!loop()) return; } if (Flash.getIp()!=0) { // that's a ZLB Strecke Status.state = Status.CONNECT; } else { Status.esMode = true; Status.state = Status.ES_RDY; } } /** * Strecke nicht eindeutig => eingeben */ private void enterStrNr() { int nr=-1; while (nr<=0) { Display.write("Strecke eingeben","Strecke:",""); Led.shortBeep(); nr = getNumber(8, 3); if (nr>0) { int cnt = Flash.getCnt(); int i; for (i=0; i<cnt; ++i) { if (nr==Flash.getStrNr(i)) { Flash.loadStr(nr); if (Flash.getIp()==0) { Flash.esStr(); } break; } } if (i==cnt) { Display.write("Streckennummer","ung黮tig","(Quitt. [E])"); Led.shortBeep(); waitEnterOnly(); nr = -1; } } } Status.strNr = nr; } private void queryDownload() { int tim = Timer.getSec()+DL_TIMEOUT;System.out.println("Check download server"); // Isn't Flash.java a strange point for communication start! if (!Flash.startComm(DL_STRNR)) { System.out.println("kein Download Server"); Status.state = Status.INIT; return; } Display.write("Verbindungsaufbau", "Download check", "(Bitte warten)"); // wait for ip link established for (;;) { if (ipLink.getIpAddress()!=0) { break; } if (Timer.secTimeout(tim)) {System.out.println("Link timeout"); break; } loop(); } Display.write("Download check", "", ""); Display.ipVal(40, Comm.dst_ip); // CONN is sent in check() // Here we wait for the reply for (;;) { if (Status.connOk) { if (Status.download) { // go the normal way to download Status.state = Status.FDL_CONN; return; } else { break; } } if (Timer.secTimeout(tim)) {System.out.println("Download server connect timeout"); break; } loop(); } // we fall through when there is no download // or a connection timeout // disconnect and wait for GPS Status.connOk = false; connSent = false; Status.commErr = 0; // ignore it ipLink.disconnect(); Comm.dst_ip = 0; Status.state = Status.INIT; } private void startConn() { Display.write("Verbindungsaufbau", "", ""); // Isn't Flash.java a strange point for communication start! Flash.startComm(Status.strNr); // wait for ip link established while (loop()) { int cnt = ipLink.getConnCount(); if (cnt!=0) { Display.write(20, "Versuch ", cnt); } if (ipLink.getIpAddress()!=0) { break; } } Display.write("Verbinden zu", "", ""); Display.ipVal(40, Comm.dst_ip); // CONN is sent in check() // Here we wait for the reply while (loop()) { if (Status.connOk) { Status.state = Status.FDL_CONN; break; } } } /** * returns false if cancelled by pressing 'C' * */ private boolean verschub() { int tim; Status.von = -1; Comm.verschub(Status.strNr, Status.melNr); // wait for replay while (loop()) { if (Status.von != -1) { break; } } if ((Status.von)==0 && (Status.bis)==0) { return true; } // Status.state change in loop() if (Status.state!=Status.FDL_CONN || Status.dispMenu) return true; tim = Timer.getTimeoutSec(5); Display.write("Verschub erlaubt", "", ""); while (loop()) { Flash.Point p = Flash.getPoint(Status.von); if (p!=null) { Display.write(20, p.verschubVon); } p = Flash.getPoint(Status.bis); if (p!=null) { Display.write(40, p.verschubBis); } if (Status.von==0 && Status.bis==0) { break; } if (Timer.timeout(tim)) { Comm.verschub(Status.strNr, Status.melNr); tim = Timer.getTimeoutSec(5); } int val = Keyboard.rd(); if (val==Keyboard.C) { Status.von=0; Status.bis=0; return false; } else if (val==Keyboard.B) { Keyboard.unread(val); loop(); return true; } // Status.state change in loop() if (Status.state!=Status.FDL_CONN || Status.dispMenu) return true; } return true; } private void anmelden() { int nr, val, tim;// System.out.println("Anmelden"); // load default strings for Verschub Flash.loadStrNames(Status.strNr, 0, 0); boolean askVerschub = verschub(); if (Status.state!=Status.FDL_CONN || Status.dispMenu) return; val = 0; Status.art = 0; nr = 0; tim = Timer.getTimeoutSec(5); // Strecke is known!!! while (loop()) { if (askVerschub && Timer.timeout(tim)) { askVerschub = verschub(); // Status.state change in verschub() if (Status.state!=Status.FDL_CONN || Status.dispMenu) return; tim = Timer.getTimeoutSec(5); } Flash.Point p = Flash.getPoint(Status.melNr); if (p==null || !(p.anmelden)) { Display.write("Anmelden bei", "dieser Position", "nicht m鰃lich"); } else { Display.write("Anmelden", "Strecke ", Status.strNr, "Zug: 1, Nf: 2"); val = Keyboard.rd(); if (val==Keyboard.B) { Keyboard.unread(val); return; } else if (val==Keyboard.C) { return; } val = Keyboard.num(val); if (val>=1 && val <=2) { nr = zugnummer(val); if (nr == -1) return; break; } } // check for going back to 'Bereit' if (Gps.changeToBereit) { reset(); } } // Status.state change in loop() if (Status.state!=Status.FDL_CONN || Status.dispMenu) return; // also return on a comm error if (!loop()) return; Status.zugNr = nr; Status.art = val; if (val==1) { Display.write("StreckenNr: ", Status.strNr, "ZugNr: ",Status.zugNr , "(Anmelden mit [E])"); } else { Display.write("StreckenNr: ", Status.strNr, "Nebenfahrt: N", Status.zugNr, "(Anmelden mit [E])"); } while (loop()) { val = Keyboard.rd(); if (val==Keyboard.B) { Keyboard.unread(val); continue; } if (val==Keyboard.E) { Display.write("Anmelden", "", "(bitte warten)"); if (Status.state!=Status.FDL_CONN) return; // send anmelden Comm.anmelden(Status.art, nr, Status.strNr, Status.melNr); // and wait for a reply of ANM // and a ANMOK while (loop()) { if (Status.anmOk) { Status.state = Status.ANM_OK; Status.melNrStart = Status.melNr; Status.melNrZiel = Status.melNr; break; } else if (Status.state == Status.ABGEMELDET) { abmelden(); } } return; } else if (val==Keyboard.C) { return; } } } private int zugnummer(int val) {// System.out.println("Zugnummer"); if (val==1) { Display.write("", "ZugNr:",""); return getNumber(7, 5); } else if (val==2) { Display.write("", "Nebenfahrt:",""); return getNumber(12, 5); } else { return 0; // no number fuer Verschub } } private void commError() {// System.out.println("Comm Error"); // In ES mode or when checking the download // server we just ignore the communication error if (Status.esMode || Status.state == Status.DL_CHECK) { Status.commErr = 0;System.out.println("comm err ignored"); return; } if (Status.doCommAlarm) { int nr = Status.commErr; Led.shortBeep(); Led.startBlinking(); if (nr==2) { Display.write("FDL Msg Fehler", "Paket zu kurz", ""); } else if (nr==3) { Display.write("FDL Msg Fehler", "falsches CMD", ""); } else if (nr==4) { Display.write("FDL Msg Fehler", "falsche bgid", ""); } else { Display.write("FDL Rechner", "antwortet nicht", "(FDL verst鋘digen)"); } // Display.intVal(40, Status.commErr); } Status.connOk = false; connSent = false; // clear error Status.commErr = 0; // clear melNrSent, has to be resend Status.melNrSent = 0; if (Status.doCommAlarm) { for (;;) { loop(); // // we got another communication error during wait for Enter // just reset our vars and let check()/Comm do the reconnect // if (Status.commErr!=0) { connSent = false; // clear error Status.commErr = 0; // clear melNrSent, has to be resend Status.melNrSent = 0; } if (Keyboard.rd()==Keyboard.E) break; if (Status.connOk) break; } Led.stopBlinking(); } // keep Status even if not connected/* Status.state = Status.INIT; Status.strNr = 0; Status.melNr = 0; Status.melNrSent = 0;*/ } /** * Handle the alarms. */ private void alarm() {Dbg.wr("Alarm ");Dbg.intVal(alarmType);Dbg.lf(); if (alarmType==Cmd.ALARM_UEBERF) { Display.write("", "ZIEL 蹷ERFAHREN", ""); } else if (alarmType==Cmd.ALARM_FAEHRT) { Display.write("KEINE", "FAHRERLAUBNIS", ""); } else if (alarmType==Cmd.ALARM_RICHTUNG) { Display.write("Falsche", "Richtung", ""); } else { Display.write("Alarm", "Nummer", alarmType, ""); } if (Status.esMode) { setGpsData(); tmpStr.append("Alarm: "); tmpStr.append(alarmType); tmpStr.append("\n"); Flash.log(tmpStr); } Led.alarm(); if (Status.connOk) { Comm.alarm(Status.strNr, Status.melNr, alarmType); } for (;;) { // only NOTHAL overwrites an Alarm if (Status.state == Status.NOTHALT) return; // wait for Enter to quit Alarm if (waitEnter()) break; } Led.alarmOff(); if (Status.connOk) { Comm.alarm(Status.strNr, Status.melNr, 0); } // // update state with stateAfterQuit only if // state did not change since alarm // if (Status.state==Status.ALARM) { Status.state = stateAfterQuit; if (Status.state==Status.ZIEL) { Status.state = Status.ANM_OK; } } } private void erlaubnis() {// Dbg.wr("Erlaubnis\n"); checkMove = false; Flash.Point p = Flash.getPoint(Status.melNrZiel); Display.write("Fahrerlaubnis", p.stationLine1, p.stationLine2);/* 2005-08-19: wird nicht mehr verwendet if (Status.sendFerlQuit) { Led.startBlinking(); int state = Status.state; boolean warned = false; while (loop()) { int val = Keyboard.rd(); if (val==Keyboard.E) { break; } // some State has changed! // dont wait anymore if (state!=Status.state) { Led.stopBeeping(); Led.stopBlinking(); return; } if (!warned && Gps.speed>Gps.MIN_SPEED) { Display.write("Fahrerlaubnis", "mit Enter best鋞igen", ""); Led.startBeeping(); warned = true; } } Comm.simpleCmd(Cmd.FERL_QUIT); Status.sendFerlQuit = false; Led.stopBeeping(); Led.stopBlinking(); }*/ } private void ziel() { Flash.Point p = Flash.getPoint(Status.melNr); if (Status.esMode) { Display.write("Ziel erreicht:", p.stationLine1, "(HP-Ausw. Pfeilt.)"); setGpsData(); tmpStr.append("Ziel erreicht: "); tmpStr.append(Status.melNr); tmpStr.append("\n"); Flash.log(tmpStr); if (waitAnyKey()) { Status.state = Status.ES_RDY; } } else { Display.write("Ziel erreicht:", p.stationLine1, p.stationLine2); } } private void widerruf() {// System.out.println("Widerruf"); Display.write("Fahrtwiderruf", "ZugNr: ", Status.zugNr, "(Quitt. mit [E])"); Led.startBlinking(); // wait for Enter while (loop()) { if (Keyboard.rd()==Keyboard.E) { Comm.simpleCmd(Cmd.FWR_QUIT); Display.write("Fahrtwiderruf OK", "", ""); Status.state = Status.ANM_OK; Led.stopBlinking(); return; } } } private void nothalt() {// System.out.println("Nothalt"); Display.write("", "NOTHALT", ""); Led.alarm(); // wait for Enter for(;;) { loop(); if (Keyboard.rd()==Keyboard.E) { Comm.simpleCmd(Cmd.NOT_QUIT); Led.alarmOff(); Status.state = Status.NOTHALT_OK; return; } } } private void abmelden() {// System.out.println("Abmelden"); Display.write("Abmelden", "", "(bitte warten)"); restart(); } private void restart() { if (Status.esMode) { setGpsData(); tmpStr.append("Neustart: "); tmpStr.append(Status.melNr); tmpStr.append("\n"); Flash.log(tmpStr); } reset(); } private void deakt() { Display.write("Deaktiviert", "", "Aktivieren mit [E]"); setGpsData(); tmpStr.append("Deaktiviert: "); tmpStr.append(Status.melNr); tmpStr.append("\n"); Flash.log(tmpStr); initVals(); waitEnterOnly(); reset(); } /** * reset() is without Logging in ES mode * */ private void reset() { // wait some time to send outstanding messages // and reply int tim = Timer.getTimeoutSec(4); while (!Timer.timeout(tim)) { loop(); } // wait for reset Main.reset = true; for (;;) { loop(); } } private void ankunft() { 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) { Display.write("Bei dieser Position", "keine Meldung", "m鰃lich!"); waitEnter(5);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -