forked from GideonLeGrange/panstamp-java
- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTestEvents.java
More file actions
Latest commit
172 lines (145 loc) · 5.64 KB
/
Copy pathTestEvents.java
File metadata and controls
172 lines (145 loc) · 5.64 KB
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
packageexample;
importjava.math.BigInteger;
importjava.util.logging.Level;
importjava.util.logging.Logger;
importme.legrange.panstamp.Endpoint;
importme.legrange.panstamp.EndpointListener;
importme.legrange.panstamp.ModemException;
importme.legrange.panstamp.Network;
importme.legrange.panstamp.NetworkException;
importme.legrange.panstamp.NetworkListener;
importme.legrange.panstamp.PanStamp;
importme.legrange.panstamp.PanStampListener;
importme.legrange.panstamp.Parameter;
importme.legrange.panstamp.Register;
importme.legrange.panstamp.RegisterListener;
/**
* This example shows how to work with the classes from Network, PanStamp, Register and Endpoint
* so that events for all instances in the structure can be received.
*
* It is important to understand that when you add a listener (event handler) to an instance of one of these
* classes, it is very likely that you may already have "missed" some events.
*
* This examples demonstrates how to iterate through existing data and how to add listeners to receive future data.
*
* @author Gideon le Grange https://github.com/GideonLeGrange
*/
publicclassTestEvents {
privatestaticfinalStringPORT = "/dev/tty.usbserial-A800HNMV";
privatestaticfinalintBAUD = 38400;
privateNetworknw;
privateintseq = 0;
publicstaticvoidmain(String... args) throwsException {
TestEventste = newTestEvents();
te.connect();
te.setupListeners();
while (true) {
Thread.sleep(1000);
}
}
/** Connect to serial port and start the network */
privatevoidconnect() throwsNetworkException {
nw = Network.openSerial(PORT, BAUD);
}
/** Set up the listeners for the objects currently in the tree.
* Note that we build and event handler that will call addPanstamp() when we are notified of a new panStamp,
* AND we call addPanstamp on devices already known when our code executes */
privatevoidsetupListeners() throwsNetworkException {
nw.addListener(newNetworkListener() {
@Override
publicvoiddeviceDetected(Networkgw, PanStampdev) {
addPanStamp(dev);
say("N: Device with address %d added to network", dev.getAddress());
}
@Override
publicvoiddeviceRemoved(Networkgw, PanStampdev) {
say("N: Device with address %d removed to network", dev.getAddress());
}
@Override
publicvoidnetworkOpened(Networknw) {
say("N: Opened");
}
@Override
publicvoidnetworkClosed(Networknw) {
say("N: Closed");
}
});
for (PanStampps : nw.getDevices()) {
addPanStamp(ps);
}
}
/** Do whatever we do if we have a new panStamp. */
privatevoidaddPanStamp(PanStampps) {
ps.addListener(newPanStampListener() {
@Override
publicvoidproductCodeChange(PanStampdev, intmanufacturerId, intproductId) {
say("P: Product code for %d changed to %d/%d\n", dev.getAddress(),
manufacturerId, productId);
}
@Override
publicvoidsyncStateChange(PanStampdev, intsyncState) {
say("P: Sync state for %d changed to %d\n", dev.getAddress(), syncState);
}
@Override
publicvoidregisterDetected(PanStampdev, Registerreg) {
addRegister(reg);
say("P: Register %d detected for device %d", reg.getId(), dev.getAddress());
}
@Override
publicvoidsyncRequired(PanStampdev) {
say("P: Sync required for device %d", dev.getAddress());
}
});
for (Registerreg : ps.getRegisters()) {
addRegister(reg);
}
}
/** do whatever we do if we have a new register */
privatevoidaddRegister(Registerreg) {
reg.addListener(newRegisterListener() {
@Override
publicvoidvalueReceived(Registerreg, byte[] value) {
say("R: Value for %d updated to '%s'", reg.getId(), formatBytes(value));
}
@Override
publicvoidvalueSet(Registerreg, byte[] value) {
say("R: Value for %d set to '%s'", reg.getId(), formatBytes(value));
}
@Override
publicvoidendpointAdded(Registerreg, Endpointep) {
addEndpoint(ep);
say("R: Endpoint '%s' added to %d", ep.getName(), reg.getId());
}
@Override
publicvoidparameterAdded(Registerreg, Parameterpar) {
say("R: Parameter '%s' added to %d", par.getName(), reg.getId());
}
});
for (Endpointep : reg.getEndpoints()) {
addEndpoint(ep);
}
}
/** do what we do if we encounter a new endpoint */
privatevoidaddEndpoint(Endpointep) {
ep.addListener(newEndpointListener() {
@Override
publicvoidvalueReceived(Endpointep, Objectvalue) {
say("E: Value '%s' received for '%s'", ep.getName(), value);
}
});
}
privatevoiddisconnect() throwsModemException {
nw.close();
}
privatesynchronizedvoidsay(Stringfmt, Object... args) {
System.out.printf("[%04d] ", seq);
System.out.printf(fmt, args);
if (!fmt.endsWith("\n")) {
System.out.println();
}
seq++;
}
privateStringformatBytes(byteval[]) {
returnnewBigInteger(val).toString(16);
}
}