206552eee5827b4e56fa8a9686f890b7e8078f78
[des2015.git] / dsl / runtime / src / nl / ru / des / sensors / BTController.java
1 package nl.ru.des.sensors;
2
3 import java.io.DataInputStream;
4 import java.io.DataOutputStream;
5 import java.io.IOException;
6 import java.util.LinkedList;
7 import java.util.Queue;
8
9 import lejos.remote.nxt.BTConnector;
10 import lejos.remote.nxt.NXTConnection;
11
12 public class BTController{
13 public static Queue<String> buf;
14 public static DataInputStream dataIn;
15 public static DataOutputStream dataOut;
16
17 public static void startMaster(final String slave, final MessageHandler sh) {
18 BTConnector btconnector = new BTConnector();
19 NXTConnection conn = btconnector.connect(slave, NXTConnection.RAW);
20 dataOut = conn.openDataOutputStream();
21 dataIn = conn.openDataInputStream();
22 new Thread() {
23 @Override
24 public void run() {
25 StringBuilder sb = new StringBuilder();
26 while (true) {
27 try {
28 int c = dataIn.readUnsignedByte();
29 if (c == '\n') {
30 sh.handleMessage(sb.toString());
31 sb = new StringBuilder();
32 } else {
33 sb.appendCodePoint(c);
34 }
35 } catch (IOException e) {
36 e.printStackTrace();
37 }
38 }
39 }
40 }.start();
41 }
42
43 public static void startSlave() {
44 BTConnector btconnector = new BTConnector();
45 NXTConnection conn = btconnector.waitForConnection(60000, NXTConnection.RAW);
46 dataIn = conn.openDataInputStream();
47 dataOut = conn.openDataOutputStream();
48 buf = new LinkedList<String>();
49 new Thread(){
50 @Override public void run(){
51 while (true) {
52 if (!buf.isEmpty()) {
53 try {
54 dataOut.write(buf.poll().getBytes());
55 dataOut.flush();
56 } catch (IOException e) {
57 e.printStackTrace();
58 }
59 }
60 Thread.yield();
61 }
62 }
63 }.start();
64 }
65 }