From cc25e8484c72bc253795001a0ec30df7f71a6e9d Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 18 Mar 2014 18:02:58 -0430 Subject: [PATCH 1/5] Changed the jpeg quality back to 90. --- src/ve/ucv/ciens/ccg/nxtcam/network/VideoStreamingThread.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ve/ucv/ciens/ccg/nxtcam/network/VideoStreamingThread.java b/src/ve/ucv/ciens/ccg/nxtcam/network/VideoStreamingThread.java index fb2f565..91bdf27 100644 --- a/src/ve/ucv/ciens/ccg/nxtcam/network/VideoStreamingThread.java +++ b/src/ve/ucv/ciens/ccg/nxtcam/network/VideoStreamingThread.java @@ -107,7 +107,7 @@ public class VideoStreamingThread extends Thread{ imageSize = camMonitor.getImageParameters(); yuvImage = new YuvImage(image, ImageFormat.NV21, imageSize.width(), imageSize.height(), null); - yuvImage.compressToJpeg(imageSize, 100, outputStream); + yuvImage.compressToJpeg(imageSize, 90, outputStream); message = new VideoFrameDataMessage(); message.data = outputStream.toByteArray(); From 16ef87191112f8892d1c378495a654b7e3857519 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 31 Mar 2014 11:00:50 -0430 Subject: [PATCH 2/5] Renamed the project. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d2e0ae2..577fc80 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -NxtCAM -====== +NxtAR-cam +========= Modulo 1 de mi trabajo especial de grado. From fe1710b43e1ae57ab0c4e60820014cee1a53f746 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 3 Apr 2014 08:50:31 -0430 Subject: [PATCH 3/5] Updated MotorMasks with expansion bits. --- .../ciens/ccg/nxtcam/network/LCPThread.java | 21 ++++++++---- .../nxtcam/network/protocols/MotorMasks.java | 32 +++++++++++++++++++ 2 files changed, 46 insertions(+), 7 deletions(-) create mode 100644 src/ve/ucv/ciens/ccg/nxtcam/network/protocols/MotorMasks.java diff --git a/src/ve/ucv/ciens/ccg/nxtcam/network/LCPThread.java b/src/ve/ucv/ciens/ccg/nxtcam/network/LCPThread.java index e96ebc9..bfcaf56 100644 --- a/src/ve/ucv/ciens/ccg/nxtcam/network/LCPThread.java +++ b/src/ve/ucv/ciens/ccg/nxtcam/network/LCPThread.java @@ -19,7 +19,7 @@ import java.io.IOException; import ve.ucv.ciens.ccg.networkdata.MotorEvent; import ve.ucv.ciens.ccg.networkdata.MotorEvent.motor_t; -import ve.ucv.ciens.ccg.nxtcam.network.protocols.LegoCommunicationProtocol; +import ve.ucv.ciens.ccg.nxtcam.network.protocols.MotorMasks; import ve.ucv.ciens.ccg.nxtcam.robotcontrol.MotorEventQueue; import ve.ucv.ciens.ccg.nxtcam.utils.Logger; @@ -47,6 +47,7 @@ public class LCPThread extends Thread{ public void run(){ long then, now, delta; MotorEvent event; + byte[] msg = new byte[2]; sensorReport.start(); motorControl.start(); @@ -75,11 +76,17 @@ public class LCPThread extends Thread{ event = queue.getNextEvent(); try{ - btComm.writeMessage( - LegoCommunicationProtocol.setOutputState( - event.getMotor() == motor_t.MOTOR_A ? LegoCommunicationProtocol.PORT_0 : (event.getMotor() == motor_t.MOTOR_B ? LegoCommunicationProtocol.PORT_1 : LegoCommunicationProtocol.PORT_2), - event.getPower()) - ); + // Set the motor bit. + msg[0] = (event.getMotor() == motor_t.MOTOR_A) ? MotorMasks.MOTOR_A: ((event.getMotor() == motor_t.MOTOR_B) ? MotorMasks.MOTOR_B: MotorMasks.MOTOR_C); + // Set the direction bit. + if(event.getPower() > 0) msg[0] |= MotorMasks.DIRECTION; + // TODO: Set the recenter bits. + + // Set the power byte. + msg[1] = (byte)Math.abs(event.getPower()); + + // Send the message. + btComm.writeMessage(msg); Logger.log_i(TAG, CLASS_NAME + ".run() :: Message sent to the robot."); try{ sleep(40); }catch(InterruptedException ie){ } @@ -89,7 +96,7 @@ public class LCPThread extends Thread{ } if(reportSensors){ - + } }else{ Logger.log_e(TAG, CLASS_NAME + ".run() :: The robot disconnected or was never available."); diff --git a/src/ve/ucv/ciens/ccg/nxtcam/network/protocols/MotorMasks.java b/src/ve/ucv/ciens/ccg/nxtcam/network/protocols/MotorMasks.java new file mode 100644 index 0000000..1c0bd61 --- /dev/null +++ b/src/ve/ucv/ciens/ccg/nxtcam/network/protocols/MotorMasks.java @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2014 Miguel Angel Astor Romero + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package ve.ucv.ciens.ccg.nxtcam.network.protocols; + +/** + *

Bit masks used to code/decode the control instructions sent by NxtAR-cam to + * NxtAR-bot.

+ *

Expansions 1-3 are currently unused.

+ */ +public abstract class MotorMasks { + public static final byte MOTOR_A = (byte)0x01; + public static final byte MOTOR_B = (byte)0x02; + public static final byte MOTOR_C = (byte)0x04; + public static final byte DIRECTION = (byte)0x08; + public static final byte RECENTER = (byte)0x10; + public static final byte EXPANSION_1 = (byte)0x20; + public static final byte EXPANSION_2 = (byte)0x20; + public static final byte EXPANSION_3 = (byte)0x20; +} From 7160cd325e939a3ea68cb2d8b44f62849a7a8c5b Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 3 Apr 2014 11:30:17 -0430 Subject: [PATCH 4/5] Finished the sensor report thread. --- src/ve/ucv/ciens/ccg/nxtcam/CamActivity.java | 20 +++++++++----- .../{LCPThread.java => NxtBTCommThread.java} | 27 ++++++------------- .../nxtcam/network/SensorReportThread.java | 23 +++++++++++++--- 3 files changed, 41 insertions(+), 29 deletions(-) rename src/ve/ucv/ciens/ccg/nxtcam/network/{LCPThread.java => NxtBTCommThread.java} (75%) diff --git a/src/ve/ucv/ciens/ccg/nxtcam/CamActivity.java b/src/ve/ucv/ciens/ccg/nxtcam/CamActivity.java index 48551d3..7c70dfc 100644 --- a/src/ve/ucv/ciens/ccg/nxtcam/CamActivity.java +++ b/src/ve/ucv/ciens/ccg/nxtcam/CamActivity.java @@ -16,7 +16,8 @@ package ve.ucv.ciens.ccg.nxtcam; import ve.ucv.ciens.ccg.nxtcam.camera.CameraPreview; -import ve.ucv.ciens.ccg.nxtcam.network.LCPThread; +import ve.ucv.ciens.ccg.nxtcam.network.NxtBTCommThread; +import ve.ucv.ciens.ccg.nxtcam.network.SensorReportThread; import ve.ucv.ciens.ccg.nxtcam.network.VideoStreamingThread; import ve.ucv.ciens.ccg.nxtcam.utils.Logger; import ve.ucv.ciens.ccg.nxtcam.utils.ProjectConstants; @@ -40,7 +41,8 @@ public class CamActivity extends Activity{ private CameraPreview cPreview; private CameraSetupTask camSetupTask; private VideoStreamingThread imThread; - private LCPThread botThread; + private NxtBTCommThread botThread; + private SensorReportThread sensorThread; private String serverIp; /******************* @@ -57,8 +59,11 @@ public class CamActivity extends Activity{ imThread = new VideoStreamingThread(serverIp); imThread.start(); - botThread = new LCPThread(serverIp); + botThread = new NxtBTCommThread(serverIp); botThread.start(); + + sensorThread = new SensorReportThread(serverIp); + sensorThread.start(); } @Override @@ -92,14 +97,14 @@ public class CamActivity extends Activity{ camSetupTask = new CameraSetupTask(); camSetupTask.execute(); - // imThread.start(); + // TODO: resumethe imThread, botThread and sensorThread objects. } @Override public void onPause(){ super.onPause(); - // TODO: pause the imThread and botThread objects. + // TODO: pause the imThread, botThread and sensorThread objects. if(cPreview != null){ cPreview.removePreviewCallback(); @@ -113,9 +118,12 @@ public class CamActivity extends Activity{ super.onDestroy(); imThread.finish(); imThread = null; - + botThread.finish(); botThread = null; + + sensorThread.finish(); + sensorThread = null; } @Override diff --git a/src/ve/ucv/ciens/ccg/nxtcam/network/LCPThread.java b/src/ve/ucv/ciens/ccg/nxtcam/network/NxtBTCommThread.java similarity index 75% rename from src/ve/ucv/ciens/ccg/nxtcam/network/LCPThread.java rename to src/ve/ucv/ciens/ccg/nxtcam/network/NxtBTCommThread.java index bfcaf56..c225601 100644 --- a/src/ve/ucv/ciens/ccg/nxtcam/network/LCPThread.java +++ b/src/ve/ucv/ciens/ccg/nxtcam/network/NxtBTCommThread.java @@ -23,24 +23,21 @@ import ve.ucv.ciens.ccg.nxtcam.network.protocols.MotorMasks; import ve.ucv.ciens.ccg.nxtcam.robotcontrol.MotorEventQueue; import ve.ucv.ciens.ccg.nxtcam.utils.Logger; -public class LCPThread extends Thread{ +public class NxtBTCommThread extends Thread{ private static final String TAG = "LCP_THREAD"; - private static final String CLASS_NAME = LCPThread.class.getSimpleName(); + private static final String CLASS_NAME = NxtBTCommThread.class.getSimpleName(); private boolean done; - private boolean reportSensors; private BTCommunicator btComm; private MotorControlThread motorControl; - private SensorReportThread sensorReport; private MotorEventQueue queue; - public LCPThread(String serverIp){ + public NxtBTCommThread(String serverIp){ super("Robot Control Main Thread"); btComm = BTCommunicator.getInstance(); done = false; motorControl = new MotorControlThread(serverIp); - sensorReport = new SensorReportThread(serverIp); queue = MotorEventQueue.getInstance(); } @@ -49,7 +46,6 @@ public class LCPThread extends Thread{ MotorEvent event; byte[] msg = new byte[2]; - sensorReport.start(); motorControl.start(); then = System.currentTimeMillis(); @@ -63,21 +59,18 @@ public class LCPThread extends Thread{ } } - if((reportSensors = sensorReport.isConnected())){ - Logger.log_d(TAG, CLASS_NAME + ".run() :: Sensor data can be reported."); - }else{ - Logger.log_e(TAG, CLASS_NAME + ".run() :: Thread sensorReport could not connect to the server."); - Logger.log_e(TAG, CLASS_NAME + ".run() :: Sensor data will not be reported to server app."); - } - while(!done){ if(btComm.isBTEnabled() && btComm.isConnected()){ + msg[0] = 0x00; + msg[1] = 0x00; event = queue.getNextEvent(); try{ // Set the motor bit. - msg[0] = (event.getMotor() == motor_t.MOTOR_A) ? MotorMasks.MOTOR_A: ((event.getMotor() == motor_t.MOTOR_B) ? MotorMasks.MOTOR_B: MotorMasks.MOTOR_C); + msg[0] |= (event.getMotor() == motor_t.MOTOR_A) ? MotorMasks.MOTOR_A : 0; + msg[0] |= (event.getMotor() == motor_t.MOTOR_B) ? MotorMasks.MOTOR_B : 0; + msg[0] |= (event.getMotor() == motor_t.MOTOR_C) ? MotorMasks.MOTOR_C : 0; // Set the direction bit. if(event.getPower() > 0) msg[0] |= MotorMasks.DIRECTION; // TODO: Set the recenter bits. @@ -94,10 +87,6 @@ public class LCPThread extends Thread{ }catch(IOException io){ Logger.log_e(TAG, CLASS_NAME + ".run() :: IOException sending message to the robot: " + io.getMessage()); } - - if(reportSensors){ - - } }else{ Logger.log_e(TAG, CLASS_NAME + ".run() :: The robot disconnected or was never available."); break; diff --git a/src/ve/ucv/ciens/ccg/nxtcam/network/SensorReportThread.java b/src/ve/ucv/ciens/ccg/nxtcam/network/SensorReportThread.java index 5bff72e..32d9cc6 100644 --- a/src/ve/ucv/ciens/ccg/nxtcam/network/SensorReportThread.java +++ b/src/ve/ucv/ciens/ccg/nxtcam/network/SensorReportThread.java @@ -1,7 +1,7 @@ package ve.ucv.ciens.ccg.nxtcam.network; import java.io.IOException; -import java.io.ObjectOutputStream; +import java.io.OutputStream; import java.net.Socket; import ve.ucv.ciens.ccg.nxtcam.utils.Logger; @@ -14,21 +14,36 @@ public class SensorReportThread extends Thread{ private Socket socket; private String serverIp; private boolean done; - private ObjectOutputStream writer; + private OutputStream writer; private boolean connected; + private BTCommunicator btComm; public SensorReportThread(String serverIp){ super("Sensor Report Thread"); this.serverIp = serverIp; done = false; connected = false; + btComm = BTCommunicator.getInstance(); } @Override public void run(){ + byte[] lightReading; + if(connectToServer()){ while(!done){ - + if(btComm.isBTEnabled() && btComm.isConnected()){ + try{ + lightReading = btComm.readMessage(1); + writer.write(lightReading); + }catch(IOException io){ + Logger.log_e(TAG, CLASS_NAME + "run(): IOException: " + io.getMessage()); + done = true; + } + }else{ + Logger.log_e(TAG, CLASS_NAME + ".run() :: The robot disconnected or was never available."); + break; + } } }else{ Logger.log_e(TAG, CLASS_NAME + ".run() :: Could not connect to the server."); @@ -43,7 +58,7 @@ public class SensorReportThread extends Thread{ boolean connected; try{ socket = new Socket(serverIp, ProjectConstants.SENSOR_REPORT_PORT); - writer = new ObjectOutputStream(socket.getOutputStream()); + writer = socket.getOutputStream(); connected = true; }catch(IOException io){ Logger.log_e(TAG, CLASS_NAME + ".connectToServer() :: IOException caught: " + io.getMessage()); From cd8def574ceeb605c08b1e7ca3696f3e2353eb26 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 4 Apr 2014 10:30:51 -0430 Subject: [PATCH 5/5] Added forwarding of camera recenter commands. --- AndroidManifest.xml | 4 ++-- src/ve/ucv/ciens/ccg/networkdata/MotorEvent.java | 2 +- src/ve/ucv/ciens/ccg/nxtcam/network/MotorControlThread.java | 3 +-- src/ve/ucv/ciens/ccg/nxtcam/network/NxtBTCommThread.java | 5 ++++- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index bce1ee6..4dadd63 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -17,8 +17,8 @@ + android:versionCode="140404" + android:versionName="14.04.04" > 0) msg[0] |= MotorMasks.DIRECTION; - // TODO: Set the recenter bits. + // Set the recenter bits. + msg[0] |= (event.getMotor() == motor_t.RECENTER) ? MotorMasks.RECENTER : 0; + if((msg[0] & MotorMasks.RECENTER) > 0) + Logger.log_i(TAG, CLASS_NAME + ".run(): Recenter received."); // Set the power byte. msg[1] = (byte)Math.abs(event.getPower());