use of jmri.ThrottleManager in project JMRI by JMRI.
the class JmriSRCPThrottleServer method initThrottle.
public void initThrottle(int bus, int address, boolean isLong, int speedsteps, int functions) throws IOException {
log.debug("initThrottle called with bus {} and address {}", bus, address);
/* translate the bus into a system connection memo */
java.util.List<SystemConnectionMemo> list = jmri.InstanceManager.getList(SystemConnectionMemo.class);
SystemConnectionMemo memo = null;
try {
memo = list.get(bus - 1);
} catch (java.lang.IndexOutOfBoundsException obe) {
TimeStampedOutput.writeTimestamp(output, Bundle.getMessage("Error412"));
return;
}
/* request the throttle for this particular locomotive address */
if (memo.provides(jmri.ThrottleManager.class)) {
ThrottleManager t = memo.get(jmri.ThrottleManager.class);
// we will use getThrottleInfo to request information about the
// address, so we need to convert the address to a DccLocoAddress
// object first.
DccLocoAddress addr = new DccLocoAddress(address, isLong);
busList.add(Integer.valueOf(bus));
addressList.add(addr);
t.requestThrottle(addr, this);
}
}
use of jmri.ThrottleManager in project JMRI by JMRI.
the class JmriSRCPThrottleServer method setThrottleFunctions.
/*
* Set Throttle Functions on/off
*
* @param bus, bus the throttle is on.
* @param l address of the locomotive to change speed of.
* @param fList an ArrayList of boolean values indicating whether the
* function is active or not.
*/
public void setThrottleFunctions(int bus, int address, ArrayList<Boolean> fList) {
log.debug("Setting Functions for address {} bus {}", address, bus);
java.util.List<SystemConnectionMemo> list = jmri.InstanceManager.getList(SystemConnectionMemo.class);
SystemConnectionMemo memo = null;
try {
memo = list.get(bus - 1);
} catch (java.lang.IndexOutOfBoundsException obe) {
try {
TimeStampedOutput.writeTimestamp(output, Bundle.getMessage("Error412"));
} catch (IOException ioe) {
log.error("Error writing to network port");
}
return;
}
/* request the throttle for this particular locomotive address */
if (memo.provides(jmri.ThrottleManager.class)) {
ThrottleManager tm = memo.get(jmri.ThrottleManager.class);
// we will use getThrottleInfo to request information about the
// address, so we need to convert the address to a DccLocoAddress
// object first.
DccLocoAddress addr = new DccLocoAddress(address, tm.canBeLongAddress(address));
// get the throttle for the address.
if (addressList.contains(addr)) {
log.debug("Throttle in throttle list");
Throttle t = throttleList.get(addressList.indexOf(addr));
for (int i = 0; i < fList.size(); i++) {
try {
java.lang.reflect.Method setter = t.getClass().getMethod("setF" + i, boolean.class);
setter.invoke(t, fList.get(i));
} catch (java.lang.NoSuchMethodException | java.lang.IllegalAccessException | java.lang.reflect.InvocationTargetException ex1) {
ex1.printStackTrace();
try {
sendErrorStatus();
} catch (IOException ioe) {
log.error("Error writing to network port");
}
}
}
}
}
}
use of jmri.ThrottleManager in project JMRI by JMRI.
the class JmriSRCPThrottleServer method setThrottleSpeedAndDirection.
/*
* Set Throttle Speed and Direction
*
* @param bus, bus the throttle is on.
* @param l address of the locomotive to change speed of.
* @param speed float representing the speed, -1 for emergency stop.
* @param isForward boolean, true if forward, false if reverse or
* undefined.
*/
public void setThrottleSpeedAndDirection(int bus, int address, float speed, boolean isForward) {
log.debug("Setting Speed for address {} bus {} to {} with direction {}", address, bus, speed, isForward ? "forward" : "reverse");
java.util.List<SystemConnectionMemo> list = jmri.InstanceManager.getList(SystemConnectionMemo.class);
SystemConnectionMemo memo = null;
try {
memo = list.get(bus - 1);
} catch (java.lang.IndexOutOfBoundsException obe) {
try {
TimeStampedOutput.writeTimestamp(output, Bundle.getMessage("Error412"));
} catch (IOException ioe) {
log.error("Error writing to network port");
}
return;
}
/* request the throttle for this particular locomotive address */
if (memo.provides(jmri.ThrottleManager.class)) {
ThrottleManager tm = memo.get(jmri.ThrottleManager.class);
// we will use getThrottleInfo to request information about the
// address, so we need to convert the address to a DccLocoAddress
// object first.
DccLocoAddress addr = new DccLocoAddress(address, tm.canBeLongAddress(address));
// get the throttle for the address.
if (addressList.contains(addr)) {
log.debug("Throttle in throttle list");
Throttle t = throttleList.get(addressList.indexOf(addr));
// set the speed and direction.
t.setSpeedSetting(speed);
t.setIsForward(isForward);
}
}
}
use of jmri.ThrottleManager in project JMRI by JMRI.
the class DccLocoAddressSelectorTest method setThrottleManager.
// from here down is testing infrastructure
protected void setThrottleManager() {
ThrottleManager m = new DebugThrottleManager();
InstanceManager.setThrottleManager(m);
return;
}
use of jmri.ThrottleManager in project JMRI by JMRI.
the class AbstractThrottleServer method releaseThrottle.
/*
* Release a throttle for the specified address from the default
* Throttle Manager.
*
* @param l LocoAddress of the locomotive to request.
*/
public void releaseThrottle(LocoAddress l) {
ThrottleManager t = InstanceManager.throttleManagerInstance();
t.cancelThrottleRequest(l.getNumber(), this);
if (l instanceof DccLocoAddress) {
throttleList.forEach(throttle -> {
if (throttle.getLocoAddress() == l) {
t.releaseThrottle((DccThrottle) throttle, this);
throttleList.remove(throttle);
try {
sendThrottleReleased(l);
} catch (IOException ioe) {
log.error("Error writing to network port");
}
}
});
}
}
Aggregations