-
Notifications
You must be signed in to change notification settings - Fork 331
/
PR2Adapter.java
108 lines (91 loc) · 3.76 KB
/
PR2Adapter.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package jmri.jmrix.loconet.pr2;
import jmri.jmrix.loconet.locobuffer.LocoBufferAdapter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import purejavacomm.SerialPort;
import purejavacomm.UnsupportedCommOperationException;
/**
* Update the code in jmri.jmrix.loconet.locobuffer so that it refers to the
* switch settings on the new Digitrax PR2
*
* @author Bob Jacobsen Copyright (C) 2004, 2005, 2006
*/
public class PR2Adapter extends LocoBufferAdapter {
public PR2Adapter() {
super(new PR2SystemConnectionMemo());
options.remove(option2Name);
options.put(option2Name, new Option(Bundle.getMessage("CommandStationTypeLabel"), commandStationOptions(), false));
}
/**
* Always use flow control, not considered a user-settable option
*/
@Override
protected void setSerialPort(SerialPort activeSerialPort) throws UnsupportedCommOperationException {
// find the baud rate value, configure comm options
int baud = 57600; // default, but also defaulted in the initial value of selectedSpeed
for (int i = 0; i < validBaudNumbers().length; i++) {
if (validBaudRates()[i].equals(mBaudRate)) {
baud = validBaudNumbers()[i];
}
}
activeSerialPort.setSerialPortParams(baud, SerialPort.DATABITS_8,
SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
// configure flow control from option
int flow = SerialPort.FLOWCONTROL_RTSCTS_OUT;
if (getOptionState(option1Name).equals(validOption1[1])) {
flow = SerialPort.FLOWCONTROL_NONE;
}
configureLeadsAndFlowControl(activeSerialPort, flow);
log.info("PR2 adapter"
+(activeSerialPort.getFlowControlMode() == SerialPort.FLOWCONTROL_RTSCTS_OUT ? " set hardware flow control, mode=" : " set no flow control, mode=")
+activeSerialPort.getFlowControlMode()
+ " RTSCTS_OUT=" + SerialPort.FLOWCONTROL_RTSCTS_OUT
+ " RTSCTS_IN=" + SerialPort.FLOWCONTROL_RTSCTS_IN);
}
/**
* Set up all of the other objects to operate with a PR2 connected to this
* port. This overrides the version in loconet.locobuffer, but it has to
* duplicate much of the functionality there, so the code is basically
* copied.
*/
@Override
public void configure() {
setCommandStationType(getOptionState(option2Name));
setTurnoutHandling(getOptionState(option3Name));
// connect to a packetizing traffic controller
// that does echoing
jmri.jmrix.loconet.pr2.LnPr2Packetizer packets = new jmri.jmrix.loconet.pr2.LnPr2Packetizer();
packets.connectPort(this);
// create memo
this.getSystemConnectionMemo().setLnTrafficController(packets);
// do the common manager config
this.getSystemConnectionMemo().configureCommandStation(commandStationType,
mTurnoutNoRetry, mTurnoutExtraSpace, mTranspondingAvailable);
this.getSystemConnectionMemo().configureManagers();
// start operation
packets.startThreads();
}
/**
* {@inheritDoc}
*/
@Override
public String[] validBaudRates() {
return new String[]{"57,600 baud"}; // NOI18N
}
/**
* {@inheritDoc}
*/
@Override
public int[] validBaudNumbers() {
return new int[]{57600};
}
// Option 1 does flow control, inherited from LocoBufferAdapter
/**
* The PR2 has one mode
* @return a String[] containing appropriate options
*/
public String[] commandStationOptions() {
return new String[]{jmri.jmrix.loconet.LnCommandStationType.COMMAND_STATION_PR2_ALONE.getName()};
}
private final static Logger log = LoggerFactory.getLogger(PR2Adapter.class);
}