diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 31826e1..1558306 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -10,7 +10,7 @@
Comenzar streaming de video
CamActivity
Dirección IP de NxtAR
- La dirección IP no es válida
+ No se encontró un servidor válido
Rellene el campo de dirección IP
Esta app requiere WiFi
¿Encender el WiFi?
@@ -18,7 +18,7 @@
Encender
El radio del WiFi está encendido
Esta app no puede funcionar sin wifi, cerrando.
- Este dispositivo no soporta Bluetooth
+ Este dispositivo no soporta Bluetooth
Esta app no puede funcionar sin Bluetooth, cerrando
Ícono de lente
Conectar con el robot
diff --git a/res/values/strings.xml b/res/values/strings.xml
index deb1f95..4e72cee 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -10,7 +10,7 @@
Connect with NxtAR
Start video streaming
NxtAR IP Address
- Invalid IP address
+ No proper server found
Fill out the IP address field
This app requires WiFi
Turn on the WiFi?
diff --git a/src/ve/ucv/ciens/ccg/nxtcam/CamActivity.java b/src/ve/ucv/ciens/ccg/nxtcam/CamActivity.java
index 47369bc..ea18169 100644
--- a/src/ve/ucv/ciens/ccg/nxtcam/CamActivity.java
+++ b/src/ve/ucv/ciens/ccg/nxtcam/CamActivity.java
@@ -2,6 +2,7 @@ package ve.ucv.ciens.ccg.nxtcam;
import ve.ucv.ciens.ccg.nxtcam.camera.CameraPreview;
import ve.ucv.ciens.ccg.nxtcam.network.ImageTransferThread;
+import ve.ucv.ciens.ccg.nxtcam.network.LCPThread;
import ve.ucv.ciens.ccg.nxtcam.utils.Logger;
import android.app.Activity;
import android.content.Intent;
@@ -16,12 +17,13 @@ import android.widget.Toast;
public class CamActivity extends Activity{
private final String TAG = "NXTCAM_CAM";
- private final String CLASS_NAME = MainActivity.class.getSimpleName();
-
+ private final String CLASS_NAME = CamActivity.class.getSimpleName();
+
private Camera hwCamera;
private CameraPreview cPreview;
private CameraSetupTask camSetupTask;
private ImageTransferThread imThread;
+ private LCPThread botThread;
private String serverIp;
/*******************
@@ -31,12 +33,13 @@ public class CamActivity extends Activity{
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
-
+
cPreview = new CameraPreview(this, hwCamera);
setContentView(cPreview);
-
+
Intent intent = getIntent();
serverIp = intent.getStringExtra("address");
+ imThread = new ImageTransferThread(serverIp);
}
@Override
@@ -69,21 +72,27 @@ public class CamActivity extends Activity{
camSetupTask = new CameraSetupTask();
camSetupTask.execute();
-
- imThread = new ImageTransferThread(serverIp);
- imThread.start();
+
+ // imThread.start();
}
@Override
public void onPause(){
super.onPause();
- // TODO: Disconnect and destroy the imThread object.
-
+ // TODO: pause the imThread and botThread objects.
+
cPreview.removePreviewCallback();
cPreview.setCamera(null);
releaseCamera();
}
+
+ @Override
+ public void onDestroy(){
+ super.onDestroy();
+ // TODO: Destroy the network threads.
+ imThread = null;
+ }
/******************
* My own methods *
@@ -121,7 +130,7 @@ public class CamActivity extends Activity{
@Override
protected void onPostExecute(Camera result) {
super.onPostExecute(result);
-
+
hwCamera = result;
if(result != null){
Logger.log_d(TAG, CLASS_NAME + ".onPostExecute() :: Camera successfully opened");
diff --git a/src/ve/ucv/ciens/ccg/nxtcam/MainActivity.java b/src/ve/ucv/ciens/ccg/nxtcam/MainActivity.java
index 80a6dbb..3d57f54 100644
--- a/src/ve/ucv/ciens/ccg/nxtcam/MainActivity.java
+++ b/src/ve/ucv/ciens/ccg/nxtcam/MainActivity.java
@@ -334,11 +334,6 @@ public class MainActivity extends Activity implements WifiOnDialogListener, Conn
Logger.log_d(TAG, CLASS_NAME + ".doInBackground() :: Packet payload is\n" + received);
if(received.compareTo("NxtAR server here!") == 0)
done = true;
- Socket client1, client2;
- client1 = new Socket(packet.getAddress(), ProjectConstants.SERVER_TCP_PORT_1);
- client1.close();
- client2 = new Socket(packet.getAddress(), ProjectConstants.SERVER_TCP_PORT_2);
- client2.close();
}
result = true;
}catch(IOException io){
@@ -367,10 +362,10 @@ public class MainActivity extends Activity implements WifiOnDialogListener, Conn
if(packet != null){
showToast(R.string.serv_connected, Toast.LENGTH_SHORT);
- // startCamActivity(result, packet.getAddress().getHostAddress());
+ startCamActivity(result, packet.getAddress().getHostAddress());
}else{
showToast(R.string.serv_fail, Toast.LENGTH_SHORT);
- // startCamActivity(false, null);
+ startCamActivity(false, null);
}
}
}
diff --git a/src/ve/ucv/ciens/ccg/nxtcam/camera/CameraImageMonitor.java b/src/ve/ucv/ciens/ccg/nxtcam/camera/CameraImageMonitor.java
index 4637344..51a094a 100644
--- a/src/ve/ucv/ciens/ccg/nxtcam/camera/CameraImageMonitor.java
+++ b/src/ve/ucv/ciens/ccg/nxtcam/camera/CameraImageMonitor.java
@@ -7,10 +7,12 @@ public class CameraImageMonitor{
private final String CLASS_NAME = CameraImageMonitor.class.getSimpleName();
private byte[] image;
- private boolean imgChanged;
+ private boolean imgProduced;
+ private boolean imgConsumed;
private CameraImageMonitor(){
- imgChanged = false;
+ imgProduced = false;
+ imgConsumed = false;
}
private static class SingletonHolder{
@@ -22,33 +24,40 @@ public class CameraImageMonitor{
}
public void setImageData(byte[] image){
- Logger.log_d(TAG, CLASS_NAME + ".setImageData() :: Copying new image.");
- synchronized(image){
- this.image = new byte[image.length];
- System.arraycopy(image, 0, this.image, 0, image.length);
- imgChanged = true;
- image.notifyAll();
+ if(imgConsumed){
+ Logger.log_d(TAG, CLASS_NAME + ".setImageData() :: Copying new image.");
+ synchronized(this.image){
+ //this.image = new byte[image.length];
+ //System.arraycopy(image, 0, this.image, 0, image.length);
+ this.image = image;
+ imgProduced = true;
+ imgConsumed = false;
+ this.image.notifyAll();
+ }
+ Logger.log_d(TAG, CLASS_NAME + ".setImageData() :: Data copy finished.");
+ }else{
+ Logger.log_d(TAG, CLASS_NAME + ".setImageData() :: Old image still valid, ignoring new image.");
}
- Logger.log_d(TAG, CLASS_NAME + ".setImageData() :: Data copy finished.");
}
public byte[] getImageData(){
byte[] returnImg;
Logger.log_d(TAG, CLASS_NAME + ".getImageData() :: Entry point.");
synchronized(image){
- while(!imgChanged){
- Logger.log_d(TAG, CLASS_NAME + ".getImageData() :: Waiting for new data.");
- try{ image.wait(); }catch(InterruptedException ie){}
+ while(!imgProduced){
+ Logger.log_d(TAG, CLASS_NAME + ".getImageData() :: Waiting for new image.");
+ try{ image.wait(); }catch(InterruptedException ie){ }
}
- Logger.log_d(TAG, CLASS_NAME + ".getImageData() :: Retrieving new data.");
- returnImg = image.clone();
- imgChanged = false;
+ Logger.log_d(TAG, CLASS_NAME + ".getImageData() :: Retrieving new image.");
+ returnImg = image;
+ imgProduced = false;
+ imgConsumed = true;
}
- Logger.log_d(TAG, CLASS_NAME + ".getImageData() :: New data retreived.");
+ Logger.log_d(TAG, CLASS_NAME + ".getImageData() :: New image retrieved.");
return returnImg;
}
public synchronized boolean hasChanged(){
- return imgChanged;
+ return imgProduced;
}
}