final push
[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.hardware.Button;
10 import lejos.remote.nxt.BTConnector;
11 import lejos.remote.nxt.NXTConnection;
12
13 public class BTController{
14 public static Queue<String> buf;
15 private static DataInputStream dataIn;
16 private static DataOutputStream dataOut;
17 private static NXTConnection conn;
18 private static BTConnector btconnector;
19
20 public static void startMaster(final String slave, final MessageHandler sh) {
21 System.out.println("Start BT... Press any key to commence");
22 Button.waitForAnyEvent();
23 btconnector = new BTConnector();
24 while(conn == null){
25 System.out.println("Connecting to " + slave);
26 conn = btconnector.connect(slave, NXTConnection.RAW);
27 }
28 dataOut = conn.openDataOutputStream();
29 dataIn = conn.openDataInputStream();
30 new Thread() {
31 @Override
32 public void run() {
33 StringBuilder sb = new StringBuilder();
34 while (true) {
35 try {
36 int c = dataIn.readUnsignedByte();
37 if (c == '\n') {
38 sh.handleMessage(sb.toString());
39 sb = new StringBuilder();
40 } else {
41 sb.appendCodePoint(c);
42 }
43 } catch (IOException e) {
44 e.printStackTrace();
45 }
46 }
47 }
48 }.start();
49 }
50
51 public static void startSlave() {
52 System.out.println("Start BT... Press any key to commence");
53 Button.waitForAnyEvent();
54 btconnector = new BTConnector();
55 while(conn == null){
56 System.out.println("Waiting for the master...");
57 conn = btconnector.waitForConnection(60000, NXTConnection.RAW);
58 }
59 dataIn = conn.openDataInputStream();
60 dataOut = conn.openDataOutputStream();
61 buf = new LinkedList<String>();
62 new Thread(){
63 @Override public void run(){
64 while (true) {
65 if (!buf.isEmpty()) {
66 try {
67 dataOut.write(buf.poll().getBytes());
68 dataOut.flush();
69 } catch (Exception e) {
70 e.printStackTrace();
71 System.exit(0);
72 }
73 }
74 Thread.yield();
75 }
76 }
77 }.start();
78 }
79 }