Skip to content

Commit 107c768

Browse files
authored
Merge pull request #2 from Zipcar/dev
Refactoring, response.read() fix, and version bump
2 parents bfb7e03 + 57ebc86 commit 107c768

File tree

5 files changed

+80
-46
lines changed

5 files changed

+80
-46
lines changed

manifest.mf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ Manifest-Version: 1.0
22
AutoUpdate-Show-In-Client: true
33
OpenIDE-Module: zipcar.emulator.spi
44
OpenIDE-Module-Localizing-Bundle: zipcar/emulator/spi/Bundle.properties
5-
OpenIDE-Module-Specification-Version: 1.2
5+
OpenIDE-Module-Specification-Version: 1.2.1
66

nbproject/platform.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@ cluster.path=\
99
${nbplatform.active.dir}/mplablibs:\
1010
${nbplatform.active.dir}/nb:\
1111
${nbplatform.active.dir}/platform
12-
nbplatform.active=MPLAB_X_IDE_v4.20
12+
nbplatform.active=MPLAB_X_v4.20

nbproject/project.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
file.reference.jeromq-0.4.3.jar=release/modules/ext/jeromq-0.4.3.jar
22
file.reference.snakeyaml-1.9.jar=release/modules/ext/snakeyaml-1.9.jar
3-
javac.source=1.7
3+
javac.source=1.8
44
javac.compilerargs=-Xlint -Xlint:-serial

src/zipcar/emulator/spi/Spi.java

Lines changed: 66 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,11 @@
99
import com.microchip.mplab.mdbcore.simulator.PeripheralSet;
1010
import java.io.BufferedInputStream;
1111
import java.io.BufferedOutputStream;
12-
import java.io.BufferedReader;
13-
import java.io.BufferedWriter;
1412
import java.io.File;
1513
import java.util.LinkedList;
1614
import java.io.FileInputStream;
15+
import java.io.FileNotFoundException;
1716
import java.io.IOException;
18-
import java.io.InputStream;
19-
import java.io.InputStreamReader;
20-
import java.io.OutputStreamWriter;
21-
import java.io.PrintWriter;
2217
import java.net.Socket;
2318
import org.openide.util.lookup.ServiceProvider;
2419
import java.util.Map;
@@ -30,8 +25,6 @@ public class Spi implements Peripheral {
3025
String SPI_NUM; // SPI Name (eg: SPI1, SPI2, etc...)
3126
String SPI_BUFF; // Respective SPI BUFFER SFR
3227
String SPI_STAT; // SPI STAT buffer
33-
String REQUEST_FILE; // Request File Path (eg: "~/uartfolder/req"
34-
String RESPONSE_FILE; // Response File Path (eg: "~/uartfolder/res"
3528

3629
static Spi instance;
3730
SimulatorDataStore DS;
@@ -41,9 +34,10 @@ public class Spi implements Peripheral {
4134
SFR sfrBuff;
4235
SFR sfrStat;
4336
SFR sfrTX;
44-
SFRSet sfrs;
37+
SpiObserver spiMonitor;
4538

4639
LinkedList<Byte> bytes = new LinkedList<Byte>();
40+
Socket reqSocket;
4741
BufferedOutputStream request;
4842
BufferedInputStream response;
4943
Yaml yaml = new Yaml();
@@ -57,28 +51,43 @@ public class Spi implements Peripheral {
5751
boolean injectedFlag = false;
5852
boolean systemBooted = false;
5953
String tempStr = "";
54+
FileInputStream conf;
55+
Map config;
6056

57+
public Spi() {
58+
spiMonitor = new SpiObserver();
59+
yaml = new Yaml();
60+
}
61+
6162
@Override
6263
public boolean init(SimulatorDataStore DS) {
63-
// Initialize DS
6464
this.DS = DS;
65-
66-
// Initialize messageHandler
65+
SFRSet sfrs;
6766
messageHandler = DS.getMessageHandler();
6867

6968
// Initialize instance variables
7069
try {
71-
FileInputStream conf = new FileInputStream(new File("spiconfig.yml"));
72-
Map config = (Map) yaml.load(conf);
70+
conf = new FileInputStream(new File("spiconfig.yml"));
71+
config = (Map) yaml.load(conf);
7372
SPI_NUM = config.get("spiNum").toString();
7473
SPI_BUFF = config.get("spiBuff").toString();
7574
SPI_STAT = config.get("spiStat").toString();
76-
REQUEST_FILE = config.get("requestFile").toString();
77-
RESPONSE_FILE = config.get("responseFile").toString();
78-
} catch (Exception e) {
75+
} catch (FileNotFoundException e) {
76+
messageHandler.outputError(e);
77+
messageHandler.outputMessage("Are you sure you placed config.yml in the correct folder?");
78+
return false;
79+
} catch (SecurityException e) {
80+
messageHandler.outputError(e);
81+
return false;
82+
} catch (NullPointerException e) {
7983
messageHandler.outputError(e);
80-
// return false;
84+
messageHandler.outputMessage("Are you sure you have all of the necessary config fields?");
85+
return false;
86+
} catch (ClassCastException e) {
87+
messageHandler.outputError(e);
88+
return false;
8189
}
90+
8291
sfrs = DS.getSFRSet();
8392
sfrBuff = sfrs.getSFR(SPI_BUFF);
8493
sfrStat = sfrs.getSFR(SPI_STAT);
@@ -90,32 +99,17 @@ public boolean init(SimulatorDataStore DS) {
9099
spiPeriph.deInit();
91100
periphSet.removePeripheral(spiPeriph);
92101
}
93-
94-
// Setup pipes
95-
/* try {
96-
request = new FileOutputStream(REQUEST_FILE);
97-
response = new FileInputStream(RESPONSE_FILE);
98-
} catch (FileNotFoundException e) {
99-
messageHandler.outputMessage("Exception in init: " + e);
100-
return false;
101-
} */
102102

103103
// Setup Sockets
104-
try {
105-
Socket reqSocket = new Socket("localhost", 5555);
106-
request = new BufferedOutputStream(reqSocket.getOutputStream());
107-
response = new BufferedInputStream(reqSocket.getInputStream());
108-
} catch (Exception e) {
109-
messageHandler.outputError(e);
110-
}
104+
if (!openSockets()) {
105+
return false;
106+
}
111107

112108
// Add observers
113-
SpiObserver obs = new SpiObserver();
114-
sfrBuff.addObserver(obs);
109+
sfrBuff.addObserver(spiMonitor);
115110

116111
messageHandler.outputMessage("External Peripheral Initialized: SPI");
117-
instance = this;
118-
112+
119113
// Add peripheral to list and return true
120114
DS.getPeripheralSet().addToActivePeripheralList(this);
121115
return true;
@@ -154,16 +148,20 @@ public void reset() {
154148

155149
@Override
156150
public void update() {
151+
byte[] bytes;
152+
if (spiMonitor.changed()) {
153+
output();
154+
}
157155
if (cycleCount > 100000) {
158156
systemBooted = true;
159157
}
160158
try {
161159
if (sendFlag) {
162160
injectedFlag = true;
163161
sendFlag = false;
164-
long readByte = response.read();
162+
int readByte = response.read();
165163
byte b = (byte) readByte;
166-
if ((int) b == -1) {
164+
if (readByte == -1) {
167165
messageHandler.outputMessage("End of Stream");
168166
System.exit(0);
169167
} else {
@@ -206,7 +204,33 @@ public void output() {
206204
}
207205
}
208206

209-
public static Spi get() {
210-
return instance;
207+
public boolean openSockets() {
208+
try {
209+
reqSocket = new Socket("localhost", 5555);
210+
} catch (IOException e) {
211+
messageHandler.outputError(e);
212+
messageHandler.outputMessage("Failed to open socket. Is there an external listener running?");
213+
return false;
214+
} catch (SecurityException e) {
215+
messageHandler.outputError(e);
216+
return false;
217+
} catch (IllegalArgumentException e) {
218+
messageHandler.outputError(e);
219+
messageHandler.outputMessage("Provided port is outside of valid values (0-65535).");
220+
return false;
221+
} catch (NullPointerException e) {
222+
messageHandler.outputError(e);
223+
return false;
224+
}
225+
226+
try {
227+
request = new BufferedOutputStream(reqSocket.getOutputStream());
228+
response = new BufferedInputStream(reqSocket.getInputStream());
229+
} catch (IOException e) {
230+
messageHandler.outputError(e);
231+
messageHandler.outputMessage("Failed to open Req/Res streams.");
232+
return false;
233+
}
234+
return true;
211235
}
212236
}

src/zipcar/emulator/spi/SpiObserver.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,22 @@
1414
*/
1515
public class SpiObserver implements SFRObserver {
1616

17+
boolean hasChanged = false;
18+
1719
@Override
1820
public void update(SFR generator, SFRObserver.SFREvent event, SFRObserver.SFREventSource source) {
1921

2022
if (event == SFRObserver.SFREvent.SFR_CHANGED) {
21-
Spi.get().output();
23+
hasChanged = true;
2224
}
2325

2426
}
27+
28+
// Sets hasChanged to false and returns previous state
29+
public boolean changed() {
30+
boolean tempHasChanged = hasChanged;
31+
hasChanged = false;
32+
return tempHasChanged;
33+
}
34+
2535
}

0 commit comments

Comments
 (0)