Skip to content

Commit 8553334

Browse files
author
Anders Payerl
committed
possible to read data from serial also, even if a hack
1 parent 99883e9 commit 8553334

7 files changed

Lines changed: 72 additions & 73 deletions

File tree

src/Start.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,23 @@
22
import gnu.io.PortInUseException;
33
import gnu.io.UnsupportedCommOperationException;
44
import se.payerl.projectorcontroller.W1070;
5+
import se.payerl.projectorcontroller.benq.Generic;
56

67
public class Start {
78
public static void main(String[] args) throws NoSuchPortException, PortInUseException, UnsupportedCommOperationException, InterruptedException {
89
W1070 projector = new W1070();
9-
projector.turnOff();
10+
projector.runCommand(Generic.Power.CHECK, (command, reply) -> {
11+
System.out.println("Sent: '" + command + "' received reply: '" + reply + "'");
12+
return true;
13+
});
14+
projector.runCommand(Generic.Power.ON, (command, reply) -> {
15+
System.out.println("Sent: '" + command + "' received reply: '" + reply + "'");
16+
return true;
17+
});
18+
projector.runCommand(Generic.Power.CHECK, (command, reply) -> {
19+
System.out.println("Sent: '" + command + "' received reply: '" + reply + "'");
20+
return true;
21+
});
1022
projector.closePorts();
1123
}
1224
}

src/se/payerl/projectorcontroller/Projector.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,12 @@ public abstract class Projector {
4040
// this.helper = h;
4141
// }
4242

43-
public void queueMessage(String message, int replys, Message callback) {
44-
this.queueMessage(new SendQueueElement(message, replys, callback));
43+
public void queueMessage(String message, String responseCharacters, int numberOfReplys, Message callback) {
44+
this.queueMessage(new SendQueueElement(message, responseCharacters, numberOfReplys, callback));
45+
}
46+
47+
public void queueMessage(String message, String responseCharacters, Message callback) {
48+
this.queueMessage(new SendQueueElement(message, responseCharacters, 1, callback));
4549
}
4650

4751
public void queueMessage(SendQueueElement sqe) {

src/se/payerl/projectorcontroller/SerialHelper/Helper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public void queueMessage(SendQueueElement sqe) {
4242
this.sendQueue.push(sqe);
4343
}
4444

45-
public String stringToHex(String message) {
45+
public static String stringToHex(String message) {
4646
char[] ch = message.toCharArray();
4747
StringBuilder builder = new StringBuilder();
4848
for (char c : ch) {

src/se/payerl/projectorcontroller/SerialHelper/Interfaces/Message.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@
1717
package se.payerl.projectorcontroller.SerialHelper.Interfaces;
1818

1919
public interface Message {
20-
public void newReply(String originalMessage, String reply);
20+
public boolean newReply(String originalMessage, String reply);
2121
}

src/se/payerl/projectorcontroller/SerialHelper/SendQueueElement.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,18 @@
1919
import se.payerl.projectorcontroller.SerialHelper.Interfaces.Message;
2020

2121
public class SendQueueElement {
22-
public SendQueueElement(String message, int linesToReturn, Message callback) {
22+
public SendQueueElement(String message, String characters, int numberOfReplys, Message callback) {
2323
this.message = message;
24-
this.numberOfReplys = linesToReturn;
2524
this.replyCallback = callback;
25+
this.responseCharacters = characters;
26+
this.numberOfReplys = numberOfReplys;
2627
}
2728

2829
@SuppressWarnings("unused")
2930
private SendQueueElement() {}
3031

3132
public String message;
32-
public int numberOfReplys;
3333
public Message replyCallback;
34+
public String responseCharacters;
35+
public int numberOfReplys;
3436
}

src/se/payerl/projectorcontroller/SerialHelper/SerialWriter.java

Lines changed: 37 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,18 @@
1616

1717
package se.payerl.projectorcontroller.SerialHelper;
1818

19+
import java.io.BufferedReader;
1920
import java.io.IOException;
21+
import java.io.InputStream;
22+
import java.io.InputStreamReader;
2023
import java.io.OutputStream;
2124
import java.nio.charset.Charset;
22-
import java.util.TooManyListenersException;
25+
import java.util.ArrayList;
26+
import java.util.List;
2327

2428
import gnu.io.SerialPort;
25-
import gnu.io.SerialPortEvent;
26-
import gnu.io.SerialPortEventListener;
2729

28-
public class SerialWriter extends Thread implements SerialPortEventListener {
30+
public class SerialWriter extends Thread {
2931
private ControlObject controlObject;
3032
private MessageQueue<SendQueueElement> queue;
3133
private SerialPort port;
@@ -40,81 +42,53 @@ public SerialWriter(SerialPort port, MessageQueue<SendQueueElement> queue, Contr
4042

4143
@Override
4244
public void run() {
43-
// InputStream is = null;
44-
// InputStreamReader isr = null;
45-
// BufferedReader br = null;
45+
InputStream is = null;
46+
InputStreamReader isr = null;
47+
BufferedReader br = null;
48+
String line = null;
4649
OutputStream os = null;
47-
// String line = null;
50+
SendQueueElement tmp = null;
51+
List<String> responses = null;
4852

4953
try {
50-
this.port.addEventListener(this);
51-
// is = this.port.getInputStream();
52-
// isr = new InputStreamReader(is, this.charset);
53-
// br = new BufferedReader(isr);
54+
is = this.port.getInputStream();
55+
isr = new InputStreamReader(is, this.charset);
56+
br = new BufferedReader(isr);
5457
os = this.port.getOutputStream();
58+
responses = new ArrayList<>();
5559

5660
while(controlObject.keepGoing || !queue.isEmpty()) {
5761
if(!this.queue.isEmpty()) {
58-
try {
59-
os.write(this.queue.pop().message.getBytes(this.charset));
60-
// System.out.println("Time to read");
61-
// while((line = br.readLine()) != null) {
62-
// //System.out.println("|" + line + "|");
63-
// System.out.println("Reading..");
64-
// line = null;
65-
// }
66-
// System.out.println("Done reading");
67-
//// os.flush();
68-
} catch (IOException e) {}
62+
tmp = this.queue.peek();
63+
os.write(tmp.message.getBytes(this.charset));
64+
65+
int counter = 0;
66+
while((line = br.readLine()) != null) {
67+
if(!line.contentEquals("")) {
68+
counter += 1;
69+
responses.add(line);
70+
}
71+
if(counter > tmp.numberOfReplys) {
72+
break;
73+
}
74+
}
75+
if(tmp.replyCallback.newReply(responses.get(0).substring(1), responses.get(1))) {
76+
this.queue.pop();
77+
}
6978
}
7079
}
7180
} catch (IOException e1) {
72-
System.out.println("io exception row 54");
73-
} catch (TooManyListenersException e1) {
74-
// TODO Auto-generated catch block
75-
e1.printStackTrace();
81+
//TODO Implement good solution!
7682
} finally {
77-
this.port.removeEventListener();
7883
try {
79-
// br.close();
80-
// isr.close();
81-
// is.close();
84+
br.close();
85+
isr.close();
86+
is.close();
8287
os.close();
8388
port.close();
8489
} catch (IOException e) {
85-
System.out.println("io exception row 63");
90+
//TODO Implement good solution!
8691
}
8792
}
8893
}
89-
90-
@Override
91-
public void serialEvent(SerialPortEvent ev) {
92-
switch(ev.getEventType()) {
93-
case SerialPortEvent.BI:
94-
case SerialPortEvent.OE:
95-
case SerialPortEvent.FE:
96-
case SerialPortEvent.PE:
97-
case SerialPortEvent.CD:
98-
case SerialPortEvent.CTS:
99-
case SerialPortEvent.DSR:
100-
System.out.println("data set ready");
101-
case SerialPortEvent.RI:
102-
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
103-
System.out.println("empty");
104-
break;
105-
case SerialPortEvent.DATA_AVAILABLE:
106-
try {
107-
System.out.println("Data available!");
108-
byte[] readBuffer = new byte[port.getInputStream().available()];
109-
port.getInputStream().read(readBuffer, 0, port.getInputStream().available());
110-
// Thread.sleep(1000);
111-
System.out.print(new String(readBuffer, this.charset));
112-
} catch (IOException e) {
113-
// TODO Auto-generated catch block
114-
e.printStackTrace();
115-
}
116-
break;
117-
}
118-
System.out.println("end of event");
119-
}
12094
}

src/se/payerl/projectorcontroller/W1070.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import se.payerl.projectorcontroller.SerialHelper.Enums.DataBits;
2626
import se.payerl.projectorcontroller.SerialHelper.Enums.Parity;
2727
import se.payerl.projectorcontroller.SerialHelper.Enums.StopBits;
28+
import se.payerl.projectorcontroller.SerialHelper.Interfaces.Message;
2829
import se.payerl.projectorcontroller.benq.Generic;
2930

3031
public class W1070 extends Projector {
@@ -34,14 +35,20 @@ public W1070() throws NoSuchPortException, PortInUseException, UnsupportedCommOp
3435
}
3536

3637
public void turnOn() {
37-
super.queueMessage(Generic.Power.ON, 1, (command, reply) -> {
38+
super.queueMessage(Generic.Power.ON, ">", (command, reply) -> {
3839
System.out.println("Sent: '" + command + "' received reply: '" + reply + "'");
40+
return true;
3941
});
4042
}
4143

4244
public void turnOff() {
43-
super.queueMessage(Generic.Power.OFF, 1, (command, reply) -> {
45+
super.queueMessage(Generic.Power.OFF, ">", (command, reply) -> {
4446
System.out.println("Sent: '" + command + "' received reply: '" + reply + "'");
47+
return true;
4548
});
4649
}
50+
51+
public void runCommand(String mcommand, Message callback) {
52+
super.queueMessage(mcommand, ">", 1, callback);
53+
}
4754
}

0 commit comments

Comments
 (0)