Implemented AvoidObject behaviour and TextLCD
[des2015.git] / mart / ev3 / ex2 / nl / ru / des / bluetooth / BTController.java
1 package nl.ru.des.bluetooth;
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 extends Thread {
13 protected NXTConnection connection;
14 protected DataOutputStream dataOutput;
15 protected DataInputStream dataInput;
16 protected MessageHandler sh;
17 public static Queue<String> messageBuffer;
18
19 private BTController(MessageHandler sh, NXTConnection connection) {
20 this.dataInput = connection.openDataInputStream();
21 this.dataOutput = connection.openDataOutputStream();
22 this.sh = sh;
23 messageBuffer = new LinkedList<String>();
24 }
25
26 @Override
27 public void run() {
28 Thread receiver = new Thread() {
29 @Override
30 public void run() {
31 StringBuilder sb = new StringBuilder();
32 while (true) {
33 try {
34 int c = dataInput.readUnsignedByte();
35 if (c == '\n') {
36 sh.handleMessage(sb.toString());
37 sb = new StringBuilder();
38 } else {
39 sb.appendCodePoint(c);
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 btconnector = new BTConnector();
67 return new BTController(sh, btconnector.connect(slave, NXTConnection.RAW));
68 }
69
70 public static BTController getBTSlave(MessageHandler sh) {
71 BTConnector btconnector = new BTConnector();
72 return new BTController(sh, btconnector.waitForConnection(60000, NXTConnection.RAW));
73 }
74 }