LOGIN   :::   RECOVER PASS   :::   GET ACCOUNT    
Browse
  • Projects
  • Code (CVS)
  • Forums
  • News
  • Articles
  • Polls
  •  
    OpenCores
  • FAQ
  • CVS HowTo
  • Mission
  • Media
  • Tools
  • Advertise
  • Mirrors
  • Logos
  • Contact us
  • Job Opportunity
  •  
    Tools
  • Search
      
  • Download Cores (CVSGet)
  •  
    More
  • Wishbone
  • Perlilog
  • EDA tools
  • OpenTech CD
  •  
    Navigation: All forums > Cvs-checkins > Message List > Message Post

    Message

    Reply | Reply all
    Date Prev | Date Next | Thread Prev | Thread Next Date Index | Thread Index

    From: cvs at opencores.org<cvs@o...>
    Date: Tue Mar 25 20:27:26 CET 2008
    Subject: [cvs-checkins] MODIFIED: jop ...
    Top
    Date: 00/08/03 25:20:27

    Modified: jop/java/target/src/app/oebb Gps.java Logic.java Main.java
    State.java TestMain.java
    Log:
    check Ziel


    Revision Changes Path
    1.16 jop/java/target/src/app/oebb/Gps.java

    http://www.opencores.org/cvsweb.shtml/jop/java/target/src/app/oebb/Gps.java.diff?r1=1.15&r2=1.16

    (In the diff below, changes in quantity of whitespace are not shown.)

    Index: Gps.java
    ===================================================================
    RCS file: /cvsroot/martin/jop/java/target/src/app/oebb/Gps.java,v
    retrieving revision 1.15
    retrieving revision 1.16
    diff -u -b -r1.15 -r1.16
    --- Gps.java 13 Mar 2008 17:25:19 -0000 1.15
    +++ Gps.java 25 Mar 2008 19:27:26 -0000 1.16
    @@ -243,7 +243,7 @@
    // Dbg.wr("no communication Alarm");
    // }

    - if (melnr != state.pos) {
    + if (melnr != state.getPos()) {
    Dbg.wr("Melderaum: ");
    Dbg.intVal(melnr);
    Dbg.wr("\n");
    @@ -253,8 +253,8 @@
    if (melnr!=-1) {
    // change only if previous unknown or
    // we're moving
    - if (state.pos<=0 || speed>MIN_SPEED) {
    - state.pos = melnr;
    + if (state.getPos()<=0 || speed>MIN_SPEED) {
    + state.setPos(melnr);
    state.requestSend();
    Dbg.wr("Melderaum: ");
    Dbg.intVal(melnr);
    @@ -268,14 +268,14 @@
    } else {
    // check direction only if no melNr change
    // and we have a valid melNr
    - if (state.pos>0) {
    + if (state.getPos()>0) {
    checkDir();
    }
    }
    //
    // check the timeout for a change to 'Bereit'
    //
    - if (state.pos>=0) {
    + if (state.getPos()>=0) {
    if (melnr==-1) {
    if (Timer.secTimeout(melNrTimeout)) {
    changeToBereit = true;
    @@ -599,7 +599,7 @@
    direction = DIR_UNKNOWN;
    return;
    }
    - Flash.Point p = Flash.getPoint(Main.state.pos);
    + Flash.Point p = Flash.getPoint(Main.state.getPos());
    if (p==null) return;

    int dold = dist(p.lat-old_lat, p.lon-old_lon);



    1.17 jop/java/target/src/app/oebb/Logic.java

    http://www.opencores.org/cvsweb.shtml/jop/java/target/src/app/oebb/Logic.java.diff?r1=1.16&r2=1.17

    (In the diff below, changes in quantity of whitespace are not shown.)

    Index: Logic.java
    ===================================================================
    RCS file: /cvsroot/martin/jop/java/target/src/app/oebb/Logic.java,v
    retrieving revision 1.16
    retrieving revision 1.17
    diff -u -b -r1.16 -r1.17
    --- Logic.java 13 Mar 2008 17:25:19 -0000 1.16
    +++ Logic.java 25 Mar 2008 19:27:26 -0000 1.17
    @@ -67,6 +67,10 @@

    private int alarmType;

    + private boolean alarmZielQuit;
    + private boolean alarmFaehrtQuit;
    + private boolean alarmRichtungQuit;
    +
    private int[] buf;
    // length is one display line without status character
    private static final int BUF_LEN = 19;
    @@ -287,13 +291,23 @@
    }

    /**
    + * Send a postion change event from State.
    + * Reset alarm quit fields. + */ + void posChanged() { + alarmFaehrtQuit = false; + alarmRichtungQuit = false; + alarmZielQuit = false; + } + + /** * 'calculate' what to check from the state we are in. * */ private void updateStates() { - if (Main.state.pos>0) { - Flash.Point p = Flash.getPoint(Main.state.pos); + if (Main.state.getPos()>0) { + Flash.Point p = Flash.getPoint(Main.state.getPos()); checkDirection = p.checkDirection; // Stillstand: Enable checkMove if (Gps.speed<Gps.MIN_SPEED && Logic.state!=Logic.ERLAUBNIS) { @@ -315,7 +329,7 @@ State state = Main.state; int pos, start, end; synchronized (state) { - pos = state.pos; + pos = state.getPos(); start = state.start; end = state.end; } @@ -326,13 +340,13 @@ // direction check also in ZIEL // if (checkMelnr && !isVerschub && Logic.state!=Logic.ALARM - && Main.state.pos!=-1) { + && Main.state.getPos()!=-1) { synchronized (Status.dirMutex) { if (Status.direction==Gps.DIR_UNKNOWN) { - if (Main.state.end > Main.state.start) { // going from left to rigth. + if (Main.state.end > Main.state.start) { // going from left to right. Status.direction = Gps.DIR_FORWARD; - } else if (Main.state.end < Main.state.start) { // going from left to rigth. + } else if (Main.state.end < Main.state.start) { // going from left to right. Status.direction = Gps.DIR_BACK; } } @@ -340,28 +354,25 @@ if (Status.direction==Gps.DIR_FORWARD) { // going from left to rigth. // check direction with melnr - if (checkDirection && Main.state.pos<Main.state.start) { + if (checkDirection && Main.state.getPos()<Main.state.start) { // FERL bleibt stateAfterQuit = Logic.state; Logic.state = Logic.ALARM; alarmType = Cmd.ALARM_RICHTUNG; return false; } - // check Melderaum + // check Melderaum Ziel // if (Main.state.pos<Main.state.start || Main.state.pos>Main.state.end) { // change 13.12.2006 - Ziel only in the direction - if (Main.state.pos>Main.state.end) { + if (Main.state.getPos()>Main.state.end && Main.state.end!=0 && !alarmZielQuit) { stateAfterQuit = Logic.state; Logic.state = Logic.ALARM; alarmType = Cmd.ALARM_UEBERF; -// TODO: find a new way to not trigger ziel uberfahren to often -// Main.state.start = Main.state.pos; -// Main.state.end = Main.state.pos; return false; } // check direction if (checkDirection && Gps.direction==Gps.DIR_BACK && - !(state.type==State.TYPE_NF && Main.state.pos==Main.state.end)) { + !(state.type==State.TYPE_NF && Main.state.getPos()==Main.state.end)) { // FERL bleibt stateAfterQuit = Logic.state; @@ -371,7 +382,7 @@ } } else { // going from right to left // check direction with melnr - if (checkDirection && Main.state.pos>Main.state.start) { + if (checkDirection && Main.state.getPos()>Main.state.start) { // FERL bleibt stateAfterQuit = Logic.state; Logic.state = Logic.ALARM; @@ -381,7 +392,7 @@ // check Melderaum // change 13.12.2006 - Ziel only in the direction // if (Main.state.pos>Main.state.start || Main.state.pos<Main.state.end) { - if (Main.state.pos<Main.state.end) { + if (Main.state.getPos()<Main.state.end && Main.state.end!=0 && !alarmZielQuit) { stateAfterQuit = Logic.state; Logic.state = Logic.ALARM; alarmType = Cmd.ALARM_UEBERF; @@ -389,7 +400,7 @@ } // check direction if (checkDirection && Gps.direction==Gps.DIR_FORWARD && - !(state.type==State.TYPE_NF && Main.state.pos==Main.state.end)) { + !(state.type==State.TYPE_NF && Main.state.getPos()==Main.state.end)) { stateAfterQuit = Logic.state; // FERL bleibt // stateAfterQuit = Status.ANM_OK; @@ -428,7 +439,7 @@ // Ziel erreicht // if (Logic.state == Logic.ERLAUBNIS && - Main.state.pos == Main.state.end && + Main.state.getPos() == Main.state.end && state.type==State.TYPE_ZUG) { Logic.state = Logic.ZIEL; @@ -607,7 +618,7 @@ // wait for GPS melnr found for (;;) { - if (Main.state.pos>0) { + if (Main.state.getPos()>0) { // now we can check for a change of Melnr checkMelnr = true; break; @@ -844,7 +855,7 @@ tim = Timer.getTimeoutSec(5); } - Flash.Point p = Flash.getPoint(Main.state.pos); + Flash.Point p = Flash.getPoint(Main.state.getPos()); if (p==null || !(p.anmelden)) { Display.write("Anmelden bei", "dieser Position", "nicht möglich"); } else { @@ -1019,6 +1030,15 @@ // wait for Enter to quit Alarm if (waitEnter()) break; } + if (alarmType==Cmd.ALARM_UEBERF) { + alarmZielQuit = true; + } else if (alarmType==Cmd.ALARM_FAEHRT) { + alarmFaehrtQuit = true; + } else if (alarmType==Cmd.ALARM_RICHTUNG) { + alarmRichtungQuit = true; + } else { + Display.write("Alarm", "Nummer", alarmType, ""); + } Led.alarmOff(); if (Status.connOk) { // reset alarm - even is not quit? @@ -1046,12 +1066,12 @@ private void ziel() { - Flash.Point p = Flash.getPoint(Main.state.pos); + Flash.Point p = Flash.getPoint(Main.state.getPos()); if (Status.esMode) { Display.write("Ziel erreicht:", p.stationLine1, "(HP-Ausw. Pfeilt.)"); setGpsData(); tmpStr.append("Ziel erreicht: "); - tmpStr.append(Main.state.pos); + tmpStr.append(Main.state.getPos()); tmpStr.append("\n"); Flash.log(tmpStr); if (waitAnyKey()) { @@ -1110,7 +1130,7 @@ if (Status.esMode) { setGpsData(); tmpStr.append("Neustart: "); - tmpStr.append(Main.state.pos); + tmpStr.append(Main.state.getPos()); tmpStr.append("\n"); Flash.log(tmpStr); } @@ -1122,7 +1142,7 @@ Display.write("Deaktiviert", "", "Aktivieren mit [E]"); setGpsData(); tmpStr.append("Deaktiviert: "); - tmpStr.append(Main.state.pos); + tmpStr.append(Main.state.getPos()); tmpStr.append("\n"); Flash.log(tmpStr); initVals(); @@ -1154,13 +1174,13 @@ int tim; // System.out.println("AnkVerl"); - if (Main.state.pos<=0 || Main.state.start<=0 || Main.state.end<=0 || + if (Main.state.getPos()<=0 || Main.state.start<=0 || Main.state.end<=0 || Status.direction == Gps.DIR_UNKNOWN) { Display.write("Bei dieser Position", "keine Meldung", "möglich!"); waitEnter(5); return; } - Flash.Point p = Flash.getPoint(Main.state.pos); + Flash.Point p = Flash.getPoint(Main.state.getPos()); if (p==null) { Display.write("Bei dieser Position", "keine Meldung", "möglich!"); waitEnter(5); @@ -1203,13 +1223,13 @@ int tim; // System.out.println("AnkVerl"); - if (Main.state.pos<=0 || Main.state.start<=0 || Main.state.end<=0 || + if (Main.state.getPos()<=0 || Main.state.start<=0 || Main.state.end<=0 || Status.direction == Gps.DIR_UNKNOWN) { Display.write("Bei dieser Position", "keine Meldung", "möglich!"); waitEnter(5); return; } - Flash.Point p = Flash.getPoint(Main.state.pos); + Flash.Point p = Flash.getPoint(Main.state.getPos()); if (p==null || !p.verlassen) { Display.write("Bei dieser Position", "keine Meldung", "möglich!"); waitEnter(5); @@ -1316,7 +1336,7 @@ if (i<1000) tmpStr.append(' '); if (i<100) tmpStr.append(' '); tmpStr.append("MNr: "); - Display.write(20, tmpStr, Main.state.pos); + Display.write(20, tmpStr, Main.state.getPos()); Display.write(40, Gps.text); } } @@ -1432,7 +1452,7 @@ // is it necessary to do esStr() on ES Strecken befor findStr()? synchronized(this) { Flash.esStr(); - Main.state.pos = -1; + Main.state.setPos(-1); // disable till Gps finds the new Melnr for the // changed Strecke checkMelnr = false; @@ -1450,11 +1470,11 @@ Logic.state = Logic.ES_RDY; for (;;) { - if (Main.state.pos>0) { + if (Main.state.getPos()>0) { // now we can check for a change of Melnr checkMelnr = true; - Main.state.start = Main.state.pos; - Main.state.end = Main.state.pos; + Main.state.start = Main.state.getPos(); + Main.state.end = Main.state.getPos(); break; } loop(); @@ -1487,7 +1507,7 @@ i = Flash.getNext(i); if (i!=-1) { melnr = i; - if (melnr>=Main.state.pos) { + if (melnr>=Main.state.getPos()) { p = Flash.getPoint(melnr); break; } @@ -1537,7 +1557,7 @@ // The left point is the station // smaller melnr is start - Main.state.start = Main.state.pos; + Main.state.start = Main.state.getPos(); Main.state.end = melnr; Logic.state = Logic.ERLAUBNIS; Main.state.type = State.TYPE_ZUG; @@ -1580,15 +1600,15 @@ setGpsData(); tmpStr.append("Verschub: "); - tmpStr.append(Main.state.pos); + tmpStr.append(Main.state.getPos()); tmpStr.append("\n"); Flash.log(tmpStr); Logic.state = Logic.ES_VERSCHUB; checkMelnr = false; while (loop()) { - Main.state.start = Main.state.pos; - Main.state.end = Main.state.pos; + Main.state.start = Main.state.getPos(); + Main.state.end = Main.state.getPos(); } checkMelnr = true; @@ -1604,7 +1624,7 @@ if (Keyboard.rd()==Keyboard.E) { Logic.state = Logic.INIT; Main.state.strnr = 0; - Main.state.pos = 0; + Main.state.setPos(0); return; } } 1.22 jop/java/target/src/app/oebb/Main.java http://www.opencores.org/cvsweb.shtml/jop/java/target/src/app/oebb/Main.java.diff?r1=1.21&r2=1.22 (In the diff below, changes in quantity of whitespace are not shown.) Index: Main.java =================================================================== RCS file: /cvsroot/martin/jop/java/target/src/app/oebb/Main.java,v retrieving revision 1.21 retrieving revision 1.22 diff -u -b -r1.21 -r1.22 --- Main.java 12 Mar 2008 22:24:20 -0000 1.21 +++ Main.java 25 Mar 2008 19:27:26 -0000 1.22 @@ -93,6 +93,7 @@ static RtThread pppThre; static State state; + static Logic logic; static boolean reset; @@ -246,7 +247,7 @@ // // create Logic thread. // - new Logic(LOGIC_PRIO, LOGIC_PERIOD, ipLink); + logic = new Logic(LOGIC_PRIO, LOGIC_PERIOD, ipLink); // // watch dog in it's own thread 1.5 jop/java/target/src/app/oebb/State.java http://www.opencores.org/cvsweb.shtml/jop/java/target/src/app/oebb/State.java.diff?r1=1.4&r2=1.5 (In the diff below, changes in quantity of whitespace are not shown.) Index: State.java =================================================================== RCS file: /cvsroot/martin/jop/java/target/src/app/oebb/State.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -b -r1.4 -r1.5 --- State.java 14 Mar 2008 16:00:51 -0000 1.4 +++ State.java 25 Mar 2008 19:27:26 -0000 1.5 @@ -43,7 +43,7 @@ int time; int strnr; int zugnr; - volatile int pos; // set in Gps.checkStrMelnr() + private volatile int pos; // set in Gps.checkStrMelnr() int start; int end; int startNF; @@ -135,7 +135,7 @@ public State(LinkLayer link) { ipLink = link; - setTimestamp(2001, 1, 1, 0, 0, 0, 0); + setTimestamp(2001, 1, 1, 0, 0, 0, 1); sendTimer = Timer.getTimeoutSec(SEND_PERIOD); stat = new int[5]; @@ -152,7 +152,7 @@ arr[off + 1] = date; arr[off + 2] = time; arr[off + 3] = (strnr << 20) + zugnr; - arr[off + 4] = (pos << 16) + start; + arr[off + 4] = (getPos() << 16) + start; arr[off + 5] = (end << 16) + startNF; int gpsFix = Gps.fix; if (gpsFix == -1) @@ -183,6 +183,8 @@ this.time += (1 << 32 - 28); } + static int cnt; + boolean send() { // get an IP packet @@ -193,6 +195,12 @@ return false; } + // TODO: workaround for first connect + if (!contactZLB) { + ++cnt; + setTimestamp(2001, 1, 1, 0, 0, 0, cnt); + } + setUDPData(p.buf, Udp.DATA); p.len = (Udp.DATA + 12) << 2; @@ -324,18 +332,25 @@ } } - // TODO: any sanity checks? action on change of start/end? + boolean ferlChanged = false; synchronized (this) { - start = buf[Udp.DATA+4]&0xffff; - end = buf[Udp.DATA+5]>>>16; - startNF = buf[Udp.DATA+5]&0xffff; + val = buf[Udp.DATA+4]&0xffff; + if (val!=start) ferlChanged = true; + start = val; + val = buf[Udp.DATA+5]>>>16; + if (val!=end) ferlChanged = true; + end = val; + val = buf[Udp.DATA+5]&0xffff; + if (val!=startNF) ferlChanged = true; + startNF = val; } - if (start!=0 && (Logic.state==Logic.ANM_OK || Logic.state==Logic.ZIEL)) { + if (start!=0 && ferlChanged && (Logic.state==Logic.ANM_OK || Logic.state==Logic.ZIEL)) { // this is now a FERL event synchronized (Status.dirMutex) { // let Logik.check() update the direction Status.direction = Gps.DIR_UNKNOWN; } + Dbg.wr("set FERL"); Logic.state = Logic.ERLAUBNIS; } @@ -572,4 +587,18 @@ } + void setPos(int pos) { + int oldPos = this.pos; + this.pos = pos; + // trigger actions on position change + if (pos != oldPos) { + requestSend(); + Main.logic.posChanged(); + } + } + + int getPos() { + return pos; + } + } 1.3 jop/java/target/src/app/oebb/TestMain.java http://www.opencores.org/cvsweb.shtml/jop/java/target/src/app/oebb/TestMain.java.diff?r1=1.2&r2=1.3 (In the diff below, changes in quantity of whitespace are not shown.) Index: TestMain.java =================================================================== RCS file: /cvsroot/martin/jop/java/target/src/app/oebb/TestMain.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -b -r1.2 -r1.3 --- TestMain.java 12 Mar 2008 22:24:20 -0000 1.2 +++ TestMain.java 25 Mar 2008 19:27:26 -0000 1.3 @@ -130,7 +130,7 @@ msg.bgid = 0x1234; msg.strnr = 155; msg.zugnr = 4711; - msg.pos = 43; + msg.setPos(43); msg.type = State.TYPE_ZUG; Udp.addHandler(State.ZLB_RCV_PORT, msg);

     
    Copyright (c) 1999 OPENCORES.ORG. All rights reserved.