|
Message
From: cvs at opencores.org<cvs@o...>
Date: Tue Mar 25 20:27:26 CET 2008
Subject: [cvs-checkins] MODIFIED: jop ...
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);
|
 |