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