update mart
[des2015.git] / mart / ev3 / ex2 / nl / ru / des / BTController.java
1 package nl.ru.des;
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 import nl.ru.des.bluetooth.MessageHandler;
12
13 public class BTController extends Thread {
14 protected NXTConnection connection;
15 protected DataOutputStream dataOutput;
16 protected DataInputStream dataInput;
17 protected MessageHandler sh;
18 public static Queue<String> messageBuffer;
19
20 private BTController(MessageHandler sh, NXTConnection connection) {
21 this.sh = sh;
22 dataInput = connection.openDataInputStream();
23 dataOutput = connection.openDataOutputStream();
24 messageBuffer = new LinkedList<String>();
25 }
26
27 @Override
28 public void run() {
29 Thread receiver = new Thread() {
30 @Override
31 public void run() {
32 StringBuilder sb = new StringBuilder();
33 while (true) {
34 try {
35 int c = dataInput.readUnsignedByte();
36 sb.appendCodePoint(c);
37 if (c == '\n') {
38 sh.handleMessage(sb.toString());
39 sb = new StringBuilder();
40 }
41 } catch (IOException e) {
42 e.printStackTrace();
43 }
44 }
45 }
46 };
47 receiver.start();
48 while (true) {
49 if (!messageBuffer.isEmpty()) {
50 try {
51 dataOutput.write(messageBuffer.poll().getBytes());
52 dataOutput.flush();
53 } catch (IOException e) {
54 e.printStackTrace();
55 }
56 }
57 Thread.yield();
58 }
59 }
60
61 public static void SendMessage(String message) {
62 messageBuffer.add(message + "\n");
63 }
64
65 public static BTController getBTMaster(final String slave, final MessageHandler sh) {
66 BTConnector bt = new BTConnector();
67 return new BTController(sh, bt.connect(slave, NXTConnection.RAW));
68 }
69
70 public static BTController getBTSlave(MessageHandler sh) {
71 BTConnector bt = new BTConnector();
72 return new BTController(sh, bt.waitForConnection(60000, NXTConnection.RAW));
73 }
74 }