Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Tams code enhanced so that sensor handling works properly including
getting the initial state.
Cleaned up classes to remove unused methods, variables etc etc.
Overall handling of TamsMessages, TamsReplies and polling improved.

In a later version will see if the TamsThrottleManager can be made more
efficient.
  • Loading branch information
jan committed May 31, 2018
1 parent fd278e5 commit a9bca46
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 44 deletions.
1 change: 1 addition & 0 deletions java/src/jmri/jmrix/tams/TamsConstants.java
Expand Up @@ -25,6 +25,7 @@ public final class TamsConstants {
public final static int XSTATUS = 0xA2;
public final static int XEVENT = 0xC8;
public final static int XSENSOR = 0x98;
public final static int XSENSOFF = 0x99;
public final static int XEVTSEN = 0xCB;
public final static int XEVTLOK = 0xC9;
public final static int XEVTTRN = 0xCA;
Expand Down
21 changes: 4 additions & 17 deletions java/src/jmri/jmrix/tams/TamsMessage.java
Expand Up @@ -58,16 +58,6 @@ public void setReplyLastByte(int rlb) {
_replyLastByte = rlb;
}

private int _replySensorNumber = -1;//Not valid unless a value between 1 and 16

public int getSensorNumber() {
return _replySensorNumber;
}

public void setSensorNumber(int id) {
_replySensorNumber = id;
}

public TamsMessage() {
super();
}
Expand Down Expand Up @@ -163,7 +153,6 @@ static public TamsMessage getXEvtSen() {
m.setBinary(true);
m.setReplyOneByte(false);
m.setReplyLastByte(TamsConstants.EOM00);//No more sensor data is following
m.setSensorNumber(-1);
m.setReplyType('S');
//log.info("Preformatted Tams message = " + Integer.toHexString(m.getElement(0)) + " " + Integer.toHexString(m.getElement(1)));
return m;
Expand Down Expand Up @@ -201,23 +190,21 @@ static public TamsMessage setXSR() {
TamsMessage m = new TamsMessage("xSR 1");
m.setBinary(false);
m.setReplyOneByte(false);
m.setSensorNumber(-1);
m.setReplyType('S');
return m;
}

//Get Tams MC to report the current status of all ports of a given S88 sensor
static public TamsMessage getXSensor(int i) {
//Set Tams MC so that a sensor module with at least 1 bit set is reporting its status
static public TamsMessage setXSensOff() {
TamsMessage m = new TamsMessage(2);
m.setElement(0, TamsConstants.LEADINGX & 0xFF);
m.setElement(1, TamsConstants.XSENSOR & 0xFF);
m.setElement(2, i & 0xFF);
m.setElement(1, TamsConstants.XSENSOFF & 0xFF);
m.setBinary(true);
m.setReplyOneByte(false);
m.setSensorNumber(i);
m.setReplyType('S');
return m;
}

//Command Station messages
static public TamsMessage getReadPagedCV(int cv) { //Rxxx
TamsMessage m = new TamsMessage("xPTRP " + cv);
Expand Down
35 changes: 10 additions & 25 deletions java/src/jmri/jmrix/tams/TamsSensorManager.java
Expand Up @@ -36,27 +36,12 @@ public TamsSensorManager(TamsSystemConnectionMemo memo) {
TamsMessage tm = TamsMessage.setXSR();//auto reset after reading S88
tc.sendTamsMessage(tm, this);
log.debug("Sending TamsMessage = " + tm.toString() + " , isBinary = " + tm.isBinary() + " and replyType = " + tm.getReplyType());
//Get initial status of sensors
//TamsGetSensorStatus();
//Add polling for sensor state changes
tm = TamsMessage.getXEvtSen(); //reports only sensors with changed states
tc.sendTamsMessage(tm, this);
//tc.sendTamsMessage(tm, this);
tc.addPollMessage(tm, this);
log.debug("TamsMessage added to poll queue = " + jmri.util.StringUtil.appendTwoHexFromInt(tm.getElement(0) & 0xFF, "") + " " + jmri.util.StringUtil.appendTwoHexFromInt(tm.getElement(1) & 0xFF, "") + " and replyType = " + tm.getReplyType());

}

private void TamsGetSensorStatus() {
//See how many Tams Sensor Modules are present and check their state
//Do this only once at start up time of JMRI
log.debug("TamsGetSensorStatus, board = " + board);
board = 1;
for (int i = 1; i <= board; i++) {
log.debug("Requesting status of S88 module = " + board);
TamsMessage tm = TamsMessage.getXSensor(1);//get the status of a given sensor
tc.sendTamsMessage(tm, this);
}
}

TamsSystemConnectionMemo memo;
TamsTrafficController tc;
Expand Down Expand Up @@ -101,14 +86,19 @@ public Sensor createNewSensor(String systemName, String userName) {
}
if ((board * 2) > maxSE) {//Check if newly defined board number is higher than what we know
maxSE = board * 2;//adjust xSE and inform Tams MC
//log.debug("Changed xSE to " + maxSE);
log.debug("Changed xSE to " + maxSE);
TamsMessage tm = new TamsMessage("xSE " + Integer.toString(maxSE));
tm.setBinary(false);
tm.setReplyType('S');
tc.sendTamsMessage(tm, this);
//no need to add a message for this board as the polling process will capture all board anyway
}
}
//Probably sending the status check 16 times but should work...
//Get initial status of sensors
TamsMessage tm = TamsMessage.setXSensOff(); //force report from sensors with at least 1 port set
tc.sendTamsMessage(tm, this);
tm = TamsMessage.getXEvtSen(); //reports only sensors with changed states
tc.sendTamsMessage(tm, this);
log.debug("Returning this sensor: " + s.toString());
return s;
}
Expand Down Expand Up @@ -231,7 +221,7 @@ public void reply(TamsReply r) {
log.debug("*** Tams Sensor Reply ***");
if (TamsTrafficController.replyBinary) {
log.debug("Reply to binary command = " + r.toString());
if ((r.getNumDataElements() > 1) && (r.getElement(0) > 0x00)) {
if ((r.getNumDataElements() > 1) && (r.getElement(0) > 0x00)) {
//Here we break up a long sensor related TamsReply into individual S88 module status'
int numberOfReplies = r.getNumDataElements() / 3;
//log.debug("Incoming Reply = ");
Expand All @@ -243,12 +233,7 @@ public void reply(TamsReply r) {
//create a new TamsReply and pass it to the decoder
TamsReply tr = new TamsReply();
tr.setBinary(true);
if (TamsTrafficController.replySensorNumber <= 0) {// Events from Sensor Polling
tr.setElement(0, r.getElement(3 * i));
} else {
tr.setElement(0, TamsTrafficController.replySensorNumber & 0xFF); // Events collected during JMRI start up
log.debug("MC startup getting Sensor Status: ", TamsTrafficController.replySensorNumber);
}
tr.setElement(0, r.getElement(3 * i));
tr.setElement(1, r.getElement(3 * i + 1));
tr.setElement(2, r.getElement(3 * i + 2));
log.debug("Going to pass this to the decoder = " + tr.getElement(0) + " " + tr.getElement(1) + " " + tr.getElement(2));
Expand Down
2 changes: 0 additions & 2 deletions java/src/jmri/jmrix/tams/TamsTrafficController.java
Expand Up @@ -274,15 +274,13 @@ protected void forwardToPort(AbstractMRMessage tm, AbstractMRListener reply) {
replyType = ((TamsMessage)tm).getReplyType();
replyOneByte = ((TamsMessage)tm).getReplyOneByte();
replyLastByte = ((TamsMessage)tm).getReplyLastByte();
replySensorNumber = ((TamsMessage)tm).getSensorNumber();
super.forwardToPort(tm, reply);
}

protected static char replyType;
protected static boolean replyBinary;
protected static boolean replyOneByte;
protected static int replyLastByte;
protected static int replySensorNumber;
protected static boolean unsolicitedSensorMessageSeen = false;

@Override
Expand Down

0 comments on commit a9bca46

Please sign in to comment.